[
  {
    "path": ".dockerignore",
    "content": "# We are going with a whitelisting approach, to avoid accidentally bleeding\n# too much into our container. This reduces the amount of cache miss and\n# potentially speeds up the build.\n*\n\n# All non-test Go Code\n!internal/\n!pkg/\n!cmd/\n**_test.go\n\n# Go Modules\n!go.mod\n!go.sum\n\n# While the dockerfile aren't needed inside of the Dockerfile, fly.io requires\n# them for remote bulding and uses this dockerignore to filter what's sent to\n# the remote builder.\n!linux.Dockerfile\n!windows.Dockerfile\n\n!public\n\n"
  },
  {
    "path": ".gitattributes",
    "content": "*     text eol=lf\n*.otf binary\n*.png binary \n*.wav binary"
  },
  {
    "path": ".github/workflows/docker-image-update.yml",
    "content": "name: docker image update\n\non:\n  workflow_run:\n    workflows: [Build]\n    branches: [v**]\n    types: [completed]\n\njobs:\n  main:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      max-parallel: 3\n      matrix:\n        os: [ubuntu-latest, windows-2022]\n        include:\n        - os: ubuntu-latest\n          platforms: linux/amd64,linux/arm/v7,linux/arm64\n          file: linux.Dockerfile\n          buildArgs: VERSION=${{ github.event.workflow_run.head_branch }}\n          tags: latest, ${{ github.event.workflow_run.head_branch }}\n          multiPlatform: true\n\n        - os: windows-2022\n          platforms: windows/amd64\n          file: windows.Dockerfile\n          buildArgs: VERSION=${{ github.event.workflow_run.head_branch }}\n          tags: windows-latest, windows-${{ github.event.workflow_run.head_branch }}\n          multiPlatform: false\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Build and push\n        id: docker_build\n        uses: mr-smithers-excellent/docker-build-push@v6\n        with:\n          multiPlatform: ${{ matrix.multiPlatform }}\n          registry: docker.io\n\n          dockerfile: ${{ matrix.file }}\n          image: biosmarcel/scribble.rs\n          buildArgs: ${{ matrix.buildArgs }}\n          platform: ${{ matrix.platforms }}\n          tags:  ${{ matrix.tags }}\n\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Publish release\n\non:\n  workflow_run:\n    workflows: [Build]\n    branches: [v**]\n    types: [completed]\n\njobs:\n  publish-release:\n    runs-on: ubuntu-latest\n    # Kinda bad since it might release on any branch starting with v, but it'll do for now.\n    # Tag filtering in \"on:\" doesn't work, since the inital build trigger gets lost.\n    # github.ref is therefore also being reset to \"refs/head/master\".\n    if: ${{ github.event.workflow_run.conclusion == 'success' }}\n\n    steps:\n      - name: Download linux artifact\n        uses: dawidd6/action-download-artifact@v6\n        with:\n          workflow: test-and-build.yml\n          name: scribblers-linux-x64\n\n      - name: Download macos artifact\n        uses: dawidd6/action-download-artifact@v6\n        with:\n          workflow: test-and-build.yml\n          name: scribblers-macos-x64\n\n      - name: Download windows artifact\n        uses: dawidd6/action-download-artifact@v6\n        with:\n          workflow: test-and-build.yml\n          name: scribblers-x64.exe\n\n      - name: Create release\n        uses: softprops/action-gh-release@v1\n        with:\n          name: ${{ github.event.workflow_run.head_branch }}\n          tag_name: ${{ github.event.workflow_run.head_branch }}\n          files: |\n            scribblers-linux-x64\n            scribblers-macos-x64\n            scribblers-x64.exe\n"
  },
  {
    "path": ".github/workflows/test-and-build.yml",
    "content": "name: Build\n\non: push\n\njobs:\n  test-and-build:\n    strategy:\n      matrix:\n        include:\n          - platform: windows-latest\n            binary_name: scribblers-x64.exe\n          - platform: ubuntu-latest\n            binary_name: scribblers-linux-x64\n          - platform: macos-latest\n            binary_name: scribblers-macos-x64\n\n    runs-on: ${{ matrix.platform }}\n\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          # Workaround to get tags, getting git describe to work.\n          fetch-depth: 0\n\n      - name: Install Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: 1.25.5\n\n      - name: Run tests\n        shell: bash\n        run: |\n          go test -v -race ./...\n\n      - name: Build artifact\n        shell: bash\n        env:\n          # Disable CGO to get \"more static\" binaries. They aren't really static ...\n          # since it can still happen that part of the stdlib access certain libs, but\n          # whatever, this will probs do for our usecase. (Can't quite remember\n          # anymore, but I have had issues with this in the past) :D\n          CGO_ENABLED: 0\n        run: |\n          go build -trimpath -ldflags \"-w -s -X 'github.com/scribble-rs/scribble.rs/internal/version.Version=$(git describe --tags --dirty)'\" -o ${{ matrix.binary_name }} ./cmd/scribblers\n\n      - name: Upload build artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ matrix.binary_name }}\n          path: ./${{ matrix.binary_name }}\n"
  },
  {
    "path": ".github/workflows/test-pr.yml",
    "content": "name: Run tests\n\non: pull_request\n\njobs:\n  run-tests:\n    strategy:\n      matrix:\n        go-version: [1.25.5]\n        platform: [ubuntu-latest, macos-latest, windows-latest]\n\n    runs-on: ${{ matrix.platform }}\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Install Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: ${{ matrix.go-version }}\n\n      - name: Run tests\n        run: |\n          go test -v -race -count=3 ./...\n"
  },
  {
    "path": ".gitignore",
    "content": "# Executable names\n/scribblers\n*.exe\n__debug_bin\n# IntelliJ state\n.idea/\n# Folder that contains code used for trying stuff locally\nplayground/\n# Temporary output text files\n*.out\n# System metadata files\n.DS_Store\n# Configuration files\n.env\n# Anything temporary\n*.tmp\n# Profiling results\n*.pprof\n# Additional files for hosting. Workaround for now ig.\npublic/\n"
  },
  {
    "path": ".golangci.yml",
    "content": "linters:\n  enable-all: true\n  disable:\n    ## These are deprecated\n    - exportloopref\n\n    ## These are too strict for our taste\n    # Whitespace linter\n    - wsl\n    # Demands a newline before each return\n    - nlreturn\n    # Magic numbers\n    - mnd\n    # function, line and variable length\n    - funlen\n    - lll\n    - varnamelen\n    # testpackages must be named _test for reduced visibility to package\n    # details.\n    - testpackage\n    # I don't really care about cyclopmatic complexity\n    - cyclop\n    - gocognit\n    # I don't see the harm in returning an interface\n    - ireturn\n    # Too many false positives, due to easyjson rn\n    - recvcheck\n    # While aligned tags look nice, i can't be arsed doing it manually.\n    - tagalign\n\n    ## Useful, but we won't use it for now, maybe later\n    # Allows us to define rules for dependencies\n    - depguard\n    # For some reason, imports aren't sorted right now.\n    - gci\n    # For now, we'll stick with our globals and inits. Everything needs to be\n    # rewrite to be more testable and safe to teardown and reset.\n    - gochecknoglobals\n    - gochecknoinits\n    # Seems to be very useful, but is also a very common usecase, so we'll\n    # ignore it for now\n    - exhaustruct\n    # Requires certain types of tags, such as json or mapstructure.\n    # While very useful, I don't care right now.\n    - musttag\n    # Not wrapping errors\n    - err113\n    - wrapcheck\n    # Code duplications\n    - dupl\n\n    ## Provides no real value\n    - testifylint\n\n    # Broken\n    - goimports\n\nlinters-settings:\n  govet:\n    disable:\n      - fieldalignment\n\n  gocritic:\n    disabled-checks:\n      # This has false positives and provides little value.\n      - ifElseChain\n\n  gosec:\n    excludes:\n      # weak number generator stuff; mostly false positives, as we don't do\n      # security sensitive things anyway.\n      - G404\n\n  revive:\n    rules:\n      - name: var-naming\n        disabled: true\n\n  stylecheck:\n    checks: [\"all\", \"-ST1003\"]\n\nrun:\n  exclude-files:\n    - \".*_easyjson.go\"\n\nissues:\n  exclude-rules:\n    - path: translations\\\\[^e][^n].*?\\.go\n      linters:\n        # Too many potential false positives\n        - misspell\n    # Exclude some linters from running on tests files. In tests, we often have\n    # code that is rather unsafe and only has one purpose, or furthermore things\n    # that indicate an issue in production, but are fine for testing only small\n    # units.\n    - path: _test\\.go\n      linters:\n        - funlen\n        - cyclop\n        - forcetypeassert\n        - varnamelen\n    # The tools aren't part of the actual production code and therefore we don't\n    # care about codequality much right now.\n    - path: tools/\n      text: .+\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n    // Use IntelliSense to learn about possible attributes.\n    // Hover to view descriptions of existing attributes.\n    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"Start server\",\n            \"type\": \"go\",\n            \"request\": \"launch\",\n            \"mode\": \"debug\",\n            \"program\": \"${workspaceFolder}/cmd/scribblers/main.go\",\n            \"cwd\": \"${workspaceFolder}\"\n        }\n    ]\n}"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n    \"html.format.templating\": true,\n    \"go.lintTool\": \"golangci-lint\",\n    \"go.useLanguageServer\": true,\n    \"gopls\": {\n        \"formatting.gofumpt\": true,\n    },\n}"
  },
  {
    "path": "LICENSE",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2019, scribble-rs\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n   contributors may be used to endorse or promote products derived from\n   this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "README.md",
    "content": "<h1 align=\"center\">Scribble.rs</h1>\n\n<p align=\"center\">\n  <a href=\"https://discord.gg/cE5BKP2UnE\"><img src=\"https://dcbadge.limes.pink/api/server/https://discord.gg/cE5BKP2UnE\"></a>\n  <a href=\"https://ko-fi.com/N4N07DNY\"><img src=\"https://ko-fi.com/img/githubbutton_sm.svg\"></a>\n</p>\n\n![demo](.github/demo.png)\n\nScribble.rs is a free and privacy respecting pictionary game. There's no\nadvertisements and you don't need an account to play.\n\nIt is an alternative to the web-based drawing game skribbl.io.\n\n## Play now\n\nThere are some community hosted versions of the game (feel free to host your own instance and add it here!):\n - [scribblers.bios-marcel.link](https://scribblers.bios-marcel.link) (Official instance, Note\nthat the instance may not respond instantly, as it automatically shuts down\nif no traffic is received.)\n - [scribble.bixilon.de](https://scribble.bixilon.de) (community instance maintained by @Bixilon)\n - [scribble.drifty.win](https://scribble.drifty.win) (community instance maintained by @driftywinds for better latency in Asia)\n\n## Join The Discord\n\nFeel free to join the community Discord server to find people to play, talk, get\nhelp or whatever else: https://discord.gg/cE5BKP2UnE\n\nNote, the server is NOT very active.\n\n## Donations\n\nI haven't really accepted donations for a long time. But I think the project is\npolished enough now to dare taking some money. Right now the hosting is very\nminimal and there's no domain. The server is located in amsterdam and many\npeople playing seem to be from outside of europe. So it'd be nice to have a\ndecentralised deployment to provide a nice experience for everyone.\n\nSo donations would go towards infrastructure and a domain!\n\nIn the future I might add some fun little benefits for donators, I have no clear\nvision of it yet though.\n\nYou can donate via Ko-Fi: https://ko-fi.com/biosmarcel\n\n## Configuration\n\nConfiguration is read from environment variables or a `.env` file located in\nthe working directory.\n\nAvailable settings:\n\n| Key                                       | Description                                                      | Default | Required |\n| ----------------------------------------- | ---------------------------------------------------------------- | ------- | -------- |\n| PORT                                      | HTTP port that the server listens to.                            | 8080    | True     |\n| NETWORK_ADDRESS                           | TCP address that the server listens to.                          |         | False    |\n| ROOT_PATH                                 | Changes the path (after your domain) that the server listens to. |         | False    |\n| CORS_ALLOWED_ORIGINS                      |                                                                  | *       | False    |\n| CORS_ALLOW_CREDENTIALS                    |                                                                  |         | False    |\n| LOBBY_CLEANUP_INTERVAL                    |                                                                  | 90s     | False    |\n| LOBBY_CLEANUP_PLAYER_INACTIVITY_THRESHOLD |                                                                  | 75s     | False    |\n\nFor more up-to-date configuration, read the\n[config.go](/internal/config/config.go) file.\n\n## Docker\n\nIt is recommended that you run the server via Docker, as this will rule out\nalmost all compatibility issues.\n\nStarting from v0.8.5, docker images are only built on tagged pushes. Each git\ntag becomes a docker tag, however `latest` will always point to the latest\nversion released via GitHub.\n\n### Linux Docker\n\nDownload the image:\n\n```shell\ndocker pull biosmarcel/scribble.rs:latest\n```\n\n### Windows Docker\n\nOnly use this one if you want to run a native Windows container. Otherwise use\nthe Linux variant, as that's the default mode on Windows:\n\n```shell\ndocker pull biosmarcel/scribble.rs:windows-latest\n```\n\n### Running the Docker container\n\nRun the following, replacing `<port>` with the port you want the container to be\nreachable from outside:\n\n```shell\ndocker run --pull always --env PORT=8080 -p <port>:8080 biosmarcel/scribble.rs:latest\n```\n\nFor example:\n\n```shell\ndocker run --pull always --env PORT=8080 -p 80:8080 biosmarcel/scribble.rs:latest\n```\n\nNote that you can change `8080` too, but it is the internal port of the\ncontainer and you shouldn't have to change it under normal circumstances.\n\n## Building / Running\n\nDependencies:\n  * [go](https://go.dev/doc/install) version 1.25.0 or later\n  * [git](https://git-scm.com/) (You can also download a .zip from Github)\n\nIn order to download and build, open a terminal and execute:\n\n```shell\ngit clone https://github.com/scribble-rs/scribble.rs.git\ncd scribble.rs\ngo build ./cmd/scribblers\n```\n\nThis will produce a portable binary called `scribblers` or `scribblers.exe` if\nyou are on Windows.\n\n## Pre-compiled binaries\n\nIn the [Releases](https://github.com/scribble-rs/scribble.rs/releases) section\nyou can find the latest stable release.\n\nAlternatively each commit uploads artifacts which will be available for a\ncertain time.\n\n**Note that these binaries might not necessarily be compatible with your\nsystem. In this case, please use Docker or compile them yourself.**\n\n## nginx \n\nSince Scribble.rs uses WebSockets, when running it behind an nginx reverse\nproxy, you have to configure nginx to support that. You will find an example\nconfiguration on the [related Wiki page](https://github.com/scribble-rs/scribble.rs/wiki/reverse-proxy-(nginx)).\n\nOther reverse proxies may require similar configuration. If you are using a\nwell known reverse proxy, you are free to contribute a configuration to the\nwiki.\n\n## Server-Side Metrics\n\nWhile there's a Prometheus metrics endpoint at `/v1/metrics`, it currently\ndoesn't expose a lot of information. If there are any requests for certain data,\nI'd be willing to extend it, as long as it doesn't expose any personal data.\n\nWhile I do have a dashboard for it, my hoster (fly.io) sadly doesn't support\npublic dashboards right now, so the data will remain closed for now.\n\n## Contributing\n\nThere are many ways you can contribute:\n\n* Update / Add documentation in the wiki of the GitHub repository\n* Create feature requests and bug reports\n* Solve issues by creating Pull Requests\n  * If  you are changing / adding behaviour, make an issue beforehand\n* Tell your friends about the project\n\nFor contributions guidelines, see: https://github.com/scribble-rs/scribble.rs/wiki/Contributing\n\n### Translations\n\nFor translations, please always use the `en_us.go` as your base. Other\ntranslations might not be up-to-date. This will cause you to have missing keys\nor translate obsolete keys.\n\n## Credits\n\nThese resources are by people unrelated to the project, whilst not every of\nthese resources requires attribution as per license, we'll do it either way ;)\n\nIf you happen to find a mistake here, please make a PR. If you are one of the\nauthors and feel like we've wronged you, please reach out.\n\nSome of these were slightly altered if the license allowed it.\nTreat each of the files in this repository with the same license terms as the\noriginal file.\n\n* Logo - All rights reserved, excluded from BSD-3 licensing\n* Background - All rights reserved, excluded from BSD-3 licensing\n* Favicon - All rights reserved, excluded from BSD-3 licensing\n* Rubber Icon - Made by [Pixel Buddha](https://www.flaticon.com/authors/pixel-buddha) from [flaticon.com](https://flaticon.com)\n* Fill Bucket Icon - Made by [inipagistudio](https://www.flaticon.com/authors/inipagistudio) from [flaticon.com](https://flaticon.com)\n* Kicking Icon - [Kicking Icon #309402](https://icon-library.net/icon/kicking-icon-4.html)\n* Sound / No sound Icon - Made by Viktor Erikson (If this is you or you know who this is, send me a link to that persons Homepage)\n* Profile Icon - Made by [kumakamu](https://www.iconfinder.com/kumakamu)\n* [Help Icon](https://www.iconfinder.com/icons/211675/help_icon) - Made by Ionicons\n* [Fullscreen Icon](https://www.iconfinder.com/icons/298714/screen_full_icon) - Made by Github\n* [Pencil Icon](https://github.com/twitter/twemoji/blob/8e58ae4/svg/270f.svg)\n* [Drawing Tablet Pen Icon](https://www.iconfinder.com/icons/8665767/pen_icon)\n* [Checkmark Icon](https://commons.wikimedia.org/wiki/File:Green_check_icon_with_gradient.svg)\n* [Fill Icon](https://commons.wikimedia.org/wiki/File:Circle-icons-paintcan.svg)\n* [Trash Icon](https://www.iconfinder.com/icons/315225/trash_can_icon) - Made by [Yannick Lung](https://yannicklung.com)\n* [Undo Icon](https://www.iconfinder.com/icons/308948/arrow_undo_icon) - Made by [Ivan Boyko](https://www.iconfinder.com/visualpharm)\n* [Alarmclock Icon](https://www.iconfinder.com/icons/4280508/alarm_outlined_alert_clock_icon) - Made by [Kit of Parts](https://www.iconfinder.com/kitofparts)\n* https://www.iconfinder.com/icons/808399/load_turn_turnaround_icon TODO\n"
  },
  {
    "path": "cmd/scribblers/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"path\"\n\t\"runtime/pprof\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/go-chi/cors\"\n\t\"github.com/scribble-rs/scribble.rs/internal/api\"\n\t\"github.com/scribble-rs/scribble.rs/internal/config\"\n\t\"github.com/scribble-rs/scribble.rs/internal/frontend\"\n\t\"github.com/scribble-rs/scribble.rs/internal/state\"\n\t\"github.com/scribble-rs/scribble.rs/internal/version\"\n)\n\nfunc main() {\n\tcfg, err := config.Load()\n\tif err != nil {\n\t\tlog.Fatalln(\"error loading configuration:\", err)\n\t}\n\n\tlog.Printf(\"Starting Scribble.rs version '%s'\\n\", version.Version)\n\n\tif cfg.CPUProfilePath != \"\" {\n\t\tlog.Println(\"Starting CPU profiling ....\")\n\t\tcpuProfileFile, err := os.Create(cfg.CPUProfilePath)\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"error creating cpuprofile file:\", err)\n\t\t}\n\t\tif err := pprof.StartCPUProfile(cpuProfileFile); err != nil {\n\t\t\tlog.Fatal(\"error starting cpu profiling:\", err)\n\t\t}\n\t}\n\n\trouter := http.NewServeMux()\n\tcorsWrapper := cors.Handler(cors.Options{\n\t\tAllowedOrigins:   cfg.CORS.AllowedOrigins,\n\t\tAllowCredentials: cfg.CORS.AllowCredentials,\n\t})\n\tregister := func(method, path string, handler http.HandlerFunc) {\n\t\t// Each path needs to start with a slash anyway, so this is convenient.\n\t\tif !strings.HasPrefix(path, \"/\") {\n\t\t\tpath = \"/\" + path\n\t\t}\n\n\t\tlog.Printf(\"Registering route: %s %s\\n\", method, path)\n\t\trouter.HandleFunc(fmt.Sprintf(\"%s %s\", method, path), corsWrapper(handler).ServeHTTP)\n\t}\n\n\t// Healthcheck for deployments with monitoring if required.\n\tregister(\"GET\", path.Join(cfg.RootPath, \"health\"), func(writer http.ResponseWriter, _ *http.Request) {\n\t\twriter.WriteHeader(http.StatusOK)\n\t})\n\n\tapi.NewHandler(cfg).SetupRoutes(cfg.RootPath, register)\n\n\tfrontendHandler, err := frontend.NewHandler(cfg)\n\tif err != nil {\n\t\tlog.Fatal(\"error setting up frontend:\", err)\n\t}\n\tfrontendHandler.SetupRoutes(register)\n\n\tif cfg.LobbyCleanup.Interval > 0 {\n\t\tstate.LaunchCleanupRoutine(cfg.LobbyCleanup)\n\t}\n\n\tsignalChan := make(chan os.Signal, 1)\n\tsignal.Notify(signalChan, syscall.SIGTERM, syscall.SIGINT)\n\tgo func() {\n\t\tdefer os.Exit(0)\n\n\t\tlog.Printf(\"Received %s, gracefully shutting down.\\n\", <-signalChan)\n\n\t\tstate.ShutdownLobbiesGracefully()\n\t\tif cfg.CPUProfilePath != \"\" {\n\t\t\tpprof.StopCPUProfile()\n\t\t\tlog.Println(\"Finished CPU profiling.\")\n\t\t}\n\t}()\n\n\taddress := fmt.Sprintf(\"%s:%d\", cfg.NetworkAddress, cfg.Port)\n\tlog.Println(\"Started, listening on: http://\" + address)\n\n\thttpServer := &http.Server{\n\t\tAddr: address,\n\t\tHandler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tif r.URL.Path != \"/\" && r.URL.Path[len(r.URL.Path)-1] == '/' {\n\t\t\t\tr.URL.Path = r.URL.Path[:len(r.URL.Path)-1]\n\t\t\t}\n\n\t\t\trouter.ServeHTTP(w, r)\n\t\t}),\n\t\tReadHeaderTimeout: 10 * time.Second,\n\t}\n\tlog.Fatalln(httpServer.ListenAndServe())\n}\n"
  },
  {
    "path": "fly.Dockerfile",
    "content": "#\n# Builder for Golang\n#\n# We explicitly use a certain major version of go, to make sure we don't build\n# with a newer verison than we are using for CI tests, as we don't directly\n# test the produced binary but from source code directly.\nFROM docker.io/golang:1.25.5 AS builder\n\nWORKDIR /app\n\n# This causes caching of the downloaded go modules and makes repeated local\n# builds much faster. We must not copy the code first though, as a change in\n# the code causes a redownload.\nCOPY go.mod go.sum ./\nRUN go mod download -x\n\n# Import that this comes after mod download, as it breaks caching.\nARG VERSION=\"dev\"\n\n# Copy actual codebase, since we only have the go.mod and go.sum so far.\nCOPY . /app/\nENV CGO_ENABLED=0\nRUN go build -trimpath -ldflags \"-w -s -X 'github.com/scribble-rs/scribble.rs/internal/version.Version=${VERSION}'\" -tags timetzdata -o ./scribblers ./cmd/scribblers\n\n#\n# Runner\n#\nFROM scratch\n\n# Additionally hosted files\nCOPY public /public\n\nCOPY --from=builder /app/scribblers /scribblers\n# The scratch image doesn't contain any certificates, therefore we use\n# the builders certificate, so that we can send HTTP requests.\nCOPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/\n\nENTRYPOINT [\"/scribblers\"]\n# Random uid to avoid having root privileges. Linux doesn't care that there's no user for it.\nUSER 248:248\n"
  },
  {
    "path": "fly.toml",
    "content": "# See https://fly.io/docs/reference/configuration/\n\napp = \"scribblers\"\n# \"fra\" is only for paying customers\nprimary_region = \"ams\"\n\n[metrics]\nport = 8080\npath = \"/v1/metrics\"\n\n[build]\ndockerfile = \"fly.Dockerfile\"\n\n[deploy]\nstrategy = \"immediate\"\n\n[env]\nROOT_URL = \"https://scribblers.bios-marcel.link\"\nALLOW_INDEXING = true\nSERVE_DIRECTORIES = \":/public\"\nLOBBY_SETTING_BOUNDS_MAX_MAX_PLAYERS = 100\n\n[http_service]\ninternal_port = 8080\nforce_https = true\nauto_stop_machines = true\nauto_start_machines = true\n# Allows true scale to zero\nmin_machines_running = 0\nprocesses = [\"app\"]\n\n[[http_service.checks]]\ngrace_period = \"10s\"\ninterval = \"30s\"\ntimeout = \"5s\"\nmethod = \"GET\"\npath = \"/health\"\n"
  },
  {
    "path": "fly_deploy.sh",
    "content": "#!/bin/sh\nflyctl deploy --build-arg \"VERSION=$(git describe --tag)\"\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/scribble-rs/scribble.rs\n\ngo 1.25.0\n\nrequire (\n\tgithub.com/Bios-Marcel/discordemojimap/v2 v2.0.6\n\tgithub.com/Bios-Marcel/go-petname v0.0.1\n\tgithub.com/caarlos0/env/v11 v11.4.0\n\tgithub.com/go-chi/cors v1.2.2\n\tgithub.com/gofrs/uuid/v5 v5.4.0\n\tgithub.com/lxzan/gws v1.9.0\n\tgithub.com/prometheus/client_golang v1.23.2\n\tgithub.com/stretchr/testify v1.11.1\n\tgithub.com/subosito/gotenv v1.6.0\n\tgolang.org/x/text v0.35.0\n)\n\nrequire (\n\tgithub.com/beorn7/perks v1.0.1 // indirect\n\tgithub.com/cespare/xxhash/v2 v2.3.0 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/klauspost/compress v1.18.0 // indirect\n\tgithub.com/kr/text v0.2.0 // indirect\n\tgithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgithub.com/prometheus/client_model v0.6.2 // indirect\n\tgithub.com/prometheus/common v0.66.1 // indirect\n\tgithub.com/prometheus/procfs v0.16.1 // indirect\n\tgo.yaml.in/yaml/v2 v2.4.2 // indirect\n\tgolang.org/x/sys v0.35.0 // indirect\n\tgoogle.golang.org/protobuf v1.36.8 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n)\n"
  },
  {
    "path": "go.sum",
    "content": "github.com/Bios-Marcel/discordemojimap/v2 v2.0.6 h1:VjNAT59riXBTKeKEqVb83irOZJ52a9qVy9HxzlL7C04=\ngithub.com/Bios-Marcel/discordemojimap/v2 v2.0.6/go.mod h1:caQqGZkTnvXOLXjChOpjzXQUMy2C1Y61ImtdVzEOvss=\ngithub.com/Bios-Marcel/go-petname v0.0.1 h1:FELp77IS2bulz77kFXUOHqRJHXoOlL0lJUf6no5S0cQ=\ngithub.com/Bios-Marcel/go-petname v0.0.1/go.mod h1:67IdwdIEuQBRISkUQJd4b/DvOYscEo8dNpq0D2gPHoA=\ngithub.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=\ngithub.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=\ngithub.com/caarlos0/env/v11 v11.4.0 h1:Kcb6t5kIIr4XkoQC9AF2j+8E1Jsrl3Wz/hhm1LtoGAc=\ngithub.com/caarlos0/env/v11 v11.4.0/go.mod h1:qupehSf/Y0TUTsxKywqRt/vJjN5nz6vauiYEUUr8P4U=\ngithub.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=\ngithub.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\ngithub.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=\ngithub.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/go-chi/cors v1.2.2 h1:Jmey33TE+b+rB7fT8MUy1u0I4L+NARQlK6LhzKPSyQE=\ngithub.com/go-chi/cors v1.2.2/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=\ngithub.com/gofrs/uuid/v5 v5.4.0 h1:EfbpCTjqMuGyq5ZJwxqzn3Cbr2d0rUZU7v5ycAk/e/0=\ngithub.com/gofrs/uuid/v5 v5.4.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8=\ngithub.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=\ngithub.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=\ngithub.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=\ngithub.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=\ngithub.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=\ngithub.com/lxzan/gws v1.9.0 h1:my3sfqb0GjwP+gRONjNWVzcBrpud0IP3vj9soIt9pXo=\ngithub.com/lxzan/gws v1.9.0/go.mod h1:gXHSCPmTGryWJ4icuqy8Yho32E4YIMHH0fkDRYJRbdc=\ngithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=\ngithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=\ngithub.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=\ngithub.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=\ngithub.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=\ngithub.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=\ngithub.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs=\ngithub.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=\ngithub.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=\ngithub.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=\ngithub.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=\ngithub.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=\ngithub.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=\ngithub.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=\ngithub.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=\ngithub.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=\ngo.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=\ngo.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=\ngo.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=\ngo.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=\ngolang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=\ngolang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=\ngolang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8=\ngolang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA=\ngoogle.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=\ngoogle.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\n"
  },
  {
    "path": "internal/api/createparse.go",
    "content": "package api\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/scribble-rs/scribble.rs/internal/config\"\n\t\"github.com/scribble-rs/scribble.rs/internal/game\"\n\t\"golang.org/x/text/cases\"\n)\n\n// ParsePlayerName checks if the given value is a valid playername. Currently\n// this only includes checkin whether the value is empty or only consists of\n// whitespace character.\nfunc ParsePlayerName(value string) (string, error) {\n\ttrimmed := strings.TrimSpace(value)\n\tif trimmed == \"\" {\n\t\treturn trimmed, errors.New(\"the player name must not be empty\")\n\t}\n\n\treturn trimmed, nil\n}\n\n// ParseLanguage checks whether the given value is part of the\n// game.SupportedLanguages array. The input is trimmed and lowercased.\nfunc ParseLanguage(value string) (*game.LanguageData, string, error) {\n\ttoLower := strings.ToLower(strings.TrimSpace(value))\n\tfor languageKey, data := range game.WordlistData {\n\t\tif toLower == languageKey {\n\t\t\treturn &data, languageKey, nil\n\t\t}\n\t}\n\n\treturn nil, \"\", errors.New(\"the given language doesn't match any supported language\")\n}\n\nfunc ParseScoreCalculation(value string) (game.ScoreCalculation, error) {\n\ttoLower := strings.ToLower(strings.TrimSpace(value))\n\tswitch toLower {\n\tcase \"\", \"chill\":\n\t\treturn game.ChillScoring, nil\n\tcase \"competitive\":\n\t\treturn game.CompetitiveScoring, nil\n\t}\n\n\treturn nil, errors.New(\"the given score calculation doesn't match any supported algorithm\")\n}\n\n// ParseDrawingTime checks whether the given value is an integer between\n// the lower and upper bound of drawing time. All other invalid\n// input, including empty strings, will return an error.\nfunc ParseDrawingTime(cfg *config.Config, value string) (int, error) {\n\treturn parseIntValue(value, cfg.LobbySettingBounds.MinDrawingTime,\n\t\tcfg.LobbySettingBounds.MaxDrawingTime, \"drawing time\")\n}\n\n// ParseRounds checks whether the given value is an integer between\n// the lower and upper bound of rounds played. All other invalid\n// input, including empty strings, will return an error.\nfunc ParseRounds(cfg *config.Config, value string) (int, error) {\n\treturn parseIntValue(value, cfg.LobbySettingBounds.MinRounds,\n\t\tcfg.LobbySettingBounds.MaxRounds, \"rounds\")\n}\n\n// ParseMaxPlayers checks whether the given value is an integer between\n// the lower and upper bound of maximum players per lobby. All other invalid\n// input, including empty strings, will return an error.\nfunc ParseMaxPlayers(cfg *config.Config, value string) (int, error) {\n\treturn parseIntValue(value, cfg.LobbySettingBounds.MinMaxPlayers,\n\t\tcfg.LobbySettingBounds.MaxMaxPlayers, \"max players amount\")\n}\n\n// ParseCustomWords checks whether the given value is a string containing comma\n// separated values (or a single word). Empty strings will return an empty\n// (nil) array and no error. An error is only returned if there are empty words.\n// For example these wouldn't parse:\n//\n//\twordone,,wordtwo\n//\t,\n//\twordone,\nfunc ParseCustomWords(lowercaser cases.Caser, value string) ([]string, error) {\n\ttrimmedValue := strings.TrimSpace(value)\n\tif trimmedValue == \"\" {\n\t\treturn nil, nil\n\t}\n\n\tresult := strings.Split(trimmedValue, \",\")\n\tfor index, item := range result {\n\t\ttrimmedItem := lowercaser.String(strings.TrimSpace(item))\n\t\tif trimmedItem == \"\" {\n\t\t\treturn nil, errors.New(\"custom words must not be empty\")\n\t\t}\n\t\tresult[index] = trimmedItem\n\t}\n\n\treturn result, nil\n}\n\n// ParseClientsPerIPLimit checks whether the given value is an integer between\n// the lower and upper bound of maximum clients per IP. All other invalid\n// input, including empty strings, will return an error.\nfunc ParseClientsPerIPLimit(cfg *config.Config, value string) (int, error) {\n\treturn parseIntValue(value, cfg.LobbySettingBounds.MinClientsPerIPLimit,\n\t\tcfg.LobbySettingBounds.MaxClientsPerIPLimit, \"clients per IP limit\")\n}\n\n// ParseCustomWordsPerTurn checks whether the given value is an integer between\n// 0 and 100. All other invalid input, including empty strings, will return an\n// error.\nfunc ParseCustomWordsPerTurn(cfg *config.Config, value string) (int, error) {\n\treturn parseIntValue(value, 1, cfg.LobbySettingBounds.MaxWordsPerTurn, \"custom words per turn\")\n}\n\nfunc ParseWordsPerTurn(cfg *config.Config, value string) (int, error) {\n\treturn parseIntValue(value, 1, cfg.LobbySettingBounds.MaxWordsPerTurn, \"words per turn\")\n}\n\nfunc newIntOutOfBounds(value, valueName string, lower, upper int) error {\n\tif upper != -1 {\n\t\treturn fmt.Errorf(\"the value '%s' must be an integer between %d and %d, but was: '%s'\", valueName, lower, upper, value)\n\t}\n\treturn fmt.Errorf(\"the value '%s' must be an integer larger than %d, but was: '%s'\", valueName, lower, value)\n}\n\nfunc parseIntValue(toParse string, lower, upper int, valueName string) (int, error) {\n\tvar value int\n\tif parsed, err := strconv.ParseInt(toParse, 10, 64); err != nil {\n\t\treturn 0, newIntOutOfBounds(toParse, valueName, lower, upper)\n\t} else {\n\t\tvalue = int(parsed)\n\t}\n\n\tif value < lower || (upper > -1 && value > upper) {\n\t\treturn 0, newIntOutOfBounds(toParse, valueName, lower, upper)\n\t}\n\n\treturn value, nil\n}\n\n// ParseBoolean checks whether the given value is either \"true\" or \"false\".\n// The checks are case-insensitive. If an empty string is supplied, false\n// is returned. All other invalid input will return an error.\nfunc ParseBoolean(valueName, value string) (bool, error) {\n\tif value == \"\" {\n\t\treturn false, nil\n\t}\n\n\tif strings.EqualFold(value, \"true\") {\n\t\treturn true, nil\n\t}\n\n\tif strings.EqualFold(value, \"false\") {\n\t\treturn false, nil\n\t}\n\n\treturn false, fmt.Errorf(\"the %s value must be a boolean value ('true' or 'false)\", valueName)\n}\n"
  },
  {
    "path": "internal/api/createparse_test.go",
    "content": "package api\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/scribble-rs/scribble.rs/internal/config\"\n\t\"github.com/scribble-rs/scribble.rs/internal/game\"\n\t\"golang.org/x/text/cases\"\n\t\"golang.org/x/text/language\"\n)\n\nfunc Test_parsePlayerName(t *testing.T) {\n\tt.Parallel()\n\n\ttests := []struct {\n\t\tname    string\n\t\tvalue   string\n\t\twant    string\n\t\twantErr bool\n\t}{\n\t\t{\"empty name\", \"\", \"\", true},\n\t\t{\"blank name\", \" \", \"\", true},\n\t\t{\"one letter name\", \"a\", \"a\", false},\n\t\t{\"normal name\", \"Scribble\", \"Scribble\", false},\n\t\t{\"name with space in the middle\", \"Hello World\", \"Hello World\", false},\n\t}\n\tfor _, testCase := range tests {\n\t\tt.Run(testCase.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tgot, err := ParsePlayerName(testCase.value)\n\t\t\tif (err != nil) != testCase.wantErr {\n\t\t\t\tt.Errorf(\"parsePlayerName() error = %v, wantErr %v\", err, testCase.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif got != testCase.want {\n\t\t\t\tt.Errorf(\"parsePlayerName() = %v, want %v\", got, testCase.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc Test_parseDrawingTime(t *testing.T) {\n\tt.Parallel()\n\n\ttests := []struct {\n\t\tname    string\n\t\tvalue   string\n\t\twant    int\n\t\twantErr bool\n\t}{\n\t\t{\"empty value\", \"\", 0, true},\n\t\t{\"space\", \" \", 0, true},\n\t\t{\"less than minimum\", \"59\", 0, true},\n\t\t{\"more than maximum\", \"301\", 0, true},\n\t\t{\"maximum\", \"300\", 300, false},\n\t\t{\"minimum\", \"60\", 60, false},\n\t\t{\"something valid\", \"150\", 150, false},\n\t}\n\tfor _, testCase := range tests {\n\t\tt.Run(testCase.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tgot, err := ParseDrawingTime(&config.Default, testCase.value)\n\t\t\tif (err != nil) != testCase.wantErr {\n\t\t\t\tt.Errorf(\"parseDrawingTime() error = %v, wantErr %v\", err, testCase.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif got != testCase.want {\n\t\t\t\tt.Errorf(\"parseDrawingTime() = %v, want %v\", got, testCase.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc Test_parseRounds(t *testing.T) {\n\tt.Parallel()\n\n\ttests := []struct {\n\t\tname    string\n\t\tvalue   string\n\t\twant    int\n\t\twantErr bool\n\t}{\n\t\t{\"empty value\", \"\", 0, true},\n\t\t{\"space\", \" \", 0, true},\n\t\t{\"less than minimum\", \"0\", 0, true},\n\t\t{\"more than maximum\", \"21\", 0, true},\n\t\t{\"maximum\", \"20\", 20, false},\n\t\t{\"minimum\", \"1\", 1, false},\n\t\t{\"something valid\", \"15\", 15, false},\n\t}\n\tfor _, testCase := range tests {\n\t\tt.Run(testCase.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tgot, err := ParseRounds(&config.Default, testCase.value)\n\t\t\tif (err != nil) != testCase.wantErr {\n\t\t\t\tt.Errorf(\"parseRounds() error = %v, wantErr %v\", err, testCase.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif got != testCase.want {\n\t\t\t\tt.Errorf(\"parseRounds() = %v, want %v\", got, testCase.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc Test_parseMaxPlayers(t *testing.T) {\n\tt.Parallel()\n\n\ttests := []struct {\n\t\tname    string\n\t\tvalue   string\n\t\twant    int\n\t\twantErr bool\n\t}{\n\t\t{\"empty value\", \"\", 0, true},\n\t\t{\"space\", \" \", 0, true},\n\t\t{\"less than minimum\", \"1\", 0, true},\n\t\t{\"more than maximum\", \"25\", 0, true},\n\t\t{\"maximum\", \"24\", 24, false},\n\t\t{\"minimum\", \"2\", 2, false},\n\t\t{\"something valid\", \"15\", 15, false},\n\t}\n\tfor _, testCase := range tests {\n\t\tt.Run(testCase.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tgot, err := ParseMaxPlayers(&config.Default, testCase.value)\n\t\t\tif (err != nil) != testCase.wantErr {\n\t\t\t\tt.Errorf(\"parseMaxPlayers() error = %v, wantErr %v\", err, testCase.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif got != testCase.want {\n\t\t\t\tt.Errorf(\"parseMaxPlayers() = %v, want %v\", got, testCase.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc Test_parseCustomWords(t *testing.T) {\n\tt.Parallel()\n\n\ttests := []struct {\n\t\tname    string\n\t\tvalue   string\n\t\twant    []string\n\t\twantErr bool\n\t}{\n\t\t{\"emtpty\", \"\", nil, false},\n\t\t{\"spaces\", \"   \", nil, false},\n\t\t{\"spaces with comma in middle\", \"  , \", nil, true},\n\t\t{\"single word\", \"hello\", []string{\"hello\"}, false},\n\t\t{\"single word upper to lower\", \"HELLO\", []string{\"hello\"}, false},\n\t\t{\"single word with spaces around\", \"   hello \", []string{\"hello\"}, false},\n\t\t{\"two words\", \"hello,world\", []string{\"hello\", \"world\"}, false},\n\t\t{\"two words with spaces around\", \" hello , world \", []string{\"hello\", \"world\"}, false},\n\t\t{\"sentence and word\", \"What a great day, hello \", []string{\"what a great day\", \"hello\"}, false},\n\t}\n\tfor _, testCase := range tests {\n\t\tt.Run(testCase.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tgot, err := ParseCustomWords(cases.Lower(language.English), testCase.value)\n\t\t\tif (err != nil) != testCase.wantErr {\n\t\t\t\tt.Errorf(\"parseCustomWords() error = %v, wantErr %v\", err, testCase.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif !reflect.DeepEqual(got, testCase.want) {\n\t\t\t\tt.Errorf(\"parseCustomWords() = %v, want %v\", got, testCase.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc Test_parseCustomWordsPerTurn(t *testing.T) {\n\tt.Parallel()\n\n\tcfg := &config.Config{\n\t\tLobbySettingBounds: game.SettingBounds{\n\t\t\tMinCustomWordsPerTurn: 1,\n\t\t\tMinWordsPerTurn:       1,\n\t\t\tMaxWordsPerTurn:       3,\n\t\t},\n\t}\n\ttests := []struct {\n\t\tname    string\n\t\tvalue   string\n\t\twant    int\n\t\twantErr bool\n\t}{\n\t\t{\"empty value\", \"\", 0, true},\n\t\t{\"space\", \" \", 0, true},\n\t\t{\"less than minimum, zero\", \"0\", 0, true},\n\t\t{\"less than minimum, negative\", \"-1\", 0, true},\n\t\t{\"more than maximum\", \"4\", 0, true},\n\t\t{\"minimum\", \"1\", 1, false},\n\t\t{\"maximum\", \"3\", 3, false},\n\t\t{\"something valid\", \"2\", 2, false},\n\t}\n\tfor _, testCase := range tests {\n\t\tt.Run(testCase.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tgot, err := ParseCustomWordsPerTurn(cfg, testCase.value)\n\t\t\tif (err != nil) != testCase.wantErr {\n\t\t\t\tt.Errorf(\"parseCustomWordsPerTurn() error = %v, wantErr %v\", err, testCase.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif got != testCase.want {\n\t\t\t\tt.Errorf(\"parseCustomWordsPerTurn() = %v, want %v\", got, testCase.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc Test_parseWordsPerTurn(t *testing.T) {\n\tt.Parallel()\n\n\tcfg := &config.Config{\n\t\tLobbySettingBounds: game.SettingBounds{\n\t\t\tMinCustomWordsPerTurn: 1,\n\t\t\tMinWordsPerTurn:       1,\n\t\t\tMaxWordsPerTurn:       10,\n\t\t},\n\t}\n\ttests := []struct {\n\t\tname    string\n\t\tvalue   string\n\t\twant    int\n\t\twantErr bool\n\t}{\n\t\t{\"empty value\", \"\", 0, true},\n\t\t{\"space\", \" \", 0, true},\n\t\t{\"less than minimum, zero\", \"0\", 0, true},\n\t\t{\"less than minimum, negative\", \"-1\", 0, true},\n\t\t{\"minimum\", \"1\", 1, false},\n\t\t{\"something valid\", \"10\", 10, false},\n\t}\n\tfor _, testCase := range tests {\n\t\tt.Run(testCase.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tgot, err := ParseWordsPerTurn(cfg, testCase.value)\n\t\t\tif (err != nil) != testCase.wantErr {\n\t\t\t\tt.Errorf(\"ParseWordsPerTurn() error = %v, wantErr %v\", err, testCase.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif got != testCase.want {\n\t\t\t\tt.Errorf(\"ParseWordsPerTurn() = %v, want %v\", got, testCase.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc Test_parseBoolean(t *testing.T) {\n\tt.Parallel()\n\n\ttests := []struct {\n\t\tname    string\n\t\tvalue   string\n\t\twant    bool\n\t\twantErr bool\n\t}{\n\t\t{\"empty value\", \"\", false, false},\n\t\t{\"space\", \" \", false, true},\n\t\t{\"garbage\", \"garbage\", false, true},\n\t\t{\"true\", \"true\", true, false},\n\t\t{\"true upper\", \"TRUE\", true, false},\n\t\t{\"true mixed casing\", \"TruE\", true, false},\n\t\t{\"false\", \"false\", false, false},\n\t\t{\"false upper\", \"FALSE\", false, false},\n\t\t{\"false mixed casing\", \"FalsE\", false, false},\n\t}\n\tfor _, testCase := range tests {\n\t\tt.Run(testCase.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tgot, err := ParseBoolean(\"name\", testCase.value)\n\t\t\tif (err != nil) != testCase.wantErr {\n\t\t\t\tt.Errorf(\"parseBoolean() error = %v, wantErr %v\", err, testCase.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif got != testCase.want {\n\t\t\t\tt.Errorf(\"parseBoolean() = %v, want %v\", got, testCase.want)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "internal/api/doc.go",
    "content": "// Package api the public APIs for both the HTTP and the WS endpoints.\n// These are being used by the official client and can also be used by third\n// party clients. On top of that this package contains some util code regarding\n// http/ws that can be used by other packages. In order to register the\n// endpoints you have to call SetupRoutes.\npackage api\n"
  },
  {
    "path": "internal/api/http.go",
    "content": "package api\n\nimport (\n\t\"net/http\"\n\t\"path\"\n\t\"strings\"\n\n\t\"github.com/scribble-rs/scribble.rs/internal/metrics\"\n)\n\n// SetupRoutes registers the /v1/ endpoints with the http package.\nfunc (handler *V1Handler) SetupRoutes(rootPath string, register func(string, string, http.HandlerFunc)) {\n\tv1 := path.Join(rootPath, \"v1\")\n\n\tmetrics.SetupRoute(func(metricsHandler http.HandlerFunc) {\n\t\tregister(\"GET\", path.Join(v1, \"metrics\"), metricsHandler)\n\t})\n\tregister(\"GET\", path.Join(v1, \"stats\"), handler.getStats)\n\n\t// These exist only for the public API. We version them in order to ensure\n\t// backwards compatibility as far as possible.\n\tregister(\"GET\", path.Join(v1, \"lobby\"), handler.getLobbies)\n\tregister(\"POST\", path.Join(v1, \"lobby\"), handler.postLobby)\n\n\tregister(\"PATCH\", path.Join(v1, \"lobby\", \"{lobby_id}\"), handler.patchLobby)\n\t// We support both path parameter and cookie.\n\tregister(\"PATCH\", path.Join(v1, \"lobby\"), handler.patchLobby)\n\n\t// The websocket is shared between the public API and the official client\n\tregister(\"GET\", path.Join(v1, \"lobby\", \"{lobby_id}\", \"ws\"), handler.websocketUpgrade)\n\t// We support both path parameter and cookie.\n\tregister(\"GET\", path.Join(v1, \"lobby\", \"ws\"), handler.websocketUpgrade)\n\n\tregister(\"POST\", path.Join(v1, \"lobby\", \"{lobby_id}\", \"player\"), handler.postPlayer)\n}\n\n// remoteAddressToSimpleIP removes unnecessary clutter from the input,\n// reducing it to a simple IPv4. We expect two different formats here.\n// One being http.Request#RemoteAddr (127.0.0.1:12345) and the other\n// being forward headers, which contain brackets, as there's no proper\n// API, but just a string that needs to be parsed.\nfunc remoteAddressToSimpleIP(input string) string {\n\taddress := input\n\tlastIndexOfDoubleColon := strings.LastIndex(address, \":\")\n\tif lastIndexOfDoubleColon != -1 {\n\t\taddress = address[:lastIndexOfDoubleColon]\n\t}\n\n\treturn strings.TrimSuffix(strings.TrimPrefix(address, \"[\"), \"]\")\n}\n\n// GetIPAddressFromRequest extracts the clients IP address from the request.\n// This function respects forwarding headers.\nfunc GetIPAddressFromRequest(request *http.Request) string {\n\t// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For\n\t// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded\n\n\t// The following logic has been implemented according to the spec, therefore please\n\t// refer to the spec if you have a question.\n\n\tforwardedAddress := request.Header.Get(\"X-Forwarded-For\")\n\tif forwardedAddress != \"\" {\n\t\t// Since the field may contain multiple addresses separated by commas, we use the first\n\t\t// one, which according to the docs is supposed to be the client address.\n\t\tclientAddress := strings.TrimSpace(strings.Split(forwardedAddress, \",\")[0])\n\t\treturn remoteAddressToSimpleIP(clientAddress)\n\t}\n\n\tstandardForwardedHeader := request.Header.Get(\"Forwarded\")\n\tif standardForwardedHeader != \"\" {\n\t\ttargetPrefix := \"for=\"\n\t\t// Since forwarded can contain more than one field, we search for one specific field.\n\t\tfor part := range strings.SplitSeq(standardForwardedHeader, \";\") {\n\t\t\ttrimmed := strings.TrimSpace(part)\n\t\t\tif after, ok := strings.CutPrefix(trimmed, targetPrefix); ok {\n\t\t\t\t// FIXME Maybe checking for a valid IP-Address would make sense here, not sure tho.\n\t\t\t\taddress := remoteAddressToSimpleIP(after)\n\t\t\t\t// Since the documentation doesn't mention which quotes are used, I just remove all ;)\n\t\t\t\treturn strings.NewReplacer(\"`\", \"\", \"'\", \"\", \"\\\"\", \"\", \"[\", \"\", \"]\", \"\").Replace(address)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn remoteAddressToSimpleIP(request.RemoteAddr)\n}\n"
  },
  {
    "path": "internal/api/v1.go",
    "content": "// This file contains the API methods for the public API\n\npackage api\n\nimport (\n\tjson \"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/gofrs/uuid/v5\"\n\t\"github.com/scribble-rs/scribble.rs/internal/config\"\n\t\"github.com/scribble-rs/scribble.rs/internal/game\"\n\t\"github.com/scribble-rs/scribble.rs/internal/state\"\n\t\"golang.org/x/text/cases\"\n\t\"golang.org/x/text/language\"\n)\n\nvar ErrLobbyNotExistent = errors.New(\"the requested lobby doesn't exist\")\n\ntype V1Handler struct {\n\tcfg *config.Config\n}\n\nfunc NewHandler(cfg *config.Config) *V1Handler {\n\treturn &V1Handler{\n\t\tcfg: cfg,\n\t}\n}\n\nfunc marshalToHTTPWriter(data any, writer http.ResponseWriter) (bool, error) {\n\tbytes, err := json.Marshal(data)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\twriter.Header().Set(\"Content-Type\", \"application/json\")\n\twriter.Header().Set(\"Content-Length\", strconv.Itoa(len(bytes)))\n\t_, err = writer.Write(bytes)\n\treturn true, err\n}\n\ntype LobbyEntries []*LobbyEntry\n\n// LobbyEntry is an API object for representing a join-able public lobby.\ntype LobbyEntry struct {\n\tLobbyID         string     `json:\"lobbyId\"`\n\tWordpack        string     `json:\"wordpack\"`\n\tScoring         string     `json:\"scoring\"`\n\tState           game.State `json:\"state\"`\n\tPlayerCount     int        `json:\"playerCount\"`\n\tMaxPlayers      int        `json:\"maxPlayers\"`\n\tRound           int        `json:\"round\"`\n\tRounds          int        `json:\"rounds\"`\n\tDrawingTime     int        `json:\"drawingTime\"`\n\tMaxClientsPerIP int        `json:\"maxClientsPerIp\"`\n\tCustomWords     bool       `json:\"customWords\"`\n}\n\nfunc (handler *V1Handler) getLobbies(writer http.ResponseWriter, _ *http.Request) {\n\t// REMARK: If paging is ever implemented, we might want to maintain order\n\t// when deleting lobbies from state in the state package.\n\n\tlobbies := state.GetPublicLobbies()\n\tlobbyEntries := make(LobbyEntries, 0, len(lobbies))\n\tfor _, lobby := range lobbies {\n\t\t// While one would expect locking the lobby here, it's not very\n\t\t// important to get 100% consistent results here.\n\t\tlobbyEntries = append(lobbyEntries, &LobbyEntry{\n\t\t\tLobbyID:         lobby.LobbyID,\n\t\t\tPlayerCount:     lobby.GetConnectedPlayerCount(),\n\t\t\tMaxPlayers:      lobby.MaxPlayers,\n\t\t\tRound:           lobby.Round,\n\t\t\tRounds:          lobby.Rounds,\n\t\t\tDrawingTime:     lobby.DrawingTime,\n\t\t\tCustomWords:     len(lobby.CustomWords) > 0,\n\t\t\tMaxClientsPerIP: lobby.ClientsPerIPLimit,\n\t\t\tWordpack:        lobby.Wordpack,\n\t\t\tState:           lobby.State,\n\t\t\tScoring:         lobby.ScoreCalculation.Identifier(),\n\t\t})\n\t}\n\n\tif started, err := marshalToHTTPWriter(lobbyEntries, writer); err != nil {\n\t\tif !started {\n\t\t\thttp.Error(writer, err.Error(), http.StatusInternalServerError)\n\t\t}\n\t\treturn\n\t}\n}\n\nfunc (handler *V1Handler) postLobby(writer http.ResponseWriter, request *http.Request) {\n\tif err := request.ParseForm(); err != nil {\n\t\thttp.Error(writer, err.Error(), http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tvar requestErrors []string\n\n\t// The lobby ID is normally autogenerated and it isn't advisble to set it\n\t// yourself, but for certain integrations / automations this can be useful.\n\t// However, to avoid any kind of abuse, this needs to be a valid UUID at\n\t// least.\n\tlobbyId := request.Form.Get(\"lobby_id\")\n\tif lobbyId != \"\" {\n\t\tvar err error\n\t\t_, err = uuid.FromString(lobbyId)\n\t\tif err != nil {\n\t\t\trequestErrors = append(requestErrors, err.Error())\n\t\t}\n\t}\n\n\tscoreCalculation, scoreCalculationInvalid := ParseScoreCalculation(request.Form.Get(\"score_calculation\"))\n\tlanguageRawValue := strings.ToLower(strings.TrimSpace(request.Form.Get(\"language\")))\n\tlanguageData, languageKey, languageInvalid := ParseLanguage(languageRawValue)\n\tdrawingTime, drawingTimeInvalid := ParseDrawingTime(handler.cfg, request.Form.Get(\"drawing_time\"))\n\trounds, roundsInvalid := ParseRounds(handler.cfg, request.Form.Get(\"rounds\"))\n\tmaxPlayers, maxPlayersInvalid := ParseMaxPlayers(handler.cfg, request.Form.Get(\"max_players\"))\n\tcustomWordsPerTurn, customWordsPerTurnInvalid := ParseCustomWordsPerTurn(handler.cfg, request.Form.Get(\"custom_words_per_turn\"))\n\tclientsPerIPLimit, clientsPerIPLimitInvalid := ParseClientsPerIPLimit(handler.cfg, request.Form.Get(\"clients_per_ip_limit\"))\n\tpublicLobby, publicLobbyInvalid := ParseBoolean(\"public\", request.Form.Get(\"public\"))\n\twordsPerTurn, wordsPerTurnInvalid := ParseWordsPerTurn(handler.cfg, request.Form.Get(\"words_per_turn\"))\n\n\tif wordsPerTurn < customWordsPerTurn {\n\t\twordsPerTurnInvalid = errors.New(\"words per turn must be greater than or equal to custom words per turn\")\n\t}\n\n\tvar lowercaser cases.Caser\n\tif languageInvalid != nil {\n\t\tlowercaser = cases.Lower(language.English)\n\t} else {\n\t\tlowercaser = languageData.Lowercaser()\n\t}\n\n\tcustomWords, customWordsInvalid := ParseCustomWords(lowercaser, request.Form.Get(\"custom_words\"))\n\n\tif scoreCalculationInvalid != nil {\n\t\trequestErrors = append(requestErrors, scoreCalculationInvalid.Error())\n\t}\n\tif languageInvalid != nil {\n\t\trequestErrors = append(requestErrors, languageInvalid.Error())\n\t}\n\tif drawingTimeInvalid != nil {\n\t\trequestErrors = append(requestErrors, drawingTimeInvalid.Error())\n\t}\n\tif roundsInvalid != nil {\n\t\trequestErrors = append(requestErrors, roundsInvalid.Error())\n\t}\n\tif maxPlayersInvalid != nil {\n\t\trequestErrors = append(requestErrors, maxPlayersInvalid.Error())\n\t}\n\tif customWordsInvalid != nil {\n\t\trequestErrors = append(requestErrors, customWordsInvalid.Error())\n\t}\n\tif customWordsPerTurnInvalid != nil {\n\t\trequestErrors = append(requestErrors, customWordsPerTurnInvalid.Error())\n\t} else {\n\t\tif languageRawValue == \"custom\" && len(customWords) == 0 {\n\t\t\trequestErrors = append(requestErrors, \"custom words must be provided when using custom language\")\n\t\t}\n\t}\n\tif clientsPerIPLimitInvalid != nil {\n\t\trequestErrors = append(requestErrors, clientsPerIPLimitInvalid.Error())\n\t}\n\tif publicLobbyInvalid != nil {\n\t\trequestErrors = append(requestErrors, publicLobbyInvalid.Error())\n\t}\n\tif wordsPerTurnInvalid != nil {\n\t\trequestErrors = append(requestErrors, wordsPerTurnInvalid.Error())\n\t}\n\n\tif len(requestErrors) != 0 {\n\t\thttp.Error(writer, strings.Join(requestErrors, \";\"), http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tplayerName := GetPlayername(request)\n\tlobbySettings := &game.EditableLobbySettings{\n\t\tRounds:             rounds,\n\t\tDrawingTime:        drawingTime,\n\t\tMaxPlayers:         maxPlayers,\n\t\tCustomWordsPerTurn: customWordsPerTurn,\n\t\tClientsPerIPLimit:  clientsPerIPLimit,\n\t\tPublic:             publicLobby,\n\t\tWordsPerTurn:       wordsPerTurn,\n\t}\n\tplayer, lobby, err := game.CreateLobby(lobbyId, playerName,\n\t\tlanguageKey, lobbySettings, customWords, scoreCalculation)\n\tif err != nil {\n\t\thttp.Error(writer, err.Error(), http.StatusBadRequest)\n\t\treturn\n\t}\n\n\t// Due to the fact the IDs can be chosen manually, there's a big clash\n\t// potential! However, since we only allow specifying this via the rest API\n\t// we treat this here. This can't be treated in the game package right now\n\t// anyway though, as there'd be an import cycle.\n\tif state.GetLobby(lobby.LobbyID) != nil {\n\t\thttp.Error(writer, \"lobby id already in use\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tlobby.WriteObject = WriteObject\n\tlobby.WritePreparedMessage = WritePreparedMessage\n\tplayer.SetLastKnownAddress(GetIPAddressFromRequest(request))\n\n\tSetGameplayCookies(writer, request, player, lobby)\n\n\tlobbyData := CreateLobbyData(handler.cfg, lobby)\n\n\tif started, err := marshalToHTTPWriter(lobbyData, writer); err != nil {\n\t\tif !started {\n\t\t\thttp.Error(writer, err.Error(), http.StatusInternalServerError)\n\t\t}\n\t\treturn\n\t}\n\n\t// We only add the lobby if everything else was successful.\n\tstate.AddLobby(lobby)\n}\n\nfunc (handler *V1Handler) postPlayer(writer http.ResponseWriter, request *http.Request) {\n\tlobby := state.GetLobby(request.PathValue(\"lobby_id\"))\n\tif lobby == nil {\n\t\thttp.Error(writer, ErrLobbyNotExistent.Error(), http.StatusNotFound)\n\t\treturn\n\t}\n\n\tvar lobbyData *LobbyData\n\n\tlobby.Synchronized(func() {\n\t\tplayer := GetPlayer(lobby, request)\n\n\t\tif player == nil {\n\t\t\tif !lobby.HasFreePlayerSlot() {\n\t\t\t\thttp.Error(writer, \"lobby already full\", http.StatusUnauthorized)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\trequestAddress := GetIPAddressFromRequest(request)\n\n\t\t\tif !lobby.CanIPConnect(requestAddress) {\n\t\t\t\thttp.Error(writer, \"maximum amount of players per IP reached\", http.StatusUnauthorized)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tnewPlayer := lobby.JoinPlayer(GetPlayername(request))\n\t\t\tnewPlayer.SetLastKnownAddress(requestAddress)\n\n\t\t\t// Use the players generated usersession and pass it as a cookie.\n\t\t\tSetGameplayCookies(writer, request, newPlayer, lobby)\n\t\t} else {\n\t\t\tplayer.SetLastKnownAddress(GetIPAddressFromRequest(request))\n\t\t}\n\n\t\tlobbyData = CreateLobbyData(handler.cfg, lobby)\n\t})\n\n\tif lobbyData != nil {\n\t\tif started, err := marshalToHTTPWriter(lobbyData, writer); err != nil {\n\t\t\tif !started {\n\t\t\t\thttp.Error(writer, err.Error(), http.StatusInternalServerError)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc GetDiscordInstanceId(request *http.Request) string {\n\tdiscordInstanceId := request.URL.Query().Get(\"instance_id\")\n\tif discordInstanceId == \"\" {\n\t\tcookie, _ := request.Cookie(\"discord-instance-id\")\n\t\tif cookie != nil {\n\t\t\tdiscordInstanceId = cookie.Value\n\t\t}\n\t}\n\treturn discordInstanceId\n}\n\nconst discordDomain = \"1320396325925163070.discordsays.com\"\n\nfunc SetDiscordCookies(w http.ResponseWriter, request *http.Request) {\n\tdiscordInstanceId := GetDiscordInstanceId(request)\n\tif discordInstanceId != \"\" {\n\t\thttp.SetCookie(w, &http.Cookie{\n\t\t\tName:        \"discord-instance-id\",\n\t\t\tValue:       discordInstanceId,\n\t\t\tDomain:      discordDomain,\n\t\t\tPath:        \"/\",\n\t\t\tSameSite:    http.SameSiteNoneMode,\n\t\t\tPartitioned: true,\n\t\t\tSecure:      true,\n\t\t})\n\t}\n}\n\n// SetGameplayCookies takes the players usersession and lobby id\n// and sets them as a cookie.\nfunc SetGameplayCookies(\n\tw http.ResponseWriter,\n\trequest *http.Request,\n\tplayer *game.Player,\n\tlobby *game.Lobby,\n) {\n\tdiscordInstanceId := GetDiscordInstanceId(request)\n\tif discordInstanceId != \"\" {\n\t\thttp.SetCookie(w, &http.Cookie{\n\t\t\tName:        \"usersession\",\n\t\t\tValue:       player.GetUserSession().String(),\n\t\t\tDomain:      discordDomain,\n\t\t\tPath:        \"/\",\n\t\t\tSameSite:    http.SameSiteNoneMode,\n\t\t\tPartitioned: true,\n\t\t\tSecure:      true,\n\t\t})\n\t\thttp.SetCookie(w, &http.Cookie{\n\t\t\tName:        \"lobby-id\",\n\t\t\tValue:       lobby.LobbyID,\n\t\t\tDomain:      discordDomain,\n\t\t\tPath:        \"/\",\n\t\t\tSameSite:    http.SameSiteNoneMode,\n\t\t\tPartitioned: true,\n\t\t\tSecure:      true,\n\t\t})\n\t} else {\n\t\t// For the discord case, we need both, as the discord specific cookies\n\t\t// aren't available during the readirect from ssrCreate to ssrEnter.\n\t\thttp.SetCookie(w, &http.Cookie{\n\t\t\tName:     \"usersession\",\n\t\t\tValue:    player.GetUserSession().String(),\n\t\t\tPath:     \"/\",\n\t\t\tSameSite: http.SameSiteStrictMode,\n\t\t})\n\t\thttp.SetCookie(w, &http.Cookie{\n\t\t\tName:     \"lobby-id\",\n\t\t\tValue:    lobby.LobbyID,\n\t\t\tPath:     \"/\",\n\t\t\tSameSite: http.SameSiteStrictMode,\n\t\t})\n\t}\n}\n\nfunc (handler *V1Handler) patchLobby(writer http.ResponseWriter, request *http.Request) {\n\tuserSession, err := GetUserSession(request)\n\tif err != nil {\n\t\tlog.Printf(\"error getting user session: %v\", err)\n\t\thttp.Error(writer, \"no valid usersession supplied\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif userSession == uuid.Nil {\n\t\thttp.Error(writer, \"no usersession supplied\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tlobby := state.GetLobby(GetLobbyId(request))\n\tif lobby == nil {\n\t\thttp.Error(writer, ErrLobbyNotExistent.Error(), http.StatusNotFound)\n\t\treturn\n\t}\n\n\tif err := request.ParseForm(); err != nil {\n\t\thttp.Error(writer, fmt.Sprintf(\"error parsing request query into form (%s)\", err), http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tvar requestErrors []string\n\n\t// Uneditable properties\n\tif request.Form.Get(\"custom_words\") != \"\" {\n\t\trequestErrors = append(requestErrors, \"can't modify custom_words in existing lobby\")\n\t}\n\tif request.Form.Get(\"language\") != \"\" {\n\t\trequestErrors = append(requestErrors, \"can't modify language in existing lobby\")\n\t}\n\n\t// Editable properties\n\tmaxPlayers, maxPlayersInvalid := ParseMaxPlayers(handler.cfg, request.Form.Get(\"max_players\"))\n\tdrawingTime, drawingTimeInvalid := ParseDrawingTime(handler.cfg, request.Form.Get(\"drawing_time\"))\n\trounds, roundsInvalid := ParseRounds(handler.cfg, request.Form.Get(\"rounds\"))\n\tcustomWordsPerTurn, customWordsPerTurnInvalid := ParseCustomWordsPerTurn(handler.cfg, request.Form.Get(\"custom_words_per_turn\"))\n\tclientsPerIPLimit, clientsPerIPLimitInvalid := ParseClientsPerIPLimit(handler.cfg, request.Form.Get(\"clients_per_ip_limit\"))\n\tpublicLobby, publicLobbyInvalid := ParseBoolean(\"public\", request.Form.Get(\"public\"))\n\twordsPerTurn, wordsPerTurnInvalid := ParseWordsPerTurn(handler.cfg, request.Form.Get(\"words_per_turn\"))\n\n\tif wordsPerTurn < customWordsPerTurn {\n\t\twordsPerTurnInvalid = errors.New(\"words per turn must be greater than or equal to custom words per turn\")\n\t}\n\n\towner := lobby.GetOwner()\n\tif owner == nil || owner.GetUserSession() != userSession {\n\t\thttp.Error(writer, \"only the lobby owner can edit the lobby\", http.StatusForbidden)\n\t\treturn\n\t}\n\n\tif maxPlayersInvalid != nil {\n\t\trequestErrors = append(requestErrors, maxPlayersInvalid.Error())\n\t}\n\tif drawingTimeInvalid != nil {\n\t\trequestErrors = append(requestErrors, drawingTimeInvalid.Error())\n\t}\n\tif roundsInvalid != nil {\n\t\trequestErrors = append(requestErrors, roundsInvalid.Error())\n\t} else {\n\t\tcurrentRound := lobby.Round\n\t\tif rounds < currentRound {\n\t\t\trequestErrors = append(requestErrors, fmt.Sprintf(\"rounds must be greater than or equal to the current round (%d)\", currentRound))\n\t\t}\n\t}\n\tif customWordsPerTurnInvalid != nil {\n\t\trequestErrors = append(requestErrors, customWordsPerTurnInvalid.Error())\n\t}\n\tif clientsPerIPLimitInvalid != nil {\n\t\trequestErrors = append(requestErrors, clientsPerIPLimitInvalid.Error())\n\t}\n\tif publicLobbyInvalid != nil {\n\t\trequestErrors = append(requestErrors, publicLobbyInvalid.Error())\n\t}\n\tif wordsPerTurnInvalid != nil {\n\t\trequestErrors = append(requestErrors, wordsPerTurnInvalid.Error())\n\t}\n\n\tif len(requestErrors) != 0 {\n\t\thttp.Error(writer, strings.Join(requestErrors, \";\"), http.StatusBadRequest)\n\t\treturn\n\t}\n\n\t// We synchronize as late as possible to avoid unnecessary lags.\n\t// The previous code here isn't really prone to bugs due to lack of sync.\n\tlobby.Synchronized(func() {\n\t\t// While changing maxClientsPerIP and maxPlayers to a value lower than\n\t\t// is currently being used makes little sense, we'll allow it, as it doesn't\n\t\t// really break anything.\n\n\t\tlobby.MaxPlayers = maxPlayers\n\t\tlobby.CustomWordsPerTurn = customWordsPerTurn\n\t\tlobby.ClientsPerIPLimit = clientsPerIPLimit\n\t\tlobby.Public = publicLobby\n\t\tlobby.Rounds = rounds\n\t\tlobby.WordsPerTurn = wordsPerTurn\n\n\t\tif lobby.State == game.Ongoing {\n\t\t\tlobby.DrawingTimeNew = drawingTime\n\t\t} else {\n\t\t\tlobby.DrawingTime = drawingTime\n\t\t}\n\n\t\tlobbySettingsCopy := lobby.EditableLobbySettings\n\t\tlobbySettingsCopy.DrawingTime = drawingTime\n\t\tlobby.Broadcast(&game.Event{Type: game.EventTypeLobbySettingsChanged, Data: lobbySettingsCopy})\n\t})\n}\n\nfunc (handler *V1Handler) getStats(writer http.ResponseWriter, _ *http.Request) {\n\tif started, err := marshalToHTTPWriter(state.Stats(), writer); err != nil {\n\t\tif !started {\n\t\t\thttp.Error(writer, err.Error(), http.StatusInternalServerError)\n\t\t}\n\t\treturn\n\t}\n}\n\n// SuggestedBrushSizes is suggested brush sizes value used for\n// Lobbydata objects. A unit test makes sure these values are ordered\n// and within the specified bounds.\nvar SuggestedBrushSizes = [4]uint8{8, 16, 24, 32}\n\n// GameConstants are values that are lobby-independent and can't be changed via\n// settings, neither at compile time nor at startup time.\ntype GameConstants struct {\n\t// DrawingBoardBaseWidth is the internal canvas width and is needed for\n\t// correctly up- / downscaling drawing instructions. Deprecated, but kept for compat.\n\tDrawingBoardBaseWidth uint16 `json:\"drawingBoardBaseWidth\"`\n\t// DrawingBoardBaseHeight is the internal canvas height and is needed for\n\t// correctly up- / downscaling drawing instructions. Deprecated, but kept for compat.\n\tDrawingBoardBaseHeight uint16 `json:\"drawingBoardBaseHeight\"`\n\t// MinBrushSize is the minimum amount of pixels the brush can draw in.\n\tMinBrushSize uint8 `json:\"minBrushSize\"`\n\t// MaxBrushSize is the maximum amount of pixels the brush can draw in.\n\tMaxBrushSize uint8 `json:\"maxBrushSize\"`\n\t// CanvasColor is the initially (empty) color of the canvas.\n\tCanvasColor uint8 `json:\"canvasColor\"`\n\t// SuggestedBrushSizes are suggestions for the different brush sizes\n\t// that the user can choose between. These brushes are guaranteed to\n\t// be ordered from low to high and stay with the bounds.\n\tSuggestedBrushSizes [4]uint8 `json:\"suggestedBrushSizes\"`\n}\n\nvar GameConstantsData = &GameConstants{\n\tDrawingBoardBaseWidth:  game.DrawingBoardBaseWidth,\n\tDrawingBoardBaseHeight: game.DrawingBoardBaseHeight,\n\tMinBrushSize:           game.MinBrushSize,\n\tMaxBrushSize:           game.MaxBrushSize,\n\tCanvasColor:            0, /* White */\n\tSuggestedBrushSizes:    SuggestedBrushSizes,\n}\n\n// LobbyData is the data necessary for correctly configuring a lobby.\n// While unofficial clients will probably need all of these values, the\n// official webclient doesn't use all of them as of now.\ntype LobbyData struct {\n\tgame.SettingBounds\n\tgame.EditableLobbySettings\n\t*GameConstants\n\tIsWordpackRtl bool\n}\n\n// CreateLobbyData creates a ready to use LobbyData object containing data\n// from the passed Lobby.\nfunc CreateLobbyData(cfg *config.Config, lobby *game.Lobby) *LobbyData {\n\treturn &LobbyData{\n\t\tSettingBounds:         cfg.LobbySettingBounds,\n\t\tEditableLobbySettings: lobby.EditableLobbySettings,\n\t\tGameConstants:         GameConstantsData,\n\t\tIsWordpackRtl:         lobby.IsWordpackRtl,\n\t}\n}\n\n// GetUserSession accesses the usersession from an HTTP request and\n// returns the session. The session can either be in the cookie or in\n// the header. If no session can be found, an empty string is returned.\nfunc GetUserSession(request *http.Request) (uuid.UUID, error) {\n\tvar userSession string\n\tif sessionCookie, err := request.Cookie(\"usersession\"); err == nil && sessionCookie.Value != \"\" {\n\t\tuserSession = sessionCookie.Value\n\t} else {\n\t\tuserSession = request.Header.Get(\"Usersession\")\n\t}\n\n\tif userSession == \"\" {\n\t\treturn uuid.Nil, nil\n\t}\n\n\tid, err := uuid.FromString(userSession)\n\tif err != nil {\n\t\treturn uuid.Nil, fmt.Errorf(\"error parsing user session: %w\", err)\n\t}\n\n\treturn id, nil\n}\n\n// GetPlayer returns the player object that matches the usersession in the\n// supplied HTTP request and lobby. If no user session is set, we return nil.\nfunc GetPlayer(lobby *game.Lobby, request *http.Request) *game.Player {\n\tuserSession, err := GetUserSession(request)\n\tif err != nil {\n\t\tlog.Printf(\"error getting user session: %v\", err)\n\t\treturn nil\n\t}\n\n\tif userSession == uuid.Nil {\n\t\treturn nil\n\t}\n\n\treturn lobby.GetPlayerBySession(userSession)\n}\n\n// GetPlayername either retrieves the playername from a cookie, the URL form.\n// If no preferred name can be found, we return an empty string.\nfunc GetPlayername(request *http.Request) string {\n\tif err := request.ParseForm(); err == nil {\n\t\tusername := request.Form.Get(\"username\")\n\t\tif username != \"\" {\n\t\t\treturn username\n\t\t}\n\t}\n\n\tif usernameCookie, err := request.Cookie(\"username\"); err == nil {\n\t\tif usernameCookie.Value != \"\" {\n\t\t\treturn usernameCookie.Value\n\t\t}\n\t}\n\n\treturn \"\"\n}\n\n// GetLobbyId returns either the lobby id from the URL or from a cookie.\nfunc GetLobbyId(request *http.Request) string {\n\tlobbyId := request.PathValue(\"lobby_id\")\n\tif lobbyId == \"\" {\n\t\tcookie, _ := request.Cookie(\"lobby-id\")\n\t\tlobbyId = cookie.Value\n\t}\n\treturn lobbyId\n}\n"
  },
  {
    "path": "internal/api/ws.go",
    "content": "package api\n\nimport (\n\tjson \"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"runtime/debug\"\n\t\"time\"\n\n\t\"github.com/gofrs/uuid/v5\"\n\t\"github.com/lxzan/gws\"\n\n\t\"github.com/scribble-rs/scribble.rs/internal/game\"\n\t\"github.com/scribble-rs/scribble.rs/internal/metrics\"\n\t\"github.com/scribble-rs/scribble.rs/internal/state\"\n)\n\nvar (\n\tErrPlayerNotConnected = errors.New(\"player not connected\")\n\n\tupgrader = gws.NewUpgrader(&socketHandler{}, &gws.ServerOption{\n\t\tRecovery:          gws.Recovery,\n\t\tParallelEnabled:   true,\n\t\tPermessageDeflate: gws.PermessageDeflate{Enabled: true},\n\t})\n)\n\nfunc (handler *V1Handler) websocketUpgrade(writer http.ResponseWriter, request *http.Request) {\n\tuserSession, err := GetUserSession(request)\n\tif err != nil {\n\t\tlog.Printf(\"error getting user session: %v\", err)\n\t\thttp.Error(writer, \"no valid usersession supplied\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tif userSession == uuid.Nil {\n\t\t// This issue can happen if you illegally request a websocket\n\t\t// connection without ever having had a usersession or your\n\t\t// client having deleted the usersession cookie.\n\t\thttp.Error(writer, \"you don't have access to this lobby;usersession not set\", http.StatusUnauthorized)\n\t\treturn\n\t}\n\n\tlobbyId := GetLobbyId(request)\n\tif lobbyId == \"\" {\n\t\thttp.Error(writer, \"lobby id missing\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tlobby := state.GetLobby(lobbyId)\n\tif lobby == nil {\n\t\thttp.Error(writer, ErrLobbyNotExistent.Error(), http.StatusNotFound)\n\t\treturn\n\t}\n\n\tlobby.Synchronized(func() {\n\t\tplayer := lobby.GetPlayerBySession(userSession)\n\t\tif player == nil {\n\t\t\thttp.Error(writer, \"you don't have access to this lobby;usersession unknown\", http.StatusUnauthorized)\n\t\t\treturn\n\t\t}\n\n\t\tsocket, err := upgrader.Upgrade(writer, request)\n\t\tif err != nil {\n\t\t\thttp.Error(writer, err.Error(), http.StatusInternalServerError)\n\t\t\treturn\n\t\t}\n\n\t\tmetrics.TrackPlayerConnect()\n\n\t\tplayer.SetWebsocket(socket)\n\t\tsocket.Session().Store(\"player\", player)\n\t\tsocket.Session().Store(\"lobby\", lobby)\n\t\tlobby.OnPlayerConnectUnsynchronized(player)\n\n\t\tgo socket.ReadLoop()\n\t})\n}\n\nconst (\n\tpingInterval = 10 * time.Second\n\tpingWait     = 5 * time.Second\n)\n\ntype socketHandler struct{}\n\nfunc (c *socketHandler) resetDeadline(socket *gws.Conn) {\n\tif err := socket.SetDeadline(time.Now().Add(pingInterval + pingWait)); err != nil {\n\t\tlog.Printf(\"error resetting deadline: %s\\n\", err)\n\t}\n}\n\nfunc (c *socketHandler) OnOpen(socket *gws.Conn) {\n\tc.resetDeadline(socket)\n}\n\nfunc extract(x any, _ bool) any {\n\treturn x\n}\n\nfunc (c *socketHandler) OnClose(socket *gws.Conn, _ error) {\n\tdefer socket.Session().Delete(\"player\")\n\tdefer socket.Session().Delete(\"lobby\")\n\n\tplayer, ok := extract(socket.Session().Load(\"player\")).(*game.Player)\n\tif !ok {\n\t\treturn\n\t}\n\tlobby, ok := extract(socket.Session().Load(\"lobby\")).(*game.Lobby)\n\tif !ok {\n\t\treturn\n\t}\n\n\tmetrics.TrackPlayerDisconnect()\n\tlobby.OnPlayerDisconnect(player)\n\tplayer.SetWebsocket(nil)\n}\n\nfunc (c *socketHandler) OnPing(socket *gws.Conn, _ []byte) {\n\tc.resetDeadline(socket)\n\t_ = socket.WritePong(nil)\n}\n\nfunc (c *socketHandler) OnPong(socket *gws.Conn, _ []byte) {\n\tc.resetDeadline(socket)\n}\n\nfunc (c *socketHandler) OnMessage(socket *gws.Conn, message *gws.Message) {\n\tdefer message.Close()\n\tdefer c.resetDeadline(socket)\n\n\tplayer, ok := extract(socket.Session().Load(\"player\")).(*game.Player)\n\tif !ok {\n\t\treturn\n\t}\n\tlobby, ok := extract(socket.Session().Load(\"lobby\")).(*game.Lobby)\n\tif !ok {\n\t\treturn\n\t}\n\n\tbytes := message.Bytes()\n\thandleIncommingEvent(lobby, player, bytes)\n}\n\nfunc handleIncommingEvent(lobby *game.Lobby, player *game.Player, data []byte) {\n\tdefer func() {\n\t\tif err := recover(); err != nil {\n\t\t\tlog.Printf(\"Error occurred in incomming event listener.\\n\\tError: %s\\n\\tPlayer: %s(%s)\\nStack %s\\n\", err, player.Name, player.ID, string(debug.Stack()))\n\t\t\t// FIXME Should this lead to a disconnect?\n\t\t}\n\t}()\n\n\tvar event game.EventTypeOnly\n\tif err := json.Unmarshal(data, &event); err != nil {\n\t\tlog.Printf(\"Error unmarshalling message: %s\\n\", err)\n\t\terr := WriteObject(player, game.Event{\n\t\t\tType: game.EventTypeSystemMessage,\n\t\t\tData: fmt.Sprintf(\"error parsing message, please report this issue via Github: %s!\", err),\n\t\t})\n\t\tif err != nil {\n\t\t\tlog.Printf(\"Error sending errormessage: %s\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\n\tif err := lobby.HandleEvent(event.Type, data, player); err != nil {\n\t\tlog.Printf(\"Error handling event: %s\\n\", err)\n\t}\n}\n\nfunc WriteObject(player *game.Player, object any) error {\n\tsocket := player.GetWebsocket()\n\tif socket == nil || !player.Connected {\n\t\treturn ErrPlayerNotConnected\n\t}\n\n\tbytes, err := json.Marshal(object)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error marshalling payload: %w\", err)\n\t}\n\n\t// We write async, as broadcast always uses the queue. If we use write, the\n\t// order will become messed up, potentially causing issues in the frontend.\n\tsocket.WriteAsync(gws.OpcodeText, bytes, func(err error) {\n\t\tif err != nil {\n\t\t\tlog.Println(\"Error responding to player:\", err.Error())\n\t\t}\n\t})\n\treturn nil\n}\n\nfunc WritePreparedMessage(player *game.Player, message *gws.Broadcaster) error {\n\tsocket := player.GetWebsocket()\n\tif socket == nil || !player.Connected {\n\t\treturn ErrPlayerNotConnected\n\t}\n\n\treturn message.Broadcast(socket)\n}\n"
  },
  {
    "path": "internal/config/config.go",
    "content": "package config\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"maps\"\n\t\"os\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/caarlos0/env/v11\"\n\t\"github.com/scribble-rs/scribble.rs/internal/game\"\n\t\"github.com/subosito/gotenv\"\n)\n\ntype LobbySettingDefaults struct {\n\tPublic             string `env:\"PUBLIC\"`\n\tDrawingTime        string `env:\"DRAWING_TIME\"`\n\tRounds             string `env:\"ROUNDS\"`\n\tMaxPlayers         string `env:\"MAX_PLAYERS\"`\n\tCustomWords        string `env:\"CUSTOM_WORDS\"`\n\tCustomWordsPerTurn string `env:\"CUSTOM_WORDS_PER_TURN\"`\n\tClientsPerIPLimit  string `env:\"CLIENTS_PER_IP_LIMIT\"`\n\tLanguage           string `env:\"LANGUAGE\"`\n\tScoreCalculation   string `env:\"SCORE_CALCULATION\"`\n\tWordsPerTurn       string `env:\"WORDS_PER_TURN\"`\n}\n\ntype CORS struct {\n\tAllowedOrigins   []string `env:\"ALLOWED_ORIGINS\"`\n\tAllowCredentials bool     `env:\"ALLOW_CREDENTIALS\"`\n}\n\ntype LobbyCleanup struct {\n\t// Interval is the interval in which the cleanup routine will run. If set\n\t// to `0`, the cleanup routine will be disabled.\n\tInterval time.Duration `env:\"INTERVAL\"`\n\t// PlayerInactivityThreshold is the time after which a player counts as\n\t// inactivity and won't keep the lobby up. Note that cleaning up a lobby can\n\t// therefore take up to Interval + PlayerInactivityThreshold.\n\tPlayerInactivityThreshold time.Duration `env:\"PLAYER_INACTIVITY_THRESHOLD\"`\n}\n\ntype Config struct {\n\t// NetworkAddress is empty by default, since that implies listening on\n\t// all interfaces. For development usecases, on windows for example, this\n\t// is very annoying, as windows will nag you with firewall prompts.\n\tNetworkAddress string `env:\"NETWORK_ADDRESS\"`\n\t// RootPath is the path directly after the domain and before the\n\t// scribblers paths. For example if you host scribblers on painting.com\n\t// but already host a different website on that domain, then your API paths\n\t// might have to look like this: painting.com/scribblers/v1\n\tRootPath string `env:\"ROOT_PATH\"`\n\t// RootURL is similar to RootPath, but contains only the protocol and\n\t// domain. So it could be https://painting.com. This is required for some\n\t// non critical functionality, such as metadata tags.\n\tRootURL string `env:\"ROOT_URL\"`\n\t// CanonicalURL specifies the original domain, in case we are accessing the\n\t// site via some other domain, such as scribblers.fly.dev\n\tCanonicalURL string `env:\"CANONICAL_URL\"`\n\t// AllowIndexing will control whether the noindex, nofollow meta tag is\n\t// added to the home page.\n\tAllowIndexing bool `env:\"ALLOW_INDEXING\"`\n\t// ServeDirectories is a map of `path` to `directory`. All directories are\n\t// served under the given path.\n\tServeDirectories map[string]string `env:\"SERVE_DIRECTORIES\"`\n\tCPUProfilePath   string            `env:\"CPU_PROFILE_PATH\"`\n\t// LobbySettingDefaults is used for the server side rendering of the lobby\n\t// creation page. It doesn't affect the default values of lobbies created\n\t// via the API.\n\tLobbySettingDefaults LobbySettingDefaults `envPrefix:\"LOBBY_SETTING_DEFAULTS_\"`\n\tLobbySettingBounds   game.SettingBounds   `envPrefix:\"LOBBY_SETTING_BOUNDS_\"`\n\tPort                 uint16               `env:\"PORT\"`\n\tCORS                 CORS                 `envPrefix:\"CORS_\"`\n\tLobbyCleanup         LobbyCleanup         `envPrefix:\"LOBBY_CLEANUP_\"`\n}\n\nvar Default = Config{\n\tPort: 8080,\n\tLobbySettingDefaults: LobbySettingDefaults{\n\t\tPublic:             \"false\",\n\t\tDrawingTime:        \"120\",\n\t\tRounds:             \"4\",\n\t\tMaxPlayers:         \"24\",\n\t\tCustomWordsPerTurn: \"3\",\n\t\tClientsPerIPLimit:  \"2\",\n\t\tLanguage:           \"english\",\n\t\tScoreCalculation:   \"chill\",\n\t\tWordsPerTurn:       \"3\",\n\t},\n\tLobbySettingBounds: game.SettingBounds{\n\t\tMinDrawingTime:        60,\n\t\tMaxDrawingTime:        300,\n\t\tMinRounds:             1,\n\t\tMaxRounds:             20,\n\t\tMinMaxPlayers:         2,\n\t\tMaxMaxPlayers:         24,\n\t\tMinClientsPerIPLimit:  1,\n\t\tMaxClientsPerIPLimit:  24,\n\t\tMinCustomWordsPerTurn: 1,\n\t\tMaxWordsPerTurn:       6,\n\t\tMinWordsPerTurn:       1,\n\t},\n\tCORS: CORS{\n\t\tAllowedOrigins:   []string{\"*\"},\n\t\tAllowCredentials: false,\n\t},\n\tLobbyCleanup: LobbyCleanup{\n\t\tInterval:                  90 * time.Second,\n\t\tPlayerInactivityThreshold: 75 * time.Second,\n\t},\n}\n\n// Load loads the configuration from the environment. If a .env file is\n// available, it will be loaded as well. Values found in the environment\n// will overwrite whatever is load from the .env file.\nfunc Load() (*Config, error) {\n\tenvVars := make(map[string]string)\n\n\tdotEnvPath := \".env\"\n\tif _, err := os.Stat(dotEnvPath); err != nil {\n\t\tif !os.IsNotExist(err) {\n\t\t\treturn nil, fmt.Errorf(\"error checking for existence of .env file: %w\", err)\n\t\t}\n\t} else {\n\t\tenvFileContent, err := gotenv.Read(dotEnvPath)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error reading .env file: %w\", err)\n\t\t}\n\t\tmaps.Copy(envVars, envFileContent)\n\t}\n\n\t// Add local environment variables to EnvVars map\n\tfor _, keyValuePair := range os.Environ() {\n\t\tpair := strings.SplitN(keyValuePair, \"=\", 2)\n\t\t// For some reason, gitbash can contain the variable `=::=::\\` which\n\t\t// gives us a pair where the first entry is empty.\n\t\tif pair[0] == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tenvVars[pair[0]] = pair[1]\n\t}\n\n\tconfig := Default\n\tif err := env.ParseWithOptions(&config, env.Options{\n\t\tEnvironment: envVars,\n\t\tOnSet: func(key string, value any, isDefault bool) {\n\t\t\tif !reflect.ValueOf(value).IsZero() {\n\t\t\t\tlog.Printf(\"Setting '%s' to '%v' (isDefault: %v)\\n\", key, value, isDefault)\n\t\t\t}\n\t\t},\n\t}); err != nil {\n\t\treturn nil, fmt.Errorf(\"error parsing environment variables: %w\", err)\n\t}\n\n\t// Prevent user error and let the code decide when we need slashes.\n\tconfig.RootURL = strings.TrimSuffix(config.RootURL, \"/\")\n\tif config.CanonicalURL == \"\" {\n\t\tconfig.CanonicalURL = config.RootURL\n\t}\n\tconfig.RootPath = strings.Trim(config.RootPath, \"/\")\n\n\treturn &config, nil\n}\n"
  },
  {
    "path": "internal/frontend/doc.go",
    "content": "// Package frontend contains the HTTP endpoints for delivering the official\n// web client. In order to register the endpoints you have to call SetupRoutes.\npackage frontend\n"
  },
  {
    "path": "internal/frontend/http.go",
    "content": "package frontend\n\nimport (\n\t\"embed\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"hash\"\n\t\"html/template\"\n\t\"net/http\"\n\t\"os\"\n\t\"path\"\n\t\"strings\"\n\n\t\"github.com/gofrs/uuid/v5\"\n\t\"github.com/scribble-rs/scribble.rs/internal/translations\"\n)\n\nvar (\n\t//go:embed templates/*\n\ttemplateFS    embed.FS\n\tpageTemplates *template.Template\n\n\t//go:embed resources/*\n\tfrontendResourcesFS embed.FS\n)\n\nfunc init() {\n\tvar err error\n\tpageTemplates, err = template.ParseFS(templateFS, \"templates/*\")\n\tif err != nil {\n\t\tpanic(fmt.Errorf(\"error loading templates: %w\", err))\n\t}\n}\n\n// BasePageConfig is data that all pages require to function correctly, no matter\n// whether error page or lobby page.\ntype BasePageConfig struct {\n\tchecksums map[string]string\n\thash      hash.Hash\n\n\t// Version is the tagged source code version of this build. Can be empty for dev\n\t// builds. Untagged commits will be of format `tag-N-gSHA`.\n\tVersion string `json:\"version\"`\n\t// Commit that was deployed, if we didn't deploy a concrete tag.\n\tCommit string `json:\"commit\"`\n\t// RootPath is the path directly after the domain and before the\n\t// scribble.rs paths. For example if you host scribblers on painting.com\n\t// but already host a different website, then your API paths might have to\n\t// look like this: painting.com/scribblers/v1.\n\tRootPath string `json:\"rootPath\"`\n\t// RootURL is similar to RootPath, but contains only the protocol and\n\t// domain. So it could be https://painting.com. This is required for some\n\t// non critical functionality, such as metadata tags.\n\tRootURL string `json:\"rootUrl\"`\n\t// CanonicalURL specifies the original domain, in case we are accessing the\n\t// site via some other domain, such as scribblers.fly.dev\n\tCanonicalURL string `json:\"canonicalUrl\"`\n\t// AllowIndexing will control whether the noindex, nofollow meta tag is\n\t// added to the home page.\n\tAllowIndexing bool `env:\"ALLOW_INDEXING\"`\n}\n\nvar fallbackChecksum = uuid.Must(uuid.NewV4()).String()\n\nfunc (baseConfig *BasePageConfig) Hash(key string, bytes []byte) error {\n\t_, alreadyExists := baseConfig.checksums[key]\n\tif alreadyExists {\n\t\treturn fmt.Errorf(\"duplicate hash key '%s'\", key)\n\t}\n\tif _, err := baseConfig.hash.Write(bytes); err != nil {\n\t\treturn fmt.Errorf(\"error hashing '%s': %w\", key, err)\n\t}\n\tbaseConfig.checksums[key] = hex.EncodeToString(baseConfig.hash.Sum(nil))\n\tbaseConfig.hash.Reset()\n\treturn nil\n}\n\n// CacheBust is a string that is appended to all resources to prevent\n// browsers from using cached data of a previous version, but still have\n// long lived max age values.\nfunc (baseConfig *BasePageConfig) withCacheBust(file string) string {\n\tchecksum, found := baseConfig.checksums[file]\n\tif !found {\n\t\t// No need to crash over\n\t\treturn fmt.Sprintf(\"%s?cache_bust=%s\", file, fallbackChecksum)\n\t}\n\treturn fmt.Sprintf(\"%s?cache_bust=%s\", file, checksum)\n}\n\nfunc (baseConfig *BasePageConfig) WithCacheBust(file string) template.HTMLAttr {\n\treturn template.HTMLAttr(baseConfig.withCacheBust(file))\n}\n\nfunc (handler *SSRHandler) cspMiddleware(handleFunc http.HandlerFunc) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Header().Add(\"Content-Security-Policy\", \"base-uri 'self'; default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; img-src 'self' data:\")\n\t\thandleFunc.ServeHTTP(w, r)\n\t}\n}\n\n// SetupRoutes registers the official webclient endpoints with the http package.\nfunc (handler *SSRHandler) SetupRoutes(register func(string, string, http.HandlerFunc)) {\n\tregisterWithCsp := func(s1, s2 string, hf http.HandlerFunc) {\n\t\tregister(s1, s2, handler.cspMiddleware(hf))\n\t}\n\tvar genericFileHandler http.HandlerFunc\n\tif dir := handler.cfg.ServeDirectories[\"\"]; dir != \"\" {\n\t\tdelete(handler.cfg.ServeDirectories, \"\")\n\t\tfileServer := http.FileServer(http.FS(os.DirFS(dir)))\n\t\tgenericFileHandler = fileServer.ServeHTTP\n\t}\n\n\tfor route, dir := range handler.cfg.ServeDirectories {\n\t\tfileServer := http.FileServer(http.FS(os.DirFS(dir)))\n\t\tfileHandler := http.StripPrefix(\n\t\t\t\"/\"+path.Join(handler.cfg.RootPath, route)+\"/\",\n\t\t\thttp.HandlerFunc(fileServer.ServeHTTP),\n\t\t).ServeHTTP\n\t\tregisterWithCsp(\n\t\t\t// Trailing slash means wildcard.\n\t\t\t\"GET\", path.Join(handler.cfg.RootPath, route)+\"/\",\n\t\t\tfileHandler,\n\t\t)\n\t}\n\n\tindexHandler := handler.cspMiddleware(handler.indexPageHandler)\n\tregister(\"GET\", handler.cfg.RootPath,\n\t\thttp.StripPrefix(\n\t\t\t\"/\"+handler.cfg.RootPath,\n\t\t\thttp.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tif r.URL.Path == \"\" || r.URL.Path == \"/\" {\n\t\t\t\t\tindexHandler(w, r)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif genericFileHandler != nil {\n\t\t\t\t\tgenericFileHandler.ServeHTTP(w, r)\n\t\t\t\t}\n\t\t\t})).ServeHTTP)\n\n\tfileServer := http.FileServer(http.FS(frontendResourcesFS))\n\tregisterWithCsp(\n\t\t\"GET\", path.Join(handler.cfg.RootPath, \"resources\", \"{file}\"),\n\t\thttp.StripPrefix(\n\t\t\t\"/\"+handler.cfg.RootPath,\n\t\t\thttp.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t// Duration of 1 year, since we use cachebusting anyway.\n\t\t\t\tw.Header().Set(\"Cache-Control\", \"public, max-age=31536000\")\n\n\t\t\t\tfileServer.ServeHTTP(w, r)\n\t\t\t}),\n\t\t).ServeHTTP,\n\t)\n\tregisterWithCsp(\"GET\", path.Join(handler.cfg.RootPath, \"lobby.js\"), handler.lobbyJs)\n\tregisterWithCsp(\"GET\", path.Join(handler.cfg.RootPath, \"index.js\"), handler.indexJs)\n\tregisterWithCsp(\"GET\", path.Join(handler.cfg.RootPath, \"lobby\", \"{lobby_id}\"), handler.ssrEnterLobby)\n\tregisterWithCsp(\"POST\", path.Join(handler.cfg.RootPath, \"lobby\"), handler.ssrCreateLobby)\n}\n\n// errorPageData represents the data that error.html requires to be displayed.\ntype errorPageData struct {\n\t*BasePageConfig\n\t// ErrorMessage displayed on the page.\n\tErrorMessage string\n\n\tTranslation *translations.Translation\n\tLocale      string\n}\n\n// userFacingError will return the occurred error as a custom html page to the caller.\nfunc (handler *SSRHandler) userFacingError(w http.ResponseWriter, errorMessage string, translation *translations.Translation) {\n\terr := pageTemplates.ExecuteTemplate(w, \"error-page\", &errorPageData{\n\t\tBasePageConfig: handler.basePageConfig,\n\t\tErrorMessage:   errorMessage,\n\t\tTranslation:    translation,\n\t})\n\t// This should never happen, but if it does, something is very wrong.\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc isHumanAgent(userAgent string) bool {\n\treturn strings.Contains(userAgent, \"gecko\") ||\n\t\tstrings.Contains(userAgent, \"chrome\") ||\n\t\tstrings.Contains(userAgent, \"opera\") ||\n\t\tstrings.Contains(userAgent, \"safari\")\n}\n"
  },
  {
    "path": "internal/frontend/index.go",
    "content": "package frontend\n\nimport (\n\t//nolint:gosec //We just use this for cache busting, so it's secure enough\n\n\t\"crypto/md5\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\ttxtTemplate \"text/template\"\n\n\t\"github.com/scribble-rs/scribble.rs/internal/api\"\n\t\"github.com/scribble-rs/scribble.rs/internal/config\"\n\t\"github.com/scribble-rs/scribble.rs/internal/game\"\n\t\"github.com/scribble-rs/scribble.rs/internal/state\"\n\t\"github.com/scribble-rs/scribble.rs/internal/translations\"\n\t\"github.com/scribble-rs/scribble.rs/internal/version\"\n\t\"golang.org/x/text/cases\"\n\t\"golang.org/x/text/language\"\n\n\t_ \"embed\"\n)\n\n//go:embed lobby.js\nvar lobbyJsRaw string\n\n//go:embed index.js\nvar indexJsRaw string\n\ntype indexJsData struct {\n\t*BasePageConfig\n\n\tTranslation *translations.Translation\n\tLocale      string\n}\n\n// This file contains the API for the official web client.\n\ntype SSRHandler struct {\n\tcfg                *config.Config\n\tbasePageConfig     *BasePageConfig\n\tlobbyJsRawTemplate *txtTemplate.Template\n\tindexJsRawTemplate *txtTemplate.Template\n}\n\nfunc NewHandler(cfg *config.Config) (*SSRHandler, error) {\n\tbasePageConfig := &BasePageConfig{\n\t\tchecksums:     make(map[string]string),\n\t\thash:          md5.New(),\n\t\tVersion:       version.Version,\n\t\tCommit:        version.Commit,\n\t\tRootURL:       cfg.RootURL,\n\t\tCanonicalURL:  cfg.CanonicalURL,\n\t\tAllowIndexing: cfg.AllowIndexing,\n\t}\n\tif cfg.RootPath != \"\" {\n\t\tbasePageConfig.RootPath = \"/\" + cfg.RootPath\n\t}\n\tif basePageConfig.CanonicalURL == \"\" {\n\t\tbasePageConfig.CanonicalURL = basePageConfig.RootURL\n\t}\n\n\tindexJsRawTemplate, err := txtTemplate.\n\t\tNew(\"index-js\").\n\t\tParse(indexJsRaw)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error parsing index js template: %w\", err)\n\t}\n\n\tlobbyJsRawTemplate, err := txtTemplate.\n\t\tNew(\"lobby-js\").\n\t\tParse(lobbyJsRaw)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error parsing lobby js template: %w\", err)\n\t}\n\n\tlobbyJsRawTemplate.AddParseTree(\"footer\", pageTemplates.Tree)\n\n\tentries, err := frontendResourcesFS.ReadDir(\"resources\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error reading resource directory: %w\", err)\n\t}\n\n\t//nolint:gosec //We just use this for cache busting, so it's secure enough\n\tfor _, entry := range entries {\n\t\tbytes, err := frontendResourcesFS.ReadFile(\"resources/\" + entry.Name())\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error reading resource %s: %w\", entry.Name(), err)\n\t\t}\n\n\t\tif err := basePageConfig.Hash(entry.Name(), bytes); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error hashing resource %s: %w\", entry.Name(), err)\n\t\t}\n\t}\n\tif err := basePageConfig.Hash(\"index.js\", []byte(indexJsRaw)); err != nil {\n\t\treturn nil, fmt.Errorf(\"error hashing: %w\", err)\n\t}\n\tif err := basePageConfig.Hash(\"lobby.js\", []byte(lobbyJsRaw)); err != nil {\n\t\treturn nil, fmt.Errorf(\"error hashing: %w\", err)\n\t}\n\n\thandler := &SSRHandler{\n\t\tcfg:                cfg,\n\t\tbasePageConfig:     basePageConfig,\n\t\tlobbyJsRawTemplate: lobbyJsRawTemplate,\n\t\tindexJsRawTemplate: indexJsRawTemplate,\n\t}\n\treturn handler, nil\n}\n\nfunc (handler *SSRHandler) indexJs(writer http.ResponseWriter, request *http.Request) {\n\ttranslation, locale := determineTranslation(request)\n\tpageData := &indexJsData{\n\t\tBasePageConfig: handler.basePageConfig,\n\t\tTranslation:    translation,\n\t\tLocale:         locale,\n\t}\n\n\twriter.Header().Set(\"Content-Type\", \"text/javascript\")\n\t// Duration of 1 year, since we use cachebusting anyway.\n\twriter.Header().Set(\"Cache-Control\", \"public, max-age=31536000\")\n\twriter.WriteHeader(http.StatusOK)\n\tif err := handler.indexJsRawTemplate.ExecuteTemplate(writer, \"index-js\", pageData); err != nil {\n\t\tlog.Printf(\"error templating JS: %s\\n\", err)\n\t}\n}\n\n// indexPageHandler servers the default page for scribble.rs, which is the\n// page to create or join a lobby.\nfunc (handler *SSRHandler) indexPageHandler(writer http.ResponseWriter, request *http.Request) {\n\ttranslation, locale := determineTranslation(request)\n\tcreatePageData := handler.createDefaultIndexPageData()\n\tcreatePageData.Translation = translation\n\tcreatePageData.Locale = locale\n\n\tapi.SetDiscordCookies(writer, request)\n\tdiscordInstanceId := api.GetDiscordInstanceId(request)\n\tif discordInstanceId != \"\" {\n\t\tlobby := state.GetLobby(discordInstanceId)\n\t\tif lobby != nil {\n\t\t\thandler.ssrEnterLobbyNoChecks(lobby, writer, request,\n\t\t\t\tfunc() *game.Player {\n\t\t\t\t\treturn api.GetPlayer(lobby, request)\n\t\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n\n\terr := pageTemplates.ExecuteTemplate(writer, \"index\", createPageData)\n\tif err != nil {\n\t\tlog.Printf(\"Error templating home page: %s\\n\", err)\n\t}\n}\n\nfunc (handler *SSRHandler) createDefaultIndexPageData() *IndexPageData {\n\treturn &IndexPageData{\n\t\tBasePageConfig:       handler.basePageConfig,\n\t\tSettingBounds:        handler.cfg.LobbySettingBounds,\n\t\tLanguages:            game.SupportedLanguages,\n\t\tScoreCalculations:    game.SupportedScoreCalculations,\n\t\tLobbySettingDefaults: handler.cfg.LobbySettingDefaults,\n\t}\n}\n\n// IndexPageData defines all non-static data for the lobby create page.\ntype IndexPageData struct {\n\t*BasePageConfig\n\tconfig.LobbySettingDefaults\n\tgame.SettingBounds\n\n\tTranslation       *translations.Translation\n\tLocale            string\n\tErrors            []string\n\tLanguages         map[string]string\n\tScoreCalculations []string\n}\n\n// ssrCreateLobby allows creating a lobby, optionally returning errors that\n// occurred during creation.\nfunc (handler *SSRHandler) ssrCreateLobby(writer http.ResponseWriter, request *http.Request) {\n\tif err := request.ParseForm(); err != nil {\n\t\thttp.Error(writer, err.Error(), http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tscoreCalculation, scoreCalculationInvalid := api.ParseScoreCalculation(request.Form.Get(\"score_calculation\"))\n\tlanguageRawValue := request.Form.Get(\"language\")\n\tlanguageData, languageKey, languageInvalid := api.ParseLanguage(languageRawValue)\n\tdrawingTime, drawingTimeInvalid := api.ParseDrawingTime(handler.cfg, request.Form.Get(\"drawing_time\"))\n\trounds, roundsInvalid := api.ParseRounds(handler.cfg, request.Form.Get(\"rounds\"))\n\tmaxPlayers, maxPlayersInvalid := api.ParseMaxPlayers(handler.cfg, request.Form.Get(\"max_players\"))\n\tcustomWordsPerTurn, customWordsPerTurnInvalid := api.ParseCustomWordsPerTurn(handler.cfg, request.Form.Get(\"custom_words_per_turn\"))\n\tclientsPerIPLimit, clientsPerIPLimitInvalid := api.ParseClientsPerIPLimit(handler.cfg, request.Form.Get(\"clients_per_ip_limit\"))\n\tpublicLobby, publicLobbyInvalid := api.ParseBoolean(\"public\", request.Form.Get(\"public\"))\n\twordsPerTurn, wordsPerTurnInvalid := api.ParseWordsPerTurn(handler.cfg, request.Form.Get(\"words_per_turn\"))\n\n\tif wordsPerTurn < customWordsPerTurn {\n\t\twordsPerTurnInvalid = errors.New(\"words per turn must be greater than or equal to custom words per turn\")\n\t}\n\n\tvar lowercaser cases.Caser\n\tif languageInvalid != nil {\n\t\tlowercaser = cases.Lower(language.English)\n\t} else {\n\t\tlowercaser = languageData.Lowercaser()\n\t}\n\tcustomWords, customWordsInvalid := api.ParseCustomWords(lowercaser, request.Form.Get(\"custom_words\"))\n\n\tapi.SetDiscordCookies(writer, request)\n\t// Prevent resetting the form, since that would be annoying as hell.\n\tpageData := IndexPageData{\n\t\tBasePageConfig: handler.basePageConfig,\n\t\tSettingBounds:  handler.cfg.LobbySettingBounds,\n\t\tLobbySettingDefaults: config.LobbySettingDefaults{\n\t\t\tPublic:             request.Form.Get(\"public\"),\n\t\t\tDrawingTime:        request.Form.Get(\"drawing_time\"),\n\t\t\tRounds:             request.Form.Get(\"rounds\"),\n\t\t\tMaxPlayers:         request.Form.Get(\"max_players\"),\n\t\t\tCustomWords:        request.Form.Get(\"custom_words\"),\n\t\t\tCustomWordsPerTurn: request.Form.Get(\"custom_words_per_turn\"),\n\t\t\tClientsPerIPLimit:  request.Form.Get(\"clients_per_ip_limit\"),\n\t\t\tLanguage:           request.Form.Get(\"language\"),\n\t\t\tScoreCalculation:   request.Form.Get(\"score_calculation\"),\n\t\t\tWordsPerTurn:       request.Form.Get(\"words_per_turn\"),\n\t\t},\n\t\tLanguages:         game.SupportedLanguages,\n\t\tScoreCalculations: game.SupportedScoreCalculations,\n\t}\n\n\tif scoreCalculationInvalid != nil {\n\t\tpageData.Errors = append(pageData.Errors, scoreCalculationInvalid.Error())\n\t}\n\tif languageInvalid != nil {\n\t\tpageData.Errors = append(pageData.Errors, languageInvalid.Error())\n\t}\n\tif drawingTimeInvalid != nil {\n\t\tpageData.Errors = append(pageData.Errors, drawingTimeInvalid.Error())\n\t}\n\tif roundsInvalid != nil {\n\t\tpageData.Errors = append(pageData.Errors, roundsInvalid.Error())\n\t}\n\tif maxPlayersInvalid != nil {\n\t\tpageData.Errors = append(pageData.Errors, maxPlayersInvalid.Error())\n\t}\n\tif customWordsInvalid != nil {\n\t\tpageData.Errors = append(pageData.Errors, customWordsInvalid.Error())\n\t}\n\tif customWordsPerTurnInvalid != nil {\n\t\tpageData.Errors = append(pageData.Errors, customWordsPerTurnInvalid.Error())\n\t} else {\n\t\tif languageRawValue == \"custom\" && len(customWords) == 0 {\n\t\t\tpageData.Errors = append(pageData.Errors, \"custom words must be provided when using custom language\")\n\t\t}\n\t}\n\tif clientsPerIPLimitInvalid != nil {\n\t\tpageData.Errors = append(pageData.Errors, clientsPerIPLimitInvalid.Error())\n\t}\n\tif publicLobbyInvalid != nil {\n\t\tpageData.Errors = append(pageData.Errors, publicLobbyInvalid.Error())\n\t}\n\tif wordsPerTurnInvalid != nil {\n\t\tpageData.Errors = append(pageData.Errors, wordsPerTurnInvalid.Error())\n\t}\n\n\ttranslation, locale := determineTranslation(request)\n\tpageData.Translation = translation\n\tpageData.Locale = locale\n\n\tif len(pageData.Errors) != 0 {\n\t\terr := pageTemplates.ExecuteTemplate(writer, \"index\", pageData)\n\t\tif err != nil {\n\t\t\thttp.Error(writer, err.Error(), http.StatusInternalServerError)\n\t\t}\n\t\treturn\n\t}\n\n\tplayerName := api.GetPlayername(request)\n\n\tvar lobbyId string\n\tdiscordInstanceId := api.GetDiscordInstanceId(request)\n\tif discordInstanceId != \"\" {\n\t\tlobbyId = discordInstanceId\n\t\t// Workaround, since the discord proxy potentially always has the same\n\t\t// IP address, preventing all players from connecting.\n\t\tclientsPerIPLimit = maxPlayers\n\t}\n\n\tlobbySettings := &game.EditableLobbySettings{\n\t\tRounds:             rounds,\n\t\tDrawingTime:        drawingTime,\n\t\tMaxPlayers:         maxPlayers,\n\t\tCustomWordsPerTurn: customWordsPerTurn,\n\t\tClientsPerIPLimit:  clientsPerIPLimit,\n\t\tPublic:             publicLobby,\n\t\tWordsPerTurn:       wordsPerTurn,\n\t}\n\tplayer, lobby, err := game.CreateLobby(lobbyId, playerName, languageKey,\n\t\tlobbySettings, customWords, scoreCalculation)\n\tif err != nil {\n\t\tpageData.Errors = append(pageData.Errors, err.Error())\n\t\tif err := pageTemplates.ExecuteTemplate(writer, \"index\", pageData); err != nil {\n\t\t\thandler.userFacingError(writer, err.Error(), translation)\n\t\t}\n\n\t\treturn\n\t}\n\n\tlobby.WriteObject = api.WriteObject\n\tlobby.WritePreparedMessage = api.WritePreparedMessage\n\tplayer.SetLastKnownAddress(api.GetIPAddressFromRequest(request))\n\tapi.SetGameplayCookies(writer, request, player, lobby)\n\n\t// We only add the lobby if we could do all necessary pre-steps successfully.\n\tstate.AddLobby(lobby)\n\n\t// Workaround for discord activity case not correctly being able to read\n\t// user session, as the cookie isn't being passed.\n\tif discordInstanceId != \"\" {\n\t\thandler.ssrEnterLobbyNoChecks(lobby, writer, request,\n\t\t\tfunc() *game.Player {\n\t\t\t\treturn player\n\t\t\t})\n\t\treturn\n\t}\n\n\thttp.Redirect(writer, request, handler.basePageConfig.RootPath+\"/lobby/\"+lobby.LobbyID, http.StatusFound)\n}\n"
  },
  {
    "path": "internal/frontend/index.js",
    "content": "const discordInstanceId = getCookie(\"discord-instance-id\");\nconst rootPath = `${discordInstanceId ? \".proxy/\" : \"\"}{{.RootPath}}`;\n\nArray.from(document.getElementsByClassName(\"number-input\")).forEach(\n    (number_input) => {\n        const input = number_input.children.item(1);\n        const decrement_button = number_input.children.item(0);\n        decrement_button.addEventListener(\"click\", function () {\n            input.stepDown();\n        });\n        const increment_button = number_input.children.item(2);\n        increment_button.addEventListener(\"click\", function () {\n            input.stepUp();\n        });\n    },\n);\n\n// We'll keep using the ssr endpoint for now. With this listener, we\n// can fake in the form data for \"public\" depending on which button\n// we submitted via. This is a dirty hack, but works for now.\ndocument.getElementById(\"lobby-create\").addEventListener(\"submit\", (event) => {\n    const check_box = document.getElementById(\"public-check-box\");\n    if (event.submitter.id === \"create-public\") {\n        check_box.value = \"true\";\n        check_box.setAttribute(\"checked\", \"\");\n    } else {\n        check_box.value = \"false\";\n        check_box.removeAttribute(\"checked\");\n    }\n\n    return true;\n});\n\nconst lobby_list_placeholder = document.getElementById(\n    \"lobby-list-placeholder-text\",\n);\nconst lobby_list_loading_placeholder = document.getElementById(\n    \"lobby-list-placeholder-loading\",\n);\nconst lobby_list = document.getElementById(\"lobby-list\");\n\nlobby_list_placeholder.innerHTML =\n    '<b>{{.Translation.Get \"no-lobbies-yet\"}}</b>';\n\nconst getLobbies = () => {\n    return new Promise((resolve, reject) => {\n        fetch(`${rootPath}/v1/lobby`)\n            .then((response) => {\n                response.json().then(resolve);\n            })\n            .catch(reject);\n    });\n};\n\nconst set_lobby_list_placeholder = (text, visible) => {\n    if (visible) {\n        lobby_list_placeholder.style.display = \"flex\";\n        lobby_list_placeholder.innerHTML = \"<b>\" + text + \"<b>\";\n    } else {\n        lobby_list_placeholder.style.display = \"none\";\n    }\n};\n\nconst set_lobby_list_loading = (loading) => {\n    if (loading) {\n        set_lobby_list_placeholder(\"\", false);\n        lobby_list_loading_placeholder.style.display = \"flex\";\n    } else {\n        lobby_list_loading_placeholder.style.display = \"none\";\n    }\n};\n\nconst language_to_flag = (language) => {\n    switch (language) {\n        case \"english\":\n            return \"\\u{1f1fa}\\u{1f1f8}\";\n        case \"english_gb\":\n            return \"\\u{1f1ec}\\u{1f1e7}\";\n        case \"german\":\n            return \"\\u{1f1e9}\\u{1f1ea}\";\n        case \"ukrainian\":\n            return \"\\u{1f1fa}\\u{1f1e6}\";\n        case \"russian\":\n            return \"\\u{1f1f7}\\u{1f1fa}\";\n        case \"italian\":\n            return \"\\u{1f1ee}\\u{1f1f9}\";\n        case \"french\":\n            return \"\\u{1f1eb}\\u{1f1f7}\";\n        case \"dutch\":\n            return \"\\u{1f1f3}\\u{1f1f1}\";\n        case \"polish\":\n            return \"\\u{1f1f5}\\u{1f1f1}\";\n        case \"hebrew\":\n            return \"\\u{1f1ee}\\u{1f1f1}\";\n    }\n};\n\nconst set_lobbies = (lobbies, visible) => {\n    const new_lobby_nodes = lobbies.map((lobby) => {\n        const lobby_list_item = document.createElement(\"div\");\n        lobby_list_item.className = \"lobby-list-item\";\n\n        const language_flag = document.createElement(\"span\");\n        language_flag.className = \"language-flag\";\n        language_flag.setAttribute(\"title\", lobby.wordpack);\n        language_flag.setAttribute(\"english\", lobby.wordpack);\n        language_flag.innerText = language_to_flag(lobby.wordpack);\n\n        const lobby_list_rows = document.createElement(\"div\");\n        lobby_list_rows.className = \"lobby-list-rows\";\n\n        const lobby_list_row_a = document.createElement(\"div\");\n        lobby_list_row_a.className = \"lobby-list-row\";\n\n        const new_custom_tag = (text) => {\n            const tag = document.createElement(\"span\");\n            tag.className = \"custom-tag\";\n            tag.innerText = text;\n            return tag;\n        };\n        if (lobby.customWords) {\n            lobby_list_row_a.appendChild(\n                new_custom_tag('{{.Translation.Get \"custom-words\"}}'),\n            );\n        }\n        if (lobby.state === \"ongoing\") {\n            lobby_list_row_a.appendChild(\n                new_custom_tag('{{.Translation.Get \"ongoing\"}}'),\n            );\n        }\n        if (lobby.state === \"gameover\") {\n            lobby_list_row_a.appendChild(\n                new_custom_tag('{{.Translation.Get \"game-over-lobby\"}}'),\n            );\n        }\n\n        if (lobby.scoring === \"chill\") {\n            lobby_list_row_a.appendChild(\n                new_custom_tag('{{.Translation.Get \"chill\"}}'),\n            );\n        } else if (lobby.scoring === \"competitive\") {\n            lobby_list_row_a.appendChild(\n                new_custom_tag('{{.Translation.Get \"competitive\"}}'),\n            );\n        }\n\n        const lobby_list_row_b = document.createElement(\"div\");\n        lobby_list_row_b.className = \"lobby-list-row\";\n\n        const create_info_pair = (icon, text) => {\n            const element = document.createElement(\"div\");\n            element.className = \"lobby-list-item-info-pair\";\n\n            const image = document.createElement(\"img\");\n            image.className = \"lobby-list-item-icon lobby-list-icon-loading\";\n            image.setAttribute(\"loading\", \"lazy\");\n            image.addEventListener(\"load\", function () {\n                image.classList.remove(\"lobby-list-icon-loading\");\n            });\n            image.setAttribute(\"src\", icon);\n\n            const span = document.createElement(\"span\");\n            span.innerText = text;\n\n            element.replaceChildren(image, span);\n            return element;\n        };\n        const user_pair = create_info_pair(\n            `{{.RootPath}}/resources/{{.WithCacheBust \"user.svg\"}}`,\n            `${lobby.playerCount}/${lobby.maxPlayers}`,\n        );\n        const round_pair = create_info_pair(\n            `{{.RootPath}}/resources/{{.WithCacheBust \"round.svg\"}}`,\n            `${lobby.round}/${lobby.rounds}`,\n        );\n        const time_pair = create_info_pair(\n            `{{.RootPath}}/resources/{{.WithCacheBust \"clock.svg\"}}`,\n            `${lobby.drawingTime}`,\n        );\n\n        lobby_list_row_b.replaceChildren(user_pair, round_pair, time_pair);\n\n        lobby_list_rows.replaceChildren(lobby_list_row_a, lobby_list_row_b);\n\n        const join_button = document.createElement(\"button\");\n        join_button.className = \"join-button\";\n        join_button.innerText = '{{.Translation.Get \"join\"}}';\n        join_button.addEventListener(\"click\", (event) => {\n            window.location.href = `{{.RootPath}}/lobby/${lobby.lobbyId}`;\n        });\n\n        lobby_list_item.replaceChildren(\n            language_flag,\n            lobby_list_rows,\n            join_button,\n        );\n\n        return lobby_list_item;\n    });\n    lobby_list.replaceChildren(...new_lobby_nodes);\n\n    if (lobbies && lobbies.length > 0 && visible) {\n        lobby_list.style.display = \"flex\";\n        set_lobby_list_placeholder(\"\", false);\n    } else {\n        lobby_list.style.display = \"none\";\n        set_lobby_list_placeholder(\n            '{{.Translation.Get \"no-lobbies-yet\"}}',\n            true,\n        );\n    }\n};\n\nconst refresh_lobby_list = () => {\n    set_lobbies([], false);\n    set_lobby_list_loading(true);\n\n    getLobbies()\n        .then((data) => {\n            set_lobbies(data, true);\n        })\n        .catch((err) => {\n            set_lobby_list_placeholder(err, true);\n        })\n        .finally(() => {\n            set_lobby_list_loading(false);\n        });\n};\n\nrefresh_lobby_list();\ndocument\n    .getElementById(\"refresh-lobby-list-button\")\n    .addEventListener(\"click\", refresh_lobby_list);\n\nfunction getCookie(name) {\n    let cookie = {};\n    document.cookie.split(\";\").forEach(function (el) {\n        let split = el.split(\"=\");\n        cookie[split[0].trim()] = split.slice(1).join(\"=\");\n    });\n    return cookie[name];\n}\n\n// Makes sure, that navigating back after creating a lobby also shows it in the list.\nwindow.addEventListener(\"pageshow\", (event) => {\n    if (event.persisted) {\n        refresh_lobby_list();\n    }\n});\n"
  },
  {
    "path": "internal/frontend/lobby.go",
    "content": "package frontend\n\nimport (\n\t\"log\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/scribble-rs/scribble.rs/internal/api\"\n\t\"github.com/scribble-rs/scribble.rs/internal/game\"\n\t\"github.com/scribble-rs/scribble.rs/internal/state\"\n\t\"github.com/scribble-rs/scribble.rs/internal/translations\"\n\t\"golang.org/x/text/language\"\n)\n\ntype lobbyPageData struct {\n\t*BasePageConfig\n\t*api.LobbyData\n\n\tTranslation *translations.Translation\n\tLocale      string\n}\n\ntype lobbyJsData struct {\n\t*BasePageConfig\n\t*api.GameConstants\n\n\tTranslation *translations.Translation\n\tLocale      string\n}\n\nfunc (handler *SSRHandler) lobbyJs(writer http.ResponseWriter, request *http.Request) {\n\ttranslation, locale := determineTranslation(request)\n\tpageData := &lobbyJsData{\n\t\tBasePageConfig: handler.basePageConfig,\n\t\tGameConstants:  api.GameConstantsData,\n\t\tTranslation:    translation,\n\t\tLocale:         locale,\n\t}\n\n\twriter.Header().Set(\"Content-Type\", \"text/javascript\")\n\t// Duration of 1 year, since we use cachebusting anyway.\n\twriter.Header().Set(\"Cache-Control\", \"public, max-age=31536000\")\n\twriter.WriteHeader(http.StatusOK)\n\tif err := handler.lobbyJsRawTemplate.ExecuteTemplate(writer, \"lobby-js\", pageData); err != nil {\n\t\tlog.Printf(\"error templating JS: %s\\n\", err)\n\t}\n}\n\n// ssrEnterLobby opens a lobby, either opening it directly or asking for a lobby.\nfunc (handler *SSRHandler) ssrEnterLobby(writer http.ResponseWriter, request *http.Request) {\n\ttranslation, _ := determineTranslation(request)\n\tlobby := state.GetLobby(request.PathValue(\"lobby_id\"))\n\tif lobby == nil {\n\t\thandler.userFacingError(writer, translation.Get(\"lobby-doesnt-exist\"), translation)\n\t\treturn\n\t}\n\n\tuserAgent := strings.ToLower(request.UserAgent())\n\tif !isHumanAgent(userAgent) {\n\t\twriter.WriteHeader(http.StatusForbidden)\n\t\thandler.userFacingError(writer, translation.Get(\"forbidden\"), translation)\n\t\treturn\n\t}\n\n\thandler.ssrEnterLobbyNoChecks(lobby, writer, request,\n\t\tfunc() *game.Player {\n\t\t\treturn api.GetPlayer(lobby, request)\n\t\t})\n}\n\nfunc (handler *SSRHandler) ssrEnterLobbyNoChecks(\n\tlobby *game.Lobby,\n\twriter http.ResponseWriter,\n\trequest *http.Request,\n\tgetPlayer func() *game.Player,\n) {\n\ttranslation, locale := determineTranslation(request)\n\trequestAddress := api.GetIPAddressFromRequest(request)\n\tapi.SetDiscordCookies(writer, request)\n\n\tvar pageData *lobbyPageData\n\tlobby.Synchronized(func() {\n\t\tplayer := getPlayer()\n\n\t\tif player == nil {\n\t\t\tif !lobby.HasFreePlayerSlot() {\n\t\t\t\thandler.userFacingError(writer, translation.Get(\"lobby-full\"), translation)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif !lobby.CanIPConnect(requestAddress) {\n\t\t\t\thandler.userFacingError(writer, translation.Get(\"lobby-ip-limit-excceeded\"), translation)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tnewPlayer := lobby.JoinPlayer(api.GetPlayername(request))\n\n\t\t\tnewPlayer.SetLastKnownAddress(requestAddress)\n\t\t\tapi.SetGameplayCookies(writer, request, newPlayer, lobby)\n\t\t} else {\n\t\t\tif player.Connected && player.GetWebsocket() != nil {\n\t\t\t\thandler.userFacingError(writer, translation.Get(\"lobby-open-tab-exists\"), translation)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tplayer.SetLastKnownAddress(requestAddress)\n\t\t\tapi.SetGameplayCookies(writer, request, player, lobby)\n\t\t}\n\n\t\tpageData = &lobbyPageData{\n\t\t\tBasePageConfig: handler.basePageConfig,\n\t\t\tLobbyData:      api.CreateLobbyData(handler.cfg, lobby),\n\t\t\tTranslation:    translation,\n\t\t\tLocale:         locale,\n\t\t}\n\t})\n\n\t// If the pagedata isn't initialized, it means the synchronized block has exited.\n\t// In this case we don't want to template the lobby, since an error has occurred\n\t// and probably already has been handled.\n\tif pageData != nil {\n\t\tif err := pageTemplates.ExecuteTemplate(writer, \"lobby-page\", pageData); err != nil {\n\t\t\tlog.Printf(\"Error templating lobby: %s\\n\", err)\n\t\t}\n\t}\n}\n\nfunc determineTranslation(r *http.Request) (*translations.Translation, string) {\n\tlanguageTags, _, err := language.ParseAcceptLanguage(r.Header.Get(\"Accept-Language\"))\n\tif err == nil {\n\t\tfor _, languageTag := range languageTags {\n\t\t\tfullLanguageIdentifier := languageTag.String()\n\t\t\tfullLanguageIdentifierLowercased := strings.ToLower(fullLanguageIdentifier)\n\t\t\ttranslation := translations.GetLanguage(fullLanguageIdentifierLowercased)\n\t\t\tif translation != nil {\n\t\t\t\treturn translation, fullLanguageIdentifierLowercased\n\t\t\t}\n\n\t\t\tbaseLanguageIdentifier, _ := languageTag.Base()\n\t\t\tbaseLanguageIdentifierLowercased := strings.ToLower(baseLanguageIdentifier.String())\n\t\t\ttranslation = translations.GetLanguage(baseLanguageIdentifierLowercased)\n\t\t\tif translation != nil {\n\t\t\t\treturn translation, baseLanguageIdentifierLowercased\n\t\t\t}\n\t\t}\n\t}\n\n\treturn translations.DefaultTranslation, \"en-us\"\n}\n"
  },
  {
    "path": "internal/frontend/lobby.js",
    "content": "String.prototype.format = function () {\n    return [...arguments].reduce((p, c) => p.replace(/%s/, c), this);\n};\n\nconst discordInstanceId = getCookie(\"discord-instance-id\");\nconst rootPath = `${discordInstanceId ? \".proxy/\" : \"\"}{{.RootPath}}`;\n\nlet socketIsConnecting = false;\nlet hasSocketEverConnected = false;\nlet socket;\n\nconst reconnectDialogId = \"reconnect-dialog\";\nfunction showReconnectDialogIfNotShown() {\n    const previousReconnectDialog = document.getElementById(reconnectDialogId);\n\n    //Since the content is constant, there's no need to ever show two.\n    if (\n        previousReconnectDialog === undefined ||\n        previousReconnectDialog === null\n    ) {\n        showTextDialog(\n            reconnectDialogId,\n            '{{.Translation.Get \"connection-lost\"}}',\n            `{{.Translation.Get \"connection-lost-text\"}}`,\n        );\n    }\n}\n\n//Makes sure that the server notices that the player disconnects.\n//Otherwise a refresh (on chromium based browsers) can lead to the server\n//thinking that there's already an open tab with this lobby.\nwindow.onbeforeunload = () => {\n    //Avoid unintentionally reestablishing connection.\n    socket.onclose = null;\n    if (socket) {\n        socket.close();\n    }\n};\n\nconst messageInput = document.getElementById(\"message-input\");\nconst playerContainer = document.getElementById(\"player-container\");\nconst wordContainer = document.getElementById(\"word-container\");\nconst chat = document.getElementById(\"chat\");\nconst messageContainer = document.getElementById(\"message-container\");\nconst roundSpan = document.getElementById(\"rounds\");\nconst maxRoundSpan = document.getElementById(\"max-rounds\");\nconst timeLeftValue = document.getElementById(\"time-left-value\");\nconst drawingBoard = document.getElementById(\"drawing-board\");\n\nconst centerDialogs = document.getElementById(\"center-dialogs\");\n\nconst waitChooseDialog = document.getElementById(\"waitchoose-dialog\");\nconst waitChooseDrawerSpan = document.getElementById(\"waitchoose-drawer\");\nconst namechangeDialog = document.getElementById(\"namechange-dialog\");\nconst namechangeFieldStartDialog = document.getElementById(\n    \"namechange-field-start-dialog\",\n);\nconst namechangeField = document.getElementById(\"namechange-field\");\n\nconst lobbySettingsButton = document.getElementById(\"lobby-settings-button\");\nconst lobbySettingsDialog = document.getElementById(\"lobbysettings-dialog\");\n\nconst startDialog = document.getElementById(\"start-dialog\");\nconst forceStartButton = document.getElementById(\"force-start-button\");\nconst gameOverDialog = document.getElementById(\"game-over-dialog\");\nconst gameOverDialogTitle = document.getElementById(\"game-over-dialog-title\");\nconst gameOverScoreboard = document.getElementById(\"game-over-scoreboard\");\nconst forceRestartButton = document.getElementById(\"force-restart-button\");\nconst wordDialog = document.getElementById(\"word-dialog\");\nconst wordPreSelected = document.getElementById(\"word-preselected\");\nconst wordButtonContainer = document.getElementById(\"word-button-container\");\n\nconst kickDialog = document.getElementById(\"kick-dialog\");\nconst kickDialogPlayers = document.getElementById(\"kick-dialog-players\");\n\nconst soundToggleLabel = document.getElementById(\"sound-toggle-label\");\nlet sound = localStorage.getItem(\"sound\") !== \"false\";\nupdateSoundIcon();\n\nconst penToggleLabel = document.getElementById(\"pen-pressure-toggle-label\");\nlet penPressure = localStorage.getItem(\"penPressure\") !== \"false\";\nupdateTogglePenIcon();\n\nfunction showTextDialog(id, title, message) {\n    const messageNode = document.createElement(\"span\");\n    messageNode.innerText = message;\n    showDialog(id, title, messageNode);\n}\n\nconst menu = document.getElementById(\"menu\");\nfunction hideMenu() {\n    menu.hidePopover();\n}\n\nfunction showDialog(id, title, contentNode, buttonBar) {\n    hideMenu();\n\n    const newDialog = document.createElement(\"div\");\n    newDialog.classList.add(\"center-dialog\");\n    if (id && id !== \"\") {\n        newDialog.id = id;\n    }\n\n    const dialogTitle = document.createElement(\"span\");\n    dialogTitle.classList.add(\"dialog-title\");\n    dialogTitle.innerText = title;\n    newDialog.appendChild(dialogTitle);\n\n    const dialogContent = document.createElement(\"div\");\n    dialogContent.classList.add(\"center-dialog-content\");\n    dialogContent.appendChild(contentNode);\n    newDialog.appendChild(dialogContent);\n\n    if (buttonBar !== null && buttonBar !== undefined) {\n        newDialog.appendChild(buttonBar);\n    }\n\n    newDialog.style.visibility = \"visible\";\n    centerDialogs.appendChild(newDialog);\n}\n\n// Shows an information dialog with a button that closes the dialog and\n// removes it from the DOM.\nfunction showInfoDialog(title, message, buttonText) {\n    const dialogId = \"info_dialog\";\n    closeDialog(dialogId);\n\n    const closeButton = createDialogButton(buttonText);\n    closeButton.addEventListener(\"click\", () => {\n        closeDialog(dialogId);\n    });\n\n    const messageNode = document.createElement(\"span\");\n    messageNode.innerText = message;\n\n    showDialog(\n        dialogId,\n        title,\n        messageNode,\n        createDialogButtonBar(closeButton),\n    );\n}\n\nfunction createDialogButton(text) {\n    const button = document.createElement(\"button\");\n    button.innerText = text;\n    button.classList.add(\"dialog-button\");\n    return button;\n}\n\nfunction createDialogButtonBar(...buttons) {\n    const buttonBar = document.createElement(\"div\");\n    buttonBar.classList.add(\"button-bar\");\n    buttons.forEach(buttonBar.appendChild);\n    return buttonBar;\n}\n\nfunction closeDialog(id) {\n    const dialog = document.getElementById(id);\n    if (dialog !== undefined && dialog !== null) {\n        const parent = dialog.parentElement;\n        if (parent !== undefined && parent !== null) {\n            parent.removeChild(dialog);\n        }\n    }\n}\n\nconst helpDialogId = \"help-dialog\";\nfunction showHelpDialog() {\n    closeDialog(helpDialogId);\n    const controlsLabel = document.createElement(\"b\");\n    controlsLabel.innerText = '{{.Translation.Get \"controls\"}}';\n\n    const controlsTextOne = document.createElement(\"p\");\n    controlsTextOne.innerText = '{{.Translation.Get \"switch-tools-intro\"}}:';\n\n    const controlsTextTwo = document.createElement(\"p\");\n    controlsTextTwo.innerHTML =\n        '{{.Translation.Get \"pencil\"}}: <kbd>Q</kbd><br/>' +\n        '{{.Translation.Get \"fill-bucket\"}}: <kbd>W</kbd><br/>' +\n        '{{.Translation.Get \"eraser\"}}: <kbd>E</kbd><br/>';\n\n    const controlsTextThree = document.createElement(\"p\");\n    controlsTextThree.innerHTML =\n        '{{printf (.Translation.Get \"switch-pencil-sizes\") \"<kbd>1</kbd>\" \"<kbd>4</kbd>\"}}';\n\n    const closeButton = createDialogButton('{{.Translation.Get \"close\"}}');\n    closeButton.addEventListener(\"click\", () => {\n        closeDialog(helpDialogId);\n    });\n\n    const footer = document.createElement(\"div\");\n    footer.className = \"help-footer\";\n    footer.innerHTML = `{{template \"footer\" . }}`;\n\n    const buttonBar = createDialogButtonBar(closeButton);\n\n    const dialogContent = document.createElement(\"div\");\n    dialogContent.appendChild(controlsLabel);\n    dialogContent.appendChild(controlsTextOne);\n    dialogContent.appendChild(controlsTextTwo);\n    dialogContent.appendChild(controlsTextThree);\n    dialogContent.appendChild(footer);\n\n    showDialog(\n        helpDialogId,\n        '{{.Translation.Get \"help\"}}',\n        dialogContent,\n        buttonBar,\n    );\n}\ndocument\n    .getElementById(\"help-button\")\n    .addEventListener(\"click\", showHelpDialog);\n\nfunction showKickDialog() {\n    hideMenu();\n\n    if (cachedPlayers && cachedPlayers) {\n        kickDialogPlayers.innerHTML = \"\";\n\n        cachedPlayers.forEach((player) => {\n            //Don't wanna allow kicking ourselves.\n            if (player.id !== ownID && player.connected) {\n                const playerKickEntry = document.createElement(\"button\");\n                playerKickEntry.classList.add(\"kick-player-button\");\n                playerKickEntry.classList.add(\"dialog-button\");\n                playerKickEntry.onclick = () => onVotekickPlayer(player.id);\n                playerKickEntry.innerText = player.name;\n                kickDialogPlayers.appendChild(playerKickEntry);\n            }\n        });\n\n        kickDialog.style.visibility = \"visible\";\n    }\n}\ndocument\n    .getElementById(\"kick-button\")\n    .addEventListener(\"click\", showKickDialog);\n\nfunction hideKickDialog() {\n    kickDialog.style.visibility = \"hidden\";\n}\ndocument\n    .getElementById(\"kick-close-button\")\n    .addEventListener(\"click\", hideKickDialog);\n\nfunction showNameChangeDialog() {\n    hideMenu();\n\n    namechangeDialog.style.visibility = \"visible\";\n    namechangeField.focus();\n}\ndocument\n    .getElementById(\"name-change-button\")\n    .addEventListener(\"click\", showNameChangeDialog);\n\nfunction hideNameChangeDialog() {\n    namechangeDialog.style.visibility = \"hidden\";\n}\ndocument\n    .getElementById(\"namechange-close-button\")\n    .addEventListener(\"click\", hideNameChangeDialog);\n\nfunction changeName(name) {\n    //Avoid unnecessary traffic.\n    if (name !== ownName) {\n        socket.send(\n            JSON.stringify({\n                type: \"name-change\",\n                data: name,\n            }),\n        );\n    }\n}\ndocument\n    .getElementById(\"namechange-button-start-dialog\")\n    .addEventListener(\"click\", () => {\n        changeName(\n            document.getElementById(\"namechange-field-start-dialog\").value,\n        );\n    });\ndocument.getElementById(\"namechange-button\").addEventListener(\"click\", () => {\n    changeName(document.getElementById(\"namechange-field\").value);\n    hideNameChangeDialog();\n});\n\nfunction setUsernameLocally(name) {\n    ownName = name;\n    namechangeFieldStartDialog.value = name;\n    namechangeField.value = name;\n}\n\nfunction toggleFullscreen() {\n    if (document.fullscreenElement !== null) {\n        document.exitFullscreen();\n    } else {\n        document.body.requestFullscreen();\n    }\n}\ndocument\n    .getElementById(\"toggle-fullscreen-button\")\n    .addEventListener(\"click\", toggleFullscreen);\n\nfunction showLobbySettingsDialog() {\n    hideMenu();\n    lobbySettingsDialog.style.visibility = \"visible\";\n}\nlobbySettingsButton.addEventListener(\"click\", showLobbySettingsDialog);\n\nfunction hideLobbySettingsDialog() {\n    lobbySettingsDialog.style.visibility = \"hidden\";\n}\ndocument\n    .getElementById(\"lobby-settings-close-button\")\n    .addEventListener(\"click\", hideLobbySettingsDialog);\n\nfunction saveLobbySettings() {\n    fetch(\n        `${rootPath}/v1/lobby?` +\n            new URLSearchParams({\n                drawing_time: document.getElementById(\n                    \"lobby-settings-drawing-time\",\n                ).value,\n                rounds: document.getElementById(\"lobby-settings-max-rounds\")\n                    .value,\n                public: document.getElementById(\"lobby-settings-public\")\n                    .checked,\n                max_players: document.getElementById(\n                    \"lobby-settings-max-players\",\n                ).value,\n                clients_per_ip_limit: document.getElementById(\n                    \"lobby-settings-clients-per-ip-limit\",\n                ).value,\n                custom_words_per_turn: document.getElementById(\n                    \"lobby-settings-custom-words-per-turn\",\n                ).value,\n                words_per_turn: document.getElementById(\n                    \"lobby-settings-words-per-turn\",\n                ).value,\n            }),\n        {\n            method: \"PATCH\",\n        },\n    ).then((result) => {\n        if (result.status === 200) {\n            hideLobbySettingsDialog();\n        } else {\n            result.text().then((bodyText) => {\n                alert(\n                    \"Error saving lobby settings: \\n\\n - \" +\n                        bodyText.replace(\";\", \"\\n - \"),\n                );\n            });\n        }\n    });\n}\ndocument\n    .getElementById(\"lobby-settings-save-button\")\n    .addEventListener(\"click\", saveLobbySettings);\n\nfunction toggleSound() {\n    sound = !sound;\n    localStorage.setItem(\"sound\", sound.toString());\n    updateSoundIcon();\n}\ndocument\n    .getElementById(\"toggle-sound-button\")\n    .addEventListener(\"click\", toggleSound);\n\nfunction updateSoundIcon() {\n    if (sound) {\n        soundToggleLabel.src = `{{.RootPath}}/resources/{{.WithCacheBust \"sound.svg\"}}`;\n    } else {\n        soundToggleLabel.src = `{{.RootPath}}/resources/{{.WithCacheBust \"no-sound.svg\"}}`;\n    }\n}\n\nfunction togglePenPressure() {\n    penPressure = !penPressure;\n    localStorage.setItem(\"penPressure\", penPressure.toString());\n    updateTogglePenIcon();\n}\ndocument\n    .getElementById(\"toggle-pen-pressure-button\")\n    .addEventListener(\"click\", togglePenPressure);\n\nfunction updateTogglePenIcon() {\n    if (penPressure) {\n        penToggleLabel.src = `{{.RootPath}}/resources/{{.WithCacheBust \"pen.svg\"}}`;\n    } else {\n        penToggleLabel.src = `{{.RootPath}}/resources/{{.WithCacheBust \"no-pen.svg\"}}`;\n    }\n}\n\n//The drawing board has a base size. This base size results in a certain ratio\n//that the actual canvas has to be resized accordingly too. This is needed\n//since not every client has the same screensize.\nconst baseWidth = 1600;\nconst baseHeight = 900;\nconst boardRatio = baseWidth / baseHeight;\n\n// Moving this here to extract the context after resizing\nconst context = drawingBoard.getContext(\"2d\", { alpha: false });\n\n// One might one wonder what the fuck is going here. I'll enlighten you!\n// The data you put into a canvas, might not necessarily be what comes out\n// of it again. Some browser (*cough* firefox *cough*) seem to put little\n// off by one / two errors into the data, when reading it back out.\n// Apparently this helps against some type of fingerprinting. In order to\n// combat this, we do not use the canvas as a source of truth, but\n// permanently hold a virtual canvas buffer that we can operate on when\n// filling or drawing.\nlet imageData;\n\nfunction scaleUpFactor() {\n    return baseWidth / drawingBoard.clientWidth;\n}\n\n// Will convert the value to the server coordinate space.\n// The canvas locally can be bigger or smaller. Depending on the base\n// values and the local values, we'll either have a value slightly\n// higher or lower than 1.0. Since we draw on a virtual canvas, we have\n// to use the server coordinate space, which then gets scaled by the\n// canvas API of the browser, as we have a different clientWidth than\n// width and clientHeight than height.\nfunction convertToServerCoordinate(value) {\n    return Math.round(parseFloat(scaleUpFactor() * value));\n}\n\nconst pen = 0;\nconst rubber = 1;\nconst fillBucket = 2;\n\nlet allowDrawing = false;\nlet spectating = false;\nlet spectateRequested = false;\n\n//Initially, we require some values to avoid running into nullpointers\n//or undefined errors. The specific values don't really matter.\nlet localTool = pen;\nlet localLineWidth = 8;\n\n//Those are not scaled for now, as the whole toolbar would then have to incorrectly size up and down.\nconst sizeButton8 = document.getElementById(\"size-8-button\");\nconst sizeButton16 = document.getElementById(\"size-16-button\");\nconst sizeButton24 = document.getElementById(\"size-24-button\");\nconst sizeButton32 = document.getElementById(\"size-32-button\");\nconst sizeButtons = document.getElementById(\"size-buttons\");\n\nconst toolButtonPen = document.getElementById(\"tool-type-pencil\");\nconst toolButtonRubber = document.getElementById(\"tool-type-rubber\");\nconst toolButtonFill = document.getElementById(\"tool-type-fill\");\n\nif (sizeButton8.checked) {\n    setLineWidthNoUpdate(8);\n} else if (sizeButton16.checked) {\n    setLineWidthNoUpdate(16);\n} else if (sizeButton24.checked) {\n    setLineWidthNoUpdate(24);\n} else if (sizeButton32.checked) {\n    setLineWidthNoUpdate(32);\n}\n\nif (toolButtonPen.checked) {\n    chooseToolNoUpdate(pen);\n} else if (toolButtonFill.checked) {\n    chooseToolNoUpdate(fillBucket);\n} else if (toolButtonRubber.checked) {\n    chooseToolNoUpdate(rubber);\n}\n\nlet localColor, localColorIndex;\n\nfunction setColor(index) {\n    setColorNoUpdate(index);\n\n    // If we select a new color, we assume we don't want to use the\n    // rubber anymore and automatically switch to the pen.\n    if (localTool === rubber) {\n        // Clicking the button programmatically won't trigger its\n        toolButtonPen.click();\n\n        // updateDrawingStateUI is implicit\n        chooseTool(pen);\n    } else {\n        updateDrawingStateUI();\n    }\n}\n\nconst firstColorButtonRow = document.getElementById(\"first-color-button-row\");\nconst secondColorButtonRow = document.getElementById(\"second-color-button-row\");\nfor (let i = 0; i < firstColorButtonRow.children.length; i++) {\n    const _setColor = () => setColor(i);\n    firstColorButtonRow.children[i].addEventListener(\"mousedown\", _setColor);\n    firstColorButtonRow.children[i].addEventListener(\"click\", _setColor);\n}\nfor (let i = 0; i < secondColorButtonRow.children.length; i++) {\n    const _setColor = () => setColor(i + 13);\n    secondColorButtonRow.children[i].addEventListener(\"mousedown\", _setColor);\n    secondColorButtonRow.children[i].addEventListener(\"click\", _setColor);\n}\n\nfunction setColorNoUpdate(index) {\n    localColorIndex = index;\n    localColor = indexToRgbColor(index);\n    sessionStorage.setItem(\"local_color\", JSON.stringify(index));\n}\n\nsetColorNoUpdate(\n    JSON.parse(sessionStorage.getItem(\"local_color\")) ?? 13 /* black*/,\n);\nupdateDrawingStateUI();\n\nfunction setLineWidth(value) {\n    setLineWidthNoUpdate(value);\n    updateDrawingStateUI();\n}\nsizeButton8.addEventListener(\"change\", () => setLineWidth(8));\ndocument\n    .getElementById(\"size-8-button-wrapper\")\n    .addEventListener(\"mouseup\", sizeButton8.click);\ndocument\n    .getElementById(\"size-8-button-wrapper\")\n    .addEventListener(\"mousedown\", sizeButton8.click);\nsizeButton16.addEventListener(\"change\", () => setLineWidth(16));\ndocument\n    .getElementById(\"size-16-button-wrapper\")\n    .addEventListener(\"mouseup\", sizeButton16.click);\ndocument\n    .getElementById(\"size-16-button-wrapper\")\n    .addEventListener(\"mousedown\", sizeButton16.click);\nsizeButton24.addEventListener(\"change\", () => setLineWidth(24));\ndocument\n    .getElementById(\"size-24-button-wrapper\")\n    .addEventListener(\"mouseup\", sizeButton24.click);\ndocument\n    .getElementById(\"size-24-button-wrapper\")\n    .addEventListener(\"mousedown\", sizeButton24.click);\nsizeButton32.addEventListener(\"change\", () => setLineWidth(32));\ndocument\n    .getElementById(\"size-32-button-wrapper\")\n    .addEventListener(\"mouseup\", sizeButton32.click);\ndocument\n    .getElementById(\"size-32-button-wrapper\")\n    .addEventListener(\"mousedown\", sizeButton32.click);\n\nfunction setLineWidthNoUpdate(value) {\n    localLineWidth = value;\n}\n\nfunction chooseTool(value) {\n    chooseToolNoUpdate(value);\n    updateDrawingStateUI();\n}\ntoolButtonFill.addEventListener(\"change\", () => chooseTool(fillBucket));\ntoolButtonPen.addEventListener(\"change\", () => chooseTool(pen));\ntoolButtonRubber.addEventListener(\"change\", () => chooseTool(rubber));\ndocument\n    .getElementById(\"tool-type-fill-wrapper\")\n    .addEventListener(\"mouseup\", toolButtonFill.click);\ndocument\n    .getElementById(\"tool-type-pencil-wrapper\")\n    .addEventListener(\"mouseup\", toolButtonPen.click);\ndocument\n    .getElementById(\"tool-type-rubber-wrapper\")\n    .addEventListener(\"mouseup\", toolButtonRubber.click);\ndocument\n    .getElementById(\"tool-type-fill-wrapper\")\n    .addEventListener(\"mousedown\", toolButtonFill.click);\ndocument\n    .getElementById(\"tool-type-pencil-wrapper\")\n    .addEventListener(\"mousedown\", toolButtonPen.click);\ndocument\n    .getElementById(\"tool-type-rubber-wrapper\")\n    .addEventListener(\"mousedown\", toolButtonRubber.click);\n\nfunction chooseToolNoUpdate(value) {\n    if (value === pen || value === rubber || value === fillBucket) {\n        localTool = value;\n    } else {\n        //If this ends up with an invalid value, we use the pencil.\n        localTool = pen;\n    }\n}\n\nfunction rgbColorObjectToHexString(color) {\n    return (\n        \"#\" +\n        numberTo16BitHexadecimal(color.r) +\n        numberTo16BitHexadecimal(color.g) +\n        numberTo16BitHexadecimal(color.b)\n    );\n}\n\nfunction numberTo16BitHexadecimal(number) {\n    return Number(number).toString(16).padStart(2, \"0\");\n}\n\nconst rubberColor = { r: 255, g: 255, b: 255 };\n\nfunction updateDrawingStateUI() {\n    // Color all buttons, so the player always has a hint as to what the\n    // active color is, since the cursor might not always be visible.\n    sizeButtons.style.setProperty(\n        \"--dot-color\",\n        rgbColorObjectToHexString(localColor),\n    );\n\n    updateCursor();\n}\n\nfunction updateCursor() {\n    if (allowDrawing) {\n        if (localTool === rubber) {\n            setCircleCursor(rubberColor, localLineWidth);\n        } else if (localTool === fillBucket) {\n            const outerColor = getComplementaryCursorColor(localColor);\n            drawingBoard.style.cursor =\n                `url('data:image/svg+xml;utf8,` +\n                encodeURIComponent(\n                    `<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" height=\"32\" width=\"32\">` +\n                        generateSVGCircle(8, localColor, outerColor) +\n                        //This has been taken from fill.svg\n                        `\n                                <svg viewBox=\"0 0 64 64\" x=\"8\" y=\"8\" height=\"24\" width=\"24\">\n                                    <path\n                                        d=\"m 59.575359,58.158246 c 0,1.701889 -1.542545,3.094345 -3.427877,3.094345 H 8.1572059 c -1.8853322,0 -3.4278772,-1.392456 -3.4278772,-3.094345 V 5.5543863 c 0,-1.7018892 1.542545,-3.0943445 3.4278772,-3.0943445 H 56.147482 c 1.885332,0 3.427877,1.3924553 3.427877,3.0943445 z\"\n                                        id=\"path8\"\n                                        style=\"stroke-width:1.62842;fill:#b3b3b3\" />\n                                    <path\n                                        d=\"M 56.147482,2.4600418 H 8.1572059 c -1.8853322,0 -3.4278772,1.3152251 -3.4278772,2.9227219 V 14.15093 c 0,1.607497 0,0 0,0 l 26.5660453,2.922722 c 0.685576,0 2.570908,0.584545 2.570908,1.89977 0,0 0,1.899769 0,2.484313 0,1.169089 1.199758,2.192042 2.570908,2.192042 1.371151,0 2.570908,-1.022953 2.570908,-2.192042 0,-1.169089 1.199756,-2.192041 2.570908,-2.192041 1.37115,0 2.570907,1.022952 2.570907,2.192041 v 19.728374 c 0,1.169089 1.199757,2.192042 2.570908,2.192042 1.37115,0 2.570907,-1.022953 2.570907,-2.192042 V 25.841818 c 0,-1.169088 1.199758,-2.192041 2.570908,-2.192041 1.371151,0 2.570908,1.022953 2.570908,2.192041 v 3.653404 c 0,1.169088 1.199756,2.192041 2.570907,2.192041 1.371151,0 2.570908,-1.022953 2.570908,-2.192041 V 5.3827637 c 0,-1.6074968 -1.542545,-2.9227219 -3.427877,-2.9227219 z\"\n                                        id=\"path12\"\n                                        style=\"stroke-width:1.58262;fill:#C75C5C\" />\n                                    <path\n                                        d=\"m 60.432329,6.1134441 c 0,13.2983859 -12.683145,24.1124579 -28.279986,24.1124579 -15.596839,0 -28.2799836,-10.814072 -28.2799836,-24.1124579\"\n                                        id=\"path18\"\n                                        style=\"fill:none;stroke:#4F5D73;stroke-width:2;stroke-linecap:round;stroke-miterlimit:10\" />\n                                </svg>\n                            </svg>`,\n                ) +\n                `') 4 4, auto`;\n        } else {\n            setCircleCursor(localColor, localLineWidth);\n        }\n    } else {\n        drawingBoard.style.cursor = \"not-allowed\";\n    }\n}\n\nfunction getComplementaryCursorColor(innerColor) {\n    const hsp = Math.sqrt(\n        0.299 * (innerColor.r * innerColor.r) +\n            0.587 * (innerColor.g * innerColor.g) +\n            0.114 * (innerColor.b * innerColor.b),\n    );\n\n    if (hsp > 127.5) {\n        return { r: 0, g: 0, b: 0 };\n    }\n\n    return { r: 255, g: 255, b: 255 };\n}\n\nfunction setCircleCursor(innerColor, size) {\n    const outerColor = getComplementaryCursorColor(innerColor);\n    const circleSize = size;\n    drawingBoard.style.cursor =\n        `url('data:image/svg+xml;utf8,` +\n        encodeURIComponent(\n            `<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"32\" height=\"32\">` +\n                generateSVGCircle(circleSize, innerColor, outerColor) +\n                `</svg>')`,\n        ) +\n        ` ` +\n        circleSize / 2 +\n        ` ` +\n        circleSize / 2 +\n        `, auto`;\n}\n\nfunction generateSVGCircle(circleSize, innerColor, outerColor) {\n    const circleRadius = circleSize / 2;\n    const innerColorCSS =\n        \"rgb(\" + innerColor.r + \",\" + innerColor.g + \",\" + innerColor.b + \")\";\n    const outerColorCSS =\n        \"rgb(\" + outerColor.r + \",\" + outerColor.g + \",\" + outerColor.b + \")\";\n    return (\n        `<circle cx=\"` +\n        circleRadius +\n        `\" cy=\"` +\n        circleRadius +\n        `\" r=\"` +\n        circleRadius +\n        `\" style=\"fill: ` +\n        innerColorCSS +\n        `; stroke: ` +\n        outerColorCSS +\n        `;\"/>`\n    );\n}\n\nfunction toggleSpectate() {\n    socket.send(\n        JSON.stringify({\n            type: \"toggle-spectate\",\n        }),\n    );\n}\ndocument\n    .getElementById(\"toggle-spectate-button\")\n    .addEventListener(\"click\", toggleSpectate);\n\nfunction setSpectateMode(requestedValue, spectatingValue) {\n    const modeUnchanged = spectatingValue === spectating;\n    const requestUnchanged = requestedValue === spectateRequested;\n    if (modeUnchanged && requestUnchanged) {\n        return;\n    }\n\n    if (spectateRequested && !requestedValue && modeUnchanged) {\n        showInfoDialog(\n            `{{.Translation.Get \"spectation-request-cancelled-title\"}}`,\n            `{{.Translation.Get \"spectation-request-cancelled-text\"}}`,\n            `{{.Translation.Get \"confirm\"}}`,\n        );\n    } else if (spectateRequested && !requestedValue && modeUnchanged) {\n        showInfoDialog(\n            `{{.Translation.Get \"participation-request-cancelled-title\"}}`,\n            `{{.Translation.Get \"participation-request-cancelled-text\"}}`,\n            `{{.Translation.Get \"confirm\"}}`,\n        );\n    } else if (!spectateRequested && requestedValue && !spectatingValue) {\n        showInfoDialog(\n            `{{.Translation.Get \"spectation-requested-title\"}}`,\n            `{{.Translation.Get \"spectation-requested-text\"}}`,\n            `{{.Translation.Get \"confirm\"}}`,\n        );\n    } else if (!spectateRequested && requestedValue && spectatingValue) {\n        showInfoDialog(\n            `{{.Translation.Get \"participation-requested-title\"}}`,\n            `{{.Translation.Get \"participation-requested-text\"}}`,\n            `{{.Translation.Get \"confirm\"}}`,\n        );\n    } else if (spectatingValue && !spectating) {\n        showInfoDialog(\n            `{{.Translation.Get \"now-spectating-title\"}}`,\n            `{{.Translation.Get \"now-spectating-text\"}}`,\n            `{{.Translation.Get \"confirm\"}}`,\n        );\n    } else if (!spectatingValue && spectating) {\n        showInfoDialog(\n            `{{.Translation.Get \"now-participating-title\"}}`,\n            `{{.Translation.Get \"now-participating-text\"}}`,\n            `{{.Translation.Get \"confirm\"}}`,\n        );\n    }\n\n    spectateRequested = requestedValue;\n    spectating = spectatingValue;\n}\n\nfunction toggleReadiness() {\n    socket.send(\n        JSON.stringify({\n            type: \"toggle-readiness\",\n        }),\n    );\n}\ndocument\n    .getElementById(\"ready-state-start\")\n    .addEventListener(\"change\", toggleReadiness);\ndocument\n    .getElementById(\"ready-state-game-over\")\n    .addEventListener(\"change\", toggleReadiness);\n\nfunction forceStartGame() {\n    socket.send(\n        JSON.stringify({\n            type: \"start\",\n        }),\n    );\n}\nforceStartButton.addEventListener(\"click\", forceStartGame);\nforceRestartButton.addEventListener(\"click\", forceStartGame);\n\nfunction clearCanvasAndSendEvent() {\n    if (allowDrawing) {\n        //Avoid unnecessary traffic back to us and handle the clear directly.\n        clear(context);\n        socket.send(\n            JSON.stringify({\n                type: \"clear-drawing-board\",\n            }),\n        );\n    }\n}\ndocument\n    .getElementById(\"clear-canvas-button\")\n    .addEventListener(\"click\", clearCanvasAndSendEvent);\n\nfunction undoAndSendEvent() {\n    if (allowDrawing) {\n        socket.send(\n            JSON.stringify({\n                type: \"undo\",\n            }),\n        );\n    }\n}\ndocument\n    .getElementById(\"undo-button\")\n    .addEventListener(\"click\", undoAndSendEvent);\n\n//Used to restore the last message on arrow up.\nlet lastMessage = \"\";\n\nconst encoder = new TextEncoder();\nfunction sendMessage(event) {\n    if (event.key !== \"Enter\") {\n        return;\n    }\n    if (!messageInput.value) {\n        return;\n    }\n\n    // While the backend already checks for message length, we want to\n    // prevent the loss of input and omit the event / clear here.\n    if (encoder.encode(messageInput.value).length > 10000) {\n        appendMessage(\n            \"system-message\",\n            '{{.Translation.Get \"system\"}}',\n            '{{.Translation.Get \"message-too-long\"}}',\n        );\n        //We keep the messageInput content, since it could've been\n        //something important and we don't want the user having to\n        //rewrite it. Instead they can send it via some other means\n        //or shorten it a bit.\n        return;\n    }\n\n    socket.send(\n        JSON.stringify({\n            type: \"message\",\n            data: messageInput.value,\n        }),\n    );\n    lastMessage = messageInput.value;\n    messageInput.value = \"\";\n}\n\nmessageInput.addEventListener(\"keypress\", sendMessage);\nmessageInput.addEventListener(\"keydown\", function (event) {\n    if (event.key === \"ArrowUp\" && messageInput.value.length === 0) {\n        messageInput.value = lastMessage;\n        const length = lastMessage.length;\n        // Postpone selection change onto next event queue loop iteration, as\n        // nothing will happen otherwise.\n        setTimeout(() => {\n            // length+1 is necessary, as the selection wont change if start and\n            // end are the same,\n            messageInput.setSelectionRange(length + 1, length);\n        }, 0);\n    }\n});\n\nfunction setAllowDrawing(value) {\n    allowDrawing = value;\n    updateDrawingStateUI();\n\n    if (allowDrawing) {\n        document.getElementById(\"toolbox\").style.display = \"flex\";\n    } else {\n        document.getElementById(\"toolbox\").style.display = \"none\";\n    }\n}\n\nfunction chooseWord(index) {\n    socket.send(\n        JSON.stringify({\n            type: \"choose-word\",\n            data: index,\n        }),\n    );\n    setAllowDrawing(true);\n    wordDialog.style.visibility = \"hidden\";\n}\n\nfunction onVotekickPlayer(playerId) {\n    socket.send(\n        JSON.stringify({\n            type: \"kick-vote\",\n            data: playerId,\n        }),\n    );\n    hideKickDialog();\n}\n\n//This automatically scrolls down the chat on arrivals of new messages\nnew MutationObserver(\n    () => (messageContainer.scrollTop = messageContainer.scrollHeight),\n).observe(messageContainer, {\n    attributes: false,\n    childList: true,\n    subtree: false,\n});\n\nlet ownID, ownerID, ownName, drawerID, drawerName;\nlet round = 0;\nlet rounds = 0;\nlet roundEndTime = 0;\nlet gameState = \"unstarted\";\nlet drawingTimeSetting = \"∞\";\n\nconst handleEvent = (parsed) => {\n    if (parsed.type === \"ready\") {\n        handleReadyEvent(parsed.data);\n    } else if (parsed.type === \"game-over\") {\n        let ready = parsed.data;\n        if (parsed.data.roundEndReason === \"drawer_disconnected\") {\n            appendMessage(\n                \"system-message\",\n                null,\n                `{{.Translation.Get \"drawer-disconnected\"}}`,\n            );\n        } else if (parsed.data.roundEndReason === \"guessers_disconnected\") {\n            appendMessage(\n                \"system-message\",\n                null,\n                `{{.Translation.Get \"guessers-disconnected\"}}`,\n            );\n        } else {\n            showRoundEndMessage(ready.previousWord);\n        }\n        handleReadyEvent(ready);\n    } else if (parsed.type === \"update-players\") {\n        applyPlayers(parsed.data);\n    } else if (parsed.type === \"name-change\") {\n        const player = getCachedPlayer(parsed.data.playerId);\n        if (player !== null) {\n            player.name = parsed.data.playerName;\n        }\n\n        const playernameSpan = document.getElementById(\n            \"playername-\" + parsed.data.playerId,\n        );\n        if (playernameSpan !== null) {\n            playernameSpan.innerText = parsed.data.playerName;\n        }\n        if (parsed.data.playerId === ownID) {\n            setUsernameLocally(parsed.data.playerName);\n        }\n        if (parsed.data.playerId === drawerID) {\n            waitChooseDrawerSpan.innerText = parsed.data.playerName;\n        }\n    } else if (parsed.type === \"correct-guess\") {\n        playWav('{{.RootPath}}/resources/{{.WithCacheBust \"plop.wav\"}}');\n\n        if (parsed.data === ownID) {\n            appendMessage(\n                \"correct-guess-message\",\n                null,\n                `{{.Translation.Get \"correct-guess\"}}`,\n            );\n        } else {\n            const player = getCachedPlayer(parsed.data);\n            if (player !== null) {\n                appendMessage(\n                    \"correct-guess-message-other-player\",\n                    null,\n                    `{{.Translation.Get \"correct-guess-other-player\"}}`.format(\n                        player.name,\n                    ),\n                );\n            }\n        }\n    } else if (parsed.type === \"close-guess\") {\n        appendMessage(\n            \"close-guess-message\",\n            null,\n            `{{.Translation.Get \"close-guess\"}}`.format(parsed.data),\n        );\n    } else if (parsed.type === \"update-wordhint\") {\n        wordDialog.style.visibility = \"hidden\";\n        waitChooseDialog.style.visibility = \"hidden\";\n        applyWordHints(parsed.data);\n\n        // We don't do this in applyWordHints because that's called in all kinds of places\n        if (parsed.data.some((hint) => hint.character)) {\n            var hints = parsed.data\n                .map((hint) => {\n                    if (hint.character) {\n                        var char = String.fromCharCode(hint.character);\n                        if (char === \" \" || hint.revealed) {\n                            return char;\n                        }\n                    }\n                    return \"_\";\n                })\n                .join(\" \");\n            appendMessage(\n                [\"system-message\", \"hint-chat-message\"],\n                '{{.Translation.Get \"system\"}}',\n                '{{.Translation.Get \"word-hint-revealed\"}}\\n' + hints,\n                { dir: wordContainer.getAttribute(\"dir\") },\n            );\n        }\n    } else if (parsed.type === \"message\") {\n        appendMessage(null, parsed.data.author, parsed.data.content);\n    } else if (parsed.type === \"system-message\") {\n        appendMessage(\n            \"system-message\",\n            '{{.Translation.Get \"system\"}}',\n            parsed.data,\n        );\n    } else if (parsed.type === \"non-guessing-player-message\") {\n        appendMessage(\n            \"non-guessing-player-message\",\n            parsed.data.author,\n            parsed.data.content,\n        );\n    } else if (parsed.type === \"line\") {\n        drawLine(\n            context,\n            imageData,\n            parsed.data.x,\n            parsed.data.y,\n            parsed.data.x2,\n            parsed.data.y2,\n            indexToRgbColor(parsed.data.color),\n            parsed.data.width,\n        );\n    } else if (parsed.type === \"fill\") {\n        if (\n            floodfillUint8ClampedArray(\n                imageData.data,\n                parsed.data.x,\n                parsed.data.y,\n                indexToRgbColor(parsed.data.color),\n                imageData.width,\n                imageData.height,\n            )\n        ) {\n            context.putImageData(imageData, 0, 0);\n        }\n    } else if (parsed.type === \"clear-drawing-board\") {\n        clear(context);\n    } else if (parsed.type === \"word-chosen\") {\n        wordDialog.style.visibility = \"hidden\";\n        waitChooseDialog.style.visibility = \"hidden\";\n        setRoundTimeLeft(parsed.data.timeLeft);\n        applyWordHints(parsed.data.hints);\n        setAllowDrawing(drawerID === ownID);\n    } else if (parsed.type === \"next-turn\") {\n        if (gameState === \"ongoing\") {\n            if (parsed.data.roundEndReason === \"drawer_disconnected\") {\n                appendMessage(\n                    \"system-message\",\n                    null,\n                    `{{.Translation.Get \"drawer-disconnected\"}}`,\n                );\n            } else if (parsed.data.roundEndReason === \"guessers_disconnected\") {\n                appendMessage(\n                    \"system-message\",\n                    null,\n                    `{{.Translation.Get \"guessers-disconnected\"}}`,\n                );\n            } else {\n                showRoundEndMessage(parsed.data.previousWord);\n            }\n        } else {\n            //First turn, the game starts\n            gameState = \"ongoing\";\n        }\n\n        //As soon as a turn starts, the round should be ongoing, so we make\n        //sure that all types of dialogs, that indicate the game isn't\n        //ongoing, are not visible anymore.\n        startDialog.style.visibility = \"hidden\";\n        forceRestartButton.style.display = \"none\";\n        gameOverDialog.style.visibility = \"hidden\";\n\n        //If a player doesn't choose, the dialog will still be up.\n        wordDialog.style.visibility = \"hidden\";\n        playWav('{{.RootPath}}/resources/{{.WithCacheBust \"end-turn.wav\"}}');\n\n        clear(context);\n\n        round = parsed.data.round;\n        updateRoundsDisplay();\n        setRoundTimeLeft(parsed.data.choiceTimeLeft);\n        applyPlayers(parsed.data.players);\n\n        set_dummy_word_hints();\n\n        //Even though we always hide the dialog in the \"your-turn\"\n        //event handling, it will be shortly visible if we it here.\n        if (drawerID !== ownID) {\n            //Show additional dialog, that another user (drawer) is choosing a word\n            waitChooseDrawerSpan.innerText = drawerName;\n            waitChooseDialog.style.visibility = \"visible\";\n        }\n\n        setAllowDrawing(false);\n    } else if (parsed.type === \"your-turn\") {\n        playWav('{{.RootPath}}/resources/{{.WithCacheBust \"your-turn.wav\"}}');\n        //This dialog could potentially stay visible from last\n        //turn, in case nobody has chosen a word.\n        waitChooseDialog.style.visibility = \"hidden\";\n        promptWords(parsed.data);\n    } else if (parsed.type === \"drawing\") {\n        applyDrawData(parsed.data);\n    } else if (parsed.type === \"kick-vote\") {\n        if (\n            parsed.data.playerId === ownID &&\n            parsed.data.voteCount >= parsed.data.requiredVoteCount\n        ) {\n            alert('{{.Translation.Get \"self-kicked\"}}');\n            document.location.href = \"{{.RootPath}}/\";\n        } else {\n            let kickMessage = '{{.Translation.Get \"kick-vote\"}}'.format(\n                parsed.data.voteCount,\n                parsed.data.requiredVoteCount,\n                parsed.data.playerName,\n            );\n            if (parsed.data.voteCount >= parsed.data.requiredVoteCount) {\n                kickMessage += ' {{.Translation.Get \"player-kicked\"}}';\n            }\n            appendMessage(\n                \"system-message\",\n                '{{.Translation.Get \"system\"}}',\n                kickMessage,\n            );\n        }\n    } else if (parsed.type === \"owner-change\") {\n        ownerID = parsed.data.playerId;\n        updateButtonVisibilities();\n        appendMessage(\n            \"system-message\",\n            '{{.Translation.Get \"system\"}}',\n            '{{.Translation.Get \"owner-change\"}}'.format(\n                parsed.data.playerName,\n            ),\n        );\n    } else if (parsed.type === \"drawer-kicked\") {\n        appendMessage(\n            \"system-message\",\n            '{{.Translation.Get \"system\"}}',\n            '{{.Translation.Get \"drawer-kicked\"}}',\n        );\n    } else if (parsed.type === \"lobby-settings-changed\") {\n        rounds = parsed.data.rounds;\n        updateRoundsDisplay();\n        updateButtonVisibilities();\n        appendMessage(\n            \"system-message\",\n            '{{.Translation.Get \"system\"}}',\n            '{{.Translation.Get \"lobby-settings-changed\"}}\\n\\n' +\n                '{{.Translation.Get \"drawing-time-setting\"}}: ' +\n                parsed.data.drawingTime +\n                \"\\n\" +\n                '{{.Translation.Get \"rounds-setting\"}}: ' +\n                parsed.data.rounds +\n                \"\\n\" +\n                '{{.Translation.Get \"public-lobby-setting\"}}: ' +\n                parsed.data.public +\n                \"\\n\" +\n                '{{.Translation.Get \"max-players-setting\"}}: ' +\n                parsed.data.maxPlayers +\n                \"\\n\" +\n                '{{.Translation.Get \"custom-words-per-turn-setting\"}}: ' +\n                parsed.data.customWordsPerTurn +\n                \"\\n\" +\n                '{{.Translation.Get \"players-per-ip-limit-setting\"}}: ' +\n                parsed.data.clientsPerIpLimit +\n                \"\\n\" +\n                '{{.Translation.Get \"words-per-turn-setting\"}}: ' +\n                parsed.data.wordsPerTurn,\n        );\n    } else if (parsed.type === \"shutdown\") {\n        socket.onclose = null;\n        socket.close();\n        showDialog(\n            \"shutdown-info\",\n            '{{.Translation.Get \"server-shutting-down-title\"}}',\n            document.createTextNode(\n                '{{.Translation.Get \"server-shutting-down-text\"}}',\n            ),\n        );\n    }\n};\n\nfunction showRoundEndMessage(previousWord) {\n    if (previousWord === \"\") {\n        appendMessage(\n            \"system-message\",\n            null,\n            `{{.Translation.Get \"round-over\"}}`,\n        );\n    } else {\n        appendMessage(\n            \"system-message\",\n            null,\n            `{{.Translation.Get \"round-over-no-word\"}}`.format(previousWord),\n        );\n    }\n}\n\nfunction getCachedPlayer(playerID) {\n    if (!cachedPlayers) {\n        return null;\n    }\n\n    for (let i = 0; i < cachedPlayers.length; i++) {\n        const player = cachedPlayers[i];\n        if (player.id === playerID) {\n            return player;\n        }\n    }\n\n    return null;\n}\n\n//In the initial implementation we used a timestamp to know when\n//the round will end. The problem with that approach was that the\n//clock on client and server was often not in sync. The second\n//approach was to instead send milliseconds left and keep counting\n//them down each 500 milliseconds. The problem with this approach, was\n//that there could potentially be timing mistakes while counting down.\n//What we do instead is use our local date, add the timeLeft to it and\n//repeatdly recaculate the timeLeft using the roundEndTime and the\n//current time. This way we won't have any calculation errors.\n//\n//FIXME The only leftover issue is that ping isn't taken into\n//account, however, that's no biggie for now.\nfunction setRoundTimeLeft(timeLeftMs) {\n    roundEndTime = Date.now() + timeLeftMs;\n}\n\nconst handleReadyEvent = (ready) => {\n    ownerID = ready.ownerId;\n    ownID = ready.playerId;\n\n    setRoundTimeLeft(ready.timeLeft);\n    setUsernameLocally(ready.playerName);\n    setAllowDrawing(ready.allowDrawing);\n    round = ready.round;\n    rounds = ready.rounds;\n    gameState = ready.gameState;\n    drawingTimeSetting = ready.drawingTimeSetting;\n    updateRoundsDisplay();\n    updateButtonVisibilities();\n\n    if (ready.players && ready.players.length) {\n        applyPlayers(ready.players);\n    }\n    if (ready.currentDrawing && ready.currentDrawing.length) {\n        applyDrawData(ready.currentDrawing);\n    }\n    if (ready.wordHints && ready.wordHints.length) {\n        applyWordHints(ready.wordHints);\n    } else {\n        set_dummy_word_hints();\n    }\n\n    if (ready.gameState === \"unstarted\") {\n        startDialog.style.visibility = \"visible\";\n        if (ownerID === ownID) {\n            forceStartButton.style.display = \"block\";\n        } else {\n            forceStartButton.style.display = \"none\";\n        }\n    } else if (ready.gameState === \"gameOver\") {\n        gameOverDialog.style.visibility = \"visible\";\n        if (ownerID === ownID) {\n            forceRestartButton.style.display = \"block\";\n        }\n\n        gameOverScoreboard.innerHTML = \"\";\n\n        //Copying array so we can sort.\n        const players = cachedPlayers.slice();\n        players.sort((a, b) => {\n            return a.rank - b.rank;\n        });\n\n        //These two are required for displaying the \"game over / win / tie\" message.\n        let countOfRankOnePlayers = 0;\n        let selfPlayer;\n        for (let i = 0; i < players.length; i++) {\n            const player = players[i];\n            if (!player.connected || player.state === \"spectating\") {\n                continue;\n            }\n\n            if (player.rank === 1) {\n                countOfRankOnePlayers++;\n            }\n            if (player.id === ownID) {\n                selfPlayer = player;\n            }\n\n            // We only display the first 5 players on the scoreboard.\n            if (player.rank <= 5) {\n                const newScoreboardEntry = document.createElement(\"div\");\n                newScoreboardEntry.classList.add(\"gameover-scoreboard-entry\");\n                if (player.id === ownID) {\n                    newScoreboardEntry.classList.add(\n                        \"gameover-scoreboard-entry-self\",\n                    );\n                }\n\n                const scoreboardRankDiv = document.createElement(\"div\");\n                scoreboardRankDiv.classList.add(\"gameover-scoreboard-rank\");\n                scoreboardRankDiv.innerText = player.rank;\n                newScoreboardEntry.appendChild(scoreboardRankDiv);\n\n                const scoreboardNameDiv = document.createElement(\"div\");\n                scoreboardNameDiv.classList.add(\"gameover-scoreboard-name\");\n                scoreboardNameDiv.innerText = player.name;\n                newScoreboardEntry.appendChild(scoreboardNameDiv);\n\n                const scoreboardScoreSpan = document.createElement(\"span\");\n                scoreboardScoreSpan.classList.add(\"gameover-scoreboard-score\");\n                scoreboardScoreSpan.innerText = player.score;\n                newScoreboardEntry.appendChild(scoreboardScoreSpan);\n\n                gameOverScoreboard.appendChild(newScoreboardEntry);\n            }\n        }\n\n        if (selfPlayer.rank === 1) {\n            if (countOfRankOnePlayers >= 2) {\n                gameOverDialogTitle.innerText = `{{.Translation.Get \"game-over-tie\"}}`;\n            } else {\n                gameOverDialogTitle.innerText = `{{.Translation.Get \"game-over-win\"}}`;\n            }\n        } else {\n            gameOverDialogTitle.innerText =\n                `{{.Translation.Get \"game-over\"}}`.format(\n                    selfPlayer.rank,\n                    selfPlayer.score,\n                );\n        }\n    } else if (ready.gameState === \"ongoing\") {\n        // Lack of wordHints implies that word has been chosen yet.\n        if (!ready.wordHints && drawerID !== ownID) {\n            waitChooseDrawerSpan.innerText = drawerName;\n            waitChooseDialog.style.visibility = \"visible\";\n        }\n    }\n};\n\nfunction updateButtonVisibilities() {\n    if (ownerID === ownID) {\n        lobbySettingsButton.style.display = \"flex\";\n    } else {\n        lobbySettingsButton.style.display = \"none\";\n    }\n}\n\nfunction promptWords(data) {\n    wordPreSelected.textContent = data.words[data.preSelectedWord];\n    wordButtonContainer.replaceChildren(\n        ...data.words.map((word, index) => {\n            const button = createDialogButton(word);\n            button.onclick = () => {\n                chooseWord(index);\n            };\n            return button;\n        }),\n    );\n    wordDialog.style.visibility = \"visible\";\n}\n\nfunction playWav(file) {\n    if (sound) {\n        const audio = new Audio(file);\n        audio.type = \"audio/wav\";\n        audio.play();\n    }\n}\n\nwindow.setInterval(() => {\n    if (gameState === \"ongoing\") {\n        const msLeft = roundEndTime - Date.now();\n        const secondsLeft = Math.max(0, Math.floor(msLeft / 1000));\n        timeLeftValue.innerText = \"\" + secondsLeft;\n    } else {\n        timeLeftValue.innerText = \"∞\";\n    }\n}, 500);\n\n//appendMessage adds a new message to the message container. If the\n//message amount is too high, we cut off a part of the messages to\n//prevent lagging and useless memory usage.\nfunction appendMessage(styleClass, author, message, attrs) {\n    if (messageContainer.childElementCount >= 100) {\n        messageContainer.removeChild(messageContainer.firstChild);\n    }\n\n    const newMessageDiv = document.createElement(\"div\");\n    newMessageDiv.classList.add(\"message\");\n    if (isString(styleClass)) {\n        styleClass = [styleClass];\n    }\n\n    for (const cls of styleClass) {\n        newMessageDiv.classList.add(cls);\n    }\n\n    if (author !== null && author !== \"\") {\n        const authorNameSpan = document.createElement(\"span\");\n        authorNameSpan.classList.add(\"chat-name\");\n        authorNameSpan.innerText = author;\n        newMessageDiv.appendChild(authorNameSpan);\n    }\n\n    const messageSpan = document.createElement(\"span\");\n    messageSpan.classList.add(\"message-content\");\n    messageSpan.innerText = message;\n    newMessageDiv.appendChild(messageSpan);\n\n    if (attrs !== null && attrs !== \"\") {\n        if (isObject(attrs)) {\n            for (const [attrKey, attrValue] of Object.entries(attrs)) {\n                messageSpan.setAttribute(attrKey, attrValue);\n            }\n        }\n    }\n\n    messageContainer.appendChild(newMessageDiv);\n}\n\nlet cachedPlayers;\n\n//applyPlayers takes the players passed, assigns them to cachedPlayers,\n//refreshes the scoreboard and updates the drawerID and drawerName variables.\nfunction applyPlayers(players) {\n    const matchOngoing = gameState === \"ongoing\";\n    if (!matchOngoing) {\n        let readyPlayers = 0;\n        let readyPlayersRequired = 0;\n\n        players.forEach((player) => {\n            if (!player.connected || player.state === \"spectating\") {\n                return;\n            }\n\n            readyPlayersRequired = readyPlayersRequired + 1;\n            if (player.state === \"ready\") {\n                readyPlayers = readyPlayers + 1;\n            }\n\n            if (player.id === ownID) {\n                document.getElementById(\"ready-state-start\").checked =\n                    player.state === \"ready\";\n                document.getElementById(\"ready-state-game-over\").checked =\n                    player.state === \"ready\";\n            }\n        });\n\n        const readyCounts = document.getElementsByClassName(\"ready-count\");\n        const reaadyNeededs = document.getElementsByClassName(\"ready-needed\");\n\n        Array.from(readyCounts).forEach((element) => {\n            element.innerText = readyPlayers.toString();\n        });\n        Array.from(reaadyNeededs).forEach((element) => {\n            element.innerText = readyPlayersRequired.toString();\n        });\n    }\n\n    playerContainer.innerHTML = \"\";\n    players.forEach((player) => {\n        // Makes sure that the \"is choosing\" a word dialog doesn't show\n        // \"undefined\" as the player name. Can happen, if the player\n        // disconnects after being assigned the drawer.\n        if (matchOngoing && player.state === \"drawing\") {\n            drawerID = player.id;\n            drawerName = player.name;\n        }\n\n        //We don't wanna show the disconnected players.\n        if (!player.connected) {\n            return;\n        }\n\n        if (player.id === ownID) {\n            setSpectateMode(\n                player.spectateToggleRequested,\n                player.state === \"spectating\",\n            );\n        }\n\n        const oldPlayer = getCachedPlayer(player.id);\n        if (\n            oldPlayer &&\n            oldPlayer.state === \"spectating\" &&\n            player.state !== \"spectating\"\n        ) {\n            appendMessage(\n                \"system-message\",\n                '{{.Translation.Get \"system\"}}',\n                `${player.name} is now participating`,\n            );\n        } else if (\n            oldPlayer &&\n            oldPlayer.state !== \"spectating\" &&\n            player.state === \"spectating\"\n        ) {\n            appendMessage(\n                \"system-message\",\n                '{{.Translation.Get \"system\"}}',\n                `${player.name} is now spectating`,\n            );\n        }\n\n        if (player.state === \"spectating\") {\n            return;\n        }\n\n        const playerDiv = document.createElement(\"div\");\n\n        playerDiv.classList.add(\"player\");\n\n        const scoreAndStatusDiv = document.createElement(\"div\");\n        scoreAndStatusDiv.classList.add(\"score-and-status\");\n        playerDiv.appendChild(scoreAndStatusDiv);\n\n        const playerscoreDiv = document.createElement(\"div\");\n        playerscoreDiv.classList.add(\"playerscore-group\");\n        scoreAndStatusDiv.appendChild(playerscoreDiv);\n\n        if (matchOngoing) {\n            if (player.state === \"standby\") {\n                playerDiv.classList.add(\"player-done\");\n            } else if (player.state === \"drawing\") {\n                const playerStateImage = createPlayerStateImageNode(\n                    `{{.RootPath}}/resources/{{.WithCacheBust \"pencil.svg\"}}`,\n                );\n                playerStateImage.style.transform = \"scaleX(-1)\";\n                scoreAndStatusDiv.appendChild(playerStateImage);\n            } else if (player.state === \"standby\") {\n                const playerStateImage = createPlayerStateImageNode(\n                    `{{.RootPath}}/resources/{{.WithCacheBust \"checkmark.svg\"}}`,\n                );\n                scoreAndStatusDiv.appendChild(playerStateImage);\n            }\n        } else {\n            if (player.state === \"ready\") {\n                playerDiv.classList.add(\"player-ready\");\n            }\n        }\n\n        const rankSpan = document.createElement(\"span\");\n        rankSpan.classList.add(\"rank\");\n        rankSpan.innerText = player.rank;\n        playerDiv.appendChild(rankSpan);\n\n        const playernameSpan = document.createElement(\"span\");\n        playernameSpan.classList.add(\"playername\");\n        playernameSpan.innerText = player.name;\n        playernameSpan.id = \"playername-\" + player.id;\n        if (player.id === ownID) {\n            playernameSpan.classList.add(\"playername-self\");\n        }\n        playerDiv.appendChild(playernameSpan);\n\n        const playerscoreSpan = document.createElement(\"span\");\n        playerscoreSpan.classList.add(\"playerscore\");\n        playerscoreSpan.innerText = player.score;\n        playerscoreDiv.appendChild(playerscoreSpan);\n\n        const lastPlayerscoreSpan = document.createElement(\"span\");\n        lastPlayerscoreSpan.classList.add(\"last-turn-score\");\n        lastPlayerscoreSpan.innerText =\n            '{{.Translation.Get \"last-turn\"}}'.format(player.lastScore);\n        playerscoreDiv.appendChild(lastPlayerscoreSpan);\n\n        playerContainer.appendChild(playerDiv);\n    });\n\n    // We do this at the end, so we can access the old values while\n    // iterating over the new ones\n    cachedPlayers = players;\n}\n\nfunction createPlayerStateImageNode(path) {\n    const playerStateImage = document.createElement(\"img\");\n    playerStateImage.style.width = \"1rem\";\n    playerStateImage.style.height = \"1rem\";\n    playerStateImage.src = path;\n    return playerStateImage;\n}\nfunction updateRoundsDisplay() {\n    roundSpan.innerText = round;\n    maxRoundSpan.innerText = rounds;\n}\n\nconst applyWordHints = (wordHints, dummy) => {\n    const isDrawer = drawerID === ownID;\n\n    let wordLengths = [];\n    let count = 0;\n\n    wordContainer.replaceChildren(\n        ...wordHints.map((hint, index) => {\n            const hintSpan = document.createElement(\"span\");\n            hintSpan.classList.add(\"hint\");\n            if (dummy) {\n                hintSpan.style.visibility = \"hidden\";\n            }\n            if (hint.character === 0) {\n                hintSpan.classList.add(\"hint-underline\");\n                hintSpan.innerHTML = \"&nbsp;\";\n            } else {\n                if (hint.underline) {\n                    hintSpan.classList.add(\"hint-underline\");\n                }\n                hintSpan.innerText = String.fromCharCode(hint.character);\n            }\n\n            // space\n            if (hint.character === 32) {\n                wordLengths.push(count);\n                count = 0;\n            } else if (index === wordHints.length - 1) {\n                count += 1;\n                wordLengths.push(count);\n            } else {\n                count += 1;\n            }\n\n            if (hint.revealed && isDrawer) {\n                hintSpan.classList.add(\"hint-revealed\");\n            }\n\n            return hintSpan;\n        }),\n    );\n\n    const lengthHint = document.createElement(\"sub\");\n    lengthHint.classList.add(\"word-length-hint\");\n    if (dummy) {\n        lengthHint.style.visibility = \"hidden\";\n    }\n    lengthHint.setAttribute(\"dir\", wordContainer.getAttribute(\"dir\"));\n    lengthHint.innerText = `(${wordLengths.join(\", \")})`;\n    wordContainer.appendChild(lengthHint);\n};\n\nconst set_dummy_word_hints = () => {\n    // Dummy wordhint to prevent layout changes.\n    applyWordHints(\n        [\n            {\n                character: \"D\",\n                underline: true,\n            },\n        ],\n        true,\n    );\n};\nset_dummy_word_hints();\n\nconst applyDrawData = (drawElements) => {\n    clear(context);\n\n    drawElements.forEach((drawElement) => {\n        const drawData = drawElement.data;\n        if (drawElement.type === \"fill\") {\n            floodfillUint8ClampedArray(\n                imageData.data,\n                drawData.x,\n                drawData.y,\n                indexToRgbColor(drawData.color),\n                imageData.width,\n                imageData.height,\n            );\n        } else if (drawElement.type === \"line\") {\n            drawLineNoPut(\n                context,\n                imageData,\n                drawData.x,\n                drawData.y,\n                drawData.x2,\n                drawData.y2,\n                indexToRgbColor(drawData.color),\n                drawData.width,\n            );\n        } else {\n            console.log(\"Unknown draw element type: \" + drawData.type);\n        }\n    });\n\n    context.putImageData(imageData, 0, 0);\n};\n\nlet lastX = 0;\nlet lastY = 0;\n\nlet touchID = null;\n\nfunction onTouchStart(event) {\n    //We only allow a single touch\n    if (allowDrawing && touchID == null && localTool !== fillBucket) {\n        const touch = event.touches[0];\n        touchID = touch.identifier;\n\n        // calculate the offset coordinates based on client touch position and drawing board client origin\n        const clientRect = drawingBoard.getBoundingClientRect();\n        lastX = touch.clientX - clientRect.left;\n        lastY = touch.clientY - clientRect.top;\n    }\n}\n\nfunction onTouchMove(event) {\n    // Prevent moving, scrolling or zooming the page\n    event.preventDefault();\n\n    if (allowDrawing) {\n        for (let i = event.changedTouches.length - 1; i >= 0; i--) {\n            if (event.changedTouches[i].identifier === touchID) {\n                const touch = event.changedTouches[i];\n\n                // calculate the offset coordinates based on client touch position and drawing board client origin\n                const clientRect = drawingBoard.getBoundingClientRect();\n                const offsetX = touch.clientX - clientRect.left;\n                const offsetY = touch.clientY - clientRect.top;\n\n                // drawing functions must check for context boundaries\n                drawLineAndSendEvent(context, lastX, lastY, offsetX, offsetY);\n                lastX = offsetX;\n                lastY = offsetY;\n\n                return;\n            }\n        }\n    }\n}\n\nfunction onTouchEnd(event) {\n    for (let i = event.changedTouches.length - 1; i >= 0; i--) {\n        if (event.changedTouches[i].identifier === touchID) {\n            touchID = null;\n            return;\n        }\n    }\n}\n\ndrawingBoard.addEventListener(\"touchend\", onTouchEnd);\ndrawingBoard.addEventListener(\"touchcancel\", onTouchEnd);\ndrawingBoard.addEventListener(\"touchstart\", onTouchStart);\ndrawingBoard.addEventListener(\"touchmove\", onTouchMove);\n\nfunction onMouseDown(event) {\n    if (\n        allowDrawing &&\n        event.pointerType !== \"touch\" &&\n        event.buttons === 1 &&\n        localTool !== fillBucket\n    ) {\n        const clientRect = drawingBoard.getBoundingClientRect();\n        lastX = event.clientX - clientRect.left;\n        lastY = event.clientY - clientRect.top;\n    }\n}\n\nfunction pressureToLineWidth(event) {\n    //event.button === 0 could be wrong, as it can also be the uninitialized state.\n    //Therefore we use event.buttons, which works differently.\n    if (\n        event.buttons !== 1 ||\n        event.pressure === 0 ||\n        event.pointerType === \"touch\"\n    ) {\n        return 0;\n    }\n    if (!penPressure || event.pressure === 0.5 || !event.pressure) {\n        return localLineWidth;\n    }\n    return Math.ceil(event.pressure * 32);\n}\n\n// Previously the onMouseMove handled leave, but we do this separately now for\n// proper pen support. Otherwise leave leads to a loss of the pen pressure, as\n// we are handling that with mouseleave instead of pointerleave. pointerlave\n// is not triggered until the pen is let go.\nfunction onMouseLeave(event) {\n    if (allowDrawing && lastLineWidth && localTool !== fillBucket) {\n        // calculate the offset coordinates based on client mouse position and drawing board client origin\n        const clientRect = drawingBoard.getBoundingClientRect();\n        const offsetX = event.clientX - clientRect.left;\n        const offsetY = event.clientY - clientRect.top;\n\n        // drawing functions must check for context boundaries\n        drawLineAndSendEvent(\n            context,\n            lastX,\n            lastY,\n            offsetX,\n            offsetY,\n            lastLineWidth,\n        );\n        lastX = offsetX;\n        lastY = offsetY;\n    }\n}\n\nlet lastLineWidth;\nfunction onMouseMove(event) {\n    const pressureLineWidth = pressureToLineWidth(event);\n    lastLineWidth = pressureLineWidth;\n\n    if (allowDrawing && pressureLineWidth && localTool !== fillBucket) {\n        // calculate the offset coordinates based on client mouse position and drawing board client origin\n        const clientRect = drawingBoard.getBoundingClientRect();\n        const offsetX = event.clientX - clientRect.left;\n        const offsetY = event.clientY - clientRect.top;\n\n        // drawing functions must check for context boundaries\n        drawLineAndSendEvent(\n            context,\n            lastX,\n            lastY,\n            offsetX,\n            offsetY,\n            pressureLineWidth,\n        );\n        lastX = offsetX;\n        lastY = offsetY;\n    }\n}\n\nfunction onMouseClick(event) {\n    //event.buttons won't work here, since it's always 0. Since we\n    //have a click event, we can be sure that we actually had a button\n    //clicked and 0 won't be the uninitialized state.\n    if (allowDrawing && event.button === 0) {\n        if (localTool === fillBucket) {\n            fillAndSendEvent(\n                context,\n                event.offsetX,\n                event.offsetY,\n                localColorIndex,\n            );\n        } else {\n            drawLineAndSendEvent(\n                context,\n                event.offsetX,\n                event.offsetY,\n                event.offsetX,\n                event.offsetY,\n            );\n        }\n    }\n}\n\ndrawingBoard.addEventListener(\"pointerdown\", onMouseDown);\ndrawingBoard.addEventListener(\"pointermove\", onMouseMove);\ndrawingBoard.addEventListener(\"mouseleave\", onMouseLeave);\ndrawingBoard.addEventListener(\"click\", onMouseClick);\n\nfunction onGlobalMouseMove(event) {\n    const clientRect = drawingBoard.getBoundingClientRect();\n    lastX = Math.min(\n        clientRect.width - 1,\n        Math.max(0, event.clientX - clientRect.left),\n    );\n    lastY = Math.min(\n        clientRect.height - 1,\n        Math.max(0, event.clientY - clientRect.top),\n    );\n}\n\n//necessary for mousemove to not use the previous exit coordinates.\n//If this is done via mouseleave and mouseenter of the\n//drawingBoard, the lines will end too early on leave and start\n//too late on exit.\nwindow.addEventListener(\"mousemove\", onGlobalMouseMove);\n\nfunction isAnyDialogVisible() {\n    for (let i = 0; i < centerDialogs.children.length; i++) {\n        if (centerDialogs.children[i].style.visibility === \"visible\") {\n            return true;\n        }\n    }\n\n    return false;\n}\n\nfunction onKeyDown(event) {\n    //Avoid firing actions if the user is in the chat.\n    if (document.activeElement instanceof HTMLInputElement) {\n        return;\n    }\n\n    //If dialogs are open, it doesn't really make sense to be able to\n    //change tools. As this is like being in the pause menu of a game.\n    if (isAnyDialogVisible()) {\n        return;\n    }\n\n    //They key choice was made like this, since it's easy to remember\n    //and easy to reach. This is how many MOBAs do it and I personally\n    //find it better than having to find specific keys on your\n    //keyboard. Especially for people that aren't used to typing\n    //without looking at their keyboard, this might help.\n    if (event.key === \"q\") {\n        toolButtonPen.click();\n        chooseTool(pen);\n    } else if (event.key === \"w\") {\n        toolButtonFill.click();\n        chooseTool(fillBucket);\n    } else if (event.key === \"e\") {\n        toolButtonRubber.click();\n        chooseTool(rubber);\n    } else if (event.key === \"1\") {\n        sizeButton8.click();\n        setLineWidth(8);\n    } else if (event.key === \"2\") {\n        sizeButton16.click();\n        setLineWidth(16);\n    } else if (event.key === \"3\") {\n        sizeButton24.click();\n        setLineWidth(24);\n    } else if (event.key === \"4\") {\n        sizeButton32.click();\n        setLineWidth(32);\n    } else if (event.key === \"z\" && event.ctrlKey) {\n        undoAndSendEvent();\n    }\n}\n\n//Handling events on the canvas directly isn't possible, since the user\n//must've clicked it at least once in order for that to work.\nwindow.addEventListener(\"keydown\", onKeyDown);\n\nfunction debounce(func, timeout) {\n    let timer;\n    return (...args) => {\n        clearTimeout(timer);\n        timer = setTimeout(() => {\n            func.apply(this, args);\n        }, timeout);\n    };\n}\n\nfunction clear(context) {\n    context.fillStyle = \"#FFFFFF\";\n    context.fillRect(0, 0, drawingBoard.width, drawingBoard.height);\n    // Refetch, as we don't manually fill here.\n    imageData = context.getImageData(\n        0,\n        0,\n        context.canvas.width,\n        context.canvas.height,\n    );\n}\n\n// Clear initially, as it will be black otherwise.\nclear(context);\n\nfunction fillAndSendEvent(context, x, y, colorIndex) {\n    const xScaled = convertToServerCoordinate(x);\n    const yScaled = convertToServerCoordinate(y);\n    const color = indexToRgbColor(colorIndex);\n    if (\n        floodfillUint8ClampedArray(\n            imageData.data,\n            xScaled,\n            yScaled,\n            color,\n            imageData.width,\n            imageData.height,\n        )\n    ) {\n        context.putImageData(imageData, 0, 0);\n        const fillInstruction = {\n            type: \"fill\",\n            data: {\n                x: xScaled,\n                y: yScaled,\n                color: colorIndex,\n            },\n        };\n        socket.send(JSON.stringify(fillInstruction));\n    }\n}\n\nfunction drawLineAndSendEvent(\n    context,\n    x1,\n    y1,\n    x2,\n    y2,\n    lineWidth = localLineWidth,\n) {\n    const color = localTool === rubber ? rubberColor : localColor;\n    const colorIndex = localTool === rubber ? 0 /* white */ : localColorIndex;\n\n    const x1Scaled = convertToServerCoordinate(x1);\n    const y1Scaled = convertToServerCoordinate(y1);\n    const x2Scaled = convertToServerCoordinate(x2);\n    const y2Scaled = convertToServerCoordinate(y2);\n    drawLine(\n        context,\n        imageData,\n        x1Scaled,\n        y1Scaled,\n        x2Scaled,\n        y2Scaled,\n        color,\n        lineWidth,\n    );\n\n    const drawInstruction = {\n        type: \"line\",\n        data: {\n            x: x1Scaled,\n            y: y1Scaled,\n            x2: x2Scaled,\n            y2: y2Scaled,\n            color: colorIndex,\n            width: lineWidth,\n        },\n    };\n    socket.send(JSON.stringify(drawInstruction));\n}\n\nfunction getCookie(name) {\n    let cookie = {};\n    document.cookie.split(\";\").forEach(function (el) {\n        let split = el.split(\"=\");\n        cookie[split[0].trim()] = split.slice(1).join(\"=\");\n    });\n    return cookie[name];\n}\n\nfunction isString(obj) {\n    return typeof obj === \"string\";\n}\n\nfunction isObject(obj) {\n    return (\n        typeof obj === \"object\" &&\n        obj !== null &&\n        !Array.isArray(obj) &&\n        Object.prototype.toString.call(obj) === \"[object Object]\"\n    );\n}\n\nconst connectToWebsocket = () => {\n    if (socketIsConnecting === true) {\n        return;\n    }\n\n    socketIsConnecting = true;\n\n    socket = new WebSocket(`${rootPath}/v1/lobby/ws`);\n\n    socket.onerror = (error) => {\n        //Is not connected and we haven't yet said that we are done trying to\n        //connect, this means that we could never even establish a connection.\n        if (socket.readyState != 1 && !hasSocketEverConnected) {\n            socketIsConnecting = false;\n            showTextDialog(\n                \"connection-error-dialog\",\n                '{{.Translation.Get \"error-connecting\"}}',\n                `{{.Translation.Get \"error-connecting-text\"}}`,\n            );\n            console.log(\"Error establishing connection: \", error);\n        } else {\n            console.log(\"Socket error: \", error);\n        }\n    };\n\n    socket.onopen = () => {\n        closeDialog(reconnectDialogId);\n\n        hasSocketEverConnected = true;\n        socketIsConnecting = false;\n\n        socket.onclose = (event) => {\n            //We want to avoid handling the error multiple times and showing the incorrect dialogs.\n            socket.onerror = null;\n\n            console.log(\"Socket Closed Connection: \", event);\n\n            if (event.code === 4000) {\n                showTextDialog(\n                    reconnectDialogId,\n                    \"Kicked\",\n                    `You have been kicked from the lobby.`,\n                );\n            } else {\n                console.log(\"Attempting to reestablish socket connection.\");\n                showReconnectDialogIfNotShown();\n                connectToWebsocket();\n            }\n        };\n\n        socket.onmessage = (jsonMessage) => {\n            handleEvent(JSON.parse(jsonMessage.data));\n        };\n\n        console.log(\"Successfully Connected\");\n    };\n};\n\nconnectToWebsocket();\n\n//In order to avoid automatically canceling the socket connection, we keep\n//sending dummy events every 5 seconds. This was a problem on Heroku. If\n//a player took a very long time to choose a word, the connection of all\n//players could be killed and even cause the lobby being closed. Since\n//that's very frustrating, we want to avoid that.\nwindow.setInterval(() => {\n    if (socket) {\n        socket.send(JSON.stringify({ type: \"keep-alive\" }));\n    }\n}, 5000);\n"
  },
  {
    "path": "internal/frontend/lobby_test.go",
    "content": "package frontend\n\nimport (\n\t\"testing\"\n\n\t\"github.com/scribble-rs/scribble.rs/internal/api\"\n\t\"github.com/scribble-rs/scribble.rs/internal/config\"\n\t\"github.com/scribble-rs/scribble.rs/internal/game\"\n)\n\nfunc TestCreateLobby(t *testing.T) {\n\tt.Parallel()\n\n\tdata := api.CreateLobbyData(\n\t\t&config.Default,\n\t\t&game.Lobby{\n\t\t\tLobbyID: \"TEST\",\n\t\t})\n\n\tvar previousSize uint8\n\tfor _, suggestedSize := range data.SuggestedBrushSizes {\n\t\tif suggestedSize < previousSize {\n\t\t\tt.Error(\"Sorting in SuggestedBrushSizes is incorrect\")\n\t\t}\n\t}\n\n\tfor _, suggestedSize := range data.SuggestedBrushSizes {\n\t\tif suggestedSize < game.MinBrushSize {\n\t\t\tt.Errorf(\"suggested brushsize %d is below MinBrushSize %d\", suggestedSize, game.MinBrushSize)\n\t\t}\n\n\t\tif suggestedSize > game.MaxBrushSize {\n\t\t\tt.Errorf(\"suggested brushsize %d is above MaxBrushSize %d\", suggestedSize, game.MaxBrushSize)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "internal/frontend/resources/draw.js",
    "content": "//Notice for core code of the floodfill, which has since then been heavily\n//changed.\n//Copyright(c) Max Irwin - 2011, 2015, 2016\n//Repo: https://github.com/binarymax/floodfill.js\n//MIT License\n\nfunction floodfillData(data, x, y, fillcolor, width, height) {\n    const length = data.length;\n    let i = (x + y * width) * 4;\n\n    //Fill coordinates are out of bounds\n    if (i < 0 || i >= length) {\n        return false;\n    }\n\n    //We check whether the target pixel is already the desired color, since\n    //filling wouldn't change any of the pixels in this case.\n    const targetcolor = [data[i], data[i + 1], data[i + 2]];\n    if (\n        targetcolor[0] === fillcolor.r &&\n        targetcolor[1] === fillcolor.g &&\n        targetcolor[2] === fillcolor.b) {\n        return false;\n    }\n\n    let e = i, w = i, me, mw, w2 = width * 4;\n    let j;\n\n    //Previously we used Array.push and Array.pop here, with which the method\n    //took between 70ms and 80ms on a rather strong machine with a FULL HD monitor.\n    //Since Q can never be required to be bigger than the amount of maximum\n    //pixels (width*height), we preallocate Q with that size. While not all of\n    //the space might be needed, this is cheaper than reallocating multiple times.\n    //This improved the time from 70ms-80ms to 50ms-60ms.\n    const Q = new Array(width * height);\n    let nextQIndex = 0;\n    Q[nextQIndex++] = i;\n\n    while (nextQIndex > 0) {\n        i = Q[--nextQIndex];\n        if (pixelCompareAndSet(i, targetcolor, fillcolor, data)) {\n            e = i;\n            w = i;\n            mw = Math.floor(i / w2) * w2; //left bound\n            me = mw + w2;               //right bound\n            while (mw < w && mw <= (w -= 4) && pixelCompareAndSet(w, targetcolor, fillcolor, data)); //go left until edge hit\n            while (me > e && me > (e += 4) && pixelCompareAndSet(e, targetcolor, fillcolor, data)); //go right until edge hit\n            for (j = w + 4; j < e; j += 4) {\n                if (j - w2 >= 0 && pixelCompare(j - w2, targetcolor, data)) Q[nextQIndex++] = j - w2; //queue y-1\n                if (j + w2 < length && pixelCompare(j + w2, targetcolor, data)) Q[nextQIndex++] = j + w2; //queue y+1\n            }\n        }\n    }\n\n    return data;\n};\n\nfunction pixelCompare(i, targetcolor, data) {\n    return (\n        targetcolor[0] === data[i] &&\n        targetcolor[1] === data[i + 1] &&\n        targetcolor[2] === data[i + 2]\n    );\n};\n\nfunction pixelCompareAndSet(i, targetcolor, fillcolor, data) {\n    if (pixelCompare(i, targetcolor, data)) {\n        data[i] = fillcolor.r;\n        data[i + 1] = fillcolor.g;\n        data[i + 2] = fillcolor.b;\n        return true;\n    }\n    return false;\n};\n\nfunction floodfillUint8ClampedArray(data, x, y, color, width, height) {\n    if (isNaN(width) || width < 1) throw new Error(\"argument 'width' must be a positive integer\");\n    if (isNaN(height) || height < 1) throw new Error(\"argument 'height' must be a positive integer\");\n    if (isNaN(x) || x < 0) throw new Error(\"argument 'x' must be a positive integer\");\n    if (isNaN(y) || y < 0) throw new Error(\"argument 'y' must be a positive integer\");\n    if (width * height * 4 !== data.length) throw new Error(\"width and height do not fit Uint8ClampedArray dimensions\");\n\n    const xi = Math.floor(x);\n    const yi = Math.floor(y);\n\n    return floodfillData(data, xi, yi, color, width, height);\n};\n\n// Code for line drawing, not related to the floodfill repo.\n// Hence it's all BSD licensed.\n\nfunction drawLine(context, imageData, x1, y1, x2, y2, color, width) {\n    const coords = prepareDrawLineCoords(context, x1, y1, x2, y2, width);\n    _drawLineNoPut(imageData, coords, color, width);\n    context.putImageData(imageData, 0, 0, 0, 0, coords.right, coords.bottom);\n};\n\n// This implementation directly access the canvas data and does not\n// put it back into the canvas context directly. This saved us not\n// only from calling put, which is relatively cheap, but also from\n// calling getImageData all the time.\nfunction drawLineNoPut(context, imageData, x1, y1, x2, y2, color, width) {\n    _drawLineNoPut(imageData, prepareDrawLineCoords(context, x1, y1, x2, y2, width), color, width);\n};\n\nfunction _drawLineNoPut(imageData, coords, color, width) {\n    const { x1, y1, x2, y2, left, top, right, bottom } = coords;\n\n    // off canvas, so don't draw anything\n    if (right - left === 0 || bottom - top === 0) {\n        return;\n    }\n\n    const circleMap = generateCircleMap(Math.floor(width / 2));\n    const offset = Math.floor(circleMap.length / 2);\n\n    for (let ix = 0; ix < circleMap.length; ix++) {\n        for (let iy = 0; iy < circleMap[ix].length; iy++) {\n            if (circleMap[ix][iy] === 1 || (x1 === x2 && y1 === y2 && circleMap[ix][iy] === 2)) {\n                const newX1 = x1 + ix - offset;\n                const newY1 = y1 + iy - offset;\n                const newX2 = x2 + ix - offset;\n                const newY2 = y2 + iy - offset;\n                drawBresenhamLine(imageData, newX1, newY1, newX2, newY2, color);\n            }\n        }\n    }\n}\n\nfunction prepareDrawLineCoords(context, x1, y1, x2, y2, width) {\n    // the coordinates must be whole numbers to improve performance.\n    // also, decimals as coordinates is not making sense.\n    x1 = Math.floor(x1);\n    y1 = Math.floor(y1);\n    x2 = Math.floor(x2);\n    y2 = Math.floor(y2);\n\n    // calculate bounding box\n    const left = Math.max(0, Math.min(context.canvas.width, Math.min(x1, x2) - width));\n    const top = Math.max(0, Math.min(context.canvas.height, Math.min(y1, y2) - width));\n    const right = Math.max(0, Math.min(context.canvas.width, Math.max(x1, x2) + width));\n    const bottom = Math.max(0, Math.min(context.canvas.height, Math.max(y1, y2) + width));\n\n    return {\n        x1: x1,\n        y1: y1,\n        x2: x2,\n        y2: y2,\n        left: left,\n        top: top,\n        right: right,\n        bottom: bottom,\n    };\n}\nfunction drawBresenhamLine(imageData, x1, y1, x2, y2, color) {\n    const dx = Math.abs(x2 - x1);\n    const dy = Math.abs(y2 - y1);\n    const sx = (x1 < x2) ? 1 : -1;\n    const sy = (y1 < y2) ? 1 : -1;\n    let err = dx - dy;\n\n    while (true) {\n        //check if pixel is inside the canvas\n        if (!(x1 < 0 || x1 >= imageData.width || y1 < 0 || y1 >= imageData.height)) {\n            setPixel(imageData, x1, y1, color);\n        }\n\n        if ((x1 === x2) && (y1 === y2)) break;\n        const e2 = 2 * err;\n        if (e2 > -dy) {\n            err -= dy;\n            x1 += sx;\n        }\n        if (e2 < dx) {\n            err += dx;\n            y1 += sy;\n        }\n    }\n}\n\n// We cache them, as we need quite a lot of them, but the pencil size usually\n// doesn't change that often. There's also not many sizes, so we don't need to\n// worry about invalidating anything.\nlet cachedCircleMaps = {};\n\nfunction generateCircleMap(radius) {\n    const cached = cachedCircleMaps[radius];\n    if (cached) {\n        return cached;\n    }\n\n    const diameter = 2 * radius;\n    const circleData = new Array(diameter);\n\n    for (let x = 0; x < diameter; x++) {\n        circleData[x] = new Array(diameter);\n        for (let y = 0; y < diameter; y++) {\n            const distanceToRadius = Math.sqrt(Math.pow(radius - x, 2) + Math.pow(radius - y, 2));\n            if (distanceToRadius > radius) {\n                circleData[x][y] = 0;\n            } else if (distanceToRadius < radius - 2) {\n                circleData[x][y] = 2;\n            } else {\n                circleData[x][y] = 1;\n            }\n        }\n    }\n\n    cachedCircleMaps[radius] = circleData;\n    return circleData;\n}\n\nfunction setPixel(imageData, x, y, color) {\n    const offset = (y * imageData.width + x) * 4;\n    imageData.data[offset] = color.r;\n    imageData.data[offset + 1] = color.g;\n    imageData.data[offset + 2] = color.b;\n}\n\n//We accept both #RRGGBB and RRGGBB. Both are treated case insensitive.\nfunction hexStringToRgbColorObject(hexString) {\n    if (!hexString) {\n        return { r: 0, g: 0, b: 0 };\n    }\n    const hexColorsRegex = /#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})/i;\n    const match = hexString.match(hexColorsRegex)\n    return { r: parseInt(match[1], 16), g: parseInt(match[2], 16), b: parseInt(match[3], 16) };\n}\n\nconst colorMap = [\n    { hex: '#ffffff', rgb: hexStringToRgbColorObject('#ffffff') },\n    { hex: '#c1c1c1', rgb: hexStringToRgbColorObject('#c1c1c1') },\n    { hex: '#ef130b', rgb: hexStringToRgbColorObject('#ef130b') },\n    { hex: '#ff7100', rgb: hexStringToRgbColorObject('#ff7100') },\n    { hex: '#ffe400', rgb: hexStringToRgbColorObject('#ffe400') },\n    { hex: '#00cc00', rgb: hexStringToRgbColorObject('#00cc00') },\n    { hex: '#00b2ff', rgb: hexStringToRgbColorObject('#00b2ff') },\n    { hex: '#231fd3', rgb: hexStringToRgbColorObject('#231fd3') },\n    { hex: '#a300ba', rgb: hexStringToRgbColorObject('#a300ba') },\n    { hex: '#d37caa', rgb: hexStringToRgbColorObject('#d37caa') },\n    { hex: '#a0522d', rgb: hexStringToRgbColorObject('#a0522d') },\n    { hex: '#592f2a', rgb: hexStringToRgbColorObject('#592f2a') },\n    { hex: '#ecbcb4', rgb: hexStringToRgbColorObject('#ecbcb4') },\n    { hex: '#000000', rgb: hexStringToRgbColorObject('#000000') },\n    { hex: '#4c4c4c', rgb: hexStringToRgbColorObject('#4c4c4c') },\n    { hex: '#740b07', rgb: hexStringToRgbColorObject('#740b07') },\n    { hex: '#c23800', rgb: hexStringToRgbColorObject('#c23800') },\n    { hex: '#e8a200', rgb: hexStringToRgbColorObject('#e8a200') },\n    { hex: '#005510', rgb: hexStringToRgbColorObject('#005510') },\n    { hex: '#00569e', rgb: hexStringToRgbColorObject('#00569e') },\n    { hex: '#0e0865', rgb: hexStringToRgbColorObject('#0e0865') },\n    { hex: '#550069', rgb: hexStringToRgbColorObject('#550069') },\n    { hex: '#a75574', rgb: hexStringToRgbColorObject('#a75574') },\n    { hex: '#63300d', rgb: hexStringToRgbColorObject('#63300d') },\n    { hex: '#492f31', rgb: hexStringToRgbColorObject('#492f31') },\n    { hex: '#d1a3a4', rgb: hexStringToRgbColorObject('#d1a3a4') }\n];\n\nfunction indexToHexColor(index) {\n    return colorMap[index].hex;\n}\n\nfunction indexToRgbColor(index) {\n    return colorMap[index].rgb;\n}\n\n"
  },
  {
    "path": "internal/frontend/resources/error.css",
    "content": ".error-pane-wrapper {\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n}\n\n.error-pane {\n    display: inline-block;\n    margin: auto;\n    background-color: white;\n    padding: 1rem;\n    border-radius: 1rem;\n}\n\n.error-title,\n.error-message {\n    display: block;\n}\n\n.error-title {\n    font-size: 6rem;\n}\n\n.error-message {\n    font-size: 3rem;\n    margin: 2vw;\n}\n\n.go-back,\n.go-back:link,\n.go-back:visited {\n    display: block;\n    font-size: 3rem;\n    color: rgb(248, 148, 164);\n    text-align: center;\n}\n"
  },
  {
    "path": "internal/frontend/resources/index.css",
    "content": "* {\n    border: none;\n    margin: 0;\n}\n\n/*root end*/\n\n#logo {\n    width: 50vw;\n    margin-top: 1rem;\n    margin-bottom: 1rem;\n    margin-left: auto;\n    margin-right: auto;\n}\n\n#home-choices {\n    display: flex;\n    flex-direction: row;\n    gap: 1rem;\n    justify-content: center;\n}\n\n.home-choice-header {\n    display: flex;\n}\n\n.home-choice-title {\n    font-size: 1.25rem;\n    font-weight: bold;\n    flex: 1;\n}\n\n.home-choice-inner {\n    row-gap: 1rem;\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n}\n\n.home-choice {\n    background-color: var(--pane-background);\n    padding: 1.5rem;\n    border-radius: 1.3rem;\n    overflow: hidden;\n    width: min(42.5vw, 35rem);\n    height: 59vh;\n}\n\n.home {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    flex: 1;\n}\n\n#lobby-list {\n    display: flex;\n    flex-direction: column;\n    overflow-y: auto;\n    gap: 0.75rem;\n    padding: 0.25rem;\n    min-height: 10rem;\n}\n\n.lobby-list-item {\n    background-color: white;\n    padding: 1rem;\n    border-radius: 0.75rem;\n    display: grid;\n    grid-template-columns: auto 1fr auto;\n    align-items: center;\n    gap: 1.25rem;\n    box-shadow:\n        0 4px 6px -1px rgba(0, 0, 0, 0.1),\n        0 2px 4px -1px rgba(0, 0, 0, 0.06);\n    transition:\n        transform 0.15s ease,\n        box-shadow 0.15s ease;\n    border: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.lobby-list-item:hover {\n    background-color: #fafafa;\n}\n\n.lobby-list-rows {\n    display: flex;\n    flex-direction: column;\n    gap: 0.5rem;\n    overflow: hidden;\n}\n\n.lobby-list-row {\n    display: flex;\n    flex-direction: row;\n    gap: 0.75rem;\n    align-items: center;\n    flex-wrap: wrap;\n}\n\n.language-flag {\n    font-size: 3rem;\n    line-height: 1;\n    filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));\n    margin-right: 0.25rem;\n}\n\n.lobby-list-item-info-pair {\n    display: flex;\n    flex-direction: row;\n    gap: 0.35rem;\n    align-items: center;\n    background: #f8f9fa;\n    padding: 0.25rem 0.5rem;\n    border-radius: 0.5rem;\n    font-size: 0.9rem;\n    font-weight: 600;\n}\n\n.lobby-list-item-icon {\n    width: 1.1rem;\n    height: 1.1rem;\n}\n\n.lobby-list-icon-loading {\n    border-radius: 0.75rem;\n    background-color: black;\n    animation: shimmer 2s infinite;\n}\n\n@keyframes shimmer {\n    0% {\n        background-color: rgb(161, 160, 160);\n    }\n\n    50% {\n        background-color: rgb(228, 228, 228);\n    }\n\n    100% {\n        background-color: rgb(161, 160, 160);\n    }\n}\n\n.lobby-list-placeholder {\n    display: flex;\n    width: 100%;\n    flex: 1;\n}\n\n.lobby-list-placeholder > * {\n    margin: auto;\n    max-width: 80%;\n}\n\n.join-button {\n    background-color: rgb(38, 187, 38);\n    color: white;\n    font-weight: 800;\n    font-size: 1.1rem;\n    padding: 0.75rem 1.5rem;\n    border-radius: 0.6rem;\n    cursor: pointer;\n    text-transform: uppercase;\n    letter-spacing: 0.05rem;\n    transition:\n        background-color 0.2s,\n        transform 0.1s;\n    height: unset;\n    width: unset;\n    align-self: stretch;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border: none;\n}\n\n.join-button:hover {\n    background-color: rgb(34, 167, 34);\n    transform: translateY(-1px);\n    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);\n}\n\n.join-button:active {\n    transform: scale(0.96);\n}\n\n.custom-tag {\n    font-size: 0.8rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    background-color: #f0f0f0;\n    color: #666;\n    border-radius: 2rem;\n    padding: 0.15rem 0.6rem;\n    white-space: nowrap;\n}\n\n#lobby-create {\n    display: grid;\n    grid-template-columns: max-content 1fr;\n    column-gap: 1rem;\n    row-gap: 0.5rem;\n    overflow-y: auto;\n    scrollbar-gutter: stable;\n    padding-right: 0.5rem;\n    flex: 1;\n    min-height: 0;\n    grid-template-rows: min-content min-content min-content min-content min-content min-content min-content max-content;\n}\n\n.lobby-create-label {\n    font-weight: 600;\n}\n\n.advanced-toggle-checkbox {\n    display: none !important;\n}\n\n.advanced-section-label {\n    display: none !important;\n}\n\n.advanced-section-content {\n    display: contents !important;\n}\n\n#custom_words {\n    min-height: 4rem;\n}\n\n.lobby-create-errors {\n    display: flex;\n    flex-direction: column;\n    gap: 0.5rem;\n    background-color: #ff6961;\n    border-radius: 1rem;\n    padding: 0.5rem;\n}\n\n.create-buttons {\n    display: flex;\n    flex-direction: row;\n    gap: 0.5rem;\n}\n\n.create-button {\n    height: 2rem;\n    flex: 1;\n}\n\n.number-input {\n    display: flex;\n    flex-direction: row;\n    padding: 0;\n    border-radius: var(--component-border-radius);\n    border: 2px hidden;\n    min-width: 0;\n    box-sizing: border-box;\n}\n\n.number-input > button {\n    width: 1.5rem;\n    background-color: color-mix(in srgb, var(--component-base-color), #000 5%);\n}\n\n.number-input > button:hover {\n    background-color: var(--component-hover-background);\n}\n\n.number-input > button:focus {\n    background-color: var(--component-focus-background);\n}\n\n.number-decrement {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.number-increment {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n}\n\n.number-input > input {\n    flex: 1;\n    border-radius: 0;\n    -webkit-appearance: textfield;\n    appearance: textfield;\n    min-width: 0;\n}\n\n.number-input > input::-webkit-inner-spin-button,\n.number-input > input::-webkit-inner-spin-button {\n    -webkit-appearance: none;\n}\n\n.reload-spinner {\n    animation-name: spin;\n    animation-duration: 1000ms;\n    animation-iteration-count: infinite;\n}\n\n@keyframes spin {\n    from {\n        transform: rotate(0deg);\n    }\n\n    to {\n        transform: rotate(360deg);\n    }\n}\n\n@media (max-width: 1000px) or (orientation: portrait) {\n    #lobby-create {\n        grid-template-columns: 1fr minmax(0, 8.5rem) !important;\n        column-gap: 0.5rem;\n        scrollbar-gutter: auto;\n    }\n\n    textarea.input-item {\n        height: 6rem;\n    }\n\n    #lobby-join-choice {\n        flex: 1;\n    }\n\n    .home-choice {\n        height: initial;\n    }\n\n    #logo {\n        width: 95vw;\n        max-height: 10vh;\n        margin-left: 0;\n        margin-right: 0;\n        margin-top: 0;\n    }\n\n    #home-choices {\n        flex-direction: column;\n        flex: 1;\n        gap: 1.5rem;\n        width: 100%;\n        box-sizing: border-box;\n        padding-left: 1rem;\n        padding-right: 1rem;\n        padding-bottom: 1rem;\n    }\n\n    .home-choice {\n        width: 100%;\n        box-sizing: border-box;\n        height: auto;\n        min-height: 15rem;\n        max-height: none;\n        flex: none;\n        overflow: visible;\n    }\n\n    #lobby-create {\n        overflow-y: visible;\n        flex: none;\n    }\n\n    .home-choice-inner {\n        height: auto;\n        min-height: 0;\n    }\n\n    #lobby-list {\n        flex: 1;\n    }\n\n    .advanced-section-label {\n        display: flex !important;\n        grid-column: 1 / -1;\n        border-top: 1px solid rgba(0, 0, 0, 0.1);\n        padding-top: 0.5rem;\n        margin-top: 0.5rem;\n        cursor: pointer;\n        user-select: none;\n        font-weight: 600;\n        justify-content: space-between;\n        align-items: center;\n    }\n\n    .advanced-section-label .toggle-icon {\n        transition: transform 0.2s;\n        font-size: 0.8rem;\n    }\n\n    .advanced-toggle-checkbox:checked + .advanced-section-label .toggle-icon {\n        transform: rotate(90deg);\n    }\n\n    .advanced-toggle-checkbox:checked ~ .advanced-section-content {\n        display: initial !important;\n        max-height: 0;\n        opacity: 1;\n        overflow: hidden;\n        pointer-events: none;\n    }\n\n    .advanced-section-content label[for=\"custom_words\"],\n    .advanced-section-content #custom_words {\n        grid-column: 1 / -1;\n    }\n\n    .lobby-list-item {\n        grid-template-columns: auto 1fr auto !important;\n        text-align: left !important;\n        gap: 0.6rem !important;\n        padding: 0.6rem 0.8rem !important;\n    }\n\n    .language-flag {\n        font-size: 2.2rem !important;\n        margin-right: 0 !important;\n    }\n\n    .lobby-list-rows {\n        gap: 0.15rem !important;\n        justify-content: center;\n        display: flex;\n        flex-direction: column;\n    }\n\n    .lobby-list-row {\n        justify-content: flex-start !important;\n        gap: 0.35rem !important;\n    }\n\n    .lobby-list-item-info-pair {\n        padding: 0.15rem 0.4rem !important;\n        font-size: 0.8rem !important;\n    }\n\n    .join-button {\n        width: auto !important;\n        margin-top: 0 !important;\n        padding: 0.4rem 0.8rem !important;\n        font-size: 0.9rem !important;\n        align-self: center !important;\n    }\n}\n"
  },
  {
    "path": "internal/frontend/resources/lobby.css",
    "content": ":root {\n    --dot-color: black;\n}\n\n.noscript {\n    display: flex;\n    font-size: 2.5rem;\n    font-weight: bold;\n    justify-content: center;\n    border-bottom: 1rem solid black;\n    padding: 10px;\n}\n\n.custom-check-or-radio {\n    /* Little hack in order to hide the original components of the check/radio button */\n    opacity: 0;\n    position: absolute;\n}\n\n.input-container {\n    justify-content: center;\n    align-items: center;\n    display: inline-grid;\n    grid-template-columns: auto auto auto auto;\n    column-gap: 20px;\n    row-gap: 10px;\n}\n\n.input-container > b {\n    align-self: baseline;\n}\n\n.input-container > input[type=\"checkbox\"] {\n    /* By default checkboxes seem to have a bigger margin on the left. */\n    margin-left: 0;\n    margin-right: 0;\n}\n\nkbd {\n    background-color: #eee;\n    border-radius: 3px;\n    border: 1px solid #b4b4b4;\n    box-shadow:\n        0 1px 1px rgb(0 0 0 / 20%),\n        0 2px 0 0 rgb(255 255 255 / 70%) inset;\n    color: #333;\n    display: inline-block;\n    font-size: 0.85em;\n    font-weight: 700;\n    line-height: 1;\n    vertical-align: middle;\n    padding: 2px 4px;\n    white-space: nowrap;\n}\n\n@media only screen and (max-width: 812px),\n    (orientation: portrait) or (max-aspect-ratio: 4/3) {\n    h1 {\n        font-size: 4rem;\n    }\n\n    h2 {\n        font-size: 2rem;\n    }\n\n    .input-container {\n        align-items: start;\n        display: flex;\n        flex-direction: column;\n        width: 100%;\n        row-gap: 5px;\n    }\n\n    .input-container > input[type=\"checkbox\"] {\n        width: initial;\n    }\n\n    .input-container > * {\n        width: 100%;\n        /* These two prevent blow-out of the input elements */\n        display: block;\n        box-sizing: border-box;\n    }\n}\n\n.ready-check-box-wrapper {\n    display: flex;\n    align-self: center;\n}\n\n.ready-check-box {\n    padding: 0.5rem 1rem 0.5rem 1rem;\n    background-color: var(--component-base-color);\n    border-radius: var(--component-border-radius);\n}\n\n.ready-check-box:has(input[type=\"checkbox\"]:checked) {\n    background-color: rgb(255, 224, 66);\n}\n\n.ready-needed,\n.ready-count {\n    font-family: monospace;\n    font-size: 1rem;\n}\n\n#lobby-header {\n    grid-column-start: 1;\n    grid-column-end: 4;\n    grid-row: 1;\n\n    display: grid;\n    grid-template-columns: 15rem auto 18rem;\n    grid-gap: 5px;\n}\n\n#lobby-header > *,\n#menu-button-container {\n    background-color: white;\n    height: 100%;\n    align-items: center;\n    padding: 0.1rem 0.2rem;\n    box-sizing: border-box;\n    border-radius: var(--component-border-radius);\n}\n\n#lobby-header-center-element {\n    display: flex;\n    justify-content: center;\n    /* Hack to remove extra space between buttons */\n    font-size: 0;\n}\n\n#round-container,\n#time-left {\n    font-size: 1.5rem;\n    align-self: center;\n    display: flex;\n}\n\n#rounds {\n    margin-left: 0.25rem;\n}\n\n#rounds::after {\n    content: \"/\";\n}\n\n#time-left-value {\n    min-width: 3rem;\n    width: 3rem;\n    margin-left: 0.25rem;\n}\n\n#word-container {\n    flex: 1;\n    display: flex;\n    justify-content: center;\n    text-align: center;\n    column-gap: 0.5rem;\n    width: 0;\n    overflow-x: hidden;\n}\n\n.word-length-hint {\n    font-family: monospace;\n    font-size: 0.8rem;\n    padding-top: 0.4rem;\n}\n\n.hint-chat-message {\n    white-space: pre;\n    text-wrap-mode: wrap;\n}\n\n.hint-underline {\n    border-bottom: 0.2rem black solid;\n    padding-bottom: 0.1rem;\n}\n\n.hint-revealed {\n    border-bottom: 0.2rem rgb(38, 187, 38) solid;\n    padding-bottom: 0.1rem;\n}\n\n.hint {\n    font-family: monospace;\n    font-weight: bold;\n    font-size: 1.5rem;\n    line-height: 1.4rem;\n}\n\n#lobby {\n    padding: 5px;\n    display: grid;\n    grid-template-columns: 15rem auto 18rem;\n    grid-template-rows: min-content min-content auto;\n    grid-gap: 5px;\n    flex: 1 1;\n}\n\n/*\n * These two ensure that the drawing board has an aspect ratio of 16/9.\n * Technically we could make this configurable by setting the padding via JS.\n */\n#drawing-board-wrapper {\n    width: 100%;\n    height: 0;\n    padding-top: 56.25%;\n    position: relative;\n    grid-column: 2;\n    grid-row: 2;\n}\n\n#drawing-board-inner-wrapper {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n}\n\n#drawing-board {\n    position: absolute;\n    background-color: white;\n    width: 100%;\n    height: 100%;\n    user-select: none;\n    border-radius: var(--component-border-radius);\n}\n\n#center-dialogs {\n    /* Without these two, drawing is impossible, since this container catches all events. */\n    pointer-events: none;\n    touch-action: none;\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    z-index: 20;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n}\n\n.center-dialog {\n    /* All dialogs are initially invisible. */\n    visibility: hidden;\n    /* Since the parent ignores all of those events, we need to\n    restore the handling, since our dialogs have buttons. */\n    pointer-events: all;\n    touch-action: auto;\n    /* Allows layering, since there can be more than one dialog. */\n    position: absolute;\n    /* A dialog should never fully hide the canvas. */\n    max-width: 80%;\n    max-height: 80%;\n    background-color: rgb(225, 221, 221);\n    padding: 1rem;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    overflow: hidden;\n    border-radius: var(--component-border-radius);\n}\n\n.center-dialog-content {\n    overflow: auto;\n    flex: 1;\n    width: 100%;\n    justify-content: center;\n    display: flex;\n}\n\n#chat {\n    display: flex;\n    flex-direction: column;\n    grid-column: 3;\n    grid-row-start: 2;\n    grid-row-end: 3;\n    height: 0;\n    min-height: 100%;\n}\n\n#message-container {\n    overflow-y: scroll;\n    background-color: white;\n    flex: 1;\n    border-radius: var(--component-border-radius) var(--component-border-radius)\n        0 0;\n}\n\n.chat-name {\n    font-weight: bold;\n    padding-right: 0.2em;\n}\n\n.chat-name:after {\n    content: \":\";\n}\n\n.correct-guess-message {\n    font-weight: bold;\n    color: rgb(38, 187, 38);\n}\n\n.correct-guess-message-other-player {\n    font-weight: bold;\n    color: rgb(231 198 32);\n}\n\n.non-guessing-player-message {\n    color: rgb(38, 187, 38);\n}\n\n.close-guess-message {\n    font-weight: bold;\n    color: rgb(25, 166, 166);\n}\n\n#message-input {\n    padding: 10px;\n    margin-top: 5px;\n    border: 0;\n    border-radius: 0 0 var(--component-border-radius)\n        var(--component-border-radius);\n}\n\n.dialog-title {\n    margin-bottom: 1rem;\n    font-size: 2.75rem;\n    font-weight: bold;\n    color: rgb(240, 105, 127);\n    text-align: center;\n}\n\n#word-button-container {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    margin-left: 20px;\n    margin-right: 20px;\n    gap: 0.5rem;\n    align-self: stretch;\n}\n\n@media only screen and (max-width: 600px) {\n    #word-button-container {\n        grid-template-columns: repeat(2, 1fr);\n    }\n}\n\n.dialog-button {\n    border: none;\n    background-color: var(--component-base-color);\n    padding: 0.5rem 1rem 0.5rem 1rem;\n}\n\n.button-bar {\n    display: flex;\n    align-items: stretch;\n    justify-content: center;\n    margin-top: 1em;\n    gap: 0.25rem;\n}\n\n.line-width-button-content:hover {\n    background-color: var(--component-hover-background);\n}\n\n.header-button {\n    padding: 0.2rem;\n    background-color: transparent;\n    user-select: none;\n}\n\n.header-button-image {\n    width: 1.7rem;\n    height: 1.7rem;\n    /** Without these two, the button has too much height. */\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.dot {\n    background-color: var(--dot-color);\n    border: 1px solid black;\n    border-radius: 50%;\n}\n\n.line-width-button-content {\n    width: 50px;\n    height: 50px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background-color: var(--component-base-color);\n}\n\n.line-width-button-content > *,\n.canvas-button > * {\n    width: 40px;\n    height: 40px;\n}\n\n.line-width-button:checked + .line-width-button-content {\n    background-color: var(--component-active-background);\n}\n\n.canvas-button {\n    height: 50px;\n    width: 50px;\n    border: 0;\n    padding: 0;\n}\n\n.canvas-button > img {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.canvas-button::-moz-focus-inner {\n    border: 0;\n}\n\n.color-button-container {\n    border: 1px solid gray;\n    display: flex;\n    flex-direction: column;\n    height: 48px;\n    border-radius: var(--component-border-radius);\n    overflow: hidden;\n}\n\n.color-button-row {\n    display: flex;\n    flex-direction: row;\n}\n\n.color-button {\n    height: 24px;\n    width: 24px;\n    border: 0;\n    border-radius: 0;\n}\n\n.color-button::-moz-focus-inner {\n    border: 0;\n}\n\n.message {\n    overflow-wrap: break-word;\n    padding: 0.3em 0.2em 0.2em 0.3em;\n}\n\n.message:nth-child(2n) {\n    background-color: rgb(240, 238, 238);\n}\n\n.system-message {\n    font-weight: bold;\n    color: red;\n}\n\n#toolbox {\n    display: flex;\n    flex-direction: row;\n    flex-wrap: wrap;\n    grid-row: 3;\n    grid-column: 2 / 4;\n    height: min-content;\n    user-select: none;\n    column-gap: 10px;\n    row-gap: 5px;\n}\n\n.toolbox-group {\n    align-self: flex-start;\n}\n\n.pencil-sizes-container {\n    display: flex;\n    gap: 2.5px;\n}\n\n.line-width-button-content {\n    border-radius: var(--component-border-radius);\n}\n\n#player-container {\n    display: flex;\n    flex-direction: column;\n    grid-column: 1;\n    grid-row: 2;\n    overflow-y: auto;\n    height: 0;\n    min-height: 100%;\n}\n\n.player {\n    background-color: rgb(255, 255, 255);\n    padding: 0.2rem;\n    display: grid;\n    grid-template-columns: fit-content(100%) auto;\n    grid-template-rows: 1fr 1fr;\n    border-radius: var(--component-border-radius);\n}\n\n.player + .player {\n    margin-top: 5px;\n}\n\n.playername {\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    overflow: hidden;\n    flex: 1;\n}\n\n.playername-self {\n    font-weight: bold;\n}\n\n.player-done {\n    background-color: rgb(141, 224, 15);\n}\n\n.player-ready {\n    background-color: rgb(255, 224, 66);\n}\n\n.rank {\n    display: flex;\n    grid-row-start: 1;\n    grid-row-end: 3;\n    justify-content: center;\n    align-items: center;\n    width: 2.5rem;\n    font-size: 1.5rem;\n}\n\n.playerscore-group {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n}\n\n.score-and-status {\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n}\n\n.last-turn-score {\n    font-size: 0.8rem;\n    color: lightslategray;\n    padding-left: 0.2rem;\n}\n\n#kick-dialog-players {\n    flex: 1;\n}\n\n.kick-player-button {\n    width: 100%;\n}\n\n.kick-player-button + .kick-player-button {\n    margin-top: 0.5rem;\n}\n\n.gameover-scoreboard-entry {\n    font-size: 1.3rem;\n    padding: 0.3rem 1rem 0.3rem 1rem;\n    display: flex;\n    flex-direction: row;\n    background-color: rgb(245, 245, 245);\n}\n\n.gameover-scoreboard-entry + .gameover-scoreboard-entry {\n    margin-top: 0.5rem;\n}\n\n.gameover-scoreboard-entry-self {\n    font-weight: bold;\n}\n\n.gameover-scoreboard-entry:last-child {\n    margin-bottom: 1rem;\n}\n\n.gameover-scoreboard-rank {\n    margin-right: 1rem;\n}\n\n.gameover-scoreboard-name {\n    flex: 1;\n    text-align: center;\n}\n\n.gameover-scoreboard-score {\n    margin-left: 1rem;\n}\n\n#force-restart-button {\n    display: none;\n}\n\n#reconnect-dialog {\n    /* As this dialog is very important, it should always be on the top. */\n    z-index: 100;\n}\n\n.namechange-field {\n    width: 100%;\n    height: 100%;\n    box-sizing: border-box;\n    padding: 0.35rem;\n}\n\n#waitchoose-drawer {\n    font-weight: bold;\n}\n\n@media only screen and (max-width: 812px) and (orientation: landscape) {\n    html {\n        font-size: 0.8rem;\n    }\n\n    #lobby-header,\n    #lobby {\n        grid-template-columns: 12rem auto 15rem;\n    }\n}\n\n@media only screen and (max-width: 812px) {\n    .center-dialog {\n        padding: 0.5rem;\n    }\n\n    .button-bar {\n        margin-top: 0.5em;\n    }\n\n    .dialog-title {\n        font-size: 1.75rem;\n    }\n\n    .color-button-container {\n        height: 38px;\n    }\n\n    .color-button {\n        width: 19px;\n        height: 19px;\n    }\n\n    .canvas-button,\n    .line-width-button-content {\n        width: 40px;\n        height: 40px;\n    }\n\n    .line-width-button-content > *,\n    .canvas-button > * {\n        width: 32px;\n        height: 32px;\n    }\n}\n\n@media only screen and (max-width: 812px) and (not (orientation: landscape)) {\n    #message-container {\n        max-height: 5rem;\n    }\n}\n\n@media only screen and (orientation: portrait), (max-aspect-ratio: 4/3) {\n    #lobby {\n        grid-template-columns: 2fr 3fr;\n        grid-template-rows: min-content min-content min-content auto;\n    }\n\n    #lobby-header {\n        background-color: transparent;\n        display: grid;\n        grid-column-end: 3;\n        grid-column-start: 1;\n        grid-gap: 5px;\n        grid-row: 1;\n        grid-template-columns: 1fr auto 1fr;\n        grid-template-rows: auto auto;\n    }\n\n    #lobby-header-center-element {\n        display: contents;\n    }\n\n    #menu-button-container {\n        grid-column: 2;\n        grid-row: 1;\n        display: flex;\n        justify-content: center;\n    }\n\n    #round-container {\n        grid-column: 1;\n        grid-row: 1;\n        justify-content: flex-start;\n    }\n\n    #time-left {\n        grid-column: 3;\n        grid-row: 1;\n        justify-content: flex-end;\n    }\n\n    #word-container {\n        grid-column: 1 / 4;\n        grid-row: 2;\n        background-color: white;\n        align-items: center;\n        padding: 0.1rem 0.2rem;\n        border-radius: var(--component-border-radius);\n        column-gap: 0.2rem;\n        width: auto;\n        min-width: 0;\n        overflow: visible;\n    }\n\n    #round-container,\n    #time-left {\n        font-size: 1.1rem;\n    }\n\n    #time-left-value {\n        min-width: 2.4rem;\n        width: 2.4rem;\n    }\n\n    .header-button-image {\n        width: 1.2rem;\n        height: 1.2rem;\n    }\n\n    .hint {\n        font-size: 1.1rem;\n        line-height: 1.1rem;\n    }\n\n    .hint-underline {\n        border-bottom-width: 0.15rem;\n    }\n\n    #drawing-board-wrapper {\n        grid-column-start: 1;\n        grid-column-end: 3;\n        grid-row: 2;\n    }\n\n    #toolbox {\n        grid-row: 3;\n        grid-column-start: 1;\n        grid-column-end: 3;\n        column-gap: 5px;\n    }\n\n    #player-container {\n        grid-column: 1;\n        grid-row: 4;\n        height: auto;\n        min-height: auto;\n    }\n\n    #chat {\n        grid-column: 2;\n        grid-row: 4;\n        height: 0;\n        min-height: 100%;\n    }\n}\n\n#menu-button-container {\n    position: relative;\n}\n\n#menu-button {\n    anchor-name: menu-anchor;\n}\n\n#menu {\n    position-anchor: menu-anchor;\n    position-area: bottom span-right;\n    position-try-fallbacks: flip-block, flip-inline;\n\n    margin: 0;\n    inset: auto;\n    border: 1px solid gray;\n    border-radius: var(--component-border-radius);\n}\n\n.menu-list {\n    display: flex;\n    flex-direction: column;\n    gap: 5px;\n    padding: 5px;\n}\n\n.menu-item {\n    display: flex;\n    align-items: center;\n    flex-direction: row;\n    gap: 10px;\n    font-size: 1rem !important;\n}\n"
  },
  {
    "path": "internal/frontend/resources/root.css",
    "content": ":root {\n    --pane-background: #eee5e9;\n    --component-base-color: #ffffff;\n    --component-hover-background: rgb(250, 211, 252) !important;\n    --component-hover-lighter-background: rgb(252, 231, 253) !important;\n    --component-focus-background: rgb(244, 183, 247);\n    --component-active-background: rgb(192, 58, 200);\n    --component-border-radius: 0.5rem;\n\n    font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n    line-height: 1.5;\n\n    color: #222;\n\n    font-synthesis: none;\n    text-rendering: optimizeLegibility;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    -webkit-text-size-adjust: 100%;\n}\n\n* {\n    outline: none;\n}\n\nhtml,\nbody {\n    min-height: 100vh;\n}\n\nbody,\nbody::backdrop,\nbody:fullscreen {\n    margin: 0;\n    background: linear-gradient(\n        90deg,\n        rgba(46, 46, 175, 1) 0%,\n        rgba(37, 79, 191, 1) 42%,\n        rgba(0, 170, 255, 1) 100%\n    );\n}\n\nbody::before {\n    content: \" \";\n    position: fixed;\n    left: 0;\n    top: 0;\n    width: 100vw;\n    height: 100vh;\n    opacity: 0.5;\n    background: var(--scribble-background) repeat;\n    background-size: 400px 400px;\n    background-repeat: repeat;\n    z-index: -1;\n}\n\nfooter,\n.help-footer {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    gap: 1rem;\n}\n\nfooter {\n    padding: 0.1rem;\n    background-color: lightslategray;\n    color: white;\n}\n\n.help-footer {\n    flex-wrap: wrap;\n}\n\na:link,\na:visited {\n    color: inherit;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\nh1,\nh2 {\n    margin: 0;\n    text-align: center;\n    color: rgb(248, 148, 164);\n}\n\nh1 {\n    font-size: 6rem;\n}\n\nh2 {\n    font-size: 4rem;\n}\n\nul {\n    margin: 0;\n}\n\nselect,\ninput,\nbutton,\ntextarea {\n    background-color: var(--component-base-color);\n    color: inherit;\n    border-radius: var(--component-border-radius);\n    border: 2px hidden;\n}\n\ninput:hover,\nbutton:hover,\nselect:hover,\ntextarea:hover {\n    background-color: var(--component-hover-background);\n}\n\ninput:focus,\nbutton:focus,\nselect:focus,\ntextarea:focus {\n    background-color: var(--component-focus-background);\n}\n\nbutton:active {\n    background-color: var(--component-active-background);\n}\n\ninput,\nselect {\n    padding-left: 0.35rem;\n    padding-right: 0.35rem;\n}\n\ntextarea {\n    padding-left: 0.4rem;\n    padding-top: 0.2rem;\n    min-width: 0;\n    resize: none;\n}\n\n#app {\n    display: flex;\n    flex-direction: column;\n    min-height: 100vh;\n}\n\n.noscript {\n    display: flex;\n    font-size: 2.5rem;\n    font-weight: bold;\n    justify-content: center;\n    border-bottom: 1rem solid black;\n    padding: 10px;\n}\n"
  },
  {
    "path": "internal/frontend/templates/error.html",
    "content": "{{define \"error-page\"}}\n<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <title>Scribble.rs - Error</title>\n    <meta charset=\"UTF-8\" />\n    {{template \"non-static-css-decl\" .}}\n    <link rel=\"stylesheet\" type=\"text/css\" href='{{.RootPath}}/resources/{{.WithCacheBust \"root.css\"}}' />\n    <link rel=\"stylesheet\" type=\"text/css\" href='{{.RootPath}}/resources/{{.WithCacheBust \"error.css\"}}' />\n    {{template \"favicon-decl\" .}}\n</head>\n\n<body {{if eq .Translation.IsRtl true}} dir=\"rtl\" {{end}}>\n    <div id=\"app\">\n        <div class=\"error-pane-wrapper\">\n            <div class=\"error-pane\">\n                <h1 class=\"error-title\">(◕︿◕✿)</h1>\n                <h2 class=\"error-message\">{{.ErrorMessage}}</h2>\n                <a class=\"go-back\" href=\"{{.RootPath}}/\">\n                  {{.Translation.Get \"click-to-homepage\"}}\n                </a>\n            </div>\n        </div>\n        <footer>\n            {{template \"footer\" .}}\n        </footer>\n    </div>\n</body>\n\n</html>\n{{end}}\n"
  },
  {
    "path": "internal/frontend/templates/favicon.html",
    "content": "{{define \"favicon-decl\"}}\n<link rel=\"icon\" type=\"image/svg+xml\" href='{{.RootPath}}/resources/{{.WithCacheBust \"favicon.svg\"}}' sizes=\"any\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href='{{.RootPath}}/resources/{{.WithCacheBust \"favicon_16.png\"}}'>\n<link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href='{{.RootPath}}/resources/{{.WithCacheBust \"favicon_32.png\"}}'>\n<link rel=\"icon\" type=\"image/png\" sizes=\"92x92\" href='{{.RootPath}}/resources/{{.WithCacheBust \"favicon_92.png\"}}'>\n{{end}}\n"
  },
  {
    "path": "internal/frontend/templates/footer.html",
    "content": "{{define \"footer\"}}\n{{if eq .Version \"dev\"}}\n<a class=\"footer-item\" href=\"https://github.com/scribble-rs/scribble.rs\" target=\"_blank\">{{.Version}}</a>\n{{else if ne .Commit \"\"}}\n<a class=\"footer-item\" href=\"https://github.com/scribble-rs/scribble.rs/commit/{{.Commit}}\"\n    target=\"_blank\">{{.Version}}</a>\n{{else}}\n<a class=\"footer-item\" href=\"https://github.com/scribble-rs/scribble.rs/releases/tag/{{.Version}}\"\n    target=\"_blank\">{{.Version}}</a>\n{{end}}\n{{if ne .Translation nil}}\n<a class=\"footer-item\" href=\"https://github.com/scribble-rs/scribble.rs\"\n    target=\"_blank\">{{.Translation.Get \"source-code\"}}</a>\n<a class=\"footer-item\" href=\"https://github.com/scribble-rs/scribble.rs/wiki\"\n    target=\"_blank\">{{.Translation.Get \"help\"}}</a>\n<a class=\"footer-item\" href=\"https://github.com/scribble-rs/scribble.rs/issues/new\"\n    target=\"_blank\">{{.Translation.Get \"submit-feedback\"}}</a>\n<a class=\"footer-item\" href=\"{{.RootPath}}/v1/stats\" target=\"_blank\">{{.Translation.Get \"stats\"}}</a>\n{{end}}\n{{end}}\n"
  },
  {
    "path": "internal/frontend/templates/index.html",
    "content": "{{define \"index\"}}\n<!DOCTYPE html>\n<html lang=\"{{.Locale}}\">\n\n<head>\n    <title>Scribble.rs</title>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <meta name=\"description\"\n        content=\"A free and privacy respecting pictionary game to play with your friends. Multiple languages are available.\">\n    <meta name=\"keywords\" content=\"skribbl, skribbl io, skribblio,\n            skribbl.io, scribble, scribblers, scribble.rs, pictionary,\n            montagsmaler, sketchful, draw and guess, drawmything, free, oss\">\n    <link rel=\"canonical\" href=\"{{.CanonicalURL}}\" />\n    {{if not .AllowIndexing}}\n    <meta name=\"robots\" content=\"noindex, nofollow\">{{end}}\n    {{if ne \"\" .RootURL}}\n    <meta property=\"og:image\" content=\"{{.RootURL}}{{.RootPath}}/resources/logo.png\">\n    <meta property=\"og:image:type\" content=\"image/png\">\n    <meta property=\"og:image:width\" content=\"1600\">\n    <meta property=\"og:image:height\" content=\"800\">\n    <meta property=\"twitter:image\" content=\"{{.RootURL}}{{.RootPath}}/resources/logo.png\">\n    <meta name=\"twitter:card\" content=\"summary_large_image\">\n    {{end}}\n    {{template \"non-static-css-decl\" .}}\n    <link rel=\"stylesheet\" type=\"text/css\" href='{{.RootPath}}/resources/{{.WithCacheBust \"root.css\"}}' />\n    <link rel=\"stylesheet\" type=\"text/css\" href='{{.RootPath}}/resources/{{.WithCacheBust \"index.css\"}}' />\n    {{template \"favicon-decl\" .}}\n    <link rel=\"prefetch\" href='{{.RootPath}}/resources/{{.WithCacheBust \"user.svg\"}}' />\n    <link rel=\"prefetch\" href='{{.RootPath}}/resources/{{.WithCacheBust \"round.svg\"}}' />\n    <link rel=\"prefetch\" href='{{.RootPath}}/resources/{{.WithCacheBust \"clock.svg\"}}' />\n</head>\n\n  <body {{if eq .Translation.IsRtl true}} dir=\"rtl\" {{end}}>\n    <div id=\"app\">\n        <div class=\"home\">\n            <img id=\"logo\" src='{{.RootPath}}/resources/{{.WithCacheBust \"logo.svg\"}}' alt=\"Scribble.rs logo\">\n            <div id=\"home-choices\">\n                <div class=\"home-choice\">\n                    <div class=\"home-choice-inner\">\n                        <div class=\"home-choice-header\">\n                            <div class=\"home-choice-title\">\n                                {{.Translation.Get \"create-lobby\"}}\n                            </div>\n                        </div>\n                        {{if .Errors}}\n                        <div class=\"lobby-create-errors\">\n                            {{range .Errors}}\n                            <div class=\"error\">{{.}}</div>\n                            {{end}}\n                        </div>\n                        {{end}}\n                        <form id=\"lobby-create\" action=\"{{.RootPath}}/lobby\" method=\"POST\">\n                            <label class=\"lobby-create-label\" for=\"language\">\n                                {{.Translation.Get \"word-language\"}}\n                            </label>\n                            <select class=\"input-item\" name=\"language\" id=\"language\" placeholder=\"Choose your language\">\n                                {{$language := .Language}}\n                                {{range $k, $v := .Languages}}\n                                <option value=\"{{$k}}\" label=\"{{$v}}\" {{if eq $k $language}}selected=\"selected\" {{end}}>\n                                </option>\n                                {{end}}\n                            </select>\n                            <label class=\"lobby-create-label\" for=\"score_calculation\">\n                                {{.Translation.Get \"score-calculation\"}}\n                            </label>\n                            <select class=\"input-item\" name=\"score_calculation\" id=\"score_calculation\"\n                                placeholder=\"Choose how player scores are determined\">\n                                {{$scoreCalculation := .ScoreCalculation}}\n                                {{range $k := .ScoreCalculations}}\n                                {{$alt := $.Translation.Get (print $k \"-alt\")}}\n                                <option alt=\"{{$alt}}\" title=\"{{$alt}}\" value=\"{{$k}}\" label=\"{{$.Translation.Get $k}}\"\n                                    {{if eq $k $scoreCalculation}}selected=\"selected\" {{end}}>\n                                </option>\n                                {{end}}\n                            </select>\n                            <label class=\"lobby-create-label\" for=\"drawing_time\">\n                                {{.Translation.Get \"drawing-time-setting\"}}\n                            </label>\n                            <div class=\"number-input\">\n                                <button class=\"number-decrement\" type=\"button\">-</button>\n                                <input size=\"4\" type=\"number\" name=\"drawing_time\" id=\"drawing_time\"\n                                    min=\"{{.MinDrawingTime}}\" max=\"{{.MaxDrawingTime}}\" value=\"{{.DrawingTime}}\">\n                                <button class=\"number-increment\" type=\"button\">+</button>\n                            </div>\n                            <label class=\"lobby-create-label\" for=\"rounds\">\n                                {{.Translation.Get \"rounds-setting\"}}\n                            </label>\n                            <div class=\"number-input\">\n                                <button class=\"number-decrement\" type=\"button\">-</button>\n                                <input size=\"4\" type=\"number\" name=\"rounds\" id=\"rounds\" min=\"{{.MinRounds}}\"\n                                    max=\"{{.MaxRounds}}\" value=\"{{.Rounds}}\">\n                                <button class=\"number-increment\" type=\"button\">+</button>\n                            </div>\n                            <label class=\"lobby-create-label\" for=\"max_players\">\n                                {{.Translation.Get \"max-players-setting\"}}\n                            </label>\n                            <div class=\"number-input\">\n                                <button class=\"number-decrement\" type=\"button\">-</button>\n                                <input size=\"4\" type=\"number\" name=\"max_players\" id=\"max_players\"\n                                    min=\"{{.MinMaxPlayers}}\" max=\"{{.MaxMaxPlayers}}\" value=\"{{.MaxPlayers}}\">\n                                <button class=\"number-increment\" type=\"button\">+</button>\n                            </div>\n\n                            <input type=\"checkbox\" id=\"advanced-toggle\" class=\"advanced-toggle-checkbox\" checked>\n                            <label for=\"advanced-toggle\" class=\"advanced-section-label\">\n                                {{.Translation.Get \"advanced-settings\"}}\n                                <span class=\"toggle-icon\">▼</span>\n                            </label>\n                            <div class=\"advanced-section-content\">\n                                <label class=\"lobby-create-label\" for=\"clients_per_ip_limit\">\n                                    {{.Translation.Get \"players-per-ip-limit-setting\"}}\n                                </label>\n                                <div class=\"number-input\">\n                                    <button class=\"number-decrement\" type=\"button\">-</button>\n                                    <input size=\"4\" type=\"number\" name=\"clients_per_ip_limit\" id=\"clients_per_ip_limit\"\n                                        min=\"{{.MinClientsPerIPLimit}}\" max=\"{{.MaxClientsPerIPLimit}}\"\n                                        value=\"{{.ClientsPerIPLimit}}\">\n                                    <button class=\"number-increment\" type=\"button\">+</button>\n                                </div>\n                                <label class=\"lobby-create-label\" for=\"words_per_turn\">\n                                  {{.Translation.Get \"words-per-turn-setting\"}}\n                                </label>\n                                <div class=\"number-input\">\n                                    <button class=\"number-decrement\" type=\"button\">-</button>\n                                    <input size=\"4\" type=\"number\" name=\"words_per_turn\" id=\"words_per_turn\"\n                                      min=\"{{.MinWordsPerTurn}}\" max=\"{{.MaxWordsPerTurn}}\" value=\"{{.WordsPerTurn}}\">\n                                    <button class=\"number-increment\" type=\"button\">+</button>\n                                </div>\n                                <label class=\"lobby-create-label\" for=\"custom_words_per_turn\">\n                                    {{.Translation.Get \"custom-words-per-turn-setting\"}}\n                                </label>\n                                <div class=\"number-input\">\n                                    <button class=\"number-decrement\" type=\"button\">-</button>\n                                    <input size=\"4\" type=\"number\" name=\"custom_words_per_turn\" id=\"custom_words_per_turn\"\n                                        min=\"{{.MinCustomWordsPerTurn}}\" max=\"{{.MaxWordsPerTurn}}\" value=\"{{.CustomWordsPerTurn}}\">\n                                    <button class=\"number-increment\" type=\"button\">+</button>\n                                </div>\n                                <label class=\"lobby-create-label\" for=\"custom_words\">\n                                    {{.Translation.Get \"custom-words\"}}\n                                </label>\n                                <textarea class=\"input-item\" name=\"custom_words\" id=\"custom_words\"\n                                    placeholder=\"{{.Translation.Get \"custom-words-placeholder\"}}\">{{.CustomWords}}</textarea>\n                            </div>\n\n                            <input type=\"checkbox\" id=\"public-check-box\" name=\"public\" value=\"true\"\n                                style=\"display: none\" checked>\n                        </form>\n                        <div class=\"create-buttons\">\n                            <button id=\"create-public\" form=\"lobby-create\" type=\"submit\" class=\"create-button\">\n                                {{.Translation.Get \"create-public-lobby\"}}\n                            </button>\n                            <button form=\"lobby-create\" type=\"submit\" class=\"create-button\">\n                                {{.Translation.Get \"create-private-lobby\"}}\n                            </button>\n                        </div>\n                    </div>\n                </div>\n                <div id=\"lobby-join-choice\" class=\"home-choice\">\n                    <div class=\"home-choice-inner\">\n                        <div class=\"home-choice-header\">\n                            <div class=\"home-choice-title\">\n                                {{.Translation.Get \"join-lobby\"}}\n                            </div>\n                            <button id=\"refresh-lobby-list-button\">\n                                {{.Translation.Get \"refresh\"}}\n                            </button>\n                        </div>\n                        <div id=\"lobby-list-placeholder-text\" class=\"lobby-list-placeholder\"></div>\n                        <div id=\"lobby-list-placeholder-loading\" class=\"lobby-list-placeholder\">\n                            <svg class=\"reload-spinner\" fill=\"#000000\" height=\"48\" viewBox=\"0 0 24 24\" width=\"48\"\n                                xmlns=\"http://www.w3.org/2000/svg\">\n                                <path\n                                    d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\" />\n                            </svg>\n                        </div>\n                        <div id=\"lobby-list\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <footer>\n            {{template \"footer\" .}}\n        </footer>\n\n        <script type=\"text/javascript\" src='{{.RootPath}}/{{.WithCacheBust \"index.js\"}}'></script>\n</body>\n\n</html>\n{{end}}\n"
  },
  {
    "path": "internal/frontend/templates/lobby.html",
    "content": "{{define \"lobby-page\"}}\n<!DOCTYPE html>\n<html lang=\"{{.Locale}}\">\n\n<head>\n    <title>Scribble.rs - Game</title>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1 maximum-scale=1, user-scalable=0\">\n    {{template \"non-static-css-decl\" .}}\n    <link rel=\"stylesheet\" type=\"text/css\" href='{{.RootPath}}/resources/{{.WithCacheBust \"root.css\"}}' />\n    <link rel=\"stylesheet\" type=\"text/css\" href='{{.RootPath}}/resources/{{.WithCacheBust \"lobby.css\"}}' />\n    {{template \"favicon-decl\" .}}\n    <link rel=\"prefetch\" href='{{.RootPath}}/resources/{{.WithCacheBust \"plop.wav\"}}' />\n    <link rel=\"prefetch\" href='{{.RootPath}}/resources/{{.WithCacheBust \"end-turn.wav\"}}' />\n    <link rel=\"prefetch\" href='{{.RootPath}}/resources/{{.WithCacheBust \"your-turn.wav\"}}' />\n    <link rel=\"prefetch\" href='{{.RootPath}}/resources/{{.WithCacheBust \"pencil.svg\"}}' />\n    <link rel=\"prefetch\" href='{{.RootPath}}/resources/{{.WithCacheBust \"checkmark.svg\"}}' />\n    <link rel=\"prefetch\" href='{{.RootPath}}/resources/{{.WithCacheBust \"sound.svg\"}}' />\n    <link rel=\"prefetch\" href='{{.RootPath}}/resources/{{.WithCacheBust \"no-sound.svg\"}}' />\n</head>\n\n<body {{if eq .Translation.IsRtl true}} dir=\"rtl\" {{end}}>\n    <div id=\"app\">\n        <noscript><span class=\"noscript\">{{.Translation.Get \"requires-js\"}}</span></noscript>\n\n        <div id=\"lobby\">\n            <div id=\"lobby-header\">\n                <div id=\"round-container\">\n                    <img src='{{.RootPath}}/resources/{{.WithCacheBust \"round.svg\"}}' class=\"header-button-image\"\n                        alt=\"{{.Translation.Get \"round\"}}\" title=\"{{.Translation.Get \"round\"}}\" />\n                    <span id=\"rounds\"></span>\n                    <span id=\"max-rounds\"></span>\n                </div>\n\n                <div id=\"lobby-header-center-element\">\n                    <div id=\"menu-button-container\">\n                        <button id=\"menu-button\" popovertarget=\"menu\" alt=\"Show menu\" title=\"Show menu\">\n                            <img src='{{.RootPath}}/resources/{{.WithCacheBust \"menu.svg\"}}'\n                                class=\"header-button-image\" />\n                        </button>\n                        <div id=\"menu\" popover>\n                            <div class=\"menu-list\">\n                                <!-- this button is basically behaving like a checkbox, but in order to\n                have a uniform look with the other buttons in the header, we are not using\n                a checkbox anymore. -->\n                                <button id=\"toggle-sound-button\" class=\"dialog-button menu-item header-button\"\n                                    alt=\"{{.Translation.Get \"toggle-soundeffects\"}}\"\n                                    title=\"{{.Translation.Get \"toggle-soundeffects\"}}\">\n                                    <img id=\"sound-toggle-label\" class=\"header-button-image\" />\n                                    {{.Translation.Get \"toggle-soundeffects\"}}\n                                </button>\n                                <button id=\"toggle-pen-pressure-button\"\n                                    class=\"dialog-button menu-item header-button\"\n                                    alt=\"{{.Translation.Get \"toggle-pen-pressure\"}}\"\n                                    title=\"{{.Translation.Get \"toggle-pen-pressure\"}}\">\n                                    <img id=\"pen-pressure-toggle-label\" class=\"header-button-image\" />\n                                    {{.Translation.Get \"toggle-pen-pressure\"}}\n                                </button>\n                                <button id=\"name-change-button\" class=\"dialog-button menu-item header-button\"\n                                    alt=\"{{.Translation.Get \"change-your-name\"}}\"\n                                    title=\"{{.Translation.Get \"change-your-name\"}}\">\n                                    <img src='{{.RootPath}}/resources/{{.WithCacheBust \"user.svg\"}}'\n                                        class=\"header-button-image\" />\n                                    {{.Translation.Get \"change-your-name\"}}\n                                </button>\n                                <button id=\"toggle-fullscreen-button\" class=\"dialog-button menu-item header-button\"\n                                    alt=\"{{.Translation.Get \"toggle-fullscreen\"}}\"\n                                    title=\"{{.Translation.Get \"toggle-fullscreen\"}}\">\n                                    <img src='{{.RootPath}}/resources/{{.WithCacheBust \"fullscreen.svg\"}}'\n                                        class=\"header-button-image\" />\n                                    {{.Translation.Get \"toggle-fullscreen\"}}\n                                </button>\n                                <button id=\"toggle-spectate-button\" class=\"dialog-button menu-item header-button\"\n                                    alt=\"{{.Translation.Get \"toggle-spectate\"}}\"\n                                    title=\"{{.Translation.Get \"toggle-spectate\"}}\">\n                                    <img src='{{.RootPath}}/resources/{{.WithCacheBust \"spectate.svg\"}}'\n                                        class=\"header-button-image\" />\n                                    {{.Translation.Get \"toggle-spectate\"}}\n                                </button>\n                                <button id=\"help-button\" class=\"dialog-button menu-item header-button\"\n                                    alt=\"{{.Translation.Get \"show-help\"}}\" title=\"{{.Translation.Get \"show-help\"}}\">\n                                    <img src='{{.RootPath}}/resources/{{.WithCacheBust \"help.svg\"}}'\n                                        class=\"header-button-image\" />\n                                    {{.Translation.Get \"show-help\"}}\n                                </button>\n                                <button id=\"kick-button\" class=\"dialog-button menu-item header-button\"\n                                    alt=\"{{.Translation.Get \"votekick-a-player\"}}\"\n                                    title=\"{{.Translation.Get \"votekick-a-player\"}}\">\n                                    <img src='{{.RootPath}}/resources/{{.WithCacheBust \"kick.png\"}}'\n                                        class=\"header-button-image\" />\n                                    {{.Translation.Get \"votekick-a-player\"}}\n                                </button>\n                                <button id=\"lobby-settings-button\" style=\"display: none;\"\n                                    class=\"dialog-button menu-item header-button\"\n                                    alt=\"{{.Translation.Get \"change-lobby-settings-tooltip\"}}\"\n                                    title=\"{{.Translation.Get \"change-lobby-settings-tooltip\"}}\">\n                                    <img src='{{.RootPath}}/resources/{{.WithCacheBust \"settings.svg\"}}'\n                                        class=\"header-button-image\" />\n                                    {{.Translation.Get \"change-lobby-settings-tooltip\"}}\n                                </button>\n                            </div>\n                        </div>\n                    </div>\n                  <div id=\"word-container\" {{if eq .IsWordpackRtl true}} dir=\"rtl\" {{else}} dir=\"ltr\" {{end}}></div>\n                </div>\n                <div id=\"time-left\">\n                    <img src='{{.RootPath}}/resources/{{.WithCacheBust \"clock.svg\"}}' class=\"header-button-image\" />\n                    <div id=\"time-left-value\">∞</div>\n                </div>\n            </div>\n\n            <div id=\"player-container\"></div>\n\n            <div id=\"drawing-board-wrapper\">\n                <div id=\"drawing-board-inner-wrapper\">\n                    <canvas id=\"drawing-board\" width=\"1600\" height=\"900\"></canvas>\n\n                    <!-- The so called \"center dialogs\" are divs that float above the canvas.\n                    They are are always both horizontally and vertically. They can bever be\n                    as big as the canvas and are usually closable, as long as it makes sense.\n                    The can be seen as a new \"window\" and prevent touch and pointer events\n                    from reaching the canvas. Technically there could be more than one dialog\n                    visible at a time, but they'll be layered and there's no rule as to how. -->\n                    <div id=\"center-dialogs\">\n                        <div id=\"word-dialog\" class=\"center-dialog\">\n                            <span class=\"dialog-title\">{{.Translation.Get \"choose-a-word\"}}</span>\n                            <div class=\"center-dialog-content\">\n                                <div style=\"display: flex; flex-direction: column; gap: 0.5rem; align-items: center\">\n                                    <div>\n                                        <span>{{.Translation.Get \"word-choice-warning\"}}:</span>\n                                        <span id=\"word-preselected\" style=\"font-weight: bold;\"></span>\n                                    </div>\n                                    <div id=\"word-button-container\"> </div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div id=\"start-dialog\" class=\"center-dialog\">\n                            <span class=\"dialog-title\">{{.Translation.Get \"start-the-game\"}}</span>\n                            <div class=\"center-dialog-content\">\n                                <div style=\"display: flex; flex-direction:\n                                    column; gap: 0.5rem;\">\n                                    <div style=\"display: flex; flex-direction:\n                                        row; gap: 0.5rem; align-items: center;\">\n                                        {{.Translation.Get \"change-your-name\"}}:\n                                        <input class=\"namechange-field\" type=\"text\"\n                                            id=\"namechange-field-start-dialog\"></input>\n                                        <button id=\"namechange-button-start-dialog\"\n                                            class=\"dialog-button\">{{.Translation.Get \"apply\"}}</button>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"button-bar\">\n                                <div class=\"ready-check-box-wrapper\">\n                                    <label class=\"ready-check-box\" for=\"ready-state-start\">\n                                        {{.Translation.Get \"ready\"}}\n                                        <input type=\"checkbox\" name=\"ready-state-start\" id=\"ready-state-start\">\n                                        (<span class=\"ready-count\">0</span>/<span class=\"ready-needed\">0</span>)\n                                    </label>\n                                </div>\n                                <button id=\"force-start-button\"\n                                    class=\"dialog-button\">{{.Translation.Get \"force-start\"}}</button>\n                            </div>\n                        </div>\n\n                        <div id=\"waitchoose-dialog\" class=\"center-dialog\">\n                            <span class=\"dialog-title\">{{.Translation.Get \"waiting-for-word-selection\"}}</span>\n                            <div class=\"center-dialog-content\">\n                                <span id=\"waitchoose-drawer\"></span>&nbsp;{{.Translation.Get \"is-choosing-word\"}}\n                            </div>\n                        </div>\n\n                        <div id=\"namechange-dialog\" class=\"center-dialog\">\n                            <span class=\"dialog-title\">{{.Translation.Get \"change-your-name\"}}</span>\n                            <div class=\"center-dialog-content\">\n                                <input class=\"namechange-field\" type=\"text\" id=\"namechange-field\"></input>\n                            </div>\n                            <div class=\"button-bar\">\n                                <button id=\"namechange-button\" class=\"dialog-button\">\n                                    {{.Translation.Get \"save\"}}</button>\n                                <button id=\"namechange-close-button\"\n                                    class=\"dialog-button\">{{.Translation.Get \"close\"}}</button>\n                            </div>\n                        </div>\n\n                        <div id=\"lobbysettings-dialog\" class=\"center-dialog\">\n                            <span class=\"dialog-title\">{{.Translation.Get \"change-lobby-settings-title\"}}</span>\n                            <div class=\"center-dialog-content\">\n                                <div class=\"input-container\">\n                                    <b>{{.Translation.Get \"drawing-time-setting\"}}</b>\n                                    <input id=\"lobby-settings-drawing-time\" class=\"input-item\" type=\"number\"\n                                        name=\"drawing_time\" min=\"{{.MinDrawingTime}}\" max=\"{{.MaxDrawingTime}}\"\n                                        value=\"{{.DrawingTime}}\" />\n                                    <b>{{.Translation.Get \"rounds-setting\"}}</b>\n                                    <input id=\"lobby-settings-max-rounds\" class=\"input-item\" type=\"number\" name=\"rounds\"\n                                        min=\"{{.MinRounds}}\" max=\"{{.MaxRounds}}\" value=\"{{.Rounds}}\" />\n                                    <b>{{.Translation.Get \"max-players-setting\"}}</b>\n                                    <input id=\"lobby-settings-max-players\" type=\"number\" name=\"max_players\"\n                                        min=\"{{.MinMaxPlayers}}\" max=\"{{.MaxMaxPlayers}}\" value=\"{{.MaxPlayers}}\" />\n                                    <b>{{.Translation.Get \"public-lobby-setting\"}}</b>\n                                    <input id=\"lobby-settings-public\" type=\"checkbox\" name=\"public\" {{if eq\n                                            .Public true}}checked{{end}} />\n                                    <b>{{.Translation.Get \"words-per-turn-setting\"}}</b>\n                                    <input id=\"lobby-settings-words-per-turn\" type=\"number\" name=\"words_per_turn\"\n                                        min=\"{{.MinWordsPerTurn}}\" max=\"{{.MaxWordsPerTurn}}\" value=\"{{.WordsPerTurn}}\" />\n                                    <b>{{.Translation.Get \"custom-words-per-turn-setting\"}}</b>\n                                    <input id=\"lobby-settings-custom-words-per-turn\" class=\"input-item\" type=\"number\"\n                                        name=\"custom_words_per_turn\" min=\"{{.MinCustomWordsPerTurn}}\"\n                                        max=\"{{.MaxWordsPerTurn}}\" value=\"{{.CustomWordsPerTurn}}\" />\n                                    <b>{{.Translation.Get \"players-per-ip-limit-setting\"}}</b>\n                                    <input id=\"lobby-settings-clients-per-ip-limit\" type=\"number\"\n                                        name=\"clients_per_ip_limit\" min=\"{{.MinClientsPerIPLimit}}\"\n                                        max=\"{{.MaxClientsPerIPLimit}}\" value=\"{{.ClientsPerIPLimit}}\" />\n                                </div>\n                            </div>\n                            <div class=\"button-bar\">\n                                <button id=\"lobby-settings-save-button\" class=\"dialog-button\">\n                                    {{.Translation.Get \"save-settings\"}}\n                                </button>\n                                <button id=\"lobby-settings-close-button\"\n                                    class=\"dialog-button\">{{.Translation.Get \"close\"}}</button>\n                            </div>\n                        </div>\n\n                        <div id=\"game-over-dialog\" class=\"center-dialog\">\n                            <span id=\"game-over-dialog-title\" class=\"dialog-title\">Game over!</span>\n                            <div class=\"center-dialog-content\">\n                                <div id=\"game-over-scoreboard\"></div>\n                            </div>\n                            <div class=\"button-bar\">\n                                <div class=\"ready-check-box-wrapper\">\n                                    <label class=\"ready-check-box\" for=\"ready-state-game-over\">\n                                        Ready\n                                        <input type=\"checkbox\" name=\"ready-state-game-over\" id=\"ready-state-game-over\">\n                                        (<span class=\"ready-count\">0</span>/<span class=\"ready-needed\">0</span>)\n                                    </label>\n                                </div>\n                                <button id=\"force-restart-button\" class=\"dialog-button\">{{.Translation.Get\n                                    \"force-restart\"}}</button>\n                            </div>\n                        </div>\n\n                        <div id=\"kick-dialog\" class=\"center-dialog\">\n                            <span class=\"dialog-title\">{{.Translation.Get \"votekick-a-player\"}}</span>\n                            <div class=\"center-dialog-content\">\n                                <div id=\"kick-dialog-players\"></div>\n                            </div>\n                            <div class=\"button-bar\">\n                                <button id=\"kick-close-button\"\n                                    class=\"dialog-button\">{{.Translation.Get \"close\"}}</button>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n            <div id=\"toolbox\" style=\"display: none;\">\n                <div class=\"color-button-container toolbox-group\" alt=\"{{.Translation.Get \"change-active-color\"}}\"\n                    title=\"{{.Translation.Get \"change-active-color\"}}\">\n                    <!-- These buttons use !important for their color in order\n                to prevent hover and active colors to appear. -->\n                    <div id=\"first-color-button-row\" class=\"color-button-row\">\n                        <button class=\"color-button\" style=\"background-color: #ffffff !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #c1c1c1 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #ef130b !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #ff7100 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #ffe400 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #00cc00 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #00b2ff !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #231fd3 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #a300ba !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #d37caa !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #a0522d !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #592f2a !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #ecbcb4 !Important\"></button>\n                    </div>\n                    <div id=\"second-color-button-row\" class=\"color-button-row\">\n                        <button class=\"color-button\" style=\"background-color: #000000 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #4c4c4c !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #740b07 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #c23800 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #e8a200 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #005510 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #00569e !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #0e0865 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #550069 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #a75574 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #63300d !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #492f31 !Important\"></button>\n                        <button class=\"color-button\" style=\"background-color: #d1a3a4 !Important\"></button>\n                    </div>\n                </div>\n                <!--The following buttons als override onmousedown and onmouseup to make\n                selection more foolproof. This was done, because many people seem to\n                only make half a click (either up or down) in the right location.-->\n                <div class=\"pencil-sizes-container toolbox-group\">\n                    <label for=\"tool-type-pencil\">\n                        <input id=\"tool-type-pencil\" class=\"custom-check-or-radio line-width-button\" type=\"radio\"\n                            name=\"tool-type\" checked>\n                        <div id=\"tool-type-pencil-wrapper\" class=\"line-width-button-content\">\n                            <img title=\"{{.Translation.Get \"use-pencil\"}}\" alt=\"{{.Translation.Get \"use-pencil\"}}\"\n                                src='{{.RootPath}}/resources/{{.WithCacheBust \"pencil.svg\"}}'\n                                style=\"transform: scaleX(-1)\" />\n                        </div>\n                    </label>\n                    <label for=\"tool-type-fill\">\n                        <input id=\"tool-type-fill\" class=\"custom-check-or-radio line-width-button\" type=\"radio\"\n                            name=\"tool-type\">\n                        <div id=\"tool-type-fill-wrapper\" class=\"line-width-button-content\">\n                            <img alt=\"{{.Translation.Get \"use-fill-bucket\"}}\"\n                                title=\"{{.Translation.Get \"use-fill-bucket\"}}\"\n                                src='{{.RootPath}}/resources/{{.WithCacheBust \"fill.svg\"}}' />\n                        </div>\n                    </label>\n                    <label for=\"tool-type-rubber\">\n                        <input id=\"tool-type-rubber\" class=\"custom-check-or-radio line-width-button\" type=\"radio\"\n                            name=\"tool-type\">\n                        <div id=\"tool-type-rubber-wrapper\" class=\"line-width-button-content\">\n                            <img alt=\"{{.Translation.Get \"use-eraser\"}}\" title=\"{{.Translation.Get \"use-eraser\"}}\"\n                                src='{{.RootPath}}/resources/{{.WithCacheBust \"rubber.svg\"}}' />\n                        </div>\n                    </label>\n                </div>\n                <div id=\"size-buttons\" class=\"pencil-sizes-container toolbox-group\">\n                    <label for=\"size-8-button\">\n                        <input id=\"size-8-button\" class=\"custom-check-or-radio line-width-button\" type=\"radio\"\n                            name=\"line-width\" checked>\n                        <div id=\"size-8-button-wrapper\" class=\"line-width-button-content\"\n                            alt=\"{{printf (.Translation.Get \"change-pencil-size-to\") \"8\"}}\"\n                            title=\"{{printf (.Translation.Get \"change-pencil-size-to\") \"8\"}}\">\n                            <div class=\"dot\" style=\"width: 8px; height: 8px\"></div>\n                        </div>\n                    </label>\n                    <label for=\"size-16-button\">\n                        <input id=\"size-16-button\" class=\"custom-check-or-radio line-width-button\" type=\"radio\"\n                            name=\"line-width\">\n                        <div id=\"size-16-button-wrapper\" class=\"line-width-button-content\"\n                            alt=\"{{printf (.Translation.Get \"change-pencil-size-to\") \"16\"}}\"\n                            title=\"{{printf (.Translation.Get \"change-pencil-size-to\") \"16\"}}\">\n                            <div class=\"dot\" style=\"width: 16px; height: 16px\"></div>\n                        </div>\n                    </label>\n                    <label for=\"size-24-button\">\n                        <input id=\"size-24-button\" class=\"custom-check-or-radio line-width-button\" type=\"radio\"\n                            name=\"line-width\">\n                        <div id=\"size-24-button-wrapper\" class=\"line-width-button-content\"\n                            alt=\"{{printf (.Translation.Get \"change-pencil-size-to\") \"24\"}}\"\n                            title=\"{{printf (.Translation.Get \"change-pencil-size-to\") \"24\"}}\">\n                            <div class=\"dot\" style=\"width: 24px; height: 24px\"></div>\n                        </div>\n                    </label>\n                    <label for=\"size-32-button\">\n                        <input id=\"size-32-button\" class=\"custom-check-or-radio line-width-button\" type=\"radio\"\n                            name=\"line-width\">\n                        <div id=\"size-32-button-wrapper\" class=\"line-width-button-content\"\n                            alt=\"{{printf (.Translation.Get \"change-pencil-size-to\") \"32\"}}\"\n                            title=\"{{printf (.Translation.Get \"change-pencil-size-to\") \"32\"}}\">\n                            <div class=\"dot\" style=\"width: 32px; height: 32px\"></div>\n                        </div>\n                    </label>\n                </div>\n                <!--We won't make these two buttons easier to click, as there's no going back. -->\n                <button id=\"clear-canvas-button\" class=\"canvas-button toolbox-group\"\n                    alt=\"{{.Translation.Get \"clear-canvas\"}}\" title=\"{{.Translation.Get \"clear-canvas\"}}\">\n                    <img alt=\"{{.Translation.Get \"clear-canvas\"}}\" title=\"{{.Translation.Get \"clear-canvas\"}}\"\n                        src='{{.RootPath}}/resources/{{.WithCacheBust \"trash.svg\"}}' />\n                </button>\n                <!--We won't make this button easier to click, as there's no going back. -->\n                <button id=\"undo-button\" class=\"canvas-button toolbox-group\" alt=\"{{.Translation.Get \"undo\"}}\"\n                    title=\"{{.Translation.Get \"undo\"}}\">\n                    <img alt=\"{{.Translation.Get \"undo\"}}\" title=\"{{.Translation.Get \"undo\"}}\"\n                        src='{{.RootPath}}/resources/{{.WithCacheBust \"undo.svg\"}}' />\n                </button>\n            </div>\n\n            <div id=\"chat\">\n                <div id=\"message-container\"></div>\n                <input id=\"message-input\" type=\"text\" autocomplete=\"off\"\n                    placeholder=\"{{.Translation.Get \"message-input-placeholder\"}}\" />\n            </div>\n        </div>\n    </div>\n\n    <script type=\"text/javascript\" src='{{.RootPath}}/resources/{{.WithCacheBust \"draw.js\"}}'></script>\n    <script type=\"text/javascript\" src='{{.RootPath}}/{{.WithCacheBust \"lobby.js\"}}'></script>\n</body>\n\n</html>\n{{end}}\n"
  },
  {
    "path": "internal/frontend/templates/non-static-css.html",
    "content": "{{/* A little hack so we need don't to have CSS templates and embed those directly. */}}\n{{/* The reason being that we need to be able to define the RootPath here. */}}\n{{define \"non-static-css-decl\"}}\n<style>\n    :root {\n        --scribble-background: url('{{.RootPath}}/resources/{{.WithCacheBust \"background.png\"}}');\n    }\n</style>\n{{end}}\n"
  },
  {
    "path": "internal/frontend/templating_test.go",
    "content": "package frontend\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n\n\t\"github.com/scribble-rs/scribble.rs/internal/api\"\n\t\"github.com/scribble-rs/scribble.rs/internal/config\"\n\t\"github.com/scribble-rs/scribble.rs/internal/translations\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc Test_templateLobbyPage(t *testing.T) {\n\tt.Parallel()\n\n\tvar buffer bytes.Buffer\n\terr := pageTemplates.ExecuteTemplate(&buffer,\n\t\t\"lobby-page\", &lobbyPageData{\n\t\t\tBasePageConfig: &BasePageConfig{\n\t\t\t\tchecksums: make(map[string]string),\n\t\t\t},\n\t\t\tLobbyData: &api.LobbyData{\n\t\t\t\tSettingBounds: config.Default.LobbySettingBounds,\n\t\t\t\tGameConstants: api.GameConstantsData,\n\t\t\t},\n\t\t\tTranslation: translations.DefaultTranslation,\n\t\t})\n\tif err != nil {\n\t\tt.Errorf(\"Error templating: %s\", err)\n\t}\n}\n\nfunc Test_templateErrorPage(t *testing.T) {\n\tt.Parallel()\n\n\tvar buffer bytes.Buffer\n\terr := pageTemplates.ExecuteTemplate(&buffer,\n\t\t\"error-page\", &errorPageData{\n\t\t\tBasePageConfig: &BasePageConfig{},\n\t\t\tErrorMessage:   \"KEK\",\n\t\t\tTranslation:    translations.DefaultTranslation,\n\t\t\tLocale:         \"en-US\",\n\t\t})\n\tif err != nil {\n\t\tt.Errorf(\"Error templating: %s\", err)\n\t}\n}\n\nfunc Test_templateIndexPage(t *testing.T) {\n\tt.Parallel()\n\n\thandler, err := NewHandler(&config.Config{})\n\trequire.NoError(t, err)\n\tcreatePageData := handler.createDefaultIndexPageData()\n\tcreatePageData.Translation = translations.DefaultTranslation\n\n\tvar buffer bytes.Buffer\n\tif err := pageTemplates.ExecuteTemplate(&buffer, \"index\", createPageData); err != nil {\n\t\tt.Errorf(\"Error templating: %s\", err)\n\t}\n}\n"
  },
  {
    "path": "internal/game/data.go",
    "content": "package game\n\nimport (\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\tdiscordemojimap \"github.com/Bios-Marcel/discordemojimap/v2\"\n\t\"github.com/gofrs/uuid/v5\"\n\t\"github.com/lxzan/gws\"\n\t\"golang.org/x/text/cases\"\n)\n\n// slotReservationTime should give a player enough time to restart their browser\n// without losing their slost.\nconst slotReservationTime = time.Minute * 1\n\ntype roundEndReason string\n\nconst (\n\tdrawerDisconnected   roundEndReason = \"drawer_disconnected\"\n\tguessersDisconnected roundEndReason = \"guessers_disconnected\"\n)\n\n// Lobby represents a game session. It must not be sent via the API, as it\n// exposes gameplay relevant information.\ntype Lobby struct {\n\t// ID uniquely identified the Lobby.\n\tLobbyID string\n\n\tEditableLobbySettings\n\n\t// DrawingTimeNew is the new value of the drawing time. If a round is\n\t// already ongoing, we can't simply change the drawing time, as it would\n\t// screw with the score calculation of the current turn.\n\tDrawingTimeNew int\n\n\tCustomWords []string\n\t// customWordIndex is used to keep track of the next word to be drawn from\n\t// the custom word stack. Only used if exclusive custom word mode is active.\n\tcustomWordIndex int\n\twords           []string\n\n\t// players references all participants of the Lobby.\n\tplayers []*Player\n\n\t// Whether the game has started, is ongoing or already over.\n\tState State\n\t// OwnerID references the Player that currently owns the lobby.\n\t// Meaning this player has rights to restart or change certain settings.\n\tOwnerID uuid.UUID\n\t// ScoreCalculation decides how scores for both guessers and drawers are\n\t// determined.\n\tScoreCalculation ScoreCalculation\n\t// CurrentWord represents the word that was last selected. If no word has\n\t// been selected yet or the round is already over, this should be empty.\n\tCurrentWord string\n\t// wordHints for the current word.\n\twordHints []*WordHint\n\t// wordHintsShown are the same as wordHints with characters visible.\n\twordHintsShown []*WordHint\n\t// hintsLeft is the amount of hints still available for revelation.\n\thintsLeft int\n\t// hintCount is the amount of hints that were initially available\n\t// for revelation.\n\thintCount int\n\t// Round is the round that the Lobby is currently in. This is a number\n\t// between 0 and Rounds. 0 indicates that it hasn't started yet.\n\tRound             int\n\twordChoiceEndTime time.Time\n\tpreSelectedWord   int\n\t// wordChoice represents the current choice of words present to the drawer.\n\twordChoice []string\n\tWordpack   string\n\t// roundEndTime represents the time at which the current round will end.\n\t// This is a UTC unix-timestamp in milliseconds.\n\troundEndTime   int64\n\troundEndReason roundEndReason\n\n\ttimeLeftTicker *time.Ticker\n\t// currentDrawing represents the state of the current canvas. The elements\n\t// consist of LineEvent and FillEvent. Please do not modify the contents\n\t// of this array an only move AppendLine and AppendFill on the respective\n\t// lobby object.\n\tcurrentDrawing []any\n\n\t// These variables are used to define the ranges of connected drawing events.\n\t// For example a line that has been drawn or a fill that has been executed.\n\t// Since we can't trust the client to tell us this, we use the time passed\n\t// between draw events as an indicator of which draw events make up one line.\n\t// An alternative approach could be using the coordinates and see if they are\n\t// connected, but that could technically undo a whole drawing.\n\n\tlastDrawEvent                 time.Time\n\tconnectedDrawEventsIndexStack []int\n\n\tlowercaser cases.Caser\n\n\t// LastPlayerDisconnectTime is used to know since when a lobby is empty, in case\n\t// it is empty.\n\tLastPlayerDisconnectTime *time.Time\n\n\tmutex sync.Mutex\n\n\tIsWordpackRtl bool\n\n\tWriteObject          func(*Player, any) error\n\tWritePreparedMessage func(*Player, *gws.Broadcaster) error\n}\n\n// MaxPlayerNameLength defines how long a string can be at max when used\n// as the playername.\nconst MaxPlayerNameLength int = 30\n\n// GetLastKnownAddress returns the last known IP-Address used for an HTTP request.\nfunc (player *Player) GetLastKnownAddress() string {\n\treturn player.lastKnownAddress\n}\n\n// SetLastKnownAddress sets the last known IP-Address used for an HTTP request.\n// Can be retrieved via GetLastKnownAddress().\nfunc (player *Player) SetLastKnownAddress(address string) {\n\tplayer.lastKnownAddress = address\n}\n\n// GetWebsocket simply returns the players websocket connection. This method\n// exists to encapsulate the websocket field and prevent accidental sending\n// the websocket data via the network.\nfunc (player *Player) GetWebsocket() *gws.Conn {\n\treturn player.ws\n}\n\n// SetWebsocket sets the given connection as the players websocket connection.\nfunc (player *Player) SetWebsocket(socket *gws.Conn) {\n\tplayer.ws = socket\n}\n\n// GetUserSession returns the players current user session.\nfunc (player *Player) GetUserSession() uuid.UUID {\n\treturn player.userSession\n}\n\ntype PlayerState string\n\nconst (\n\tGuessing   PlayerState = \"guessing\"\n\tDrawing    PlayerState = \"drawing\"\n\tStandby    PlayerState = \"standby\"\n\tReady      PlayerState = \"ready\"\n\tSpectating PlayerState = \"spectating\"\n)\n\nfunc (lobby *Lobby) GetPlayerByID(id uuid.UUID) *Player {\n\tfor _, player := range lobby.players {\n\t\tif player.ID == id {\n\t\t\treturn player\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (lobby *Lobby) GetPlayerBySession(userSession uuid.UUID) *Player {\n\tfor _, player := range lobby.players {\n\t\tif player.userSession == userSession {\n\t\t\treturn player\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (lobby *Lobby) GetOwner() *Player {\n\treturn lobby.GetPlayerByID(lobby.OwnerID)\n}\n\nfunc (lobby *Lobby) ClearDrawing() {\n\tlobby.currentDrawing = make([]any, 0)\n\tlobby.connectedDrawEventsIndexStack = nil\n}\n\n// AppendLine adds a line direction to the current drawing. This exists in order\n// to prevent adding arbitrary elements to the drawing, as the backing array is\n// an empty interface type.\nfunc (lobby *Lobby) AppendLine(line *LineEvent) {\n\tlobby.currentDrawing = append(lobby.currentDrawing, line)\n}\n\n// AppendFill adds a fill direction to the current drawing. This exists in order\n// to prevent adding arbitrary elements to the drawing, as the backing array is\n// an empty interface type.\nfunc (lobby *Lobby) AppendFill(fill *FillEvent) {\n\tlobby.currentDrawing = append(lobby.currentDrawing, fill)\n}\n\n// SanitizeName removes invalid characters from the players name, resolves\n// emoji codes, limits the name length and generates a new name if necessary.\nfunc SanitizeName(name string) string {\n\t// We trim and handle emojis beforehand to avoid taking this into account\n\t// when checking the name length, so we don't cut off too much of the name.\n\tnewName := discordemojimap.Replace(strings.TrimSpace(name))\n\n\t// We don't want super-long names\n\tif len(newName) > MaxPlayerNameLength {\n\t\treturn newName[:MaxPlayerNameLength+1]\n\t}\n\n\tif newName != \"\" {\n\t\treturn newName\n\t}\n\n\treturn generatePlayerName()\n}\n\n// GetConnectedPlayerCount returns the amount of player that have currently\n// established a socket connection.\nfunc (lobby *Lobby) GetConnectedPlayerCount() int {\n\tvar count int\n\tfor _, player := range lobby.players {\n\t\tif player.Connected {\n\t\t\tcount++\n\t\t}\n\t}\n\n\treturn count\n}\n\nfunc (lobby *Lobby) HasConnectedPlayers() bool {\n\tlobby.mutex.Lock()\n\tdefer lobby.mutex.Unlock()\n\n\tfor _, otherPlayer := range lobby.players {\n\t\tif otherPlayer.Connected {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// CanIPConnect checks whether the IP is still allowed regarding the lobbies\n// clients per IP address limit. This function should only be called for\n// players that aren't already in the lobby.\nfunc (lobby *Lobby) CanIPConnect(address string) bool {\n\tvar clientsWithSameIP int\n\tfor _, player := range lobby.GetPlayers() {\n\t\tif player.GetLastKnownAddress() == address {\n\t\t\tclientsWithSameIP++\n\t\t\tif clientsWithSameIP >= lobby.ClientsPerIPLimit {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc (lobby *Lobby) IsPublic() bool {\n\treturn lobby.Public\n}\n\nfunc (lobby *Lobby) GetPlayers() []*Player {\n\treturn lobby.players\n}\n\n// GetOccupiedPlayerSlots counts the available slots which can be taken by new\n// players. Whether a slot is available is determined by the player count and\n// whether a player is disconnect or furthermore how long they have been\n// disconnected for. Therefore the result of this function will differ from\n// Lobby.GetConnectedPlayerCount.\nfunc (lobby *Lobby) GetOccupiedPlayerSlots() int {\n\tvar occupiedPlayerSlots int\n\tnow := time.Now()\n\tfor _, player := range lobby.players {\n\t\tif player.Connected {\n\t\t\toccupiedPlayerSlots++\n\t\t} else {\n\t\t\tdisconnectTime := player.disconnectTime\n\n\t\t\t// If a player hasn't been disconnected for a certain\n\t\t\t// timeframe, we will reserve the slot. This avoids frustration\n\t\t\t// in situations where a player has to restart their PC or so.\n\t\t\tif disconnectTime == nil || now.Sub(*disconnectTime) < slotReservationTime {\n\t\t\t\toccupiedPlayerSlots++\n\t\t\t}\n\t\t}\n\t}\n\n\treturn occupiedPlayerSlots\n}\n\n// HasFreePlayerSlot determines whether the lobby still has a slot for at\n// least one more player. If a player has disconnected recently, the slot\n// will be preserved for 5 minutes. This function should be used over\n// Lobby.GetOccupiedPlayerSlots, as it is potentially faster.\nfunc (lobby *Lobby) HasFreePlayerSlot() bool {\n\tif len(lobby.players) < lobby.MaxPlayers {\n\t\treturn true\n\t}\n\n\treturn lobby.GetOccupiedPlayerSlots() < lobby.MaxPlayers\n}\n\n// Synchronized allows running a function while keeping the lobby locked via\n// it's own mutex. This is useful in order to avoid having to relock a lobby\n// multiple times, which might cause unexpected inconsistencies.\nfunc (lobby *Lobby) Synchronized(logic func()) {\n\tlobby.mutex.Lock()\n\tdefer lobby.mutex.Unlock()\n\n\tlogic()\n}\n"
  },
  {
    "path": "internal/game/data_test.go",
    "content": "package game\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestOccupiedPlayerCount(t *testing.T) {\n\tt.Parallel()\n\n\tlobby := &Lobby{}\n\tif lobby.GetOccupiedPlayerSlots() != 0 {\n\t\tt.Errorf(\"Occupied player count expected to be 0, but was %d\", lobby.GetOccupiedPlayerSlots())\n\t}\n\n\t// While disconnect, there's no disconnect time, which we count as occupied.\n\tlobby.players = append(lobby.players, &Player{})\n\tif lobby.GetOccupiedPlayerSlots() != 1 {\n\t\tt.Errorf(\"Occupied player count expected to be 1, but was %d\", lobby.GetOccupiedPlayerSlots())\n\t}\n\n\tlobby.players = append(lobby.players, &Player{\n\t\tConnected: true,\n\t})\n\tif lobby.GetOccupiedPlayerSlots() != 2 {\n\t\tt.Errorf(\"Occupied player count expected to be 2, but was %d\", lobby.GetOccupiedPlayerSlots())\n\t}\n\n\tdisconnectedPlayer := &Player{\n\t\tConnected: false,\n\t}\n\tlobby.players = append(lobby.players, disconnectedPlayer)\n\tif lobby.GetOccupiedPlayerSlots() != 3 {\n\t\tt.Errorf(\"Occupied player count expected to be 3, but was %d\", lobby.GetOccupiedPlayerSlots())\n\t}\n\n\tnow := time.Now()\n\tdisconnectedPlayer.disconnectTime = &now\n\tif lobby.GetOccupiedPlayerSlots() != 3 {\n\t\tt.Errorf(\"Occupied player count expected to be 3, but was %d\", lobby.GetOccupiedPlayerSlots())\n\t}\n\n\tpast := time.Now().AddDate(-1, 0, 0)\n\tdisconnectedPlayer.disconnectTime = &past\n\tif lobby.GetOccupiedPlayerSlots() != 2 {\n\t\tt.Errorf(\"Occupied player count expected to be 2, but was %d\", lobby.GetOccupiedPlayerSlots())\n\t}\n}\n"
  },
  {
    "path": "internal/game/lobby.go",
    "content": "package game\n\nimport (\n\tjson \"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"math\"\n\t\"math/rand/v2\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"github.com/lxzan/gws\"\n\t\"github.com/scribble-rs/scribble.rs/internal/sanitize\"\n\n\tdiscordemojimap \"github.com/Bios-Marcel/discordemojimap/v2\"\n\tpetname \"github.com/Bios-Marcel/go-petname\"\n\t\"github.com/gofrs/uuid/v5\"\n)\n\nvar SupportedScoreCalculations = []string{\n\t\"chill\",\n\t\"competitive\",\n}\n\nvar SupportedLanguages = map[string]string{\n\t\"custom\":     \"Custom words only\",\n\t\"english_gb\": \"English (GB)\",\n\t\"english\":    \"English (US)\",\n\t\"italian\":    \"Italian\",\n\t\"german\":     \"German\",\n\t\"french\":     \"French\",\n\t\"dutch\":      \"Dutch\",\n\t\"ukrainian\":  \"Ukrainian\",\n\t\"russian\":    \"Russian\",\n\t\"polish\":     \"Polish\",\n\t\"arabic\":     \"Arabic\",\n\t\"hebrew\":     \"Hebrew\",\n\t\"persian\":    \"Persian\",\n}\n\nconst (\n\tDrawingBoardBaseWidth  = 1600\n\tDrawingBoardBaseHeight = 900\n\tMinBrushSize           = 8\n\tMaxBrushSize           = 32\n)\n\n// SettingBounds defines the lower and upper bounds for the user-specified\n// lobby creation input.\ntype SettingBounds struct {\n\tMinDrawingTime        int `json:\"minDrawingTime\" env:\"MIN_DRAWING_TIME\"`\n\tMaxDrawingTime        int `json:\"maxDrawingTime\" env:\"MAX_DRAWING_TIME\"`\n\tMinRounds             int `json:\"minRounds\" env:\"MIN_ROUNDS\"`\n\tMaxRounds             int `json:\"maxRounds\" env:\"MAX_ROUNDS\"`\n\tMinMaxPlayers         int `json:\"minMaxPlayers\" env:\"MIN_MAX_PLAYERS\"`\n\tMaxMaxPlayers         int `json:\"maxMaxPlayers\" env:\"MAX_MAX_PLAYERS\"`\n\tMinClientsPerIPLimit  int `json:\"minClientsPerIpLimit\" env:\"MIN_CLIENTS_PER_IP_LIMIT\"`\n\tMaxClientsPerIPLimit  int `json:\"maxClientsPerIpLimit\" env:\"MAX_CLIENTS_PER_IP_LIMIT\"`\n\tMinCustomWordsPerTurn int `json:\"minCustomWordsPerTurn\" env:\"MIN_CUSTOM_WORDS_PER_TURN\"`\n\t// MaxWordsPerTurn is now used for max words in general, as both amount of words and custom\n\t// can be configured now.\n\tMaxWordsPerTurn int `json:\"maxWordsPerTurn\" env:\"MAX_WORDS_PER_TURN\"`\n\tMinWordsPerTurn int `json:\"minWordsPerTurn\" env:\"MIN_WORDS_PER_TURN\"`\n}\n\nfunc (lobby *Lobby) HandleEvent(eventType string, payload []byte, player *Player) error {\n\tif eventType == EventTypeKeepAlive {\n\t\t// This is a known dummy event in order to avoid accidental websocket\n\t\t// connection closure. However, no action is required on the server.\n\t\t// Either way, we needn't needlessly lock the lobby.\n\t\treturn nil\n\t}\n\n\tlobby.mutex.Lock()\n\tdefer lobby.mutex.Unlock()\n\n\t// For all followup unmarshalling of the already unmarshalled Event, we\n\t// use mapstructure instead. It's cheaper in terms of CPU usage and\n\t// memory usage. There are benchmarks to prove this in json_test.go.\n\n\tif eventType == EventTypeToggleSpectate {\n\t\tplayer.SpectateToggleRequested = !player.SpectateToggleRequested\n\t\tif player.SpectateToggleRequested && lobby.State != Ongoing {\n\t\t\tif player.State == Spectating {\n\t\t\t\tplayer.State = Standby\n\t\t\t} else {\n\t\t\t\tplayer.State = Spectating\n\t\t\t}\n\n\t\t\t// Since we apply the state instantly, we reset it instantly as\n\t\t\t// well.\n\t\t\tplayer.SpectateToggleRequested = false\n\t\t}\n\n\t\tlobby.Broadcast(&Event{Type: EventTypeUpdatePlayers, Data: lobby.players})\n\t} else if eventType == EventTypeMessage {\n\t\tvar message StringDataEvent\n\t\tif err := json.Unmarshal(payload, &message); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid data received: '%s'\", string(payload))\n\t\t}\n\n\t\thandleMessage(message.Data, player, lobby)\n\t} else if eventType == EventTypeLine {\n\t\tif lobby.canDraw(player) {\n\t\t\tvar line LineEvent\n\t\t\tif err := json.Unmarshal(payload, &line); err != nil {\n\t\t\t\treturn fmt.Errorf(\"error decoding data: %w\", err)\n\t\t\t}\n\n\t\t\t// In case the line is too big, we overwrite the data of the event.\n\t\t\t// This will prevent clients from lagging due to too thick lines.\n\t\t\tif line.Data.Width > MaxBrushSize {\n\t\t\t\tline.Data.Width = MaxBrushSize\n\t\t\t} else if line.Data.Width < MinBrushSize {\n\t\t\t\tline.Data.Width = MinBrushSize\n\t\t\t}\n\n\t\t\tnow := time.Now()\n\t\t\tif now.Sub(lobby.lastDrawEvent) > 150*time.Millisecond || lobby.wasLastDrawEventFill() {\n\t\t\t\tlobby.connectedDrawEventsIndexStack = append(lobby.connectedDrawEventsIndexStack, len(lobby.currentDrawing))\n\t\t\t}\n\t\t\tlobby.lastDrawEvent = now\n\n\t\t\tlobby.AppendLine(&line)\n\n\t\t\t// We directly forward the event, as it seems to be valid.\n\t\t\tlobby.broadcastConditional(&line, ExcludePlayer(player))\n\t\t}\n\t} else if eventType == EventTypeFill {\n\t\tif lobby.canDraw(player) {\n\t\t\tvar fill FillEvent\n\t\t\tif err := json.Unmarshal(payload, &fill); err != nil {\n\t\t\t\treturn fmt.Errorf(\"error decoding data: %w\", err)\n\t\t\t}\n\n\t\t\tlobby.connectedDrawEventsIndexStack = append(lobby.connectedDrawEventsIndexStack, len(lobby.currentDrawing))\n\t\t\tlobby.lastDrawEvent = time.Now()\n\n\t\t\tlobby.AppendFill(&fill)\n\n\t\t\t// We directly forward the event, as it seems to be valid.\n\t\t\tlobby.broadcastConditional(&fill, ExcludePlayer(player))\n\t\t}\n\t} else if eventType == EventTypeClearDrawingBoard {\n\t\tif lobby.canDraw(player) && len(lobby.currentDrawing) > 0 {\n\t\t\tlobby.ClearDrawing()\n\t\t\tlobby.broadcastConditional(\n\t\t\t\tEventTypeOnly{Type: EventTypeClearDrawingBoard},\n\t\t\t\tExcludePlayer(player))\n\t\t}\n\t} else if eventType == EventTypeUndo {\n\t\tif lobby.canDraw(player) && len(lobby.currentDrawing) > 0 && len(lobby.connectedDrawEventsIndexStack) > 0 {\n\t\t\tundoFrom := lobby.connectedDrawEventsIndexStack[len(lobby.connectedDrawEventsIndexStack)-1]\n\t\t\tlobby.connectedDrawEventsIndexStack = lobby.connectedDrawEventsIndexStack[:len(lobby.connectedDrawEventsIndexStack)-1]\n\t\t\tif undoFrom < len(lobby.currentDrawing) {\n\t\t\t\tlobby.currentDrawing = lobby.currentDrawing[:undoFrom]\n\t\t\t\tlobby.Broadcast(&Event{Type: EventTypeDrawing, Data: lobby.currentDrawing})\n\t\t\t}\n\t\t}\n\t} else if eventType == EventTypeChooseWord {\n\t\tvar wordChoice IntDataEvent\n\t\tif err := json.Unmarshal(payload, &wordChoice); err != nil {\n\t\t\treturn fmt.Errorf(\"error decoding data: %w\", err)\n\t\t}\n\t\tif player.State == Drawing {\n\t\t\tif err := lobby.selectWord(wordChoice.Data); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t} else if eventType == EventTypeKickVote {\n\t\tvar kickEvent StringDataEvent\n\t\tif err := json.Unmarshal(payload, &kickEvent); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid data received: '%s'\", string(payload))\n\t\t}\n\n\t\ttoKickID, err := uuid.FromString(kickEvent.Data)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"invalid data in kick-vote event: %v\", payload)\n\t\t}\n\n\t\thandleKickVoteEvent(lobby, player, toKickID)\n\t} else if eventType == EventTypeToggleReadiness {\n\t\tlobby.handleToggleReadinessEvent(player)\n\t} else if eventType == EventTypeStart {\n\t\tif lobby.State != Ongoing && player.ID == lobby.OwnerID {\n\t\t\tlobby.startGame()\n\t\t}\n\t} else if eventType == EventTypeNameChange {\n\t\tvar message StringDataEvent\n\t\tif err := json.Unmarshal(payload, &message); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid data received: '%s'\", string(payload))\n\t\t}\n\n\t\thandleNameChangeEvent(player, lobby, message.Data)\n\t} else if eventType == EventTypeRequestDrawing {\n\t\t// Since the client shouldn't be blocking to wait for the drawing, it's\n\t\t// fine to emit the event if there's no drawing.\n\t\tif len(lobby.currentDrawing) != 0 {\n\t\t\t_ = lobby.WriteObject(player, Event{Type: EventTypeDrawing, Data: lobby.currentDrawing})\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (lobby *Lobby) handleToggleReadinessEvent(player *Player) {\n\tif lobby.State != Ongoing && player.State != Spectating {\n\t\tif player.State != Ready {\n\t\t\tplayer.State = Ready\n\t\t} else {\n\t\t\tplayer.State = Standby\n\t\t}\n\n\t\tif lobby.readyToStart() {\n\t\t\tlobby.startGame()\n\t\t} else {\n\t\t\tlobby.Broadcast(&Event{Type: EventTypeUpdatePlayers, Data: lobby.players})\n\t\t}\n\t}\n}\n\nfunc (lobby *Lobby) readyToStart() bool {\n\t// Otherwise the game will start and gameover instantly. This can happen\n\t// if a lobby is created and the owner refreshes.\n\tvar hasConnectedPlayers bool\n\n\tfor _, otherPlayer := range lobby.players {\n\t\tif !otherPlayer.Connected {\n\t\t\tcontinue\n\t\t}\n\n\t\tif otherPlayer.State != Ready {\n\t\t\treturn false\n\t\t}\n\t\thasConnectedPlayers = true\n\t}\n\n\treturn hasConnectedPlayers\n}\n\nfunc isRatelimited(sender *Player) bool {\n\tif sender.messageTimestamps.size < 5 {\n\t\treturn false\n\t}\n\n\toldest := sender.messageTimestamps.Oldest()\n\tlatest := sender.messageTimestamps.Latest()\n\n\tif latest.Sub(oldest) >= time.Second*3 {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nfunc handleMessage(message string, sender *Player, lobby *Lobby) {\n\t// No matter whether the message is send, we'll make ratelimitting take place.\n\tsender.messageTimestamps.Push(time.Now())\n\n\t// Very long message can cause lags and can therefore be easily abused.\n\t// While it is debatable whether a 10000 byte (not character) long\n\t// message makes sense, this is technically easy to manage and therefore\n\t// allowed for now.\n\tif len(message) > 10000 {\n\t\treturn\n\t}\n\n\ttrimmedMessage := strings.TrimSpace(message)\n\t// Empty message can neither be a correct guess nor are useful for\n\t// other players in the chat.\n\tif trimmedMessage == \"\" {\n\t\treturn\n\t}\n\n\t// Rate limitting is silent, we will pretend the message was sent, but not show any other players.\n\t// Additionally, both close and correct guesses will be ignored.\n\tif isRatelimited(sender) {\n\t\tif sender.State != Guessing && lobby.CurrentWord != \"\" {\n\t\t\t_ = lobby.WriteObject(sender, newMessageEvent(EventTypeNonGuessingPlayerMessage, trimmedMessage, sender))\n\t\t} else {\n\t\t\t_ = lobby.WriteObject(sender, newMessageEvent(EventTypeMessage, trimmedMessage, sender))\n\t\t}\n\t\treturn\n\t}\n\n\t// If no word is currently selected, all players can talk to each other\n\t// and we don't have to check for corrected guesses.\n\tif lobby.CurrentWord == \"\" {\n\t\tlobby.broadcastMessage(trimmedMessage, sender)\n\t\treturn\n\t}\n\n\tif sender.State != Guessing {\n\t\tlobby.broadcastConditional(\n\t\t\tnewMessageEvent(EventTypeNonGuessingPlayerMessage, trimmedMessage, sender),\n\t\t\tIsAllowedToSeeRevealedHints,\n\t\t)\n\t\treturn\n\t}\n\n\tnormInput := sanitize.CleanText(lobby.lowercaser.String(trimmedMessage))\n\tnormSearched := sanitize.CleanText(lobby.CurrentWord)\n\n\tswitch CheckGuess(normInput, normSearched) {\n\tcase EqualGuess:\n\t\t{\n\t\t\tsender.LastScore = lobby.calculateGuesserScore()\n\t\t\tsender.Score += sender.LastScore\n\n\t\t\tsender.State = Standby\n\n\t\t\tlobby.Broadcast(&Event{Type: EventTypeCorrectGuess, Data: sender.ID})\n\n\t\t\tif !lobby.isAnyoneStillGuessing() {\n\t\t\t\tadvanceLobby(lobby)\n\t\t\t} else {\n\t\t\t\t// Since the word has been guessed correctly, we reveal it.\n\t\t\t\t_ = lobby.WriteObject(sender, Event{Type: EventTypeUpdateWordHint, Data: lobby.wordHintsShown})\n\t\t\t\trecalculateRanks(lobby)\n\t\t\t\tlobby.Broadcast(&Event{Type: EventTypeUpdatePlayers, Data: lobby.players})\n\t\t\t}\n\t\t}\n\tcase CloseGuess:\n\t\t{\n\t\t\t// In cases of a close guess, we still send the message to everyone.\n\t\t\t// This allows other players to guess the word by watching what the\n\t\t\t// other players are misstyping.\n\t\t\tlobby.broadcastMessage(trimmedMessage, sender)\n\t\t\t_ = lobby.WriteObject(sender, Event{Type: EventTypeCloseGuess, Data: trimmedMessage})\n\t\t}\n\tdefault:\n\t\tlobby.broadcastMessage(trimmedMessage, sender)\n\t}\n}\n\nfunc (lobby *Lobby) wasLastDrawEventFill() bool {\n\tif len(lobby.currentDrawing) == 0 {\n\t\treturn false\n\t}\n\t_, isFillEvent := lobby.currentDrawing[len(lobby.currentDrawing)-1].(*FillEvent)\n\treturn isFillEvent\n}\n\nfunc (lobby *Lobby) isAnyoneStillGuessing() bool {\n\tfor _, otherPlayer := range lobby.players {\n\t\tif otherPlayer.State == Guessing && otherPlayer.Connected {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc ExcludePlayer(toExclude *Player) func(*Player) bool {\n\treturn func(player *Player) bool {\n\t\treturn player != toExclude\n\t}\n}\n\nfunc IsAllowedToSeeRevealedHints(player *Player) bool {\n\treturn player.State == Standby || player.State == Drawing\n}\n\nfunc IsAllowedToSeeHints(player *Player) bool {\n\treturn player.State == Guessing || player.State == Spectating\n}\n\nfunc newMessageEvent(messageType, message string, sender *Player) *Event {\n\treturn &Event{Type: messageType, Data: OutgoingMessage{\n\t\tAuthor:   sender.Name,\n\t\tAuthorID: sender.ID,\n\t\tContent:  discordemojimap.Replace(message),\n\t}}\n}\n\nfunc (lobby *Lobby) broadcastMessage(message string, sender *Player) {\n\tlobby.Broadcast(newMessageEvent(EventTypeMessage, message, sender))\n}\n\nfunc (lobby *Lobby) Broadcast(data any) {\n\tbytes, err := json.Marshal(data)\n\tif err != nil {\n\t\tlog.Println(\"error marshalling Broadcast message\", err)\n\t\treturn\n\t}\n\n\tmessage := gws.NewBroadcaster(gws.OpcodeText, bytes)\n\tfor _, player := range lobby.GetPlayers() {\n\t\tlobby.WritePreparedMessage(player, message)\n\t}\n}\n\nfunc (lobby *Lobby) broadcastConditional(data any, condition func(*Player) bool) {\n\tvar message *gws.Broadcaster\n\tfor _, player := range lobby.players {\n\t\tif condition(player) {\n\t\t\tif message == nil {\n\t\t\t\tbytes, err := json.Marshal(data)\n\t\t\t\tif err != nil {\n\t\t\t\t\tlog.Println(\"error marshalling broadcastConditional message\", err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// Message is created lazily, since the conditional events could\n\t\t\t\t// potentially not be sent at all. The cost of the nil-check is\n\t\t\t\t// much lower than the cost of creating the message.\n\t\t\t\tmessage = gws.NewBroadcaster(gws.OpcodeText, bytes)\n\t\t\t}\n\t\t\tlobby.WritePreparedMessage(player, message)\n\t\t}\n\t}\n}\n\nfunc (lobby *Lobby) startGame() {\n\t// We are reseting each players score, since players could\n\t// technically be player a second game after the last one\n\t// has already ended.\n\tfor _, otherPlayer := range lobby.players {\n\t\totherPlayer.Score = 0\n\t\totherPlayer.LastScore = 0\n\t\t// Everyone has the same score and therefore the same rank.\n\t\totherPlayer.Rank = 1\n\t}\n\n\t// Cause advanceLobby to start at round 1, starting the game anew.\n\tlobby.Round = 0\n\n\tadvanceLobby(lobby)\n}\n\nfunc handleKickVoteEvent(lobby *Lobby, player *Player, toKickID uuid.UUID) {\n\t// Kicking yourself isn't allowed\n\tif toKickID == player.ID {\n\t\treturn\n\t}\n\n\t// A player can't vote twice to kick someone\n\tif player.votedForKick[toKickID] {\n\t\treturn\n\t}\n\n\tplayerToKickIndex := -1\n\tfor index, otherPlayer := range lobby.players {\n\t\tif otherPlayer.ID == toKickID {\n\t\t\tplayerToKickIndex = index\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// If we haven't found the player, we can't kick them.\n\tif playerToKickIndex == -1 {\n\t\treturn\n\t}\n\n\tplayerToKick := lobby.players[playerToKickIndex]\n\n\tplayer.votedForKick[toKickID] = true\n\tvar voteKickCount int\n\tfor _, otherPlayer := range lobby.players {\n\t\tif otherPlayer.Connected && otherPlayer.votedForKick[toKickID] {\n\t\t\tvoteKickCount++\n\t\t}\n\t}\n\n\tvotesRequired := calculateVotesNeededToKick(lobby)\n\n\t// We send the kick event to all players, since it was a valid vote.\n\tlobby.Broadcast(&Event{\n\t\tType: EventTypeKickVote,\n\t\tData: &KickVote{\n\t\t\tPlayerID:          playerToKick.ID,\n\t\t\tPlayerName:        playerToKick.Name,\n\t\t\tVoteCount:         voteKickCount,\n\t\t\tRequiredVoteCount: votesRequired,\n\t\t},\n\t})\n\n\t// If the valid vote also happens to be the last vote needed, we kick the player.\n\t// Since we send the events to all players beforehand, the target player is automatically\n\t// being noteified of his own kick.\n\tif voteKickCount >= votesRequired {\n\t\tkickPlayer(lobby, playerToKick, playerToKickIndex)\n\t}\n}\n\n// kickPlayer kicks the given player from the lobby, updating the lobby\n// state and sending all necessary events.\nfunc kickPlayer(lobby *Lobby, playerToKick *Player, playerToKickIndex int) {\n\t// Avoiding nilpointer in case playerToKick disconnects during this event unluckily.\n\tif playerToKickSocket := playerToKick.ws; playerToKickSocket != nil {\n\t\t// 4k-5k is codes not in the spec, they are free to use.\n\t\tplayerToKickSocket.WriteClose(4000, nil)\n\t}\n\n\t// Since the player is already kicked, we first clean up the kicking information related to that player\n\tfor _, otherPlayer := range lobby.players {\n\t\tdelete(otherPlayer.votedForKick, playerToKick.ID)\n\t}\n\n\t// If the owner is kicked, we choose the next best person as the owner.\n\tif lobby.OwnerID == playerToKick.ID {\n\t\tfor _, otherPlayer := range lobby.players {\n\t\t\tpotentialOwner := otherPlayer\n\t\t\tif potentialOwner.Connected {\n\t\t\t\tlobby.OwnerID = potentialOwner.ID\n\t\t\t\tlobby.Broadcast(&Event{\n\t\t\t\t\tType: EventTypeOwnerChange,\n\t\t\t\t\tData: &OwnerChangeEvent{\n\t\t\t\t\t\tPlayerID:   potentialOwner.ID,\n\t\t\t\t\t\tPlayerName: potentialOwner.Name,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tif playerToKick.State == Drawing {\n\t\tnewDrawer, roundOver := determineNextDrawer(lobby)\n\t\tlobby.players = append(lobby.players[:playerToKickIndex], lobby.players[playerToKickIndex+1:]...)\n\t\tlobby.Broadcast(&EventTypeOnly{Type: EventTypeDrawerKicked})\n\n\t\t// Since the drawer has been kicked, that probably means that they were\n\t\t// probably trolling, therefore we redact everyones last earned score.\n\t\tfor _, otherPlayer := range lobby.players {\n\t\t\totherPlayer.Score -= otherPlayer.LastScore\n\t\t\totherPlayer.LastScore = 0\n\t\t}\n\n\t\tadvanceLobbyPredefineDrawer(lobby, roundOver, newDrawer)\n\t} else {\n\t\tlobby.players = append(lobby.players[:playerToKickIndex], lobby.players[playerToKickIndex+1:]...)\n\n\t\tif lobby.isAnyoneStillGuessing() {\n\t\t\t// This isn't necessary in case we need to advanced the lobby, as it has\n\t\t\t// to happen anyways and sending events twice would be wasteful.\n\t\t\trecalculateRanks(lobby)\n\t\t\tlobby.Broadcast(&Event{Type: EventTypeUpdatePlayers, Data: lobby.players})\n\t\t} else {\n\t\t\tadvanceLobby(lobby)\n\t\t}\n\t}\n}\n\nfunc (lobby *Lobby) Drawer() *Player {\n\tfor _, player := range lobby.players {\n\t\tif player.State == Drawing {\n\t\t\treturn player\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc calculateVotesNeededToKick(lobby *Lobby) int {\n\tconnectedPlayerCount := lobby.GetConnectedPlayerCount()\n\n\t// If there are only two players, e.g. none of them should be able to\n\t// kick the other.\n\tif connectedPlayerCount <= 2 {\n\t\treturn 2\n\t}\n\n\t// If the amount of players equals an even number, such as 6, we will always\n\t// need half of that. If the amount is uneven, we'll get a floored result.\n\t// therefore we always add one to the amount.\n\t// examples:\n\t//    (6+1)/2 = 3\n\t//    (5+1)/2 = 3\n\t// Therefore it'll never be possible for a minority to kick a player.\n\treturn (connectedPlayerCount + 1) / 2\n}\n\nfunc handleNameChangeEvent(caller *Player, lobby *Lobby, name string) {\n\toldName := caller.Name\n\tnewName := SanitizeName(name)\n\n\t// We'll avoid sending the event in this case, as it's useless, but still log\n\t// the event, as it might be useful to know that this happened.\n\tif oldName != newName {\n\t\tcaller.Name = newName\n\t\tlobby.Broadcast(&Event{\n\t\t\tType: EventTypeNameChange,\n\t\t\tData: &NameChangeEvent{\n\t\t\t\tPlayerID:   caller.ID,\n\t\t\t\tPlayerName: newName,\n\t\t\t},\n\t\t})\n\t}\n}\n\nfunc (lobby *Lobby) calculateGuesserScore() int {\n\treturn lobby.ScoreCalculation.CalculateGuesserScore(lobby)\n}\n\nfunc (lobby *Lobby) calculateDrawerScore() int {\n\treturn lobby.ScoreCalculation.CalculateDrawerScore(lobby)\n}\n\n// advanceLobbyPredefineDrawer is required in cases where the drawer is removed\n// from the game.\nfunc advanceLobbyPredefineDrawer(lobby *Lobby, roundOver bool, newDrawer *Player) {\n\tif lobby.timeLeftTicker != nil {\n\t\t// We want to create a new ticker later on. By setting the current\n\t\t// ticker to nil, we'll cause the ticker routine to stop the ticker\n\t\t// and then stop itself. Later on we create a new routine.\n\t\t// This way we won't have race conditions or wrongly executed logic.\n\t\tlobby.timeLeftTicker = nil\n\t}\n\n\t// The drawer can potentially be null if kicked or the game just started.\n\tif drawer := lobby.Drawer(); drawer != nil {\n\t\tnewDrawerScore := lobby.calculateDrawerScore()\n\t\tdrawer.LastScore = newDrawerScore\n\t\tdrawer.Score += newDrawerScore\n\t}\n\n\t// We need this for the next-turn / game-over event, in order to allow the\n\t// client to know which word was previously supposed to be guessed.\n\tpreviousWord := lobby.CurrentWord\n\tlobby.CurrentWord = \"\"\n\tlobby.wordHints = nil\n\n\tif lobby.DrawingTimeNew != 0 {\n\t\tlobby.DrawingTime = lobby.DrawingTimeNew\n\t}\n\n\tfor _, otherPlayer := range lobby.players {\n\t\t// If the round ends and people are still guessing, that means the\n\t\t// \"LastScore\" value for the next turn has to be \"no score earned\".\n\t\t// We also reset spectating players, to prevent any score fuckups.\n\t\tif otherPlayer.State == Guessing || otherPlayer.State == Spectating {\n\t\t\totherPlayer.LastScore = 0\n\t\t}\n\n\t\tif otherPlayer.SpectateToggleRequested {\n\t\t\totherPlayer.SpectateToggleRequested = false\n\t\t\tif otherPlayer.State != Spectating {\n\t\t\t\totherPlayer.State = Spectating\n\t\t\t} else {\n\t\t\t\totherPlayer.State = Guessing\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif otherPlayer.State == Spectating {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Initially all players are in guessing state, as the drawer gets\n\t\t// defined further at the bottom.\n\t\totherPlayer.State = Guessing\n\t}\n\n\trecalculateRanks(lobby)\n\n\tcurrentRoundEndReason := lobby.roundEndReason\n\tlobby.roundEndReason = \"\"\n\n\tif roundOver {\n\t\t// Game over, meaning all rounds have been played out. Alternatively\n\t\t// We can reach this state if all players are spectating and or are not\n\t\t// connected anymore.\n\t\tif lobby.Round == lobby.Rounds || newDrawer == nil {\n\t\t\tlobby.State = GameOver\n\n\t\t\tfor _, player := range lobby.players {\n\t\t\t\treadyData := generateReadyData(lobby, player)\n\t\t\t\t// The drawing is always available on the client, as the\n\t\t\t\t// game-over event is only sent to already connected players.\n\t\t\t\treadyData.CurrentDrawing = nil\n\n\t\t\t\tlobby.WriteObject(player, Event{\n\t\t\t\t\tType: EventTypeGameOver,\n\t\t\t\t\tData: &GameOverEvent{\n\t\t\t\t\t\tPreviousWord:   previousWord,\n\t\t\t\t\t\tReadyEvent:     readyData,\n\t\t\t\t\t\tRoundEndReason: currentRoundEndReason,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Omit rest of events, since we don't need to advance.\n\t\t\treturn\n\t\t}\n\n\t\tlobby.Round++\n\t}\n\n\tlobby.ClearDrawing()\n\tnewDrawer.State = Drawing\n\tlobby.State = Ongoing\n\tlobby.wordChoice = GetRandomWords(lobby.WordsPerTurn, lobby)\n\tlobby.preSelectedWord = rand.IntN(len(lobby.wordChoice))\n\n\twordChoiceDuration := 30\n\n\tlobby.Broadcast(&Event{\n\t\tType: EventTypeNextTurn,\n\t\tData: &NextTurn{\n\t\t\tRound:          lobby.Round,\n\t\t\tPlayers:        lobby.players,\n\t\t\tChoiceTimeLeft: wordChoiceDuration * 1000,\n\t\t\tPreviousWord:   previousWord,\n\t\t\tRoundEndReason: currentRoundEndReason,\n\t\t},\n\t})\n\n\tlobby.wordChoiceEndTime = time.Now().Add(time.Duration(wordChoiceDuration) * time.Second)\n\tlobby.timeLeftTicker = time.NewTicker(1 * time.Second)\n\tgo startTurnTimeTicker(lobby, lobby.timeLeftTicker)\n\n\tlobby.SendYourTurnEvent(newDrawer)\n}\n\n// advanceLobby will either start the game or jump over to the next turn.\nfunc advanceLobby(lobby *Lobby) {\n\tnewDrawer, roundOver := determineNextDrawer(lobby)\n\tadvanceLobbyPredefineDrawer(lobby, roundOver, newDrawer)\n}\n\nfunc (player *Player) desiresToDraw() bool {\n\t// If a player is in standby, it would break the gameloop. However, if the\n\t// player desired to change anyway, then it is fine.\n\tif player.State == Spectating {\n\t\treturn player.SpectateToggleRequested\n\t}\n\treturn !player.SpectateToggleRequested\n}\n\n// determineNextDrawer returns the next person that's supposed to be drawing, but\n// doesn't tell the lobby yet. The boolean signals whether the current round\n// is over.\nfunc determineNextDrawer(lobby *Lobby) (*Player, bool) {\n\tfor index, player := range lobby.players {\n\t\tif player.State == Drawing {\n\t\t\t// If we have someone that's drawing, take the next one\n\t\t\tfor i := index + 1; i < len(lobby.players); i++ {\n\t\t\t\tnextPlayer := lobby.players[i]\n\t\t\t\tif !nextPlayer.desiresToDraw() || !nextPlayer.Connected {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\treturn nextPlayer, false\n\t\t\t}\n\n\t\t\t// No player below the current drawer has been found, therefore we\n\t\t\t// fallback to our default logic at the bottom.\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// We prefer the first connected player and non-spectating.\n\tfor _, player := range lobby.players {\n\t\tif !player.desiresToDraw() || !player.Connected {\n\t\t\tcontinue\n\t\t}\n\t\treturn player, true\n\t}\n\n\t// If no player is available, we will simply end the game.\n\treturn nil, true\n}\n\n// startTurnTimeTicker executes a loop that listens to the lobbies\n// timeLeftTicker and executes a tickLogic on each tick. This method\n// blocks until the turn ends.\nfunc startTurnTimeTicker(lobby *Lobby, ticker *time.Ticker) {\n\tfor {\n\t\t<-ticker.C\n\t\tif !lobby.tickLogic(ticker) {\n\t\t\tticker.Stop()\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nconst disconnectGrace = 8 * time.Second\n\n// tickLogic checks whether the lobby needs to proceed to the next round and\n// updates the available word hints if required. The return value indicates\n// whether additional ticks are necessary or not. The ticker is automatically\n// stopped if no additional ticks are required.\nfunc (lobby *Lobby) tickLogic(expectedTicker *time.Ticker) bool {\n\tlobby.mutex.Lock()\n\tdefer lobby.mutex.Unlock()\n\n\t// Since we have a lock on the lobby, we can find out if the ticker we are\n\t// listening to is still valid. If not, we want to kill the outer routine.\n\tif lobby.timeLeftTicker != expectedTicker {\n\t\treturn false\n\t}\n\n\tif lobby.shouldEndEarlyDueToDisconnectedDrawer() {\n\t\tlobby.roundEndReason = drawerDisconnected\n\t\tadvanceLobby(lobby)\n\t\treturn false\n\t}\n\n\tif lobby.shouldEndEarlyDueToDisconnectedGuessers() {\n\t\tlobby.roundEndReason = guessersDisconnected\n\t\tadvanceLobby(lobby)\n\t\treturn false\n\t}\n\n\tif lobby.CurrentWord == \"\" {\n\t\tif lobby.wordChoiceEndTime.Before(time.Now()) {\n\t\t\tlobby.selectWord(lobby.preSelectedWord)\n\t\t}\n\n\t\t// This timer previously was only started AFTER a word was chosen, so we'll early exit here.\n\t\treturn true\n\t}\n\n\tcurrentTime := getTimeAsMillis()\n\tif currentTime >= lobby.roundEndTime {\n\t\tadvanceLobby(lobby)\n\t\treturn false\n\t}\n\n\tif lobby.hintsLeft > 0 && lobby.wordHints != nil {\n\t\trevealHintEveryXMilliseconds := int64(lobby.DrawingTime * 1000 / (lobby.hintCount + 1))\n\t\t// If you have a drawingtime of 120 seconds and three hints, you\n\t\t// want to reveal a hint every 40 seconds, so that the two hints\n\t\t// are visible for at least a third of the time. //If the word\n\t\t// was chosen at 60 seconds, we'll still reveal one hint\n\t\t// instantly, as the time is already lower than 80.\n\t\trevealHintAtXOrLower := revealHintEveryXMilliseconds * int64(lobby.hintsLeft)\n\t\ttimeLeft := lobby.roundEndTime - currentTime\n\t\tif timeLeft <= revealHintAtXOrLower {\n\t\t\tlobby.hintsLeft--\n\n\t\t\t// We are trying til we find a yet unshown wordhint. Since we have\n\t\t\t// thread safety and have already checked that there's a hint\n\t\t\t// left, this loop can never spin forever.\n\t\t\tfor {\n\t\t\t\trandomIndex := rand.Int() % len(lobby.wordHints)\n\t\t\t\tif lobby.wordHints[randomIndex].Character == 0 {\n\t\t\t\t\tlobby.wordHints[randomIndex].Character = []rune(lobby.CurrentWord)[randomIndex]\n\t\t\t\t\tlobby.wordHints[randomIndex].Revealed = true\n\t\t\t\t\tlobby.wordHintsShown[randomIndex].Revealed = true\n\t\t\t\t\twordHintData := &Event{\n\t\t\t\t\t\tType: EventTypeUpdateWordHint,\n\t\t\t\t\t\tData: lobby.wordHints,\n\t\t\t\t\t}\n\t\t\t\t\tlobby.broadcastConditional(wordHintData, IsAllowedToSeeHints)\n\n\t\t\t\t\twordHintsShownData := &Event{\n\t\t\t\t\t\tType: EventTypeUpdateWordHint,\n\t\t\t\t\t\tData: lobby.wordHintsShown,\n\t\t\t\t\t}\n\t\t\t\t\tlobby.broadcastConditional(wordHintsShownData, IsAllowedToSeeRevealedHints)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc (lobby *Lobby) shouldEndEarlyDueToDisconnectedDrawer() bool {\n\t// If a word was already chosen, there might already be a drawing. So we only end\n\t// early if the drawing isn't empty.\n\tif lobby.CurrentWord != \"\" && len(lobby.currentDrawing) != 0 {\n\t\treturn false\n\t}\n\n\tdrawer := lobby.Drawer()\n\tif drawer != nil && !drawer.Connected && drawer.disconnectTime != nil &&\n\t\ttime.Since(*drawer.disconnectTime) >= disconnectGrace {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\nfunc (lobby *Lobby) shouldEndEarlyDueToDisconnectedGuessers() bool {\n\tif lobby.CurrentWord == \"\" {\n\t\treturn false\n\t}\n\n\tfor _, p := range lobby.players {\n\t\tif p.State == Guessing {\n\t\t\tgoto HAS_GUESSERS\n\t\t}\n\t}\n\t// No guessers anyway.\n\treturn false\n\nHAS_GUESSERS:\n\tfor _, p := range lobby.players {\n\t\tif p.State == Guessing && p.Connected {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tfor _, p := range lobby.players {\n\t\tif p.State == Guessing &&\n\t\t\t// Relevant, as we can otherwise early exit when someone joins in a bit\n\t\t\t// too late and there's a ticket between page load and socket connect.\n\t\t\t// Probably not a big issue in reality, but annoying when testing.\n\t\t\tp.hasConnectedOnce &&\n\t\t\t!p.Connected && p.disconnectTime != nil &&\n\t\t\ttime.Since(*p.disconnectTime) <= disconnectGrace {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc getTimeAsMillis() int64 {\n\treturn time.Now().UTC().UnixMilli()\n}\n\n// recalculateRanks will assign each player his respective rank in the lobby\n// according to everyones current score. This will not trigger any events.\nfunc recalculateRanks(lobby *Lobby) {\n\t// We don't directly sort the players, since the order determines in which\n\t// order the players will have to draw.\n\tsortedPlayers := make([]*Player, len(lobby.players))\n\tcopy(sortedPlayers, lobby.players)\n\tsort.Slice(sortedPlayers, func(a, b int) bool {\n\t\treturn sortedPlayers[a].Score > sortedPlayers[b].Score\n\t})\n\n\t// We start at maxint32, since we want the first player to cause an\n\t// increment of the score, which will always happen this way, as\n\t// no player can have a score this high.\n\tlastScore := math.MaxInt32\n\tvar lastRank int\n\tfor _, player := range sortedPlayers {\n\t\tif !player.Connected && player.State != Spectating {\n\t\t\tcontinue\n\t\t}\n\n\t\tif player.Score < lastScore {\n\t\t\tlastRank++\n\t\t\tlastScore = player.Score\n\t\t}\n\n\t\tplayer.Rank = lastRank\n\t}\n}\n\nfunc (lobby *Lobby) selectWord(index int) error {\n\tif lobby.State != Ongoing {\n\t\treturn errors.New(\"word was chosen, even though the game wasn't ongoing\")\n\t}\n\n\tif len(lobby.wordChoice) == 0 {\n\t\treturn errors.New(\"word was chosen, even though no choice was available\")\n\t}\n\n\tif index < 0 || index >= len(lobby.wordChoice) {\n\t\treturn fmt.Errorf(\"word choice was %d, but should've been >= 0 and < %d\",\n\t\t\tindex, len(lobby.wordChoice))\n\t}\n\n\tlobby.roundEndTime = getTimeAsMillis() + int64(lobby.DrawingTime)*1000\n\tlobby.CurrentWord = lobby.wordChoice[index]\n\tlobby.wordChoice = nil\n\n\t// Depending on how long the word is, a fixed amount of hints\n\t// would be too easy or too hard.\n\truneCount := utf8.RuneCountInString(lobby.CurrentWord)\n\tif runeCount <= 2 {\n\t\tlobby.hintCount = 0\n\t} else if runeCount <= 4 {\n\t\tlobby.hintCount = 1\n\t} else if runeCount <= 9 {\n\t\tlobby.hintCount = 2\n\t} else {\n\t\tlobby.hintCount = 3\n\t}\n\tlobby.hintsLeft = lobby.hintCount\n\n\t// We generate both the \"empty\" word hints and the hints for the\n\t// drawer. Since the length is the same, we do it in one run.\n\tlobby.wordHints = make([]*WordHint, 0, runeCount)\n\tlobby.wordHintsShown = make([]*WordHint, 0, runeCount)\n\n\tfor _, char := range lobby.CurrentWord {\n\t\t// These characters are part of the word, but aren't relevant for the\n\t\t// guess. In order to make the word hints more useful to the\n\t\t// guesser, those are always shown. An example would be \"Pac-Man\".\n\t\t// Because these characters aren't relevant for the guess, they\n\t\t// aren't being underlined.\n\t\tisAlwaysVisibleCharacter := char == ' ' || char == '_' || char == '-'\n\n\t\t// The hints for the drawer are always visible, therefore they\n\t\t// don't require any handling of different cases.\n\t\tlobby.wordHintsShown = append(lobby.wordHintsShown, &WordHint{\n\t\t\tCharacter: char,\n\t\t\tUnderline: !isAlwaysVisibleCharacter,\n\t\t})\n\n\t\tif isAlwaysVisibleCharacter {\n\t\t\tlobby.wordHints = append(lobby.wordHints, &WordHint{\n\t\t\t\tCharacter: char,\n\t\t\t\tUnderline: false,\n\t\t\t})\n\t\t} else {\n\t\t\tlobby.wordHints = append(lobby.wordHints, &WordHint{\n\t\t\t\tUnderline: true,\n\t\t\t})\n\t\t}\n\t}\n\n\twordHintData := &Event{\n\t\tType: EventTypeWordChosen,\n\t\tData: &WordChosen{\n\t\t\tHints:    lobby.wordHints,\n\t\t\tTimeLeft: int(lobby.roundEndTime - getTimeAsMillis()),\n\t\t},\n\t}\n\tlobby.broadcastConditional(wordHintData, IsAllowedToSeeHints)\n\twordHintDataRevealed := &Event{\n\t\tType: EventTypeWordChosen,\n\t\tData: &WordChosen{\n\t\t\tHints:    lobby.wordHintsShown,\n\t\t\tTimeLeft: int(lobby.roundEndTime - getTimeAsMillis()),\n\t\t},\n\t}\n\tlobby.broadcastConditional(wordHintDataRevealed, IsAllowedToSeeRevealedHints)\n\n\treturn nil\n}\n\n// CreateLobby creates a new lobby including the initial player (owner) and\n// optionally returns an error, if any occurred during creation.\nfunc CreateLobby(\n\tdesiredLobbyId string,\n\tplayerName, chosenLanguage string,\n\tsettings *EditableLobbySettings,\n\tcustomWords []string,\n\tscoringCalculation ScoreCalculation,\n) (*Player, *Lobby, error) {\n\tif desiredLobbyId == \"\" {\n\t\tdesiredLobbyId = uuid.Must(uuid.NewV4()).String()\n\t}\n\tlobby := &Lobby{\n\t\tLobbyID:               desiredLobbyId,\n\t\tEditableLobbySettings: *settings,\n\t\tCustomWords:           customWords,\n\t\tcurrentDrawing:        make([]any, 0),\n\t\tState:                 Unstarted,\n\t\tScoreCalculation:      scoringCalculation,\n\t}\n\n\tif len(customWords) > 1 {\n\t\trand.Shuffle(len(lobby.CustomWords), func(i, j int) {\n\t\t\tlobby.CustomWords[i], lobby.CustomWords[j] = lobby.CustomWords[j], lobby.CustomWords[i]\n\t\t})\n\t}\n\n\tlobby.Wordpack = chosenLanguage\n\n\t// Necessary to correctly treat words from player, however, custom words\n\t// might be treated incorrectly, as they might not be the same language as\n\t// the one specified for the lobby. If for example you chose 100 french\n\t// custom words, but keep english_us as the lobby language, the casing rules\n\t// will most likely be faulty.\n\tlobby.lowercaser = WordlistData[chosenLanguage].Lowercaser()\n\n\tlobby.IsWordpackRtl = WordlistData[chosenLanguage].IsRtl\n\n\t// customWords are lowercased afterwards, as they are direct user input.\n\tif len(customWords) > 0 {\n\t\tfor customWordIndex, customWord := range customWords {\n\t\t\tcustomWords[customWordIndex] = lobby.lowercaser.String(customWord)\n\t\t}\n\t}\n\n\tplayer := lobby.JoinPlayer(playerName)\n\tlobby.OwnerID = player.ID\n\n\treturn player, lobby, nil\n}\n\n// generatePlayerName creates a new playername. A so called petname. It consists\n// of an adverb, an adjective and a animal name. The result can generally be\n// trusted to be sane.\nfunc generatePlayerName() string {\n\treturn petname.Generate(3, petname.Title, petname.None)\n}\n\nfunc generateReadyData(lobby *Lobby, player *Player) *ReadyEvent {\n\tready := &ReadyEvent{\n\t\tPlayerID:     player.ID,\n\t\tAllowDrawing: player.State == Drawing,\n\t\tPlayerName:   player.Name,\n\n\t\tGameState:          lobby.State,\n\t\tOwnerID:            lobby.OwnerID,\n\t\tRound:              lobby.Round,\n\t\tRounds:             lobby.Rounds,\n\t\tDrawingTimeSetting: lobby.DrawingTime,\n\t\tWordHints:          lobby.GetAvailableWordHints(player),\n\t\tPlayers:            lobby.players,\n\t\tCurrentDrawing:     lobby.currentDrawing,\n\t}\n\n\tif lobby.State != Ongoing {\n\t\t// Clients should interpret 0 as \"time over\", unless the gamestate isn't \"ongoing\"\n\t\tready.TimeLeft = 0\n\t} else {\n\t\tready.TimeLeft = int(lobby.roundEndTime - getTimeAsMillis())\n\t}\n\n\treturn ready\n}\n\nfunc (lobby *Lobby) SendYourTurnEvent(player *Player) {\n\tlobby.WriteObject(player, &Event{\n\t\tType: EventTypeYourTurn,\n\t\tData: &YourTurn{\n\t\t\tTimeLeft:        int(lobby.wordChoiceEndTime.UnixMilli() - getTimeAsMillis()),\n\t\t\tPreSelectedWord: lobby.preSelectedWord,\n\t\t\tWords:           lobby.wordChoice,\n\t\t},\n\t})\n}\n\nfunc (lobby *Lobby) OnPlayerConnectUnsynchronized(player *Player) {\n\tplayer.Connected = true\n\tplayer.hasConnectedOnce = true\n\trecalculateRanks(lobby)\n\tlobby.WriteObject(player, Event{Type: EventTypeReady, Data: generateReadyData(lobby, player)})\n\n\t// This state is reached if the player reconnects before having chosen a word.\n\t// This can happen if the player refreshes his browser page or the socket\n\t// loses connection and reconnects quickly.\n\tif player.State == Drawing && lobby.CurrentWord == \"\" {\n\t\tlobby.SendYourTurnEvent(player)\n\t}\n\n\t// The player that just joined already has the most up-to-date data due\n\t// to the ready event being sent. Therefeore it'd be wasteful to send\n\t// that player and update event for players.\n\tlobby.broadcastConditional(&Event{\n\t\tType: EventTypeUpdatePlayers,\n\t\tData: lobby.players,\n\t}, ExcludePlayer(player))\n}\n\nfunc (lobby *Lobby) OnPlayerDisconnect(player *Player) {\n\t// We want to avoid calling the handler twice.\n\tif player.ws == nil {\n\t\treturn\n\t}\n\n\tdisconnectTime := time.Now()\n\n\t// It is important to properly disconnect the player before aqcuiring the mutex\n\t// in order to avoid false assumptions about the players connection state\n\t// and avoid attempting to send events.\n\tplayer.Connected = false\n\tplayer.ws = nil\n\n\tlobby.mutex.Lock()\n\tdefer lobby.mutex.Unlock()\n\n\tplayer.disconnectTime = &disconnectTime\n\tlobby.LastPlayerDisconnectTime = &disconnectTime\n\n\t// Reset from potentially ready to standby\n\tif lobby.State != Ongoing {\n\t\t// FIXME Should we not set spectators to standby? Currently there's no\n\t\t// indication you are spectating right now.\n\t\tplayer.State = Standby\n\t\tif lobby.readyToStart() {\n\t\t\tlobby.startGame()\n\t\t\t// Rank Calculation and sending out player updates happened anyway,\n\t\t\t// so there's no need to keep going.\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Necessary to prevent gaps in the ranking. While players preserve their\n\t// points when disconnecting, they shouldn't preserve their ranking. Upon\n\t// reconnecting, the ranking will be recalculated though.\n\trecalculateRanks(lobby)\n\tlobby.Broadcast(&Event{Type: EventTypeUpdatePlayers, Data: lobby.players})\n}\n\n// GetAvailableWordHints returns a WordHint array depending on the players\n// game state, since people that are drawing or have already guessed correctly\n// can see all hints.\nfunc (lobby *Lobby) GetAvailableWordHints(player *Player) []*WordHint {\n\t// The draw simple gets every character as a word-hint. We basically abuse\n\t// the hints for displaying the word, instead of having yet another GUI\n\t// element that wastes space.\n\tif player.State != Guessing {\n\t\treturn lobby.wordHintsShown\n\t}\n\n\treturn lobby.wordHints\n}\n\n// JoinPlayer creates a new player object using the given name and adds it\n// to the lobbies playerlist. The new players is returned.\nfunc (lobby *Lobby) JoinPlayer(name string) *Player {\n\tplayer := &Player{\n\t\tName:              SanitizeName(name),\n\t\tID:                uuid.Must(uuid.NewV4()),\n\t\tuserSession:       uuid.Must(uuid.NewV4()),\n\t\tvotedForKick:      make(map[uuid.UUID]bool),\n\t\tmessageTimestamps: NewRing[time.Time](5),\n\t}\n\n\tif lobby.State == Ongoing {\n\t\t// Joining an existing game will mark you as a guesser, as someone is\n\t\t// always drawing, given there is no pause-state.\n\t\tplayer.State = Guessing\n\t} else {\n\t\tplayer.State = Standby\n\t}\n\tlobby.players = append(lobby.players, player)\n\n\treturn player\n}\n\nfunc (lobby *Lobby) canDraw(player *Player) bool {\n\treturn player.State == Drawing && lobby.CurrentWord != \"\" && lobby.State == Ongoing\n}\n\n// Shutdown sends all players an event, indicating that the lobby\n// will be shut down. The caller of this function should take care of not\n// allowing new connections. Clients should gracefully disconnect.\nfunc (lobby *Lobby) Shutdown() {\n\tlobby.mutex.Lock()\n\tdefer lobby.mutex.Unlock()\n\tlog.Println(\"Lobby Shutdown: Mutex acquired\")\n\n\tlobby.Broadcast(&EventTypeOnly{Type: EventTypeShutdown})\n}\n\n// ScoreCalculation allows having different scoring systems for a lobby.\ntype ScoreCalculation interface {\n\tIdentifier() string\n\tCalculateGuesserScore(lobby *Lobby) int\n\tCalculateDrawerScore(lobby *Lobby) int\n}\n\nvar ChillScoring = &adjustableScoringAlgorithm{\n\tidentifier:                  \"chill\",\n\tbaseScore:                   100.0,\n\tmaxBonusBaseScore:           100.0,\n\tbonusBaseScoreDeclineFactor: 2.0,\n\tmaxHintBonusScore:           60.0,\n}\n\nvar CompetitiveScoring = &adjustableScoringAlgorithm{\n\tidentifier:                  \"competitive\",\n\tbaseScore:                   10.0,\n\tmaxBonusBaseScore:           290.0,\n\tbonusBaseScoreDeclineFactor: 3.0,\n\tmaxHintBonusScore:           120.0,\n}\n\ntype adjustableScoringAlgorithm struct {\n\tidentifier                  string\n\tbaseScore                   float64\n\tmaxBonusBaseScore           float64\n\tbonusBaseScoreDeclineFactor float64\n\tmaxHintBonusScore           float64\n}\n\nfunc (s *adjustableScoringAlgorithm) Identifier() string {\n\treturn s.identifier\n}\n\nfunc (s *adjustableScoringAlgorithm) CalculateGuesserScore(lobby *Lobby) int {\n\treturn s.CalculateGuesserScoreInternal(lobby.hintCount, lobby.hintsLeft, lobby.DrawingTime, lobby.roundEndTime)\n}\n\nfunc (s *adjustableScoringAlgorithm) MaxScore() int {\n\treturn int(s.baseScore + s.maxBonusBaseScore + s.maxHintBonusScore)\n}\n\nfunc (s *adjustableScoringAlgorithm) CalculateGuesserScoreInternal(\n\thintCount, hintsLeft, drawingTime int,\n\troundEndTimeMillis int64,\n) int {\n\tsecondsLeft := int(roundEndTimeMillis/1000 - time.Now().UTC().Unix())\n\n\tdeclineFactor := s.bonusBaseScoreDeclineFactor / float64(drawingTime)\n\tscore := int(\n\t\ts.baseScore + s.maxBonusBaseScore*math.Pow(1.0-declineFactor, float64(drawingTime-secondsLeft)))\n\n\t// Prevent zero division panic. This could happen with two letter words.\n\tif hintCount > 0 {\n\t\tscore += hintsLeft * (int(s.maxHintBonusScore) / hintCount)\n\t}\n\n\treturn score\n}\n\nfunc (s *adjustableScoringAlgorithm) CalculateDrawerScore(lobby *Lobby) int {\n\t// The drawer can get points even if disconnected. But if they are\n\t// connected, we need to ignore them when calculating their score.\n\tvar (\n\t\tplayerCount int\n\t\tscoreSum    int\n\t)\n\tfor _, player := range lobby.GetPlayers() {\n\t\tif player.State != Drawing &&\n\t\t\t// Switch to spectating is only possible after score calculation, so\n\t\t\t// this can't be used to manipulate score.\n\t\t\tplayer.State != Spectating &&\n\t\t\t// If the player has guessed, we want to take them into account,\n\t\t\t// even if they aren't connected anymore. If the player is\n\t\t\t// connected, but hasn't guessed, it is still as well, as the\n\t\t\t// drawing must've not been good enough to be guessable.\n\t\t\t(player.Connected || player.LastScore > 0) {\n\t\t\tscoreSum += player.LastScore\n\t\t\tplayerCount++\n\t\t}\n\t}\n\n\tif playerCount > 0 {\n\t\treturn scoreSum / playerCount\n\t}\n\n\treturn 0\n}\n"
  },
  {
    "path": "internal/game/lobby_test.go",
    "content": "package game\n\nimport (\n\t\"encoding/json\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/gofrs/uuid/v5\"\n\t\"github.com/lxzan/gws\"\n\t\"github.com/scribble-rs/scribble.rs/internal/sanitize\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc createLobbyWithDemoPlayers(playercount int) *Lobby {\n\towner := &Player{}\n\tlobby := &Lobby{\n\t\tOwnerID: owner.ID,\n\t}\n\tfor range playercount {\n\t\tlobby.players = append(lobby.players, &Player{\n\t\t\tConnected: true,\n\t\t})\n\t}\n\n\treturn lobby\n}\n\nfunc noOpWriteObject(_ *Player, _ any) error {\n\treturn nil\n}\n\nfunc noOpWritePreparedMessage(_ *Player, _ *gws.Broadcaster) error {\n\treturn nil\n}\n\nfunc Test_Locking(t *testing.T) {\n\tt.Parallel()\n\n\tlobby := &Lobby{}\n\tlobby.mutex.Lock()\n\tif lobby.mutex.TryLock() {\n\t\tt.Error(\"Mutex shouldn't be acquiredable at this point\")\n\t}\n}\n\nfunc Test_CalculateVotesNeededToKick(t *testing.T) {\n\tt.Parallel()\n\n\texpectedResults := map[int]int{\n\t\t// Kinda irrelevant since you can't kick yourself, but who cares.\n\t\t1:  2,\n\t\t2:  2,\n\t\t3:  2,\n\t\t4:  2,\n\t\t5:  3,\n\t\t6:  3,\n\t\t7:  4,\n\t\t8:  4,\n\t\t9:  5,\n\t\t10: 5,\n\t}\n\n\tfor playerCount, expctedRequiredVotes := range expectedResults {\n\t\tlobby := createLobbyWithDemoPlayers(playerCount)\n\t\tresult := calculateVotesNeededToKick(lobby)\n\t\tif result != expctedRequiredVotes {\n\t\t\tt.Errorf(\"Error. Necessary vote amount was %d, but should've been %d\", result, expctedRequiredVotes)\n\t\t}\n\t}\n}\n\nfunc Test_RemoveAccents(t *testing.T) {\n\tt.Parallel()\n\n\texpectedResults := map[string]string{\n\t\t\"é\":     \"e\",\n\t\t\"É\":     \"E\",\n\t\t\"à\":     \"a\",\n\t\t\"À\":     \"A\",\n\t\t\"ç\":     \"c\",\n\t\t\"Ç\":     \"C\",\n\t\t\"ö\":     \"oe\",\n\t\t\"Ö\":     \"OE\",\n\t\t\"œ\":     \"oe\",\n\t\t\"\\n\":    \"\\n\",\n\t\t\"\\t\":    \"\\t\",\n\t\t\"\\r\":    \"\\r\",\n\t\t\"\":      \"\",\n\t\t\"·\":     \"·\",\n\t\t\"?:!\":   \"?:!\",\n\t\t\"ac-ab\": \"acab\",\n\t\t//nolint:gocritic\n\t\t\"ac - _ab-- \": \"acab\",\n\t}\n\n\tfor k, v := range expectedResults {\n\t\tresult := sanitize.CleanText(k)\n\t\tif result != v {\n\t\t\tt.Errorf(\"Error. Char was %s, but should've been %s\", result, v)\n\t\t}\n\t}\n}\n\nfunc Test_simplifyText(t *testing.T) {\n\tt.Parallel()\n\n\t// We only test the replacement we do ourselves. We won't test\n\t// the \"sanitize\", or furthermore our expectations of it for now.\n\n\ttests := []struct {\n\t\tname  string\n\t\tinput string\n\t\twant  string\n\t}{\n\t\t{\n\t\t\tname:  \"dash\",\n\t\t\tinput: \"-\",\n\t\t\twant:  \"\",\n\t\t},\n\t\t{\n\t\t\tname:  \"underscore\",\n\t\t\tinput: \"_\",\n\t\t\twant:  \"\",\n\t\t},\n\t\t{\n\t\t\tname:  \"space\",\n\t\t\tinput: \" \",\n\t\t\twant:  \"\",\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tif got := sanitize.CleanText(tt.input); got != tt.want {\n\t\t\t\tt.Errorf(\"simplifyText() = %v, want %v\", got, tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc Test_recalculateRanks(t *testing.T) {\n\tt.Parallel()\n\n\tlobby := &Lobby{}\n\tlobby.players = append(lobby.players, &Player{\n\t\tID:        uuid.Must(uuid.NewV4()),\n\t\tScore:     1,\n\t\tConnected: true,\n\t})\n\tlobby.players = append(lobby.players, &Player{\n\t\tID:        uuid.Must(uuid.NewV4()),\n\t\tScore:     1,\n\t\tConnected: true,\n\t})\n\trecalculateRanks(lobby)\n\n\trankPlayerA := lobby.players[0].Rank\n\trankPlayerB := lobby.players[1].Rank\n\tif rankPlayerA != 1 || rankPlayerB != 1 {\n\t\tt.Errorf(\"With equal score, ranks should be equal. (A: %d; B: %d)\",\n\t\t\trankPlayerA, rankPlayerB)\n\t}\n\n\tlobby.players = append(lobby.players, &Player{\n\t\tID:        uuid.Must(uuid.NewV4()),\n\t\tScore:     0,\n\t\tConnected: true,\n\t})\n\trecalculateRanks(lobby)\n\n\trankPlayerA = lobby.players[0].Rank\n\trankPlayerB = lobby.players[1].Rank\n\tif rankPlayerA != 1 || rankPlayerB != 1 {\n\t\tt.Errorf(\"With equal score, ranks should be equal. (A: %d; B: %d)\",\n\t\t\trankPlayerA, rankPlayerB)\n\t}\n\n\trankPlayerC := lobby.players[2].Rank\n\tif rankPlayerC != 2 {\n\t\tt.Errorf(\"new player should be rank 2, since the previous two players had the same rank. (C: %d)\", rankPlayerC)\n\t}\n}\n\nfunc Test_chillScoring_calculateGuesserScore(t *testing.T) {\n\tt.Parallel()\n\n\tscore := ChillScoring.CalculateGuesserScoreInternal(0, 0, 120, time.Now().Add(115*time.Second).UnixMilli())\n\tif score >= ChillScoring.MaxScore() {\n\t\tt.Errorf(\"Score should have declined, but was bigger than or \"+\n\t\t\t\"equal to the max score. (LastScore: %d; MaxScore: %d)\", score, ChillScoring.MaxScore())\n\t}\n\n\tlastDecline := -1\n\tfor secondsLeft := 105; secondsLeft >= 5; secondsLeft -= 10 {\n\t\troundEndTime := time.Now().Add(time.Duration(secondsLeft) * time.Second).UnixMilli()\n\t\tnewScore := ChillScoring.CalculateGuesserScoreInternal(0, 0, 120, roundEndTime)\n\t\tif newScore > score {\n\t\t\tt.Errorf(\"Score with more time taken should be lower. (LastScore: %d; NewScore: %d)\", score, newScore)\n\t\t}\n\t\tnewDecline := score - newScore\n\t\tif lastDecline != -1 && newDecline > lastDecline {\n\t\t\tt.Errorf(\"Decline should get lower with time taken. (LastDecline: %d; NewDecline: %d)\\n\", lastDecline, newDecline)\n\t\t}\n\t\tscore = newScore\n\t\tlastDecline = newDecline\n\t}\n}\n\nfunc Test_handleNameChangeEvent(t *testing.T) {\n\tt.Parallel()\n\n\tlobby := &Lobby{}\n\tlobby.WriteObject = noOpWriteObject\n\tlobby.WritePreparedMessage = noOpWritePreparedMessage\n\tplayer := lobby.JoinPlayer(\"Kevin\")\n\n\thandleNameChangeEvent(player, lobby, \"Jim\")\n\n\texpectedName := \"Jim\"\n\tif player.Name != expectedName {\n\t\tt.Errorf(\"playername didn't change; Expected %s, but was %s\", expectedName, player.Name)\n\t}\n}\n\nfunc getUnexportedField(field reflect.Value) any {\n\treturn reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())).Elem().Interface()\n}\n\nfunc Test_wordSelectionEvent(t *testing.T) {\n\tt.Parallel()\n\n\tlobby := &Lobby{\n\t\tEditableLobbySettings: EditableLobbySettings{\n\t\t\tDrawingTime:  10,\n\t\t\tRounds:       10,\n\t\t\tWordsPerTurn: 3,\n\t\t},\n\t\twords: []string{\"abc\", \"def\", \"ghi\"},\n\t}\n\twordHintEvents := make(map[uuid.UUID][]*WordHint)\n\tvar wordChoice []string\n\tlobby.WriteObject = func(_ *Player, message any) error {\n\t\tevent, ok := message.(*Event)\n\t\tif ok {\n\t\t\tif event.Type == EventTypeYourTurn {\n\t\t\t\tyourTurn := event.Data.(*YourTurn)\n\t\t\t\twordChoice = yourTurn.Words\n\t\t\t}\n\t\t}\n\n\t\treturn nil\n\t}\n\tlobby.WritePreparedMessage = func(player *Player, message *gws.Broadcaster) error {\n\t\tdata := getUnexportedField(reflect.ValueOf(message).Elem().FieldByName(\"payload\")).([]byte)\n\t\ttype event struct {\n\t\t\tType string          `json:\"type\"`\n\t\t\tData json.RawMessage `json:\"data\"`\n\t\t}\n\t\tvar e event\n\t\tif err := json.Unmarshal(data, &e); err != nil {\n\t\t\tt.Fatal(\"error unmarshalling message\", err)\n\t\t}\n\n\t\tt.Log(e.Type)\n\t\tif e.Type == \"word-chosen\" {\n\t\t\tvar event WordChosen\n\t\t\tif err := json.Unmarshal(e.Data, &event); err != nil {\n\t\t\t\tt.Fatal(\"error unmarshalling word hints:\", err)\n\t\t\t}\n\t\t\twordHintEvents[player.ID] = event.Hints\n\t\t}\n\t\treturn nil\n\t}\n\n\tdrawer := lobby.JoinPlayer(\"Drawer\")\n\tdrawer.Connected = true\n\tlobby.OwnerID = drawer.ID\n\n\tif err := lobby.HandleEvent(EventTypeStart, nil, drawer); err != nil {\n\t\tt.Errorf(\"Couldn't start lobby: %s\", err)\n\t}\n\n\tguesser := lobby.JoinPlayer(\"Guesser\")\n\tguesser.Connected = true\n\n\terr := lobby.HandleEvent(EventTypeChooseWord, []byte(`{\"data\": 0}`), drawer)\n\tif err != nil {\n\t\tt.Errorf(\"Couldn't choose word: %s\", err)\n\t}\n\n\twordHintsForDrawer := wordHintEvents[drawer.ID]\n\tif len(wordHintsForDrawer) != 3 {\n\t\tt.Errorf(\"Word hints for drawer were of incorrect length; %d != %d\", len(wordHintsForDrawer), 3)\n\t}\n\n\tfor index, wordHint := range wordHintsForDrawer {\n\t\tif wordHint.Character == 0 {\n\t\t\tt.Error(\"Word hints for drawer contained invisible character\")\n\t\t}\n\n\t\tif !wordHint.Underline {\n\t\t\tt.Error(\"Word hints for drawer contained not underlined character\")\n\t\t}\n\n\t\texpectedRune := rune(wordChoice[0][index])\n\t\tif wordHint.Character != expectedRune {\n\t\t\tt.Errorf(\"Character at index %d was %c instead of %c\", index, wordHint.Character, expectedRune)\n\t\t}\n\t}\n\n\twordHintsForGuesser := wordHintEvents[guesser.ID]\n\tif len(wordHintsForGuesser) != 3 {\n\t\tt.Errorf(\"Word hints for guesser were of incorrect length; %d != %d\", len(wordHintsForGuesser), 3)\n\t}\n\n\tfor _, wordHint := range wordHintsForGuesser {\n\t\tif wordHint.Character != 0 {\n\t\t\tt.Error(\"Word hints for guesser contained visible character\")\n\t\t}\n\n\t\tif !wordHint.Underline {\n\t\t\tt.Error(\"Word hints for guesser contained not underlined character\")\n\t\t}\n\t}\n}\n\nfunc Test_kickDrawer(t *testing.T) {\n\tt.Parallel()\n\n\tlobby := &Lobby{\n\t\tEditableLobbySettings: EditableLobbySettings{\n\t\t\tDrawingTime:  10,\n\t\t\tRounds:       10,\n\t\t\tWordsPerTurn: 3,\n\t\t},\n\t\tScoreCalculation: ChillScoring,\n\t\twords:            []string{\"a\", \"a\", \"a\", \"a\", \"a\", \"a\", \"a\", \"a\", \"a\", \"a\", \"a\", \"a\", \"a\", \"a\", \"a\", \"a\"},\n\t}\n\tlobby.WriteObject = noOpWriteObject\n\tlobby.WritePreparedMessage = noOpWritePreparedMessage\n\n\tmarcel := lobby.JoinPlayer(\"marcel\")\n\tmarcel.Connected = true\n\tlobby.OwnerID = marcel.ID\n\n\tkevin := lobby.JoinPlayer(\"kevin\")\n\tkevin.Connected = true\n\tchantal := lobby.JoinPlayer(\"chantal\")\n\tchantal.Connected = true\n\n\tif err := lobby.HandleEvent(EventTypeStart, nil, marcel); err != nil {\n\t\tt.Errorf(\"Couldn't start lobby: %s\", err)\n\t}\n\n\tif lobby.Drawer() == nil {\n\t\tt.Error(\"Drawer should've been a, but was nil\")\n\t}\n\n\tif lobby.Drawer() != marcel {\n\t\tt.Errorf(\"Drawer should've been a, but was %s\", lobby.Drawer().Name)\n\t}\n\n\tlobby.Synchronized(func() {\n\t\tadvanceLobby(lobby)\n\t})\n\n\tif lobby.Drawer() == nil {\n\t\tt.Error(\"Drawer should've been b, but was nil\")\n\t}\n\n\tif lobby.Drawer() != kevin {\n\t\tt.Errorf(\"Drawer should've been b, but was %s\", lobby.Drawer().Name)\n\t}\n\n\tlobby.Synchronized(func() {\n\t\tkickPlayer(lobby, kevin, 1)\n\t})\n\n\tif lobby.Drawer() == nil {\n\t\tt.Error(\"Drawer should've been c, but was nil\")\n\t}\n\n\tif lobby.Drawer() != chantal {\n\t\tt.Errorf(\"Drawer should've been c, but was %s\", lobby.Drawer().Name)\n\t}\n}\n\nfunc Test_lobby_calculateDrawerScore(t *testing.T) {\n\tt.Parallel()\n\n\tt.Run(\"only disconnected players, with score\", func(t *testing.T) {\n\t\tt.Parallel()\n\t\tdrawer := &Player{State: Drawing}\n\t\tlobby := Lobby{\n\t\t\tplayers: []*Player{\n\t\t\t\tdrawer,\n\t\t\t\t{\n\t\t\t\t\tConnected: false,\n\t\t\t\t\tLastScore: 100,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tConnected: false,\n\t\t\t\t\tLastScore: 200,\n\t\t\t\t},\n\t\t\t},\n\t\t\tScoreCalculation: ChillScoring,\n\t\t}\n\n\t\trequire.Equal(t, 150, lobby.calculateDrawerScore())\n\t})\n\tt.Run(\"only disconnected players, with no score\", func(t *testing.T) {\n\t\tt.Parallel()\n\t\tdrawer := &Player{State: Drawing}\n\t\tlobby := Lobby{\n\t\t\tplayers: []*Player{\n\t\t\t\tdrawer,\n\t\t\t\t{\n\t\t\t\t\tConnected: false,\n\t\t\t\t\tLastScore: 0,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tConnected: false,\n\t\t\t\t\tLastScore: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\tScoreCalculation: ChillScoring,\n\t\t}\n\n\t\trequire.Equal(t, 0, lobby.calculateDrawerScore())\n\t})\n\tt.Run(\"connected players, but no score\", func(t *testing.T) {\n\t\tt.Parallel()\n\t\tdrawer := &Player{State: Drawing}\n\t\tlobby := Lobby{\n\t\t\tplayers: []*Player{\n\t\t\t\tdrawer,\n\t\t\t\t{\n\t\t\t\t\tConnected: true,\n\t\t\t\t\tLastScore: 0,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tConnected: true,\n\t\t\t\t\tLastScore: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\tScoreCalculation: ChillScoring,\n\t\t}\n\n\t\trequire.Equal(t, 0, lobby.calculateDrawerScore())\n\t})\n\tt.Run(\"connected players\", func(t *testing.T) {\n\t\tt.Parallel()\n\t\tdrawer := &Player{State: Drawing}\n\t\tlobby := Lobby{\n\t\t\tplayers: []*Player{\n\t\t\t\tdrawer,\n\t\t\t\t{\n\t\t\t\t\tConnected: true,\n\t\t\t\t\tLastScore: 100,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tConnected: true,\n\t\t\t\t\tLastScore: 200,\n\t\t\t\t},\n\t\t\t},\n\t\t\tScoreCalculation: ChillScoring,\n\t\t}\n\n\t\trequire.Equal(t, 150, lobby.calculateDrawerScore())\n\t})\n\tt.Run(\"some connected players, some disconnected, some without score\", func(t *testing.T) {\n\t\tt.Parallel()\n\t\tdrawer := &Player{State: Drawing}\n\t\tlobby := Lobby{\n\t\t\tplayers: []*Player{\n\t\t\t\tdrawer,\n\t\t\t\t{\n\t\t\t\t\tConnected: true,\n\t\t\t\t\tLastScore: 100,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tConnected: false,\n\t\t\t\t\tLastScore: 200,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tConnected: true,\n\t\t\t\t\tLastScore: 0,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tConnected: false,\n\t\t\t\t\tLastScore: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\tScoreCalculation: ChillScoring,\n\t\t}\n\n\t\trequire.Equal(t, 100, lobby.calculateDrawerScore())\n\t})\n\tt.Run(\"some connected players, some disconnected\", func(t *testing.T) {\n\t\tt.Parallel()\n\t\tdrawer := &Player{State: Drawing}\n\t\tlobby := Lobby{\n\t\t\tplayers: []*Player{\n\t\t\t\tdrawer,\n\t\t\t\t{\n\t\t\t\t\tConnected: true,\n\t\t\t\t\tLastScore: 100,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tConnected: true,\n\t\t\t\t\tLastScore: 200,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tConnected: false,\n\t\t\t\t\tLastScore: 300,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tConnected: false,\n\t\t\t\t\tLastScore: 400,\n\t\t\t\t},\n\t\t\t},\n\t\t\tScoreCalculation: ChillScoring,\n\t\t}\n\n\t\trequire.Equal(t, 250, lobby.calculateDrawerScore())\n\t})\n}\n\nfunc Test_NoPrematureGameOver(t *testing.T) {\n\tt.Parallel()\n\n\tplayer, lobby, err := CreateLobby(\"\", \"test\", \"english\", &EditableLobbySettings{\n\t\tPublic:             false,\n\t\tDrawingTime:        120,\n\t\tRounds:             4,\n\t\tMaxPlayers:         4,\n\t\tCustomWordsPerTurn: 3,\n\t\tClientsPerIPLimit:  1,\n\t\tWordsPerTurn:       3,\n\t}, nil, ChillScoring)\n\trequire.NoError(t, err)\n\n\tlobby.WriteObject = noOpWriteObject\n\tlobby.WritePreparedMessage = noOpWritePreparedMessage\n\n\trequire.Equal(t, Unstarted, lobby.State)\n\trequire.Equal(t, Standby, player.State)\n\n\t// The socket won't be called anyway, so its fine.\n\tplayer.ws = &gws.Conn{}\n\tplayer.Connected = true\n\n\tlobby.OnPlayerDisconnect(player)\n\trequire.False(t, player.Connected)\n\trequire.Equal(t, Standby, player.State)\n\trequire.Equal(t, Unstarted, lobby.State)\n\n\tlobby.OnPlayerConnectUnsynchronized(player)\n\trequire.True(t, player.Connected)\n\trequire.Equal(t, Standby, player.State)\n\trequire.Equal(t, Unstarted, lobby.State)\n}\n"
  },
  {
    "path": "internal/game/shared.go",
    "content": "package game\n\nimport (\n\t\"time\"\n\n\t\"github.com/gofrs/uuid/v5\"\n\t\"github.com/lxzan/gws\"\n)\n\n//\n// This file contains all structs and constants that are shared with clients.\n//\n\n// Eevnts that are just incomming from the client.\nconst (\n\tEventTypeStart           = \"start\"\n\tEventTypeToggleReadiness = \"toggle-readiness\"\n\tEventTypeToggleSpectate  = \"toggle-spectate\"\n\tEventTypeRequestDrawing  = \"request-drawing\"\n\tEventTypeChooseWord      = \"choose-word\"\n\tEventTypeUndo            = \"undo\"\n)\n\n// Events that are outgoing only.\nconst (\n\tEventTypeUpdatePlayers            = \"update-players\"\n\tEventTypeUpdateWordHint           = \"update-wordhint\"\n\tEventTypeWordChosen               = \"word-chosen\"\n\tEventTypeCorrectGuess             = \"correct-guess\"\n\tEventTypeCloseGuess               = \"close-guess\"\n\tEventTypeSystemMessage            = \"system-message\"\n\tEventTypeNonGuessingPlayerMessage = \"non-guessing-player-message\"\n\tEventTypeReady                    = \"ready\"\n\tEventTypeGameOver                 = \"game-over\"\n\tEventTypeYourTurn                 = \"your-turn\"\n\tEventTypeNextTurn                 = \"next-turn\"\n\tEventTypeDrawing                  = \"drawing\"\n\tEventTypeDrawerKicked             = \"drawer-kicked\"\n\tEventTypeOwnerChange              = \"owner-change\"\n\tEventTypeLobbySettingsChanged     = \"lobby-settings-changed\"\n\tEventTypeShutdown                 = \"shutdown\"\n\tEventTypeKeepAlive                = \"keep-alive\"\n)\n\n// Events that are bidirectional.\nvar (\n\tEventTypeKickVote          = \"kick-vote\"\n\tEventTypeNameChange        = \"name-change\"\n\tEventTypeMessage           = \"message\"\n\tEventTypeLine              = \"line\"\n\tEventTypeFill              = \"fill\"\n\tEventTypeClearDrawingBoard = \"clear-drawing-board\"\n)\n\ntype State string\n\nconst (\n\t// Unstarted means the lobby has been opened but never started.\n\tUnstarted State = \"unstarted\"\n\t// Ongoing means the lobby has already been started.\n\tOngoing State = \"ongoing\"\n\t// GameOver means that the lobby had been start, but the max round limit\n\t// has already been reached.\n\tGameOver State = \"gameOver\"\n)\n\n// Event contains an eventtype and optionally any data.\ntype Event struct {\n\tData any    `json:\"data\"`\n\tType string `json:\"type\"`\n}\n\ntype StringDataEvent struct {\n\tData string `json:\"data\"`\n}\n\ntype EventTypeOnly struct {\n\tType string `json:\"type\"`\n}\n\ntype IntDataEvent struct {\n\tData int `json:\"data\"`\n}\n\n// WordHint describes a character of the word that is to be guessed, whether\n// the character should be shown and whether it should be underlined on the\n// UI.\ntype WordHint struct {\n\t// The actual word character or 0 if not revealed. Note, that for shown hints, these are always set, even if not revealed.\n\tCharacter rune `json:\"character\"`\n\t// Underline is used to distinguish characters like spaces or dashes from guessable characters.\n\tUnderline bool `json:\"underline,omitempty\"`\n\t// Revealed is used for non-guessing players to indicate that other players can see a character.\n\tRevealed bool `json:\"revealed,omitempty\"`\n}\n\ntype LineEvent struct {\n\tType string `json:\"type\"`\n\t// Data contains the coordinates, stroke width and color. The coors here\n\t// aren't uint16, as it allows us to easily allow implementing drawing on\n\t// the client, where the user drags the line over the canvas border.\n\t// If we were to not accept out of bounds values, the lines would be chopped\n\t// off before reaching the canvas border.\n\tData struct {\n\t\tX  int16 `json:\"x\"`\n\t\tY  int16 `json:\"y\"`\n\t\tX2 int16 `json:\"x2\"`\n\t\tY2 int16 `json:\"y2\"`\n\t\t// Color is a color index. This was previously an rgb value, but since\n\t\t// the values are always the same, using an index saves bandwidth.\n\t\tColor uint8 `json:\"color\"`\n\t\tWidth uint8 `json:\"width\"`\n\t} `json:\"data\"`\n}\n\ntype FillEvent struct {\n\tData *struct {\n\t\tX uint16 `json:\"x\"`\n\t\tY uint16 `json:\"y\"`\n\t\t// Color is a color index. This was previously an rgb value, but since\n\t\t// the values are always the same, using an index saves bandwidth.\n\t\tColor uint8 `json:\"color\"`\n\t} `json:\"data\"`\n\tType string `json:\"type\"`\n}\n\n// KickVote represents a players vote to kick another players. If the VoteCount\n// is as great or greater than the RequiredVoteCount, the event indicates a\n// successful kick vote. The voting is anonymous, meaning the voting player\n// won't be exposed.\ntype KickVote struct {\n\tPlayerName        string    `json:\"playerName\"`\n\tPlayerID          uuid.UUID `json:\"playerId\"`\n\tVoteCount         int       `json:\"voteCount\"`\n\tRequiredVoteCount int       `json:\"requiredVoteCount\"`\n}\n\ntype OwnerChangeEvent struct {\n\tPlayerName string    `json:\"playerName\"`\n\tPlayerID   uuid.UUID `json:\"playerId\"`\n}\n\ntype NameChangeEvent struct {\n\tPlayerName string    `json:\"playerName\"`\n\tPlayerID   uuid.UUID `json:\"playerId\"`\n}\n\n// GameOverEvent is basically the ready event, but contains the last word.\n// This is required in order to show the last player the word, in case they\n// didn't manage to guess it in time. This is necessary since the last word\n// is usually part of the \"next-turn\" event, which we don't send, since the\n// game is over already.\ntype GameOverEvent struct {\n\t*ReadyEvent\n\tPreviousWord   string         `json:\"previousWord\"`\n\tRoundEndReason roundEndReason `json:\"roundEndReason\"`\n}\n\ntype WordChosen struct {\n\tTimeLeft int         `json:\"timeLeft\"`\n\tHints    []*WordHint `json:\"hints\"`\n}\n\ntype YourTurn struct {\n\tTimeLeft        int      `json:\"timeLeft\"`\n\tPreSelectedWord int      `json:\"preSelectedWord\"`\n\tWords           []string `json:\"words\"`\n}\n\n// NextTurn represents the data necessary for displaying the lobby state right\n// after a new turn started. Meaning that no word has been chosen yet and\n// therefore there are no wordhints and no current drawing instructions.\ntype NextTurn struct {\n\t// PreviousWord signals the last chosen word. If empty, no word has been\n\t// chosen. The client can now themselves whether there has been a previous\n\t// turn, by looking at the current gamestate.\n\tPreviousWord   string         `json:\"previousWord\"`\n\tPlayers        []*Player      `json:\"players\"`\n\tChoiceTimeLeft int            `json:\"choiceTimeLeft\"`\n\tRound          int            `json:\"round\"`\n\tRoundEndReason roundEndReason `json:\"roundEndReason\"`\n}\n\n// OutgoingMessage represents a message in the chatroom.\ntype OutgoingMessage struct {\n\t// Content is the actual message text.\n\tContent string `json:\"content\"`\n\t// Author is the player / thing that wrote the message\n\tAuthor string `json:\"author\"`\n\t// AuthorID is the unique identifier of the authors player object.\n\tAuthorID uuid.UUID `json:\"authorId\"`\n}\n\n// ReadyEvent represents the initial state that a user needs upon connection.\n// This includes all the necessary things for properly running a client\n// without receiving any more data.\ntype ReadyEvent struct {\n\tWordHints          []*WordHint `json:\"wordHints\"`\n\tPlayerName         string      `json:\"playerName\"`\n\tPlayers            []*Player   `json:\"players\"`\n\tGameState          State       `json:\"gameState\"`\n\tCurrentDrawing     []any       `json:\"currentDrawing\"`\n\tPlayerID           uuid.UUID   `json:\"playerId\"`\n\tOwnerID            uuid.UUID   `json:\"ownerId\"`\n\tRound              int         `json:\"round\"`\n\tRounds             int         `json:\"rounds\"`\n\tTimeLeft           int         `json:\"timeLeft\"`\n\tDrawingTimeSetting int         `json:\"drawingTimeSetting\"`\n\tAllowDrawing       bool        `json:\"allowDrawing\"`\n}\n\ntype Ring[T any] struct {\n\tbuf  []T\n\thead int\n\tsize int\n}\n\nfunc NewRing[T any](cap int) *Ring[T] {\n\treturn &Ring[T]{buf: make([]T, cap /* slice len, not cap */)}\n}\n\nfunc (r *Ring[T]) Push(v T) {\n\tr.buf[r.head] = v\n\tr.head = (r.head + 1) % len(r.buf)\n\tif r.size < len(r.buf) {\n\t\tr.size++\n\t}\n}\n\nfunc (r *Ring[T]) Oldest() T {\n\tif r.size == 0 {\n\t\tvar zero T\n\t\treturn zero\n\t}\n\treturn r.buf[(r.head-r.size+len(r.buf))%len(r.buf)]\n}\n\nfunc (r *Ring[T]) Latest() T {\n\tif r.size == 0 {\n\t\tvar zero T\n\t\treturn zero\n\t}\n\n\treturn r.buf[(r.head-1+len(r.buf))%len(r.buf)]\n}\n\n// Player represents a participant in a Lobby.\ntype Player struct {\n\t// userSession uniquely identifies the player.\n\tuserSession uuid.UUID\n\tws          *gws.Conn\n\t// disconnectTime is used to kick a player in case the lobby doesn't have\n\t// space for new players. The player with the oldest disconnect.Time will\n\t// get kicked.\n\tdisconnectTime   *time.Time\n\tvotedForKick     map[uuid.UUID]bool\n\tlastKnownAddress string\n\t// messageTimestamps are stored for ratelimiting reasons. See handleMessage.\n\tmessageTimestamps *Ring[time.Time]\n\n\t// Name is the players displayed name\n\tName  string      `json:\"name\"`\n\tState PlayerState `json:\"state\"`\n\t// SpectateToggleRequested is used for state changes between spectator and\n\t// player. We want to prevent people from switching in and out of the Player\n\t// state. While this will allow people to skip being the drawer, it will\n\t// also cause them to lose points for that round.\n\tSpectateToggleRequested bool `json:\"spectateToggleRequested\"`\n\t// Rank is the current ranking of the player in his Lobby\n\t// Score is the points that the player got in the current Lobby.\n\tScore     int `json:\"score\"`\n\tLastScore int `json:\"lastScore\"`\n\tRank      int `json:\"rank\"`\n\t// Connected defines whether the players websocket connection is currently\n\t// established. This has previously been in state but has been moved out\n\t// in order to avoid losing the state on refreshing the page.\n\t// While checking the websocket against nil would be enough, we still need\n\t// this field for sending it via the APIs.\n\tConnected bool `json:\"connected\"`\n\t// hasConnectedOnce indicates whether a player has ever connected to the websocket.\n\t// This can be false between loading the HTML and connecting to the websocket.\n\thasConnectedOnce bool\n\t// ID uniquely identified the Player.\n\tID uuid.UUID `json:\"id\"`\n}\n\n// EditableLobbySettings represents all lobby settings that are editable by\n// the lobby owner after the lobby has already been opened.\ntype EditableLobbySettings struct {\n\t// CustomWords are additional words that will be used in addition to the\n\t// predefined words.\n\t// Public defines whether the lobby is being broadcast to clients asking\n\t// for available lobbies.\n\tPublic bool `json:\"public\"`\n\t// MaxPlayers defines the maximum amount of players in a single lobby.\n\tMaxPlayers         int `json:\"maxPlayers\"`\n\tCustomWordsPerTurn int `json:\"customWordsPerTurn\"`\n\t// ClientsPerIPLimit helps preventing griefing by reducing each player\n\t// to one tab per IP address.\n\tClientsPerIPLimit int `json:\"clientsPerIpLimit\"`\n\t// Rounds defines how many iterations a lobby does before the game ends.\n\t// One iteration means every participant does one drawing.\n\tRounds int `json:\"rounds\"`\n\t// DrawingTime is the amount of seconds that each player has available to\n\t// finish their drawing.\n\tDrawingTime int `json:\"drawingTime\"`\n\t// WordsPerTurn defines how many words the drawer is able to choose from\n\tWordsPerTurn int `json:\"wordsPerTurn\"`\n}\n"
  },
  {
    "path": "internal/game/words/ar",
    "content": "آيس كريم\nأرز\nأرنب\nأسد\nأكل\nأناناس\nإبريق\nإسفنجة\nإطار\nالأهرامات\nالبيت الأبيض\nباب\nباتمان\nباذنجان\nبازلاء\nببغاء\nبرتقال\nبرج\nبرج إيفل\nبرجر\nبرق\nبركان\nبسكويت\nبصل\nبطارية\nبطاطس\nبطاقة\nبطانية\nبطة\nبطيخ\nبقرة\nبوصلة\nبيانو\nبيتزا\nبيض\nتذكرة\nتزلج\nتسلق\nتصوير\nتعلم\nتفاحة\nتقويم\nتلسكوب\nتمر\nتمساح\nتنظيف\nتين\nثلاجة\nثلج\nثوم\nجبل\nجبن\nجدار\nجرس\nجزر\nجسر\nجواز\nجورب\nحديقة\nحديقة الحيوان\nحذاء\nحزام\nحساء\nحصان\nحصان بحر\nحقيبة\nحليب\nحمص\nخاتم\nخبز\nخروف\nخريطة\nخزانة\nخس\nخوخ\nخوذة\nخيار\nخيمة\nدائرة\nدجاج\nدراجة\nدرج\nدش\nدفتر\nدلو\nدولفين\nديك\nذئب\nذرة\nرسالة\nرسم\nرسم بالقلم\nرقص\nركض\nرمان\nرمح\nزبدة\nزجاجة\nزرافة\nزيت\nزيتون\nساحة\nساعة\nساندويتش\nسباحة\nسباق\nسبايدرمان\nستارة\nسجادة\nسرير\nسفر\nسفينة\nسقف\nسكر\nسكين\nسلة\nسلحفاة\nسلحفاة بحرية\nسلطة\nسلم\nسماعة\nسمك\nسمكة\nسندباد\nسهم\nسوار\nسوبرمان\nسوق\nسيارة\nسيف\nسينما\nشاحن\nشاشة\nشاطئ\nشاي\nشبكة\nشكولاتة\nشلال\nشمس\nشمعة\nشوربة\nشوكة\nصابون\nصافرة\nصحراء\nصخرة\nصندوق\nصيد\nضفدع\nطائر\nطائرة\nطاولة\nطبخ\nطبق\nطبلة\nطرزان\nطماطم\nعجلة\nعدس\nعسل\nعصير\nعلم\nعنب\nغابة\nغرفة\nغزال\nغناء\nغيتار\nغيمة\nفأرة\nفجل\nفراشة\nفراولة\nفرشاة\nفرشاة أسنان\nفرن\nفطر\nفطيرة\nفلافل\nفلفل\nفيل\nقارب\nقبعة\nقدر\nقراءة\nقرش\nقرنبيط\nقرية\nقصر\nقطار\nقطة\nقفاز\nقفز\nقلادة\nقلم\nقمح\nقمر\nقميص\nقناع\nقهوة\nقوس\nقيادة\nكابينة\nكاميرا\nكبسة\nكتاب\nكتابة\nكرة\nكرز\nكرسي\nكعبة\nكعكة\nكلب\nكماشة\nكمان\nكمبيوتر\nكمثرى\nكهف\nكوب\nكوسة\nكيس\nلافتة\nلحم\nلوحة\nلوحة مفاتيح\nليمون\nمئذنة\nماء\nماعز\nمتحف\nمثلث\nمجلد\nمجهر\nمدرسة\nمدينة\nمذكرة\nمرآب\nمرآة\nمربع\nمربى\nمرفأ\nمرمى\nمروحة\nمستشفى\nمسجد\nمسرح\nمسمار\nمشمش\nمصباح\nمصحف\nمطار\nمطبخ\nمطر\nمطرقة\nمطعم\nمظلة\nمعجون\nمعطف\nمعكرونة\nمغسلة\nمفتاح\nمفتاح سيارة\nمفك\nمقص\nمقلاة\nمقود\nمكتبة\nمكنسة\nمكواة\nملاهي\nملح\nملعب\nملعقة\nملعقة خشب\nممحاة\nمنبه\nمنشار\nمنشفة\nمنظار\nموزة\nموقد\nميزان\nميكروفون\nنافذة\nنحلة\nنخلة\nنظارة\nنعامة\nنمر\nنملة\nنهر\nنوم\nهاتف\nوادي\nوسادة\nوشاح\nولاعة"
  },
  {
    "path": "internal/game/words/de",
    "content": "abdeckung\nabend\nabendessen\nabenteuer\nabfahrt\nabfall\nabfliegen\nabflussrohr\nabgrund\nabhalten\nabheben\nabhilfe\nabhängen\nabhängig\nabhängigkeit\nablassen\nablehnen\nablehnung\nabmessungen\nabnormal\nabonnement\nabraham lincoln\nabsatz\nabschaffen\nabschleppwagen\nabschluss\nabsicht\nabsolut\nabsolvent\nabsorbieren\nabsorption\nabsperrband\nabspielen\nabstammung\nabstimmung\nabstrakt\nabsturz\nabtei\nabteil\nabtreibung\nabwechslungsreich\nabweichung\nabwesend\nabwesenheit\nabzug\nac/dc\nachse\nachsel\nachselhöhle\nachteck\nachterbahn\nachtung\naddition\nader\nadidas\nadler\nadministrator\nadoptieren\nadresse\naffe\naffinität\naffäre\nafrika\nafrofrisur\nagenda\nagent\nagentur\naggressiv\nagil\nahorn\naids\nairbag\nakademie\nakademisch\nakkord\nakkordeon\nakkumulation\nakne\naktion\naktionär\naktiv\naktivität\naktualisieren\nakut\nakzent\nakzeptabel\nakzeptieren\naladdin\nalarm\nalbatros\nalbtraum\nalbum\nalkohol\nallee\nallergie\nallgemeines\nalligator\nallmählich\nalpaka\nalphabetisierung\nalphorn\nalt\naltar\nalter\naltglascontainer\naltweibersommer\nalufolie\naluminium\namateur\nambition\namboss\nameise\nameisenbär\nameisenhaufen\namerika\namor\nampel\nampelmännchen\namputieren\namsel\namsterdam\namüsieren\nanakonda\nanalogie\nanalyse\nanalytiker\nananas\nandere\nanders\nandroid\nanerkennung\nanfang\nanforderung\nanfrage\nanfällig\nanfänger\nanfügen\nanführer\nangebot\nangegebenen\nangelegenheit\nangelina jolie\nangemessen\nangemessene\nangenehm\nangestellter\nangewendet\nanglerfisch\nangreifen\nangriff\nangry birds\nangst\nanhalter\nanhang\nanhänger\nanhängerkupplung\nanimation\nanime\nanker\nanklage\nankündigung\nanlagegut\nanlocken\nanmeldung\nanmerkung\nanmut\nannahme\nannehmen\nanonym\nanordnung\nanruf\nansatz\nanschließend\nanschwellen\nansporn\nanspruch\nanspruchsvoll\nansteigen\nanstrengung\nantarktis\nanteil\nantilope\nantivirus\nantragsteller\nantwort\nantworten\nanubis\nanwalt\nanweisung\nanwendung\nanzahl\nanzahlung\nanzeige\nanzeigen\nanzug\nanzünden\napathie\napfel\napfelbaum\napfelkern\napfelkuchen\napfelsaft\napokalypse\napotheker\nappetit\napplaudieren\napple\naprikose\naquarium\narbeit\narbeiten\narbeiter\narbeitgeber\narbeitslos\narbeitslosigkeit\narbeitszimmer\narchitekt\narchitektur\narchiv\narchäologe\narchäologisch\narena\nargentinien\naristokrat\narm\narmaturenbrett\narmband\narmbanduhr\narmbrust\narmleuchter\narrogant\nartikel\nartikulieren\nartist\narzt\narztkoffer\nasche\naschenbecher\nasien\naspekt\nass\nast\nasterix\nasteroid\nastronaut\nasyl\nasymmetrisch\natem\natemberaubend\nathlet\natlantis\natmen\natmosphäre\natom\natombombe\natomuhr\nattacke\nattraktion\nattraktiv\naubergine\naudi\naufblasen\naufführen\naufgeregt\naufgeräumt\naufhänger\naufkleber\naufladen\nauflage\nauflösung\naufnahme\naufnehmen\naufrechterhalten\naufregend\naufregung\naufsatz\naufteilung\naufwachen\naufwerten\naufzeichnung\naufzug\nauge\naugenbinde\naugenbraue\naugenlid\nausbeuten\nausbildung\nausblenden\nausblick\nausbreitung\nausdruck\nausdrücken\nausfahrt\nausflug\nausführen\nausführung\nausgabe\nausgaben\nausgestorben\nausgewogen\nausgrabung\nauslauf\nausländer\nausnahme\nauspuff\nausrede\nausreichend\nausruhen\nausrüstung\nausschließen\naussehen\naussicht\naussichtspunkt\nausstellung\nausstellungsstück\naustausch\nauster\naustralien\nauswahl\nauto\nautobahn\nautofahrer\nautogramm\nautomatisch\nautonomie\nautor\nautoradio\nautorisieren\naußergewöhnlich\naußerirdisch\naußerirdischer\navocado\naxolotl\naxt\nbaby\nbacken\nbackenzahn\nbackofen\nbackstein\nbad\nbadeanzug\nbadekappe\nbademantel\nbadewanne\nbadezimmer\nbagel\nbagger\nbaguette\nbahn\nbahnhof\nbahnschiene\nbajonett\nbaklava\nbalance\nbalkon\nball\nballaststoff\nballett\nballon\nbambi\nbambus\nbanane\nband\nbandnudel\nbandscheibenvorfall\nbanjo\nbank\nbankier\nbanner\nbar\nbarack obama\nbarbar\nbarbier\nbarcode\nbargeld\nbarkeeper\nbarriere\nbart\nbart simpson\nbase\nbaseball\nbaseballschläger\nbasis\nbasketball\nbatman\nbatterie\nbauarbeiter\nbauch\nbauchnabel\nbauchpinseln\nbauer\nbauernhof\nbauholz\nbaum\nbaumhaus\nbaumkrone\nbaumkuchen\nbaumstumpf\nbaumwolle\nbayern\nbeachten\nbeachtung\nbeatbox\nbecher\nbecken\nbedauern\nbedeuten\nbedeutung\nbedienung\nbedingung\nbeeindrucken\nbeeindruckend\nbeeinflussen\nbeerdigung\nbeere\nbeethoven\nbefehl\nbefehlen\nbefehlshaber\nbeflecken\nbefreiung\nbefriedigung\nbeförderung\nbefürworten\nbegeistert\nbegeisterung\nbegleiten\nbegraben\nbegradigen\nbegreifen\nbegrenzt\nbegriff\nbegrüßen\nbegünstigter\nbehalten\nbehandeln\nbehandlung\nbeharren\nbehauptung\nbehindert\nbehinderung\nbehälter\nbehörde\nbeihilfe\nbein\nbeine\nbeispiel\nbeitrag\nbeizen\nbeißen\nbekanntmachung\nbekanntschaft\nbekenntnis\nbekifft\nbeklagte\nbelagerung\nbelastung\nbeleben\nbeleidigen\nbeleidigend\nbelgien\nbeliebt\nbelohnung\nbenachrichtigung\nbenutzen\nbenzin\nbenötigen\nbeobachten\nbeobachter\nbequemlichkeit\nberater\nberatung\nberauben\nberechnung\nberechtigt\nbereich\nbereit\nbereitstellung\nberg\nbergkette\nbergmann\nbergwerk\nbericht\nberlin\nbernstein\nberuf\nberuflich\nberüchtigt\nberühmt\nberühmtheit\nberühren\nbesatzung\nbescheiden\nbeschreiben\nbeschränken\nbeschränkt\nbeschränkung\nbeschwerde\nbeschweren\nbeschäftigt\nbeschäftigung\nbeschämt\nbeseitigen\nbesen\nbesenstiel\nbesetzen\nbesetzung\nbesitz\nbesonders\nbesorgnis\nbestatter\nbestechen\nbestehen\nbestellung\nbestrafen\nbestrafung\nbestreiten\nbesuch\nbesuchen\nbesucher\nbeten\nbeton\nbetonung\nbetrachten\nbetrachtung\nbetriebsbereit\nbetrug\nbeträchtlich\nbetrügen\nbett\nbettdecke\nbettwanze\nbeule\nbeurteilung\nbeute\nbevorzugen\nbewachen\nbewegung\nbeweis\nbeweisen\nbewertung\nbewirken\nbewohner\nbewundern\nbewunderung\nbewusst\nbewusstsein\nbewältigen\nbezaubernd\nbezeugen\nbeziehung\nbibel\nbiber\nbibliothek\nbibliothekar\nbiege\nbiegen\nbiene\nbienenkönigin\nbienenstich\nbienenstock\nbier\nbig ben\nbikini\nbild\nbilden\nbildhauer\nbildschirm\nbildung\nbill gates\nbillard\nbillig\nbinden\nbindung\nbingo\nbiografie\nbiologie\nbiotonne\nbirke\nbirne\nbischof\nbiss\nbissen\nbitcoin\nbitte\nbitten\nbitter\nblack friday\nblase\nblasebalg\nblatt\nblau\nblaubeere\nblaue jeans\nbleibe\nbleiche\nbleichen\nbleistift\nblendung\nblick\nblind\nblinddarm\nblitz\nblock\nblond\nblume\nblumenkohl\nblumenstrauß\nblumentopf\nblut\nblutegel\nbluten\nbluterguss\nblutig\nblutspende\nblutvergießen\nblöd\nblüte\nbmw\nbmx\nbob\nbob ross\nbock\nboden\nbodybuilding\nbogen\nbogenschütze\nbohne\nbohnenstange\nbohren\nbohrmaschine\nbolzen\nbombe\nbomber\nbomberman\nbommelmütze\nbonbon\nbongo\nboom\nboot\nboris becker\nbotschaft\nbowling\nbox\nboxer\nbrasilien\nbrathering\nbratsche\nbratwurst\nbrauchen\nbrauerei\nbraun\nbrause\nbraut\nbrecheisen\nbrechen\nbreite\nbremse\nbrennen\nbrennnessel\nbrett\nbretzel\nbrezel\nbrief\nbriefkasten\nbriefmarke\nbrieftaube\nbriefträger\nbriefumschlag\nbrieföffner\nbrille\nbringen\nbrise\nbrocken\nbrokkoli\nbronze\nbrot\nbrownie\nbruce lee\nbruch\nbruder\nbrunnen\nbrust\nbrusthaare\nbrustkorb\nbräutigam\nbrücke\nbrüllen\nbrünett\nbuch\nbuchhalter\nbuchstabieren\nbucht\nbudget\nbuffet\nbugs bunny\nbullauge\nbulldozer\nbulle\nbumerang\nbummel\nbundes\nbungee jumping\nbunt\nbuntstift\nburger\nburgruine\nburrito\nbus\nbusch\nbusfahrer\nbushaltestelle\nbutter\nbäcker\nbäckerei\nbär\nbärenfalle\nböller\nbösartig\nbösewicht\nbücherei\nbücherregal\nbücherwurm\nbügeleisen\nbühne\nbündeln\nbürger\nbürgermeister\nbürgersteig\nbüro\nbüroklammer\nbürokratie\nbürokratisch\nbürste\ncafe\ncamping\ncappuccino\ncaptain america\ncartoon\ncat woman\ncatering\ncello\ncent\ncerberus\nchampagner\nchampagnersorbet\nchampion\nchamäleon\nchance\nchaos\nchaotisch\ncharakter\ncharakteristisch\ncharismatisch\ncharlie chaplin\ncharme\ncharta\nchauvinist\ncheerleader\ncheeseburger\nchef\nchemie\nchemisch\nchewbacca\nchihuahua\nchina\nchinatown\nchinchilla\nchinesische mauer\nchip\nchips\nchirurg\nchirurgie\nchor\nchristbaumkugel\nchrome\nchronisch\nchuck norris\nclever\nclickbait\nclown\nclownfisch\ncluster\nco2\ncockpit\ncocktail\ncode\ncoffeeshop\ncola\ncomic\ncomicbuch\ncommunity\ncompass\ncomputer\ncomputing\ncousin\ncowboy\ncreeper\ncreme\ncroissant\ncupcake\ncurry\ncyborg\ndach\ndachboden\ndachfenster\ndachs\ndachschaden\ndaffy duck\ndalmatiner\ndame\ndampf\ndankbar\ndanken\ndarlehen\ndarm\ndarsteller\ndarts\ndarwin\ndatei\ndattel\ndatum\ndauer\ndaumen\ndaune\ndazugewinnen\ndeadpool\ndeal\ndebatte\ndebüt\ndeck\ndecke\ndeckel\ndeckenventilator\ndefinieren\ndefinition\ndefinitiv\ndefizit\ndegen\ndekade\ndekoration\ndekorativ\ndelegieren\ndelfin\ndelle\ndemokratie\ndemokratisch\ndemonstration\ndemonstrator\ndenken\ndenker\ndenkmal\ndenunzieren\ndeodorant\ndepression\ndepressiv\ndesign\ndesigner\ndesoxyribonukleinsäure\ndessert\ndetail\ndetektiv\ndetektor\ndetonieren\ndeutlich\ndeutschland\ndexter\ndiagnose\ndiagonale\ndiagramm\ndialekt\ndialog\ndiamant\ndichte\ndick\ndidgeridoo\ndieb\ndiebstahl\ndienen\ndiener\ndienstag\ndifferenzieren\ndigital\ndiktieren\ndilemma\ndinosaurier\ndiplom\ndiplomat\ndiplomatisch\ndirekte\ndirektor\ndirigent\ndirndl\ndiscord\ndiskette\ndisko\ndiskret\ndiskriminierung\ndiskurs\ndiskutieren\ndistanz\ndistanziert\ndisziplin\ndiva\ndividende\ndiät\ndns\ndoktor\ndokumentieren\ndolch\ndollar\ndom\ndominant\ndominieren\ndomino\ndompteur\ndonald duck\ndonald trump\ndonner\ndonnerstag\ndonut\ndoppelpunkt\ndoppelt\ndora\ndorf\ndorfbewohner\ndoritos\ndose\ndosenöffner\ndosis\ndrache\ndrachen\ndracula\ndraht\ndrama\ndramatisch\ndrang\ndraußen\ndreck\ndreckig\ndrehen\ndrehung\ndreieck\ndreirad\ndressing\ndrift\ndrillinge\ndringlichkeit\ndrinnen\ndroge\ndrohen\ndrohung\ndruck\ndrucken\ndrucker\ndrücken\ndschungel\ndudelsack\nduell\nduftend\ndumbo\ndumm\ndunkel\ndurchdringen\ndurchmesser\ndurchschnittlich\ndurchsetzungsfähig\ndurst\ndurstig\ndusche\ndutzend\ndynamisch\ndynamit\ndynamo\ndämon\ndänemark\ndöner\ndüne\ndünn\ndürr\ndürre\ndüsternis\ne-gitarre\neben\neber\necho\necht\necke\nedel\nedelstein\nefeu\neffizient\nego\nehe\nehefrau\nehemann\nehre\nehrenwert\nehrgeizig\nehrlich\nei\neiche\neichel\neichhörnchen\neidechse\neierbecher\neierschachtel\neifersüchtig\neiffelturm\neifrig\neigelb\neigentum\neilen\neimer\neinbahnstraße\neinblick\neinbruch\neinfach\neinfachheit\neinflussreich\neinfrieren\neinfügen\neinführung\neingabestift\neingeben\neingestehen\neinheimisch\neinheit\neinhorn\neinhornwal\neinkaufen\neinkaufswagen\neinkaufszentrum\neinkommen\neinladen\neinladung\neinlösen\neinrad\neinrasten\neinreichen\neinrichtung\neinsam\neinschiffen\neinschlag\neinschränkung\neinsiedler\neinstein\neinstellen\neinstellung\neinstimmig\neintopf\neintrag\neintritt\neinwand\neinwanderung\neinweichen\neinwohner\neinzelhandel\neinzelhändler\neinzigartig\neis\neis am stiel\neisberg\neisbär\neisen\neisenbahn\neiskaffee\neistee\neisverkäufer\neiszapfen\nelch\nelefant\nelegant\nelektriker\nelektrisch\nelektrizität\nelektroauto\nelektron\nelektronik\nelektronisch\nelement\nelend\nelfenbein\nelite\nellbogen\nelmo\nelon musk\nelsa\nelster\neltern\nelternteil\nembryo\neminem\nemoji\nemotion\nemotional\nempfangshalle\nempfehlen\nempfehlung\nempfindlich\nempfindlichkeit\nempirisch\nemu\nende\nenergie\neng\nengagement\nengel\nengland\nenorm\nentbehrung\nentdecken\nentdeckung\nente\nentensuppe\nentfernt\nentfernung\nentgegengesetzt\nenthalten\nenthaupten\nentlarven\nentlassen\nentlassung\nentlasten\nentmutigen\nentscheiden\nentscheidend\nentschuldigen\nentschuldigung\nentspannen\nentspannung\nentsprechen\nenttäuschen\nenttäuschung\nentwickeln\nentwicklung\nentwurf\nepilieren\nepoche\nerbe\nerben\nerbrechen\nerbsen\nerdbeben\nerdbeere\nerde\nerdkern\nerdkunde\nerdmännchen\nerdnuss\nerdnuss-flips\nerfahren\nerfahrung\nerfassung\nerfindung\nerfolg\nerfolgreich\nerfrieren\nerfrierung\nergebnis\nergreifen\nergänzend\nerhalten\nerhaltung\nerhebt euch\nerholung\nerhöhen\nerinnern\nerinnerung\nerkenne\nerklären\nerklärung\nerkrankung\nerkundung\nerkältung\nerläuterung\nermitteln\nermittler\nermittlung\nermutigen\nermutigend\nermäßigung\nermöglichen\nernennen\nernst\nernte\nernten\nerosion\nerpressung\nerreichen\nerror\nerröten\nersatz\nerscheinen\nerschrecken\nerschreckend\nersetzen\nerstaunlich\nerstellen\nersticken\nertragen\nertrinken\nerwachen\nerwachsene\nerwartet\nerwartung\nerweitern\nerweiterung\nerwerb\nerwägen\nerwägung\nerwähnen\nerziehen\nerzählen\nesel\neselsbrücke\neselsohr\nespresso\nessen\nessig\nessiggurke\nessstäbchen\netabliert\netagenbett\nethik\nethisch\nethnisch\netikette\neule\neuro\neuropa\neuter\nevolution\newig\nexcalibur\nexekutive\nexil\nexklusiv\nexotisch\nexpedition\nexperiment\nexperimental\nexperte\nexplizit\nexplodieren\nexplosion\nexport\nexposition\nextern\nextrem\nfabelhaft\nfabrik\nfacebook\nfachmann\nfackel\nfade\nfaden\nfahnenstange\nfahrbahn\nfahren\nfahrer\nfahrkarte\nfahrlässigkeit\nfahrpreis\nfahrrad\nfahrt\nfahrwerk\nfahrzeug\nfaktor\nfall\nfalle\nfallen\nfallschirm\nfalltür\nfalsch\nfalte\nfalten\nfamilie\nfamiliär\nfamily guy\nfang\nfanta\nfantasie\nfarbe\nfarbenblind\nfarbpalette\nfarmer\nfarn\nfass\nfassade\nfastfood\nfaszinieren\nfata morgana\nfaul\nfaultier\nfaust\nfaustkampf\nfax\nfazit\nfechten\nfeder\nfederball\nfedermäppchen\nfee\nfegen\nfehler\nfehlerhaft\nfehlgeburt\nfeier\nfeierabend\nfeiern\nfeige\nfein\nfeind\nfeindlich\nfeindseligkeit\nfeld\nfeldstecher\nfell\nfelsen\nfeminin\nfeminist\nfenster\nfensterbank\nferien\nferkel\nfernbedienung\nfernglas\nfernsehen\nfernseher\nfernsehturm\nferrari\nferse\nfertig\nfertigkeit\nfest\nfeste\nfestival\nfestnahme\nfestung\nfett\nfett gedruckt\nfettleibig\nfeuer\nfeueralarm\nfeuerball\nfeuerfest\nfeuersalamander\nfeuerwache\nfeuerwehrauto\nfeuerwehrmann\nfeuerwerk\nfeuerzeug\nfidget spinner\nfieber\nfigur\nfiktion\nfilm\nfilmemacher\nfilmriss\nfilter\nfinale\nfinanzen\nfinanziell\nfinden\nfinger\nfingerhut\nfingernagel\nfingerpuppe\nfingerspitze\nfinn\nfinn und jake\nfinnland\nfisch\nfischer\nfischernetz\nfischgräte\nfitness\nfitness trainer\nfix\nflach\nflagge\nflamingo\nflammenwerfer\nflammkuchen\nflasche\nflaschendrehen\nflaschenpost\nflaschenöffner\nfledermaus\nfleisch\nfleischbällchen\nfleischfressend\nflexibel\nfliege\nfliegen\nfliegendes schwein\nfliegenklatsche\nfliegenpilz\nfliese\nflipper\nfloh\nflohmarkt\nflorida\nflorist\nflotte\nfloß\nflucht\nflug\nflugblatt\nfluggesellschaft\nflughafen\nflugzeug\nfluktuation\nflur\nfluss\nflut\nflutlicht\nflöte\nflüchtling\nflügel\nflüssig\nflüssigkeit\nflüstern\nfolge\nfolgen\nfolklore\nfolter\nfonds\nform\nformal\nformat\nformation\nformel\nformulieren\nforscher\nforschung\nforstwirtschaft\nfortdauern\nfortschritt\nfortsetzung\nforum\nfossil\nfotograf\nfotografie\nfotografieren\nfotokopie\nfracht\nfrage\nfragebogen\nfragen\nfragment\nfraktion\nfranchise\nfrank\nfrankenstein\nfrankreich\nfrau\nfred feuerstein\nfreddie faulig\nfrei\nfreibad\nfreiheit\nfreiheitsstatue\nfreisetzung\nfreitag\nfreiwillig\nfreiwillige\nfreizeit\nfrequenz\nfreude\nfreund\nfreundlich\nfreundschaft\nfrieden\nfriedhof\nfriedlich\nfrisbee\nfrisch\nfriseur\nfrist\nfritten\nfroh\nfrosch\nfrost\nfrucht\nfrustration\nfräulein\nfrüh\nfrühling\nfrühlingsrolle\nfrühstück\nfuchs\nfunke\nfunkeln\nfunktion\nfunktional\nfurchtbar\nfussel\nfuß\nfußball\nfußballfeld\nfußboden\nfußende\nfußgänger\nfächer\nfähig\nfähigkeit\nfähre\nfällig\nfässchen\nföderation\nföhn\nföhnen\nfördern\nfühler\nführen\nführer\nführung\nfüllen\ngabel\ngalaxie\ngalaxis\ngalerie\ngallone\ngandalf\ngandhi\ngang\ngangster\ngans\nganze\ngarage\ngarantie\ngarfield\ngarnele\ngarten\ngas\ngasmaske\ngasse\ngast\ngastfreundschaft\ngasthaus\ngazelle\ngeben\ngebet\ngebiss\ngebrauchtwagenhändler\ngebrochen\ngebrochenes herz\ngeburtstag\ngebäck\ngebäude\ngebühr\ngedeihen\ngedicht\ngeduld\ngeduldig\ngefahr\ngefallen\ngefrierschrank\ngefroren\ngefährlich\ngefängnis\ngefühl\ngegend\ngegenseitig\ngegenstand\ngegenteil\ngegenwart\ngegner\ngeheimnis\ngehen\ngehirn\ngehirnwäsche\ngehorchen\ngehäuse\ngehören\ngeier\ngeige\ngeisel\ngeist\ngeizig\ngekritzel\ngelangweilt\ngelb\ngeld\ngeldbeutel\ngelee\ngelegenheit\ngelehrte\ngelähmt\ngemeinschaft\ngemüse\ngemütlich\ngen\ngenau\ngenehmigen\ngenehmigung\ngeneration\ngenerator\ngenerieren\ngenesen\ngenetisch\ngenie\ngenius\ngenossenschaft\ngentleman\ngeografie\ngeologe\ngeologisch\ngepard\ngepäck\ngepäckträger\ngerade\ngerangel\ngerechtigkeit\ngericht\ngeringer\ngeruch\ngerät\ngeröll\ngerücht\ngesamt\ngeschehen\ngeschenk\ngeschichte\ngeschirrschrank\ngeschlecht\ngeschlossen\ngeschmack\ngeschrieben\ngeschwindigkeit\ngeschwür\ngeschäft\ngeschäftsmann\ngesellig\ngesellschaft\ngesetz\ngesetzgebung\ngesicht\ngesichtsbemalung\ngespenst\ngesprächig\ngestalten\ngeste\ngestell\ngestresst\ngesund\ngesundheit\ngetriebe\ngetränk\ngewahrsam\ngewalt\ngewebe\ngewehr\ngewicht\ngewinner\ngewissen\ngewitter\ngewohnheit\ngewähren\ngewöhnliche\ngewürz\ngeysir\ngier\ngießen\ngießkanne\ngift\ngiftig\ngiftzwerg\ngipfel\ngipfelkreuz\ngips\ngiraffe\ngitarre\ngitter\ngladiator\nglanz\nglas\nglatt\nglatze\nglauben\nglaubensbekenntnis\nglaubwürdigkeit\ngleich\ngleichgewicht\ngleichung\ngleiten\ngletscher\ngliederung\ngliedmaßen\nglitzer\nglobus\nglocke\nglockenspiel\nglut\nglück\nglücklich\nglücksrad\nglücksspiel\nglühbirne\nglühen\nglühwürmchen\ngnade\ngnom\ngoblin\ngold\ngoldener apfel\ngoldenes ei\ngoldfisch\ngoldkette\ngoldtopf\ngolf\ngolfwagen\ngong\ngoofy\ngoogeln\ngoogle\ngorilla\ngott\ngottesanbeterin\ngourmet\ngouverneur\ngrab\ngraben\ngrabmal\ngrabstein\ngrad\ngraffiti\ngrafik\ngrafiktablett\ngrammatik\ngranatapfel\ngranate\ngrapefruit\ngraph\ngras\ngrashüpfer\ngrat\ngratulieren\ngrausam\ngrausamkeit\ngreen lantern\ngrenze\ngriechenland\ngriff\ngrill\ngrille\ngrillen\ngrimasse\ngrinch\ngrinsen\ngrippe\ngroschen\ngrotte\ngroß\ngroßartig\ngroßmutter\ngroßvater\ngroßzügig\ngru\ngrube\ngrubenarbeiter\ngrund\ngrundbesitzer\ngrusel\ngruß\ngröße\ngrün\ngründe\ngründen\ngrüßen\nguerilla\nguillotine\ngully\ngumball\ngummi\ngummibärchen\ngummiwürmchen\ngurke\ngurt\ngut\ngutschein\ngymnastik\ngähnen\ngänseblümchen\ngärtner\ngötterspeise\ngültig\ngünstig\ngürtel\ngürteltier\nhaar\nhaare\nhaarfarbe\nhaarig\nhaarschnitt\nhaarschuppen\nhaarspange\nhaarspray\nhaben\nhackbraten\nhacke\nhacken\nhacker\nhafen\nhafenbecken\nhaftung\nhagel\nhahn\nhai\nhaken\nhalb\nhalbinsel\nhalbkreis\nhalbleiter\nhalle\nhals\nhalsband\nhalskette\nhalskrause\nhalt\nhalterung\nhaltestelle\nhamburger\nhammer\nhammerhai\nhampelmann\nhamster\nhand\nhandbuch\nhandel\nhandfläche\nhandgelenk\nhandlung\nhandschlag\nhandschuh\nhandtuch\nhandwerker\nhandy\nhantelbank\nhappy meal\nhardware\nharfe\nharmonie\nharpune\nharry potter\nhart\nhartnäckig\nharz\nhase\nhaselnuss\nhashtag\nhass\nhaufen\nhaupt\nhauptquartier\nhauptstadt\nhaus\nhausfrau\nhausmeister\nhausnummer\nhaustier\nhaustür\nhaut\nhawaii\nhawaiihemd\nhecht\nhecke\nheckspoiler\nheer\nheftig\nheil\nheilen\nheilig\nheiligenschein\nheiligtum\nheinzelmännchen\nheiter\nheizungskessel\nheiß\nheiße schokolade\nheld\nhelikopter\nhelium\nhello kitty\nhelm\nhemd\nhemisphäre\nhemmung\nhenne\nherausforderung\nherausgeber\nherbst\nherde\nherkules\nheroin\nherrlich\nherrschaft\nhersteller\nherstellung\nherunterladen\nherz\nherzlich willkommen\nherzog\nheu\nheuschrecke\nhexe\nhierarchie\nhieroglyphen\nhigh five\nhigh heels\nhigh score\nhilfe\nhilflos\nhilfreich\nhimbeere\nhimmel\nhimmelbett\nhindernis\nhingeben\nhintergrund\nhinweis\nhinzufügen\nhip hop\nhippie\nhirsch\nhistoriker\nhistorisch\nhitze\nhobbit\nhoch\nhochhaus\nhochschule\nhochzeit\nhochzeitskutsche\nhocken\nhockey\nhoffen\nhollywood\nhologramm\nholz\nholzfäller\nholzscheit\nhomer simpson\nhonig\nhonigwabe\nhorizont\nhorizontal\nhorn\nhoroskop\nhose\nhosenstall\nhosentasche\nhotdog\nhotel\nhubschrauber\nhuf\nhuhn\nhula hoop\nhulk\nhummer\nhumor\nhund\nhundehütte\nhunger\nhungrig\nhusten\nhut\nhydrant\nhypnotisieren\nhypothek\nhypothese\nhyäne\nhäftling\nhähnchen\nhälfte\nhändler\nhängebauchschwein\nhängebrücke\nhängematte\nhängen\nhässlich\nhäufig\nhäufigkeit\nhöflich\nhöflichkeit\nhöhe\nhöhle\nhöhlenforscher\nhöhlenmensch\nhölle\nhören\nhüfte\nhügel\nhühnchen\nhündin\nhüpfen\nhüpfkästchen\nhürdenlauf\nhütte\nideal\nidee\nidentifizieren\nidentifizierung\nidentität\nideologie\nigel\nignorant\nignoranz\nignorieren\nikea\nillegal\nillusion\nillustration\nim ruhestand\nimmigrant\nimmun\nimplikation\nimplizit\nimportieren\nimpuls\nimstande\nindex\nindianer\nindien\nindikation\nindirekt\nindividuell\nindustrie\nindustriell\ninfektion\ninfizieren\ninflation\ninformation\ninformell\ninfrastruktur\ningenieur\ninhaber\ninhalt\ninitiale\ninitiative\ninjektion\ninjizieren\ninkognito\ninlineskates\ninländisch\ninnen\ninnere\ninnerhalb\ninnovation\ninsekt\ninsel\ninsgesamt\ninsider\ninsolvent\ninspektor\ninspiration\ninspirieren\ninstallieren\ninstandhaltung\ninstinkt\ninstitution\ninstrument\nintegration\nintegriert\nintegrität\nintel\nintellektuell\nintelligenz\nintensivieren\ninteraktion\ninteraktiv\ninteressant\ninteresse\ninterferenz\nintern\ninternational\ninternet\ninterpretieren\nintervention\ninterview\ninuit\ninvasion\ninvestition\nipad\niphone\nirland\nirokesenfrisur\niron man\nironie\nirreführen\nirrelevant\nisland\nisolation\nisrael\nitalien\njacht\njacke\njackie chan\njagd\njagdziel\njagen\njaguar\njahr\njahrbuch\njahrestag\njahreszeit\njahrhundert\njalapeno\njames bond\njapan\njay z\njazz\njeans\njeep\njenga\njesus\njesus christ\njet\njetski\njimmy neutron\njo-jo\njob\njockey\njoghurt\njohn cena\njohn lennon\njohnny bravo\njoint\njonglieren\njournalist\njugend\njung\njunge\njungfrau\njunior\njunk food\njupiter\njury\njustiz\njuwel\njäger\njährlich\nkabel\nkabellos\nkabine\nkabinett\nkader\nkaffee\nkaffeetasse\nkahl\nkaiserliche\nkakao\nkakerlake\nkaktus\nkalb\nkalender\nkalorie\nkalt\nkaltwachsstreifen\nkamel\nkamera\nkameramann\nkamin\nkamm\nkampagne\nkampf\nkanada\nkanal\nkanalisation\nkanarienvogel\nkandidat\nkanister\nkanone\nkante\nkapitalismus\nkapitel\nkapitän\nkappe\nkaraoke\nkarate\nkarneval\nkarotte\nkarte\nkarteikasten\nkarten\nkartenspiel\nkartoffel\nkartoffelbrei\nkartoffelpuffer\nkarussell\nkasino\nkasse\nkassenbon\nkassette\nkastagnetten\nkastanie\nkatalog\nkatamaran\nkatana\nkatapult\nkatastrophe\nkategorie\nkathedrale\nkaty perry\nkatze\nkatzenklo\nkauen\nkaufen\nkaugummi\nkaugummikugel\nkaulquappe\nkaution\nkaviar\nkazoo\nkebab\nkegel\nkegelrobbe\nkehle\nkeim\nkeks\nkeksdose\nkeller\nkellner\nkendama\nkennt\nkennzeichen\nkeramik\nkerl\nkermit\nkernkraftwerk\nkernspintomografie\nkerze\nkerzenleuchter\nkerzenständer\nkessel\nketchup\nkette\nkettenkarussell\nkettensäge\nkeuchen\nkeyboard\nkfc\nkiefer\nkies\nkiffen\nkillerwal\nkim jong-un\nkim kardashian\nkind\nkindergarten\nkinderwagen\nkindheit\nkindisch\nking kong\nkinn\nkino\nkirby\nkirche\nkirchturm\nkirschblüte\nkirsche\nkissen\nkissenschlacht\nkiste\nkit\nkitesurfen\nkitzeln\nkiwi\nklang\nklar\nklarinette\nklasse\nklassenzimmer\nklassifizieren\nklassisch\nklatschen\nklaue\nklavier\nklaviersaite\nklebeband\nkleben\nkleber\nklebestift\nklebrig\nkleeblatt\nkleid\nkleider\nkleiderbügel\nkleiderschrank\nklein\nkleinbus\nkleiner finger\nkleinlich\nklempner\nklettern\nklima\nklimaanlage\nklinge\nklingelton\nklingen\nklinik\nklippe\nklobrille\nklopfen\nkloster\nklumpen\nkläger\nklären\nknall\nknallfrosch\nknast\nkneipe\nkneten\nknie\nknien\nknoblauch\nknochen\nknopf\nknoten\nknöchel\nkoala\nkoalition\nkobra\nkoch\nkochen\nkoffer\nkofferraum\nkohle\nkohlenstoff\nkohlrübe\nkojote\nkokon\nkokosnuss\nkolibri\nkollege\nkolonie\nkolosseum\nkoma\nkombination\nkombinieren\nkomet\nkomfort\nkomfortabel\nkomiker\nkomisch\nkomitee\nkommentar\nkommerziell\nkommission\nkommunale\nkommunikation\nkommunismus\nkommunistisch\nkompakt\nkompass\nkompatibel\nkompensieren\nkompetent\nkompetenz\nkomplett\nkomplex\nkomplikation\nkomponist\nkompromiss\nkomödie\nkondenswasser\nkonferenz\nkonfetti\nkonflikt\nkonfrontation\nkonfrontieren\nkonglomerat\nkongress\nkonkurrieren\nkonkurs\nkonsens\nkonservativ\nkonsistent\nkonsole\nkonsolidieren\nkonstante\nkonstellation\nkonstitutionell\nkonstruieren\nkonstruktiv\nkontakt\nkontext\nkontinent\nkontinental\nkontinuierlich\nkonto\nkontrabass\nkontraktion\nkontrast\nkonvention\nkonventionell\nkonversation\nkonvertieren\nkonzentration\nkonzentrieren\nkonzept\nkonzeption\nkonzert\nkonzession\nkooperieren\nkopf\nkopfende\nkopfhörer\nkopflaus\nkopfschmerzen\nkopftuch\nkopie\nkopieren\nkoralle\nkorallenriff\nkoran\nkorb\nkorken\nkorkenzieher\nkorn\nkornflakes\nkorrektur\nkorrelation\nkorrespondenz\nkorruption\nkostüm\nkrabbe\nkrake\nkrank\nkrankenhaus\nkrankenschwester\nkrankenwagen\nkrankheit\nkranz\nkratzen\nkraut\nkrawatte\nkrebs\nkredit\nkredithai\nkreditkarte\nkreide\nkreis\nkreuz\nkreuzfahrt\nkreuzotter\nkreuzung\nkricket\nkriechen\nkrieg\nkrieger\nkriegsschiff\nkriminell\nkrise\nkristall\nkritik\nkritiker\nkritisch\nkroatien\nkrokodil\nkrone\nkronkorken\nkronleuchter\nkrug\nkruste\nkräftig\nkrähe\nkröte\nkrücke\nkrümelmonster\nkuba\nkuchen\nkuckuck\nkuckucksuhr\nkugel\nkugelfisch\nkuh\nkuhglocke\nkultur\nkulturell\nkunde\nkung fu\nkunst\nkupfer\nkuppel\nkurs\nkurve\nkurz\nkurze hose\nkurzschluss\nkuscheln\nkuss\nkäfer\nkäfig\nkänguru\nkäse\nkäsekuchen\nkätzchen\nköcher\nköder\nkönig\nkönig der löwen\nkönigin\nköniglich\nkönigreich\nkörper\nküche\nküchentuch\nkühlschrank\nkünstler\nkünstlerisch\nkünstlich\nkürbis\nkürbislaterne\nkürzen\nküssen\nküste\nküstenwache\nlabor\nlaboratorium\nlabyrinth\nlachen\nlachs\nladebalken\nladegerät\nladen\nlady\nlady gaga\nlage\nlager\nlagerfeuer\nlagerhaus\nlakritz\nlaktoseintoleranz\nlama\nlamm\nlampe\nlampenschirm\nland\nlandschaft\nlandwirtschaft\nlandwirtschaftlich\nlange\nlangsam\nlanze\nlaptop\nlas vegas\nlasagne\nlaser\nlassen\nlasso\nlastwagen\nlaterne\nlaubhaufen\nlaubsäge\nlauf\nlaufen\nlauschen\nlaut\nlautsprecher\nlautstärke\nlava\nlavalampe\nlavendel\nlayout\nleben\nlebensfähig\nlebensmittel\nlebensraum\nlebensstil\nleber\nlebhaft\nlebkuchen\nlebkuchenhaus\nleck\nlecken\nlecker\nleder\nlederhose\nleer\nleeren\nlegal\nlegen\nlegende\nlegislative\nlego\nlehm\nlehnen\nlehrer\nlehrplan\nlehrreich\nleiche\nleichtsinn\nleiden\nleidenschaft\nleidenschaftlich\nleihen\nleine\nleinen\nleistung\nleiten\nleiter\nleiterbahn\nleiterwagen\nlektion\nlemur\nleonardo da vinci\nleonardo dicaprio\nlernen\nlesen\nleser\nlesezeichen\nletzte\nleuchtreklame\nleuchtstab\nleuchtturm\nleugnung\nlexikon\nliane\nlibelle\nliberal\nlicht\nlichtschalter\nlichtschwert\nlidschatten\nliebe\nliebhaber\nlieblings\nliechtenstein\nliefern\nlieferung\nlilie\nlimbo\nlimette\nlimonade\nlimousine\nlinderung\nlineal\nlinear\nlinie\nlink\nlinks\nlinse\nlippe\nlippen\nlippenstift\nlisa simpson\nliterarisch\nliteratur\nlitfaßsäule\nlitschi\nlizenz\nlizenzgebühren\nlkw\nlkw-fahrer\nloben\nloch\nlocher\nlocken\nlockenwickler\nlog\nlogik\nlogisch\nlogo\nlohn\nlokalisieren\nlondon\nlondon eye\nlooping\nlorbeeren\nlose\nlotterie\nloyalität\nluchs\nluft\nluftfahrt\nluftkissenboot\nluftmatratze\nluftschiff\nluftschloss\nluigi\nlunge\nlungenentzündung\nlupe\nlustig\nlutscher\nluxemburg\nlächeln\nländlich\nlänge\nlärm\nläufer\nlöffel\nlöschen\nlösen\nlösung\nlöwe\nlöwenzahn\nlüfter\nlüftung\nlüge\nmachen\nmachomäßig\nmacht\nmadagaskar\nmafia\nmagazin\nmagersüchtig\nmagie\nmagier\nmagma\nmagnet\nmagnetisch\nmahlzeit\nmaibaum\nmaid\nmaikäfer\nmail\nmain\nmainstream\nmais\nmaisfeld\nmaki\nmakkaroni\nmaler\nmalkasten\nmammut\nmanager\nmandel\nmanege\nmangel\nmaniküre\nmann\nmannschaft\nmantel\nmanuskript\nmarathon\nmargarine\nmarge simpson\nmarienkäfer\nmarine\nmario\nmarionette\nmark zuckerberg\nmarke\nmarketing\nmarkieren\nmarkt\nmarmelade\nmarmor\nmars\nmarshmallow\nmaschine\nmaschinen\nmaske\nmaskottchen\nmasse\nmassieren\nmaterial\nmathematik\nmathematisch\nmatratze\nmatrix\nmatrjoschka\nmatsch\nmatze\nmaulkorb\nmaulwurf\nmaurer\nmaus\nmauseloch\nmaut\nmaximal\nmayonnaise\nmaßstab\nmcdonalds\nmechaniker\nmechanisch\nmechanismus\nmedaille\nmedizin\nmedusa\nmeer\nmeerenge\nmeeresfrüchte\nmeerjungfrau\nmeerschweinchen\nmegafon\nmehl\nmehrdeutig\nmehrdeutigkeit\nmehrere\nmehrheit\nmeile\nmeint\nmeinung\nmeister\nmel gibson\nmelken\nmelodie\nmelone\nmeme\nmemorandum\nmenge\nmensch\nmenschen\nmenschheit\nmenschlicher körper\nmental\nmercedes\nmerken\nmerkmal\nmerkur\nmesse\nmessen\nmesser\nmetall\nmeteorit\nmeteorologe\nmethode\nmethodik\nmexiko\nmichael jackson\nmicky maus\nmiete\nmieten\nmieter\nmigration\nmikrofon\nmikroskop\nmikrowelle\nmilch\nmilchmann\nmilchshake\nmilchstraße\nmild\nmilitär\nminderheit\nminecraft\nmineral\nmineralwasser\nminiclip\nminigolf\nminimieren\nminimum\nminion\nminister\nministerium\nminotaurus\nminute\nminze\nmischen\nmischpult\nmischung\nmiss piggy\nmissbrauch\nmistgabel\nmitarbeiter\nmitfahrgelegenheit\nmitglied\nmitgliedschaft\nmitleid\nmittagessen\nmitte\nmittel\nmittelalterlich\nmittelklasse\nmitternacht\nmittlere\nmittwoch\nmixer\nmobiltelefon\nmode\nmodedesigner\nmodel\nmodell\nmodern\nmodisch\nmodul\nmohn\nmolekular\nmolekül\nmolkerei\nmoment\nmona lisa\nmonaco\nmonarch\nmonarchie\nmonat\nmonatlich\nmond\nmonobraue\nmonopol\nmonster\nmonströs\nmont blanc\nmontag\nmoos\nmopp\nmoral\nmord\nmorgan freeman\nmorgen\nmorse code\nmorty\nmosaik\nmoschee\nmoskau\nmoskito\nmother\nmotherboard\nmotiv\nmotivation\nmotor\nmotorrad\nmotte\nmottenkugel\nmount everest\nmount rushmore\nmozart\nmr. bean\nmr. meeseeks\nmtv\nmuffin\nmultimedia\nmultiplizieren\nmumie\nmund\nmundharmonika\nmurmeln\nmurmeltier\nmuschel\nmuseum\nmusical\nmusik\nmusiker\nmuskel\nmuskelkater\nmuskete\nmuster\nmut\nmutation\nmutig\nmutter\nmuttermal\nmwst\nmythos\nmächtig\nmädchen\nmähdrescher\nmärz\nmäusefalle\nmöbel\nmögen\nmöglich\nmöglichkeit\nmöhre\nmönch\nmörder\nmöwe\nmücke\nmüde\nmühe\nmühle\nmüll\nmüllabfuhr\nmülleimer\nmüller\nmünze\nmürrisch\nmüsli\nmütze\nnach vorne\nnachbar\nnachdenklich\nnachfrage\nnachlass\nnachmittag\nnachos\nnachricht\nnachrichten\nnacht\nnachtclub\nnachteil\nnachthemd\nnachtisch\nnachwuchs\nnacken\nnackt\nnadel\nnadelkissen\nnagel\nnagelfeile\nnagellack\nnagelpflege\nnagelschere\nnahrung\nname\nnarbe\nnarr\nnarwal\nnasa\nnascar\nnase\nnasenbluten\nnasenhaar\nnasenlöcher\nnasenpiercing\nnasenring\nnashorn\nnass\nnational\nnationalismus\nnationalist\nnatrium\nnatur\nnebel\nnecken\nneffe\nnegativ\nnehmen\nnemo\nneptun\nnerd\nnerv\nnervenzusammenbruch\nnervös\nnessie\nnest\nnett\nnetz\nnetzwerk\nneu\nneueste\nneugierig\nneuling\nneuseeland\nneutral\nnew york\nnicht mögen\nnicht wie\nnichts\nnichtschwimmer\nnickel\nnicken\nnickerchen\nniederlage\nniederlande\nniedlich\nniedrig\nniedriger\nniere\nniesen\nnike\nnilpferd\nninja\nnintendo\nniveau\nnominieren\nnominierung\nnonne\nnorden\nnordkorea\nnordpol\nnorm\nnormal\nnorwegen\nnot\nnotenschlüssel\nnotfall\nnotizblock\nnotizbuch\nnotwendig\nnudel\nnuklear\nnull\nnummer\nnuss\nnussknacker\nnussschale\nnutella\nnutzer\nnutzlos\nnächstenliebe\nnähen\nnähmaschine\nnützlich\noase\nobdachlos\nobelix\noben\nober\noberarm\noberfläche\noberteil\nobjekt\noboe\nobservatorium\nobskur\nobst\nodysseus\nofen\noffen\noffensichtlich\noffiziell\noffizier\nohnmacht\nohr\nohrenschmalz\nohrhörer\nohrring\nohrwurm\noktoberfest\noktopus\nolaf\nolive\nolivenöl\noma\nomelett\nonkel\noper\noperation\nopernhaus sydney\nopfer\nopfern\nopposition\noptimismus\noptimistisch\noptional\noral\norang-utan\norange\norbit\norca\norchester\norchidee\nordnen\nordner\noreo\norgan\norganisation\norganisch\norganisieren\norgel\norientierung\norigami\noriginal\northodox\noscar\nosten\nosterhase\nostern\notter\noutfit\noval\nozean\npaar\npac-man\npack\npaintball\npaket\npalast\npalme\npanda\npanel\npanflöte\npanik\npanther\npantomime\npanzer\npanzerband\npanzerfaust\npapagei\npapageientaucher\npaparazzi\npapaya\npapier\npapiertüte\npappe\npaprika\npapst\nparade\nparadox\nparallel\nparalleluniversum\nparameter\npardon\nparfüm\nparis\npark\nparkplatz\nparkuhr\nparlament\npartikel\npartner\npartnerlook\npartnerschaft\nparty\npassage\npassagier\npassen\npassiv\npasswort\npasta\npastell\npastete\npatenonkel\npatent\npatrick star\npatriot\npatrone\npatronenhülse\npatrouillieren\npauke\npause\npavian\npaypal\npech\npedal\npegasus\npeinlich\npeitsche\npelikan\npelz\npendel\npension\npensionierung\npeperoni\npeppa pig\npepsi\nperfekt\nperforieren\nperformance\nperiskop\nperle\npermanent\nperson\npersonenschützer\npersönlich\npersönlichkeit\nperücke\npest\npfad\npfadfinder\npfanne\npfannenwender\npfannkuchen\npfau\npfeffer\npfeffersalami\npfeife\npfeifen\npfeil\npferd\npferdeschwanz\npferdestall\npfirsich\npflanze\npflaster\npflaume\npflege\npflegen\npflicht\npflug\npflügen\npfote\npfund\npfütze\nphantasie\nphilosoph\nphilosophie\nphilosophisch\nphineas und ferb\nphotoshop\nphotosynthese\nphysalis\nphysik\nphysisch\nphänomen\npi\npicasso\npickel\npicknick\npieksen\npikachu\npille\npilot\npilz\npinguin\npinienkerne\npink\npinocchio\npinsel\npinzette\npionier\npirat\npiratenschiff\npistazie\npistole\npizza\nplanen\nplanet\nplanke\nplastik\nplatte\nplattenspieler\nplattform\nplatz\nplatzen\nplaystation\npluto\nplädieren\nplätzchen\nplötzlich\npobacken\npoesie\npogo stick\npokemon\npoker\npolarlicht\npole\npolieren\npolitik\npolitiker\npolitisch\npolizei\npolizist\npolo\npommes\npony\npop\npopcorn\npopeye\npopulation\npornhub\nportal\nporter\nportion\nportrait\nporträt\nportugal\nposaune\nposeidon\nposition\npositiv\npost\npostbote\nposter\npostkarte\npotenzial\nprahlen\npraktisch\nprallen\npredigen\npreis\npreisschild\npresslufthammer\nprestige\npriester\nprimär\npringles\nprinz\nprinzessin\nprinzip\npriorität\nprisma\nprivat\nprivatsphäre\nprivileg\nprivilegiert\nprobe\nproblem\nprodukt\nproduktion\nproduktiv\nproduzent\nproduzieren\nprofessor\nprofi\nprofil\nprofitieren\nprognose\nprogramm\nprogrammierer\nprogressiv\nprojekt\nprojektion\nproklamieren\nprokrastinieren\npropaganda\npropeller\nproportional\nprotein\nprotest\nprovinz\nprovozieren\nprozent\nprozess\npräferenz\nprämie\npräsentation\npräsident\npräsidentschaft\npräsidentschaftswahl\npräzedenzfall\npräzise\npräzision\nprüfen\nprüfung\npsychologe\npsychologie\npu der bär\npublikum\npudding\npudel\npuder\npulver\npuma\npumba\npumpe\npunker\npunkt\npunkte\npunktestand\npuppe\npuppenhaus\npups\npurzelbaum\npuzzle\npyramide\nquadrat\nqual\nqualifikation\nqualifizieren\nqualifiziert\nqualität\nqualle\nquantitativ\nquarantäne\nquartal\nquelle\nquerflöte\nquote\nrabatt\nrache\nraclette\nrad\nradar\nradiergummi\nradieschen\nradikale\nradio\nradioaktivität\nraffiniert\nrahmen\nrakete\nrallye\nrampe\nrand\nrandalieren\nrang\nrapper\nrapunzel\nrasen\nrasenmäher\nrasensprenger\nrasieren\nrasierer\nrasierklinge\nrasiermesser\nrasierschaum\nrasse\nrasseln\nrassismus\nrassistisch\nrat\nratatouille\nrational\nratte\nrau\nraub\nrauben\nraubtier\nrauch\nrauchen\nraum\nraumanzug\nraumschiff\nraupe\nravioli\nreaktion\nreaktor\nrealisieren\nrealismus\nrealistisch\nrealität\nrebell\nrebellion\nrechen\nrechnen\nrechnung\nrecht\nrechteck\nrechter flügel\nrechtfertigen\nrechtfertigung\nrechts\nrechtsstreitigkeiten\nrechtswidrig\nrecyceln\nrecycling\nreddit\nrede\nredner\nredundanz\nreferenz\nreflektieren\nreflexion\nreform\nregal\nregel\nregen\nregenbogen\nregenmantel\nregenschirm\nregentropfen\nregenwald\nregenwolke\nregierung\nregion\nregional\nregisseur\nregistrieren\nregulär\nreh\nrehabilitation\nreiben\nreich\nreichlich\nreichtum\nreifen\nreihe\nreihenfolge\nrein\nreinheit\nreinigen\nreinkarnation\nreis\nreise\nreisender\nreisepass\nreiten\nreizen\nreißverschluss\nreißverschlussverfahren\nrekrutieren\nrelativ\nrelevant\nrelevanz\nreligion\nreligiös\nrennauto\nrennen\nrentier\nrentner\nreparieren\nreporter\nreproduktion\nreproduzieren\nreptil\nrepublik\nreservieren\nreservoir\nresidenz\nresort\nrespekt\nrespektabel\nressource\nrestaurant\nreste\nrettich\nrettung\nrettungsring\nrettungsweste\nrevolution\nrevolutionär\nrevolver\nrezension\nrezept\nrezeption\nrezeptionist\nrezession\nrhetorik\nrhythmus\nrichter\nrichtig\nrichtlinie\nrichtung\nrick\nriechen\nriese\nriesenrad\nrinde\nrindfleisch\nring\nringelblume\nringelschwanz\nringen\nrinne\nrippe\nrisiko\nriss\nritter\nritual\nrobbe\nrobin hood\nroboter\nrochen\nrock\nrockstar\nroh\nrohr\nrolle\nrollen\nroller\nrollladen\nrollschuhe\nrolltreppe\nrom\nroman\nromantisch\nrosarote panther\nrose\nrosine\nrot\nrote beete\nroter teppich\nrotieren\nrotkehlchen\nroute\nroutine\nrubin\nrucksack\nruder\nruf\nrugby\nruhe\nruhig\nruhm\nruine\nrumänien\nrunde\nrunden\nrune\nrussland\nrutsche\nrutschen\nrutschig\nräuber\nräucherstäbchen\nräumlich\nröntgen\nröntgenstrahlung\nröstaroma\nrübe\nrücken\nrückenschmerzen\nrückgrat\nrückgängig\nrückkehr\nrückseite\nrücksichtslos\nrückspiegel\nrücktritt\nrückzug\nrührei\nrühren\nrülpsen\nrüstung\nsabbern\nsachen\nsachverstand\nsafari\nsafe\nsaft\nsaftpresse\nsagen\nsahne\nsaisonal\nsalami\nsalat\nsalon\nsalz\nsalzstange\nsalzwasser\nsamen\nsammeln\nsammlung\nsamstag\nsamsung\nsamt\nsand\nsandale\nsandalen\nsandbank\nsandburg\nsandkasten\nsandsturm\nsanduhr\nsandwich\nsanft\nsarg\nsatellit\nsattel\nsattelschlepper\nsaturn\nsatz\nsau\nsauber\nsauer\nsauerstoff\nsaufen\nsaugglocke\nsauna\nsaxofon\nscan\nschach\nschacht\nschaden\nschaf\nschaffung\nschal\nschale\nschallplatte\nschalter\nschaltknüppel\nschamesröte\nschande\nscharf\nscharfe soße\nscharfschütze\nschatten\nschatz\nschatzkiste\nschatzmeister\nschauen\nschauer\nschaufel\nschaufensterpuppe\nschaukel\nschaukelpferd\nschaukelstuhl\nschaumschläger\nschauspieler\nscheibe\nscheibenwelt\nscheibenwischer\nscheidung\nscheinen\nscheitern\nschemel\nschenkel\nschenken\nschere\nscherz\nscherzkeks\nscheune\nschicht\nschicksal\nschiedsrichter\nschiefer turm von pisa\nschielen\nschießen\nschiff\nschiffstaufe\nschiffswrack\nschild\nschilf\nschimmel\nschimpanse\nschinken\nschlacht\nschlachter\nschlachtfeld\nschlaf\nschlafanzug\nschlafen\nschlafend\nschlafenszeit\nschlafstörung\nschlafzimmer\nschlag\nschlaganfall\nschlagen\nschlagsahne\nschlagzeug\nschlamm\nschlange\nschlauch\nschlecht\nschleich\nschleichwerbung\nschleier\nschleife\nschleifen\nschleifpapier\nschleim\nschleppen\nschleppend\nschleuder\nschleudern\nschließen\nschlitten\nschlittschuh\nschloss\nschlucht\nschluck\nschluckauf\nschlucken\nschlumpf\nschläger\nschlüssel\nschlüsselanhänger\nschlüsselbund\nschmelzen\nschmerz\nschmerzen\nschmerzlich\nschmetterling\nschmied\nschmiede\nschminke\nschminken\nschmutzig\nschnabel\nschnabeltier\nschnappen\nschnauze\nschnecke\nschnee\nschneeball\nschneeballschlacht\nschneebesen\nschneeflocke\nschneemann\nschneesturm\nschneiden\nschnell\nschnellstraße\nschnitt\nschnittstelle\nschnitzen\nschnorchel\nschnorcheln\nschnuller\nschnurrbart\nschnäppchen\nschnüffeln\nschnürsenkel\nschock\nschokolade\nschonen\nschornstein\nschornsteinfeger\nschottenrock\nschotter\nschottland\nschoß\nschrank\nschranke\nschraube\nschraubenschlüssel\nschrei\nschreiben\nschreibfeder\nschreibschrift\nschreibtisch\nschreien\nschreiten\nschriftsteller\nschritt\nschrott\nschrumpfen\nschub\nschubkarre\nschublade\nschuh\nschuhkarton\nschuld\nschule\nschulter\nschuppen\nschuss\nschutz\nschutzhelm\nschwach\nschwalbe\nschwamm\nschwan\nschwanger\nschwanz\nschwarm\nschwarz\nschwarzes loch\nschwarzwald\nschweben\nschweden\nschwefel\nschweigen\nschwein\nschweinchen dick\nschweinestall\nschweiz\nschweiß\nschweißer\nschwelle\nschwenken\nschwer\nschwere\nschwerkraft\nschwert\nschwertfisch\nschwester\nschwierig\nschwierigkeit\nschwimmbad\nschwimmen\nschwindelig\nschwingen\nschwitzen\nschwung\nschwäche\nschwören\nschädel\nschädlich\nschätzen\nschön\nschüchtern\nschüler\nschüssel\nschütteln\nschützen\nscooby doo\nsechseck\nsechserpack\nsee\nseebrücke\nseegurke\nseehund\nseeigel\nseekrank\nseekuh\nseele\nseelöwe\nseemann\nseepferdchen\nseerose\nseestern\nseetang\nseewolf\nsegelboot\nsegelflieger\nsegeln\nsegeltuch\nsegnen\nsegway\nsehen\nseide\nseife\nseifenblase\nseifenoper\nseil\nseilrutsche\nseilspringen\nseiltänzer\nseite\nsekretion\nsekretär\nsektion\nsektor\nsekunde\nsekundär\nselbst\nselbstmord\nselten\nseltsam\nseminar\nsenden\nsenf\nsenior\nsenke\nsensation\nserie\nserver\nserviette\nsessel\nsession\nseuche\nseufzer\nshampoo\nsherlock holmes\nshrek\nsichel\nsicher\nsicherheit\nsicherheitsdienst\nsicherheitsgurt\nsicherheitsnadel\nsichern\nsicherung\nsicht\nsichtbar\nsiedlung\nsieg\nsiegel\nsightseeing\nsilbe\nsilber\nsilberbesteck\nsilo\nsilvester\nsimon and garfunkel\nsingapur\nsingen\nsingle\nsinken\nsinn\nsinnvoll\nsitz\nsitzbank\nsitzen\nsitzsack\nskalpell\nskandal\nskateboard\nskateboardfahrer\nskelett\nski\nskilift\nskispringen\nskittles\nskizzieren\nsklave\nskorpion\nskribbl.rs\nskrillex\nskript\nskull\nskulptur\nskydiving\nskyline\nskype\nslalom\nslinky\nslogan\nslot\nsmaragd\nsmash\nsmell\nsneeze\nsnoopy\nsnowboard\nsocial media\nsocke\nsocken\nsoftware\nsogar\nsohn\nsolar\nsoldat\nsolidarität\nsolide\nsolo\nsombrero\nsommer\nsommersprosse\nsommersprossen\nsongtext\nsonic\nsonne\nsonnenaufgang\nsonnenblume\nsonnenbrand\nsonnenbrille\nsonnenfinsternis\nsonnenschein\nsonnenschirm\nsonnensystem\nsonnenuntergang\nsonntag\nsopran\nsorge\nsozial\nsozialistisch\nsoziologie\nsoße\nspaghetti\nspaghettieis\nspaghettimonster\nspalt\nspanien\nspanne\nspannen\nspannung\nspargel\nsparschwein\nspartacus\nspaten\nspaß\nspecht\nspeck\nspeer\nspeichel\nspeichern\nspeisekarte\nspeisen\nspektrum\nspekulieren\nspenden\nspender\nsperren\nspezialist\nspezies\nsphinx\nspiderman\nspiegel\nspiegelei\nspiel\nspielen\nspieler\nspielplatz\nspielraum\nspielzeug\nspieß\nspinat\nspinne\nspion\nspirale\nspitze\nspitzer\nspitzhacke\nspitzmaus\nspongebob\nspontan\nspore\nsport\nsprache\nsprecher\nsprengen\nspringen\nspritze\nsprudel\nsprungturm\nsprühen\nsprühfarbe\nspucke\nspucken\nspule\nspur\nspät\nspülen\nspüllappen\nstaatsangehörigkeit\nstaatsbürgerlich\nstabil\nstachel\nstacheldraht\nstachelrochen\nstachelschwein\nstadion\nstadt\nstaffelei\nstahl\nstall\nstamm\nstampfen\nstand\nstandard\nstangenbrot\nstar wars\nstark\nstart\nstarten\nstartseite\nstation\nstatistiken\nstatistisch\nstativ\nstatue\nstau\nstaub\nstaudamm\nsteak\nsteam\nstechen\nsteckdose\nstecker\nstecknadel\nstegosaurus\nstehen\nstehlampe\nsteigen\nsteigung\nsteil\nstein\nsteinbock\nsteinzeit\nstelle\nstellen\nstellvertreter\nstempel\nstengel\nstephen hawking\nsterben\nstereo\nstern\nsternenhimmel\nsternfrucht\nsternhagelvoll\nstetig\nsteuergerät\nsteuerung\nsteuerzahler\nsteve jobs\nsteward\nstewardess\nstich\nstichprobe\nstiefel\nstift\nstiftung\nstil\nstimme\nstimmung\nstimulation\nstinktier\nstipendium\nstirn\nstirnband\nstock\nstoff\nstolpern\nstolz\nstoppschild\nstoppuhr\nstorch\nstornieren\nstoßen\nstoßstange\nstrafe\nstrafrechtlich verfolgen\nstrahl\nstrahlung\nstrand\nstrandkorb\nstrategisch\nstrauß\nstraße\nstraßenbahn\nstraßensperre\nstrecken\nstreichholz\nstreichholzschachtel\nstreifen\nstreik\nstreit\nstreng\nstress\nstreuen\nstricken\nstroh\nstrohhalm\nstrom\nstrudel\nstruktur\nstrukturell\nstrumpfhose\nstubenhocker\nstudent\nstudie\nstudieren\nstudio\nstuhl\nstuhlbein\nstumpf\nstunde\nstur\nsturm\nsturz\nstädtisch\nstärke\nstöhnen\nstöpsel\nstörung\nstück\nstürzen\nsubjektiv\nsubstantiv\nsubstanz\nsuche\nsuchen\nsudoku\nsuezkanal\nsuite\nsumme\nsumo\nsumpf\nsuperintendent\nsuperkraft\nsuperman\nsupermarkt\nsupervisor\nsuppe\nsuppenkelle\nsurfbrett\nsushi\nsweatshirt\nsymbol\nsymmetrie\nsympathisch\nsymphonie\nsymptom\nsyndrom\nsystem\nsystematisch\nszenario\nszene\nsäbel\nsäge\nsänger\nsäule\nsäure\nsüchtig\nsüd\nsüdafrika\nsüden\nsüdpol\nsünde\nsüss\nsüß\nsüßholz raspeln\nt-shirt\ntabak\ntabelle\ntablet\ntablett\ntablette\ntacker\ntaco\ntafel\ntag\ntagebuch\ntageslicht\ntaille\ntaktik\ntal\ntalentiert\ntalentshow\ntandem\ntank\ntannenbaum\ntannenzapfen\ntante\ntanzen\ntapete\ntarzan\ntasche\ntaschenlampe\ntaschentuch\ntasmanischer teufel\ntasse\ntastatur\ntaste\ntatsache\ntattoo\ntau\ntaub\ntaube\ntauchen\ntauchgang\ntausendfüßer\ntausendfüßler\ntaxi\ntaxifahrer\ntechnik\ntechnisch\ntechnologie\nteddybär\ntee\nteekanne\nteelicht\nteelöffel\nteenager\nteich\nteig\nteil\nteilen\nteilnehmen\nteilnehmer\nteilt\nteilzeit\ntelefon\ntelefonbuch\ntelefonkabel\nteleskop\nteletubby\nteller\ntempel\ntemperatur\ntempo\ntempus\ntendenz\ntennis\ntennisschläger\ntentakel\nteppich\nterminal\nterminator\nterrarium\nterrasse\nterrorist\ntetra pak\ntetris\nteuer\nteufel\ntext\ntextmarker\ntextur\nthaddäus tentakel\nthe beatles\ntheater\nthema\ntheologie\ntheoretiker\ntheorie\ntherapeut\ntherapie\nthermometer\nthese\nthor\nthron\nthunfisch\ntick\ntide\ntief\ntiefgreifend\ntiegel\ntier\ntierarzt\ntierfutter\ntierhandlung\ntierwelt\ntiger\ntintenfisch\ntintenpatrone\ntippen\ntiramisu\ntisch\ntischdecke\ntischkicker\ntischplatte\ntischtennisschläger\ntitanic\ntitel\ntoast\ntoaster\ntochter\ntod\ntoilette\ntolerant\ntolerieren\ntomate\nton\ntonhöhe\ntonleiter\ntonne\ntopf\ntopflappen\ntor\ntornado\ntorpedo\ntorte\ntortenheber\ntorwart\ntot\ntotem\ntotenkopf\ntoter winkel\ntourismus\ntourist\ntradition\ntraditionell\ntragbar\ntragen\ntragfläche\ntragödie\ntrainer\ntrainieren\ntrakt\ntraktor\ntrampolin\ntransaktion\ntransfer\ntransparent\ntransport\ntrauben\ntraubensaft\ntrauer\ntraum\ntraumfänger\ntraurig\ntreffen\ntreiber\ntreibsand\ntreibstoff\ntrend\ntrennen\ntrennung\ntreppe\ntresorraum\ntrete\ntreten\ntretmühle\ntreu\ntreuhänder\ntriangel\ntribut\ntrick\ntriebwagen\ntriebwerk\ntrinken\ntrinkgeld\ntrittstufe\ntrivial\ntrocken\ntrommel\ntrompete\ntropfen\ntrophäe\ntropisch\ntrottel\ntrotz\ntruhe\ntrupp\ntruthahn\nträger\nträne\nträumen\ntrüffel\ntschechien\ntuba\ntube\ntugend\ntukan\ntumor\ntunnel\ntunnelblick\ntupperdose\nturban\nturm\nturmalin\nturnier\nturnschuh\ntweety\ntwitter\ntycoon\ntypisch\ntyrannosaurus rex\ntäglich\ntäter\ntöne\ntöten\ntödlich\ntür\ntürkei\ntürklinke\ntürschloss\ntürsteher\ntürstopper\nu-bahn\nu-boot\nufer\nufo\nuhr\nukulele\nultimativ\numarmen\numfang\numfassen\numfassend\numfrage\numgeben\numgebung\numhang\numkehren\numstand\numstritten\numwelt\numweltverschmutzung\nunabhängig\nunangemessen\nunangenehm\nunbequem\nunbesetzt\nundicht\nuneinigkeit\nunendlich\nunerwartet\nunfair\nunfall\nunfähig\nunglaublich\nunglücklich\nuniform\nunion\nuniversal\nuniversität\nuniversum\nunmöglich\nunpassend\nunruhe\nunruhig\nunschuldig\nunsicherheit\nunsichtbar\nunsinn\nunterbrechen\nunterdrücken\nuntergewichtig\nuntergraben\nuntergrund\nunterhalten\nunterhaltung\nunterhose\nunterlassung\nunternehmen\nunterschied\nunterschrift\nunterseite\nuntersetzer\nunterstreichen\nunterstützung\nuntersuchung\nunvergesslich\nunvermeidlich\nunwahrscheinlich\nunzureichend\nuranus\nurheberrecht\nurin\nurknall\nurlaub\nursache\nursprung\nurteil\nusain bolt\nusb\nvage\nvakuum\nvampir\nvan\nvanille\nvariable\nvariante\nvariation\nvater\nvatikan\nvault boy\nveganer\nvegetarier\nvegetation\nvektor\nvelociraptor\nvene\nventilator\nvenus\nvenusfliegenfalle\nverachten\nverachtung\nveranda\nveranschaulichen\nverantwortlich\nverantwortung\nverbal\nverband\nverbessern\nverbesserung\nverbieten\nverbindung\nverblassen\nverbot\nverbrauch\nverbraucher\nverbrechen\nverbrecher\nverbreitet\nverbringen\nverbunden\nverbündete\nverdacht\nverdammt\nverdampfen\nverdanken\nverdienen\nverdünnen\nverein\nverfahren\nverfassung\nverfault\nverfolgen\nverfolgung\nverfolgungsjagd\nverfrüht\nverfügbar\nvergangenheit\nvergeben\nvergeblich\nvergehen\nvergessen\nvergiften\nvergleich\nvergleichbar\nvergleichen\nvergnügen\nvergrößern\nvergütung\nverhalten\nverhandlung\nverheiratet\nverhindern\nverhältnis\nverjährung\nverkauf\nverkaufen\nverkehr\nverkehrskontrolle\nverkleidung\nverknüpfung\nverkäufer\nverlangen\nverlassen\nverlegenheit\nverleihen\nverletzen\nverletzt\nverletzung\nverlieren\nverlierer\nverlies\nverlust\nverlängert\nvermeiden\nvermieter\nvermuten\nvermögen\nvernachlässigen\nverordnung\nverpackung\nverpflichten\nverpflichtung\nverraten\nverringern\nverrückt\nversagen\nversammlung\nversatz\nverschieben\nverschiebung\nverschlechtern\nverschmutzung\nverschwinden\nverschwörung\nverschütten\nversichern\nversicherung\nversicherungskaufmann\nversprechen\nverstand\nversteck\nverstehen\nversteigerung\nverstärken\nversuch\nversuchen\nversuchung\nversöhnen\nverteidigen\nverteilen\nverteiler\nvertikal\nvertikale\nvertrag\nvertrauen\nvertreten\nvertreter\nverurteilen\nverwalten\nverwaltung\nverwandeln\nverwandtschaft\nverwechslung\nverweigern\nverweilen\nverweisen\nverweisung\nverwenden\nverwirrt\nverwöhnen\nverzeichnis\nverzerren\nverzerrung\nverzichten\nverzweiflung\nverzögern\nveränderung\nverärgert\nveröffentlichen\nveröffentlichung\nveteran\nvideo\nvideospiel\nvieh\nvielfalt\nviertel\nvilla\nvin diesel\nvioline\nvirtual reality\nvirus\nvision\nvisuell\nvitamin\nvodka\nvogel\nvogelbad\nvogelbeere\nvogelhaus\nvogelnest\nvogelscheuche\nvogelspinne\nvogelstrauß\nvolk\nvolkszählung\nvoll\nvolleyball\nvollkornbrot\nvollmond\nvollständig\nvollzeit\nvolumen\nvoodoo\nvoraus\nvorausgehen\nvorbereitung\nvorderseite\nvorfall\nvorgänger\nvorhang\nvorhersagbar\nvorlesung\nvorort\nvorrichtung\nvorschlag\nvorschlagen\nvorschlaghammer\nvorsichtig\nvorspulen\nvorstellen\nvorstellungskraft\nvorteil\nvorurteil\nvorübergehend\nvulkan\nvulkanologe\nvuvuzela\nw-lan\nwachs\nwachsen\nwachstum\nwackeln\nwaffe\nwaffel\nwagen\nwahl\nwahlkreis\nwahr\nwahrheit\nwahrnehmen\nwahrnehmung\nwahrscheinlich\nwahrscheinlichkeit\nwal\nwald\nwaldbrand\nwall-e\nwalnuss\nwalross\nwand\nwandern\nwanderstock\nwanderung\nwange\nwanze\nwarm\nwarnen\nwarnung\nwarnweste\nwart\nwarten\nwarteschlange\nwartezimmer\nwarze\nwaschbecken\nwaschbrettbauch\nwaschbär\nwaschen\nwaschlappen\nwaschmaschine\nwaschstraße\nwasser\nwasserfall\nwasserfarbkasten\nwasserhahn\nwasserkreislauf\nwasserpfeife\nwasserpistole\nwasserschildkröte\nwattestäbchen\nweben\nwebseite\nwecker\nweg\nweide\nweihnachten\nweihnachtsbaum\nweihnachtsmann\nwein\nweinen\nweinglas\nweinrebe\nweintrauben\nweise\nweit\nweizen\nweiß\nwelle\nwellensittich\nwelt\nweltlich\nweltraum\nwende\nwenige\nwerbespot\nwerbung\nwerdegang\nwerden\nwerfen\nwerkstatt\nwerkzeug\nwerkzeugkasten\nwert\nwertvoll\nwerwolf\nwesen\nwesentlich\nwespe\nwesten\nwestlich\nwettbewerb\nwettbewerbsfähig\nwette\nwetter\nwetterfrosch\nwettervorhersage\nwhatsapp\nwhiskey\nwichtig\nwickeln\nwidder\nwiderspruch\nwiderstand\nwiderstehen\nwiderwillen\nwidmen\nwiederbelebung\nwiederherstellung\nwiederholen\nwiederholung\nwiegen\nwiese\nwiesel\nwild\nwildnis\nwildschwein\nwildwasserbahn\nwillenskraft\nwilliam shakespeare\nwilliam wallace\nwillkürlich\nwimper\nwind\nwindbeutel\nwindel\nwindmühle\nwindows\nwindrad\nwindsack\nwindschutzscheibe\nwindsurfer\nwinkel\nwinter\nwinzer\nwinzig\nwippe\nwirbel\nwirbelsäule\nwirklichkeit\nwirksam\nwirt\nwirtschaft\nwirtschaftlich\nwirtschaftsprüfer\nwischen\nwissen\nwissenschaft\nwissenschaftler\nwissenschaftlich\nwitwe\nwoche\nwochenende\nwohlergehen\nwohlstand\nwohn\nwohnung\nwohnzimmer\nwolf\nwolke\nwolkenkratzer\nwolle\nwollen\nwolverine\nwonder woman\nwort\nwortlaut\nwrack\nwrestler\nwrestling\nwunde\nwunder\nwunderlampe\nwunderland\nwunschliste\nwurm\nwurst\nwurzel\nwut\nwählen\nwähler\nwählerschaft\nwährung\nwäsche\nwäschespinne\nwäscheständer\nwöchentlich\nwörterbuch\nwünschenswert\nwürde\nwürfel\nwürfelqualle\nwürstchen\nwüste\nwütend\nxbox\nxylofon\nyacht\nyeti\nyin yang\nyoda\nyoshi\nyoutube\nyoutuber\nzahl\nzahlen\nzahlung\nzahn\nzahnarzt\nzahnbürste\nzahnfee\nzahnlücke\nzahnpasta\nzahnseide\nzahnspange\nzahnstein\nzahnstocher\nzapfhahn\nzart\nzauberer\nzauberstab\nzaubertrank\nzaubertrick\nzaun\nzebra\nzebrastreifen\nzecke\nzeh\nzehe\nzehnagel\nzeichenfolge\nzeichnen\nzeichnung\nzeigen\nzeit\nzeitgenössisch\nzeitlupe\nzeitmaschine\nzeitplan\nzeitraum\nzeitschrift\nzeitung\nzelda\nzelle\nzelt\nzelten\nzement\nzensur\nzentaur\nzentral\nzeppelin\nzerbrechen\nzeremonie\nzerfallen\nzerreißen\nzerren\nzerstören\nzerstörung\nzertifikat\nzertrümmern\nzeuge\nzeus\nzickzack\nziege\nziegelstein\nziegenbart\nziehen\nziel\nzielsetzung\nzigarette\nzikade\nzimmer\nzimmermann\nzimmerpflanze\nzinn\nzirkel\nzirkus\nzirkusdirektor\nzitat\nzitrone\nzitteraal\nzittern\nzivilisation\nzivilist\nzoll\nzombie\nzone\nzoo\nzoomen\nzoowärter\nzorn\nzorro\nzucchini\nzucken\nzucker\nzuckerguss\nzuckerstange\nzuckerwatte\nzuerst\nzufall\nzufrieden\nzufriedenstellend\nzufällig\nzug\nzugbrücke\nzugeben\nzugriff\nzugänglich\nzuhause\nzukunft\nzuma\nzunge\nzuordnung\nzupfen\nzur verfügung stellen\nzurück\nzurückhalten\nzurückhaltung\nzurückspulen\nzurücktreten\nzusammenarbeit\nzusammenbrechen\nzusammenbruch\nzusammenfassung\nzusammenstoß\nzusammenzucken\nzusatz\nzuschlagen\nzustand\nzustimmen\nzustimmung\nzuständigkeit\nzutat\nzuverlässig\nzuversichtlich\nzuweisung\nzwang\nzweck\nzweifel\nzweig\nzweite\nzwerg\nzwiebel\nzwilling\nzwillinge\nzwischendecke\nzyklop\nzyklus\nzylinder\nzypresse\nzäh\nzähler\nzärtlich\nzögern\nzügel\nzündschnur\näffchen\nägypten\nähneln\nähnlich\nähnlichkeit\nälter\nänderung\näquator\närger\närgern\närmel\nästhetisch\näußere\näußern\nöffentlichkeit\nöffnen\nökonom\nöl\nösterreich\nüberarbeiten\nüberblick\nübereinstimmen\nüberfall\nübergeben\nübergewichtig\nüberleben\nüberlebende\nüberlebender\nüberlegen\nüberleitung\nüberraschend\nüberrascht\nüberraschung\nüberschreiten\nüberschrift\nüberschuss\nübersehen\nübersetzen\nübertragung\nübertreiben\nüberwachung\nüberwintern\nüberwältigen\nüberzeugen\nüberzeugung\nüblich\nübung"
  },
  {
    "path": "internal/game/words/en_gb",
    "content": "abandon\nabbey\nability\nable\nabnormal\nabolish\nabortion\nabraham lincoln\nabridge\nabsence\nabsent\nabsolute\nabsorb\nabsorption\nabstract\nabundant\nabuse\nabyss\nacademic\nacademy\naccent\naccept\nacceptable\nacceptance\naccess\naccessible\naccident\naccompany\naccordion\naccount\naccountant\naccumulation\naccurate\nac/dc\nace\nachievement\nacid\nacne\nacorn\nacquaintance\nacquisition\nact\naction\nactivate\nactive\nactivity\nactor\nacute\nadd\naddicted\naddiction\naddition\naddress\nadequate\nadidas\nadjust\nadministration\nadministrator\nadmiration\nadmire\nadmission\nadmit\nadopt\nadoption\nadorable\nadult\nadvance\nadvantage\nadventure\nadvertisement\nadvertising\nadvice\nadviser\nadvocate\naesthetic\naffair\naffect\naffinity\nafford\nafraid\nafrica\nafro\nafterlife\nafternoon\nage\nagency\nagenda\nagent\naggressive\nagile\nagony\nagree\nagreement\nagricultural\nagriculture\naid\naids\nair\nairbag\nair conditioner\naircraft\nairhostess\nairline\nairplane\nairport\naisle\naladdin\nalarm\nalbatross\nalbum\nalcohol\nalert\nalien\nalive\nallergy\nalley\nalligator\nallocation\nallow\nallowance\nally\nalmond\naloof\nalpaca\naltar\naluminium\namateur\namber\nambiguity\nambiguous\nambition\nambitious\nambulance\namendment\namerica\nample\namputate\namsterdam\namuse\nanaconda\nanalogy\nanalysis\nanalyst\nanchor\nandroid\nangel\nangelina jolie\nanger\nangle\nanglerfish\nangry\nangry birds\nanimal\nanimation\nanime\nankle\nanniversary\nannouncement\nannual\nanonymous\nanswer\nant\nantarctica\nanteater\nantelope\nantenna\nanthill\nanticipation\nantivirus\nanubis\nanvil\nanxiety\napartment\napathy\napocalypse\napologise\napology\napparatus\nappeal\nappear\nappearance\nappendix\nappetite\napplaud\napplause\napple\napple pie\napple seed\napplicant\napplication\napplied\nappoint\nappointment\nappreciate\napproach\nappropriate\napproval\napprove\napricot\naquarium\narbitrary\narch\narchaeological\narchaeologist\narcher\narchitect\narchitecture\narchive\narea\narena\nargentina\nargument\naristocrat\narm\narmadillo\narmchair\narmour\narmpit\narmy\narrange\narrangement\narrest\narrogant\narrow\nart\narticle\narticulate\nartificial\nartist\nartistic\nascertain\nash\nashamed\nasia\nask\nasleep\naspect\nassassin\nassault\nassembly\nassertion\nassertive\nassessment\nasset\nassignment\nassociation\nassume\nassumption\nassurance\nasterix\nasteroid\nastonishing\nastronaut\nasylum\nasymmetry\nathlete\natlantis\natmosphere\natom\nattach\nattachment\nattack\nattention\nattic\nattitude\nattract\nattraction\nattractive\naubergine\nauction\naudi\naudience\nauditor\naunt\naustralia\nauthorise\nauthority\nautograph\nautomatic\nautonomy\navailable\navenue\naverage\naviation\navocado\navoid\nawake\naward\naware\nawful\nawkward\naxe\naxis\nbaboon\nbaby\nback\nbackbone\nbackflip\nbackground\nbackpack\nback pain\nbacon\nbad\nbadger\nbag\nbagel\nbagpipes\nbaguette\nbail\nbait\nbake\nbakery\nbaklava\nbalance\nbalanced\nbalcony\nbald\nball\nballerina\nballet\nballoon\nballot\nbambi\nbamboo\nban\nbanana\nband\nbandage\nbandana\nbang\nbanjo\nbank\nbanker\nbankruptcy\nbanner\nbar\nbarack obama\nbarbarian\nbarbecue\nbarbed wire\nbarber\nbarcode\nbare\nbargain\nbark\nbarn\nbarrel\nbarrier\nbartender\nbart simpson\nbase\nbaseball\nbasement\nbasic\nbasin\nbasis\nbasket\nbasketball\nbat\nbath\nbathroom\nbathtub\nbatman\nbattery\nbattle\nbattlefield\nbattleship\nbay\nbayonet\nbazooka\nbeach\nbeak\nbeam\nbean\nbeanbag\nbeanie\nbeanstalk\nbear\nbeard\nbear trap\nbeat\nbeatbox\nbeautiful\nbeaver\nbecome\nbed\nbed bug\nbedroom\nbed sheet\nbedtime\nbee\nbeef\nbeer\nbeet\nbeethoven\nbeetle\nbeg\nbegin\nbeginning\nbehave\nbehaviour\nbehead\nbelief\nbell\nbellow\nbelly\nbelly button\nbelong\nbelow\nbelt\nbench\nbend\nbeneficiary\nbenefit\nberry\nbet\nbetray\nbible\nbicycle\nbig ben\nbike\nbill\nbill gates\nbilliards\nbin\nbind\nbingo\nbinoculars\nbiography\nbiology\nbirch\nbird\nbird bath\nbirthday\nbiscuit\nbishop\nbitch\nbitcoin\nbite\nbitter\nblack\nblackberry\nblack friday\nblack hole\nblackmail\nblacksmith\nblade\nblame\nbland\nblank\nblanket\nblast\nbleach\nbleed\nblender\nbless\nblimp\nblind\nblindfold\nblizzard\nblock\nblonde\nblood\nbloodshed\nbloody\nblow\nblowfish\nblue\nblueberry\nblue jean\nblush\nbmw\nbmx\nboar\nboard\nboat\nbobsled\nbody\nbodyguard\nboil\nbold\nbolt\nbomb\nbomber\nbomberman\nbond\nbone\nbooger\nbook\nbookmark\nbookshelf\nboom\nboomerang\nboot\nboots\nborder\nborrow\nbother\nbottle\nbottle flip\nbottom\nbounce\nbouncer\nbow\nbowel\nbowl\nbowling\nbox\nboy\nbracelet\nbraces\nbracket\nbrag\nbrain\nbrainwash\nbrake\nbranch\nbrand\nbrave\nbrazil\nbread\nbreak\nbreakdown\nbreakfast\nbreast\nbreath\nbreathe\nbreed\nbreeze\nbrewery\nbrick\nbricklayer\nbride\nbridge\nbring\nbroadcast\nbroccoli\nbroken\nbroken heart\nbronze\nbroom\nbroomstick\nbrother\nbrown\nbrownie\nbruise\nbrunette\nbrush\nbubble\nbubble gum\nbucket\nbudget\nbuffet\nbugs bunny\nbuilding\nbulb\nbulge\nbull\nbulldozer\nbullet\nbulletin\nbump\nbumper\nbundle\nbungee jumping\nbunk bed\nbunny\nbureaucracy\nbureaucratic\nburglar\nburial\nburn\nburp\nburrito\nburst\nbury\nbus\nbus driver\nbush\nbusiness\nbusinessman\nbus stop\nbusy\nbutcher\nbutler\nbutt cheeks\nbutter\nbutterfly\nbutton\nbuy\ncab driver\ncabin\ncabin crew\ncabinet\ncable\ncactus\ncafe\ncage\ncake\ncalculation\ncalendar\ncalf\ncall\ncalm\ncalorie\ncamel\ncamera\ncamp\ncampaign\ncampfire\ncamping\ncan\ncanada\ncanary\ncancel\ncancer\ncandidate\ncandle\ncandy floss\ncane\ncanister\ncannon\ncan opener\ncanvas\ncanyon\ncap\ncapable\ncape\ncapital\ncapitalism\ncappuccino\ncapricorn\ncaptain\ncaptain america\ncaptivate\ncapture\ncar\ncarbon\ncard\ncardboard\ncare\ncareer\ncareful\ncarnival\ncarnivore\ncarpenter\ncarpet\ncarriage\ncarrier\ncarrot\ncarry\ncart\ncartoon\ncarve\ncar wash\ncase\ncash\ncasino\ncassette\ncast\ncastle\ncasualty\ncat\ncatalogue\ncatapult\ncatch\ncategory\ncater\ncaterpillar\ncatfish\ncathedral\ncattle\ncat woman\ncauldron\ncauliflower\ncause\ncautious\ncave\ncaveman\ncaviar\nceiling\nceiling fan\ncelebrate\ncelebration\ncelebrity\ncell\ncellar\ncello\ncement\ncemetery\ncensorship\ncensus\ncentaur\ncenter\ncentipede\ncentral\ncentury\ncerberus\ncereal\nceremony\ncertain\ncertificate\nchain\nchainsaw\nchair\nchalk\nchallenge\nchameleon\nchampagne\nchampion\nchance\nchandelier\nchange\nchannel\nchaos\nchap\nchapter\ncharacter\ncharacteristic\ncharge\ncharger\ncharismatic\ncharity\ncharlie chaplin\ncharm\nchart\ncharter\nchase\nchauvinist\ncheap\ncheck\ncheek\ncheeks\ncheerful\ncheerleader\ncheese\ncheeseburger\ncheesecake\ncheetah\nchef\nchemical\nchemistry\ncheque\ncherry\ncherry blossom\nchess\nchest\nchest hair\nchestnut\nchestplate\nchew\nchewbacca\nchicken\nchief\nchihuahua\nchild\nchildhood\nchildish\nchime\nchimney\nchimpanzee\nchin\nchina\nchinatown\nchinchilla\nchip\nchocolate\nchoice\nchoke\nchoose\nchop\nchopsticks\nchord\nchorus\nchristmas\nchrome\nchronic\nchuck norris\nchurch\ncicada\ncigarette\ncinema\ncircle\ncirculation\ncircumstance\ncircus\ncitizen\ncity\ncivic\ncivilian\ncivilisation\nclaim\nclap\nclarify\nclarinet\nclash\nclass\nclassical\nclassify\nclassroom\nclaw\nclay\nclean\nclear\nclearance\nclerk\nclickbait\ncliff\nclimate\nclimb\nclinic\ncloak\nclock\nclose\nclosed\ncloth\nclothes\ncloud\nclover\nclown\nclownfish\nclub\nclue\ncluster\ncoach\ncoal\ncoalition\ncoast\ncoaster\ncoast guard\ncoat\ncobra\ncockroach\ncocktail\ncoconut\ncocoon\ncode\ncoffee\ncoffee shop\ncoffin\ncoin\ncoincide\ncoincidence\ncola\ncold\ncollapse\ncollar\ncolleague\ncollect\ncollection\ncollege\ncolon\ncolony\ncolosseum\ncolour\ncolour-blind\ncolourful\ncolumn\ncoma\ncomb\ncombination\ncombine\ncomedian\ncomedy\ncomet\ncomfort\ncomfortable\ncomic book\ncommand\ncommander\ncomment\ncommerce\ncommercial\ncommission\ncommitment\ncommittee\ncommon\ncommunication\ncommunism\ncommunist\ncommunity\ncompact\ncompany\ncomparable\ncompare\ncomparison\ncompartment\ncompass\ncompatible\ncompensate\ncompensation\ncompete\ncompetence\ncompetent\ncompetition\ncompetitive\ncomplain\ncomplete\ncomplex\ncompliance\ncomplication\ncomposer\ncompound\ncomprehensive\ncompromise\ncomputer\ncomputing\nconcede\nconceive\nconcentrate\nconcentration\nconcept\nconception\nconcern\nconcert\nconcession\nconclusion\nconcrete\ncondiment\ncondition\nconductor\ncone\nconference\nconfession\nconfidence\nconfident\nconfine\nconflict\nconfront\nconfrontation\nconfused\nconfusion\nconglomerate\ncongratulate\ncongress\nconnection\nconscience\nconscious\nconsciousness\nconsensus\nconservation\nconservative\nconsider\nconsiderable\nconsideration\nconsistent\nconsole\nconsolidate\nconspiracy\nconstant\nconstellation\nconstituency\nconstitution\nconstitutional\nconstraint\nconstruct\nconstructive\nconsultation\nconsumer\nconsumption\ncontact\ncontain\ncontemporary\ncontempt\ncontent\ncontest\ncontext\ncontinent\ncontinental\ncontinuation\ncontinuous\ncontract\ncontraction\ncontradiction\ncontrary\ncontrast\ncontribution\ncontrol\ncontroller\ncontroversial\nconvenience\nconvenient\nconvention\nconventional\nconversation\nconvert\nconvict\nconviction\nconvince\ncook\ncookie\ncookie jar\ncookie monster\ncool\ncooperate\ncooperation\ncooperative\ncope\ncopper\ncopy\ncopyright\ncoral\ncoral reef\ncord\ncore\ncork\ncorkscrew\ncorn\ncorner\ncornfield\ncorporate\ncorpse\ncorrection\ncorrelation\ncorrespond\ncorrespondence\ncorruption\ncostume\ncottage\ncotton\ncough\ncouncil\ncount\ncounter\ncountry\ncountryside\ncoup\ncouple\ncourage\ncourse\ncourt\ncourtesy\ncousin\ncover\ncoverage\ncow\ncowbell\ncowboy\ncoyote\ncrab\ncrack\ncraft\ncraftsman\ncrash\ncrash bandicoot\ncrate\ncrayon\ncream\ncreate\ncreation\ncredibility\ncredit\ncredit card\ncreed\ncreep\ncreeper\ncrew\ncricket\ncrime\ncriminal\ncringe\ncrisis\ncritic\ncritical\ncriticism\ncroatia\ncrocodile\ncroissant\ncrop\ncross\ncrossbow\ncrossing\ncrouch\ncrow\ncrowbar\ncrowd\ncrown\ncrucible\ncrude\ncruel\ncruelty\ncruise\ncrust\ncrutch\ncry\ncrystal\ncuba\ncube\ncuckoo\ncucumber\ncultivate\ncultural\nculture\ncup\ncupboard\ncupcake\ncupid\ncurious\ncurl\ncurrency\ncurrent\ncurriculum\ncurry\ncurtain\ncurve\ncushion\ncustody\ncustomer\ncut\ncute\ncutting\ncyborg\ncycle\ncylinder\ncymbal\ndaffy duck\ndagger\ndaily\ndairy\ndaisy\ndalmatian\ndamage\ndamn\ndance\ndandelion\ndandruff\ndanger\ndangerous\ndare\ndark\ndarts\ndarwin\ndarwin watterson\ndashboard\ndate\ndaughter\nday\ndaylight\ndead\ndeadline\ndeadly\ndeadpool\ndeaf\ndeal\ndealer\ndeath\ndebate\ndebt\ndebut\ndecade\ndecay\ndecide\ndecisive\ndeck\ndeclaration\ndecline\ndecoration\ndecorative\ndecrease\ndedicate\ndeep\ndeer\ndefault\ndefeat\ndefence\ndefend\ndefendant\ndeficiency\ndeficit\ndefine\ndefinite\ndefinition\ndegree\ndelay\ndelegate\ndelete\ndelicate\ndeliver\ndelivery\ndemand\ndemocracy\ndemocratic\ndemolish\ndemon\ndemonstrate\ndemonstration\ndemonstrator\ndenial\ndenounce\ndensity\ndent\ndentist\ndeny\ndeodorant\ndepart\ndeparture\ndepend\ndependence\ndependent\ndeposit\ndepressed\ndepression\ndeprivation\ndeprive\ndeputy\nderp\ndescent\ndescribe\ndesert\ndeserve\ndesign\ndesigner\ndesirable\ndesire\ndesk\ndespair\ndesperate\ndespise\ndessert\ndestruction\ndetail\ndetective\ndetector\ndeter\ndeteriorate\ndetonate\ndevelop\ndevelopment\ndeviation\ndevote\ndew\ndexter\ndiagnosis\ndiagonal\ndiagram\ndialect\ndialogue\ndiameter\ndiamond\ndice\ndictate\ndictionary\ndie\ndiet\ndiffer\ndifference\ndifferent\ndifficult\ndifficulty\ndig\ndigital\ndignity\ndilemma\ndilute\ndimension\ndine\ndinner\ndinosaur\ndip\ndiploma\ndiplomat\ndiplomatic\ndirect\ndirection\ndirector\ndirectory\ndirty\ndisability\ndisadvantage\ndisagreement\ndisappear\ndisappoint\ndisappointment\ndisaster\ndiscipline\ndisco\ndiscord\ndiscount\ndiscourage\ndiscourse\ndiscover\ndiscovery\ndiscreet\ndiscrimination\ndiscuss\ndisease\ndisguise\ndish\ndishrag\ndisk\ndislike\ndismiss\ndismissal\ndisorder\ndispenser\ndisplay\ndisposition\ndispute\ndissolve\ndiss track\ndistance\ndistant\ndistinct\ndistort\ndistortion\ndistribute\ndistributor\ndistrict\ndisturbance\ndiva\ndive\ndivide\ndividend\ndivision\ndivorce\ndizzy\ndna\ndock\ndoctor\ndocument\ndog\ndoghouse\ndoll\ndollar\ndollhouse\ndolphin\ndome\ndomestic\ndominant\ndominate\ndomination\ndominoes\ndonald duck\ndonald trump\ndonate\ndonkey\ndonor\ndoor\ndoorknob\ndora\ndoritos\ndose\ndots\ndouble\ndoubt\ndough\ndownload\ndozen\ndracula\ndraft\ndrag\ndragon\ndragonfly\ndrain\ndrama\ndramatic\ndraw\ndrawer\ndrawing\ndream\ndress\ndressing\ndrift\ndrill\ndrink\ndrip\ndrive\ndriver\ndrool\ndrop\ndroplet\ndrought\ndrown\ndrug\ndrum\ndrum kit\ndry\nduck\nduct tape\ndue\nduel\nduke\ndull\ndumbo\ndump\nduration\ndust\nduty\ndwarf\ndynamic\ndynamite\neager\neagle\near\nearbuds\nearly\nearth\nearthquake\nearwax\neast\neaster\neaster bunny\neasy\neat\neavesdrop\necho\neclipse\neconomic\neconomics\neconomist\neconomy\nedge\nedition\neducation\neducational\neel\neffect\neffective\nefficient\neffort\negg\nego\negypt\neiffel tower\neinstein\nelbow\nelder\nelect\nelection\nelectorate\nelectric car\nelectric guitar\nelectrician\nelectricity\nelectron\nelectronic\nelectronics\nelegant\nelement\nelephant\nelevator\neligible\neliminate\nelite\nelmo\nelon musk\neloquent\nelsa\nembark\nembarrassment\nembassy\nembers\nembryo\nemerald\nemergency\neminem\nemoji\nemotion\nemotional\nemphasis\nempire\nempirical\nemploy\nemployee\nemployer\nemployment\nempty\nemu\nencourage\nencouraging\nend\nendure\nenemy\nenergy\nengagement\nengine\nengineer\nengland\nenhance\nenjoyable\nenlarge\nensure\nenter\nentertain\nentertainment\nenthusiasm\nenthusiastic\nentitlement\nentry\nenvelope\nenvironment\nenvironmental\nepisode\nequal\nequation\nequator\nequilibrium\nequipment\nera\nerosion\nerror\nescape\neskimo\nespresso\nessay\nessence\nessential\nestablish\nestablished\nestate\nestimate\neternal\nethical\nethics\nethnic\neurope\nevaporate\neven\nevening\nevolution\nexact\nexaggerate\nexam\nexamination\nexample\nexcalibur\nexcavation\nexcavator\nexceed\nexception\nexcess\nexchange\nexcited\nexcitement\nexciting\nexclude\nexclusive\nexcuse\nexecute\nexecution\nexecutive\nexemption\nexercise\nexhibit\nexhibition\nexile\nexit\nexotic\nexpand\nexpansion\nexpect\nexpectation\nexpected\nexpedition\nexpenditure\nexpensive\nexperience\nexperienced\nexperiment\nexperimental\nexpert\nexpertise\nexplain\nexplanation\nexplicit\nexplode\nexploit\nexploration\nexplosion\nexport\nexpose\nexposure\nexpress\nexpression\nextend\nextension\nextent\nexternal\nextinct\nextraordinary\nextraterrestrial\nextreme\neye\neyebrow\neyelash\neyeshadow\nfabric\nfabulous\nfacade\nface\nfacebook\nface paint\nfacility\nfact\nfactor\nfactory\nfade\nfail\nfailure\nfaint\nfair\nfairy\nfaith\nfaithful\nfake teeth\nfall\nfalse\nfame\nfamiliar\nfamily\nfamily guy\nfan\nfanta\nfantasy\nfar\nfare\nfarm\nfarmer\nfascinate\nfashion\nfashionable\nfashion designer\nfast\nfast food\nfast forward\nfastidious\nfat\nfather\nfault\nfavour\nfavour\nfavourable\nfavourite\nfax\nfear\nfeast\nfeather\nfeature\nfederal\nfederation\nfee\nfeedback\nfeel\nfeeling\nfeminine\nfeminist\nfence\nfencing\nfern\nferrari\nferry\nfestival\nfever\nfew\nfibre\nfiction\nfidget spinner\nfield\nfig\nfight\nfigure\nfigurine\nfile\nfill\nfilm\nfilmmaker\nfilter\nfinal\nfinance\nfinancial\nfind\nfine\nfinger\nfingernail\nfingertip\nfinish\nfinished\nfinn\nfinn and jake\nfire\nfire alarm\nfireball\nfirecracker\nfire engine\nfirefighter\nfirefly\nfirehouse\nfire hydrant\nfireman\nfireplace\nfireproof\nfireside\nfirework\nfirm\nfirst\nfirsthand\nfish\nfish bowl\nfisherman\nfist\nfist fight\nfit\nfitness\nfitness trainer\nfix\nfixture\nfizz\nflag\nflagpole\nflamethrower\nflamingo\nflash\nflashlight\nflask\nflat\nflavour\nflawed\nflea\nfleet\nflesh\nflexible\nflight\nfling\nflock\nflood\nfloodlight\nfloor\nfloppy disk\nflorida\nflorist\nflour\nflourish\nflower\nflu\nfluctuation\nfluid\nflush\nflute\nfly\nflying pig\nfly swatter\nfog\nfoil\nfold\nfolder\nfolk\nfolklore\nfollow\nfood\nfool\nfoolish\nfoot\nfootball\nforbid\nforce\nforecast\nforehead\nforeigner\nforest\nforest fire\nforestry\nforge\nforget\nfork\nform\nformal\nformat\nformation\nformula\nformulate\nfort\nfortress\nfortune\nforum\nforward\nfossil\nfoster\nfoundation\nfountain\nfox\nfraction\nfragment\nfragrant\nframe\nfrance\nfranchise\nfrank\nfrankenstein\nfraud\nfreckle\nfreckles\nfred flintstone\nfree\nfreedom\nfreeze\nfreezer\nfreight\nfrequency\nfrequent\nfresh\nfreshman\nfridge\nfriend\nfriendly\nfriendship\nfries\nfrighten\nfrog\nfront\nfrostbite\nfrosting\nfrown\nfrozen\nfruit\nfrustration\nfuel\nfull\nfull moon\nfull-time\nfun\nfunction\nfunctional\nfund\nfuneral\nfunny\nfur\nfurniture\nfuss\nfuture\ngain\ngalaxy\ngallery\ngallon\ngame\ngandalf\ngandhi\ngang\ngangster\ngap\ngarage\ngarbage\ngarden\ngardener\ngarfield\ngarlic\ngas\ngas mask\ngasoline\ngasp\ngate\ngaze\ngear\ngem\ngender\ngene\ngeneral\ngenerate\ngeneration\ngenerator\ngenerous\ngenetic\ngenie\ngenius\ngentle\ngentleman\ngenuine\ngeography\ngeological\ngerm\ngermany\ngesture\nget\ngeyser\nghost\ngiant\ngift\ngiraffe\ngirl\ngive\nglacier\nglad\ngladiator\nglance\nglare\nglass\nglasses\nglide\nglimpse\nglitter\nglobe\ngloom\nglorious\nglory\ngloss\nglove\nglow\nglowstick\nglue\nglue stick\ngnome\ngo\ngoal\ngoalkeeper\ngoat\ngoatee\ngoblin\ngod\ngodfather\ngold\ngold chain\ngolden apple\ngolden egg\ngoldfish\ngolf\ngolf cart\ngood\ngoofy\ngoogle\ngoose\ngorilla\ngovernment\ngovernor\ngown\ngrace\ngrade\ngradual\ngraduate\ngraduation\ngraffiti\ngrain\ngrammar\ngrand\ngrandfather\ngrandmother\ngrant\ngrapefruit\ngrapes\ngraph\ngraphic\ngraphics\ngrass\ngrasshopper\ngrateful\ngrave\ngravedigger\ngravel\ngraveyard\ngravity\ngreat\ngreat wall\ngreece\ngreed\ngreen\ngreen lantern\ngreet\ngreeting\ngregarious\ngrenade\ngrid\ngrief\ngrill\ngrimace\ngrin\ngrinch\ngrind\ngrip\ngroan\ngroom\nground\ngrounds\ngrow\ngrowth\ngru\ngrumpy\nguarantee\nguard\nguerrilla\nguess\nguest\nguide\nguideline\nguillotine\nguilt\nguinea pig\nguitar\ngumball\ngummy\ngummy bear\ngummy worm\ngun\ngutter\nhabit\nhabitat\nhacker\nhair\nhairbrush\nhaircut\nhair roller\nhairspray\nhairy\nhalf\nhall\nhallway\nhalo\nhalt\nham\nhamburger\nhammer\nhammock\nhamster\nhand\nhandicap\nhandle\nhandshake\nhandy\nhang\nhanger\nhanger\nhappen\nhappy\nhappy meal\nharbour\nharbour\nhard\nhard hat\nhardship\nhardware\nharm\nharmful\nharmonica\nharmony\nharp\nharpoon\nharry potter\nharsh\nharvest\nhashtag\nhat\nhate\nhaul\nhaunt\nhave\nhawaii\nhay\nhazard\nhazelnut\nhead\nheadache\nheadband\nheadboard\nheading\nheadline\nheadphones\nheadquarters\nheal\nhealth\nhealthy\nhear\nheart\nheat\nheaven\nheavy\nhedge\nhedgehog\nheel\nheight\nheir\nheist\nhelicopter\nhell\nhello kitty\nhelmet\nhelp\nhelpful\nhelpless\nhemisphere\nhen\nherb\nhercules\nherd\nhermit\nhero\nheroin\nhesitate\nhexagon\nhibernate\nhiccup\nhide\nhierarchy\nhieroglyph\nhigh\nhigh five\nhigh heels\nhighlight\nhigh score\nhighway\nhike\nhilarious\nhill\nhip\nhip hop\nhippie\nhippo\nhistorian\nhistorical\nhistory\nhit\nhitchhiker\nhive\nhobbit\nhockey\nhold\nhole\nholiday\nhollywood\nholy\nhome\nhome alone\nhomeless\nhomer simpson\nhonest\nhoney\nhoneycomb\nhonour\nhonourable\nhoof\nhook\nhop\nhope\nhopscotch\nhorizon\nhorizontal\nhorn\nhoroscope\nhorror\nhorse\nhorsewhip\nhose\nhospital\nhospitality\nhost\nhostage\nhostile\nhostility\nhot\nhot chocolate\nhot dog\nhotel\nhot sauce\nhour\nhourglass\nhouse\nhouseplant\nhousewife\nhousing\nhover\nhovercraft\nhug\nhuge\nhula hoop\nhulk\nhuman\nhuman body\nhumanity\nhummingbird\nhumour\nhunger\nhungry\nhunter\nhunting\nhurdle\nhurt\nhusband\nhut\nhyena\nhypnotise\nhypothesis\nice\niceberg\nice cream\nice cream van\nicicle\nidea\nideal\nidentification\nidentify\nidentity\nideology\nignorance\nignorant\nignore\nikea\nillegal\nillness\nillusion\nillustrate\nillustration\nimage\nimagination\nimagine\nimmigrant\nimmigration\nimmune\nimpact\nimperial\nimplication\nimplicit\nimport\nimportance\nimportant\nimpossible\nimpress\nimpressive\nimprove\nimprovement\nimpulse\ninadequate\ninappropriate\nincapable\nincentive\ninch\nincident\ninclude\nincognito\nincome\nincongruous\nincrease\nincredible\nindependent\nindex\nindia\nindication\nindigenous\nindirect\nindividual\nindoor\nindulge\nindustrial\nindustry\ninevitable\ninfect\ninfection\ninfinite\ninflate\ninflation\ninfluence\ninfluential\ninformal\ninformation\ninfrastructure\ningredient\ninhabitant\ninherit\ninhibition\ninitial\ninitiative\ninject\ninjection\ninjure\ninjury\ninn\ninner\ninnocent\ninnovation\ninquest\ninsect\ninsert\ninside\ninsider\ninsight\ninsist\ninsistence\ninsomnia\ninspector\ninspiration\ninspire\ninstal\ninstall\ninstinct\ninstitution\ninstruction\ninstrument\ninsufficient\ninsurance\ninsure\nintegrated\nintegration\nintegrity\nintel\nintellectual\nintelligence\nintense\nintensify\nintention\ninteraction\ninteractive\ninterest\ninteresting\ninterface\ninterference\nintermediate\ninternal\ninternational\ninternet\ninterpret\ninterrupt\nintersection\nintervention\ninterview\nintroduce\nintroduction\ninvasion\ninvention\ninvestigation\ninvestigator\ninvestment\ninvisible\ninvitation\ninvite\nipad\niphone\nireland\niron\niron giant\niron man\nirony\nirrelevant\nisland\nisolation\nisrael\nissue\nitaly\nitem\nivory\nivy\njacket\njackhammer\njackie chan\njack-o-lantern\njaguar\njail\njalapeno\njam\njames bond\njanitor\njapan\njar\njaw\njay-z\njazz\njealous\njeans\njeep\njello\njelly\njellyfish\njenga\njerk\njest\njester\njesus christ\njet\njet ski\njewel\njimmy neutron\njob\njockey\njohn cena\njohnny bravo\njoint\njoke\njoker\njournal\njournalist\njourney\njoy\njudge\njudgment\njudicial\njuggle\njuice\njump\njump rope\njunction\njungle\njunior\njunk food\njurisdiction\njury\njust\njustice\njustification\njustify\nkangaroo\nkaraoke\nkarate\nkatana\nkaty perry\nkazoo\nkebab\nkeep\nkeg\nkendama\nkermit\nketchup\nkettle\nkey\nkeyboard\nkfc\nkick\nkid\nkidney\nkill\nkiller\nkim jong-un\nkind\nkindergarten\nking\nkingdom\nking kong\nkinship\nkirby\nkiss\nkit\nkitchen\nkite\nkitten\nkiwi\nknead\nknee\nkneel\nknife\nknight\nknit\nknock\nknot\nknow\nknowledge\nknuckle\nkoala\nkoran\nkraken\nkung fu\nlabel\nlaboratory\nlabour\nlabourer\nlace\nlack\nladder\nlady\nladybird\nlady gaga\nlake\nlamb\nlamp\nland\nlandlord\nlandowner\nlandscape\nlane\nlanguage\nlantern\nlap\nlaptop\nlarge\nlasagna\nlaser\nlasso\nlast\nlas vegas\nlate\nlatest\nlaugh\nlaunch\nlaundry\nlava\nlava lamp\nlaw\nlawn\nlawn mower\nlawyer\nlay\nlayer\nlayout\nlazy\nlead\nleader\nleadership\nleaf\nleaflet\nleak\nlean\nlearn\nlease\nleash\nleather\nleave\nlecture\nleech\nleft\nleftovers\nleg\nlegal\nlegend\nlegislation\nlegislative\nlegislature\nlego\nlegs\nleisure\nlemon\nlemonade\nlemur\nlend\nlength\nlens\nleonardo da vinci\nleonardo dicaprio\nleprechaun\nlesson\nlet\nletter\nlettuce\nlevel\nlevitate\nliability\nliberal\nliberty\nlibrarian\nlibrary\nlicence\nlicense\nlick\nlid\nlie\nlife\nlifestyle\nlift\nlight\nlightbulb\nlighter\nlighthouse\nlightning\nlightsaber\nlike\nlikely\nlily\nlilypad\nlimb\nlimbo\nlime\nlimit\nlimitation\nlimited\nlimousine\nline\nlinear\nlinen\nlinger\nlink\nlion\nlion king\nlip\nlips\nlipstick\nliquid\nliquorice\nlist\nlisten\nliteracy\nliterary\nliterature\nlitigation\nlitter box\nlive\nlively\nliver\nlizard\nllama\nload\nloading\nloaf\nloan\nlobby\nlobster\nlocate\nlocation\nlock\nlodge\nlog\nlogic\nlogical\nlogo\nlollipop\nlolly\nlondon\nlondon eye\nlonely\nlong\nlook\nloop\nloose\nloot\nlose\nloser\nloss\nlost\nlot\nlotion\nlottery\nloud\nlounge\nlove\nlover\nlow\nlower\nloyal\nloyalty\nluck\nlucky\nluggage\nluigi\nlumberjack\nlump\nlunch\nlung\nlynx\nlyrics\nmacaroni\nmachine\nmachinery\nmacho\nmadagascar\nmafia\nmagazine\nmagic\nmagician\nmagic trick\nmagic wand\nmagma\nmagnet\nmagnetic\nmagnifier\nmagnitude\nmaid\nmail\nmailbox\nmailman\nmain\nmainstream\nmaintenance\nmajor\nmajority\nmake\nmakeup\nmall\nmammoth\nman\nmanage\nmanagement\nmanager\nmanatee\nmanhole\nmanicure\nmannequin\nmanner\nmansion\nmantis\nmanual\nmanufacture\nmanufacturer\nmanuscript\nmap\nmaracas\nmarathon\nmarble\nmarch\nmargarine\nmargin\nmarigold\nmarine\nmario\nmark\nmarket\nmarketing\nmark zuckerberg\nmarmalade\nmarmot\nmarriage\nmarried\nmars\nmarsh\nmarshmallow\nmascot\nmask\nmass\nmassage\nmaster\nmatch\nmatchbox\nmaterial\nmathematical\nmathematics\nmatrix\nmatter\nmattress\nmature\nmaximum\nmayonnaise\nmayor\nmaze\nmcdonalds\nmeadow\nmeal\nmean\nmeaning\nmeaningful\nmeans\nmeasure\nmeat\nmeatball\nmeatloaf\nmechanic\nmechanical\nmechanism\nmedal\nmedicine\nmedieval\nmedium\nmedusa\nmeerkat\nmeet\nmeeting\nmegaphone\nmelon\nmelt\nmember\nmembership\nmeme\nmemorable\nmemorandum\nmemorial\nmemory\nmental\nmention\nmenu\nmercedes\nmerchant\nmercury\nmercy\nmerit\nmermaid\nmessage\nmessy\nmetal\nmeteorite\nmethod\nmethodology\nmexico\nmichael jackson\nmickey mouse\nmicrophone\nmicroscope\nmicrosoft\nmicrowave\nmiddle\nmiddle-class\nmidnight\nmigration\nmild\nmile\nmilitary\nmilk\nmilkman\nmilkshake\nmilky way\nmill\nmime\nmind\nmine\nminecraft\nminer\nmineral\nminiclip\nminigolf\nminimise\nminimum\nminion\nminister\nministry\nminivan\nminor\nminority\nminotaur\nmint\nminute\nmiracle\nmirror\nmiscarriage\nmiserable\nmisery\nmislead\nmiss\nmissile\nmist\nmix\nmixture\nmobile\nmobile phone\nmodel\nmodern\nmodest\nmodule\nmohawk\nmole\nmolecular\nmolecule\nmoment\nmomentum\nmona lisa\nmonarch\nmonarchy\nmonastery\nmonday\nmoney\nmonk\nmonkey\nmonopoly\nmonster\nmonstrous\nmont blanc\nmonth\nmonthly\nmood\nmoon\nmoose\nmop\nmoral\nmorale\nmorgan freeman\nmorning\nmorse code\nmorsel\nmortgage\nmorty\nmosaic\nmosque\nmosquito\nmoss\nmoth\nmothball\nmother\nmotherboard\nmotif\nmotivation\nmotorbike\nmotorcycle\nmotorist\nmotorway\nmould\nmould\nmountain\nmount everest\nmount rushmore\nmourning\nmouse\nmousetrap\nmouth\nmove\nmovement\nmovie\nmoving\nmozart\nmr bean\nmr. bean\nmr meeseeks\nmr. meeseeks\nmtv\nmud\nmuffin\nmug\nmultimedia\nmultiple\nmultiply\nmummy\nmunicipal\nmurder\nmurderer\nmuscle\nmuseum\nmushroom\nmusic\nmusical\nmusician\nmusket\nmustache\nmustard\nmutation\nmutter\nmutual\nmyth\nnachos\nnail\nnail file\nnail polish\nname\nnap\nnapkin\nnappy\nnarrow\nnarwhal\nnasa\nnascar\nnational\nnationalism\nnationalist\nnationality\nnative\nnature\nnavy\nnecessary\nneck\nneed\nneedle\nnegative\nneglect\nnegligence\nnegotiation\nneighbour\nneighbour\nneighbourhood\nnemo\nnephew\nneptune\nnerd\nnerve\nnervous\nnest\nnet\nnetherlands\nnetwork\nneutral\nnew\nnewcomer\nnews\nnewspaper\nnew zealand\nnice\nnickel\nnight\nnightclub\nnightmare\nnike\nninja\nnintendo switch\nnoble\nnod\nnode\nnoise\nnoisy\nnominate\nnomination\nnonsense\nnoob\nnoodle\nnorm\nnormal\nnorth\nnorthern lights\nnorth korea\nnorway\nnose\nnosebleed\nnose hair\nnose ring\nnostrils\nnotch\nnote\nnotebook\nnotepad\nnothing\nnotice\nnotification\nnotion\nnotorious\nnoun\nnovel\nnuclear\nnugget\nnuke\nnumber\nnun\nnurse\nnursery\nnut\nnutcracker\nnutella\nnutmeg\nnutshell\noak\noar\nobelix\nobese\nobey\nobject\nobjection\nobjective\nobligation\nobscure\nobservation\nobservatory\nobserver\nobstacle\nobtain\nobvious\noccasion\noccupation\noccupational\noccupy\nocean\noctagon\noctopus\nodd\noffence\noffend\noffender\noffensive\noffer\noffice\nofficer\nofficial\noffset\noffspring\noil\nolaf\nold\nomelette\nomission\nonion\nopen\nopera\noperation\noperational\nopinion\nopponent\noppose\nopposed\nopposite\nopposition\noptimism\noptimistic\noption\noptional\noral\norange\norangutan\norbit\norca\norchestra\norchid\norder\nordinary\noreo\norgan\norganic\norganisation\norganise\norientation\norigami\norigin\noriginal\northodox\nostrich\nother\notter\nouter\noutfit\noutlet\noutline\noutlook\noutput\noutside\noval\noven\noverall\noverlook\noverview\noverweight\noverwhelm\nowe\nowl\nowner\nownership\noxygen\noyster\npace\npack\npackage\npacket\npac-man\npaddle\npage\npain\npainful\npaint\npaintball\npainter\npair\npajamas\npalace\npalette\npalm\npalm tree\npan\npancake\npanda\npanel\npanic\npanpipes\npanther\npants\npapaya\npaper\npaper bag\nparachute\nparade\nparadox\nparagraph\nparakeet\nparallel\nparalysed\nparameter\npardon\nparent\nparental\nparents\nparis\npark\nparking\nparliament\nparrot\npart\nparticipant\nparticipate\nparticle\nparticular\npartner\npartnership\npart-time\nparty\npass\npassage\npassenger\npassion\npassionate\npassive\npassport\npassword\npast\npasta\npastel\npastry\npasture\npat\npatch\npatent\npath\npatience\npatient\npatio\npatrick\npatriot\npatrol\npattern\npause\npavement\npaw\npay\npayment\npaypal\npeace\npeaceful\npeach\npeacock\npeak\npeanut\npear\npeas\npeasant\npedal\npedestrian\npelican\npen\npenalty\npencil\npencil case\npencil sharpener\npendulum\npenetrate\npenguin\npeninsula\npenny\npension\npensioner\npeople\npeppa pig\npepper\npepper\npepperoni\npepsi\nperceive\npercent\nperception\nperfect\nperforate\nperform\nperformance\nperformer\nperfume\nperiod\nperiscope\npermanent\npermission\npersist\npersistent\nperson\npersonal\npersonality\npersuade\npest\npet\npetal\npet food\npet shop\npetty\npharmacist\nphenomenon\nphilosopher\nphilosophical\nphilosophy\nphineas and ferb\nphotocopy\nphoto frame\nphotograph\nphotographer\nphotography\nphotoshop\nphysical\nphysics\npiano\npicasso\npick\npickaxe\npickle\npicnic\npicture\npie\npiece\npier\npig\npigeon\npiggy bank\npigsty\npikachu\npike\npile\npill\npillar\npillow\npillow fight\npilot\npimple\npin\npinball\npine\npineapple\npine cone\npink\npink panther\npinky\npinocchio\npinwheel\npioneer\npipe\npirate\npirate ship\npistachio\npistol\npit\npitch\npitchfork\npity\npizza\nplace\nplague\nplain\nplaintiff\nplan\nplane\nplanet\nplank\nplant\nplaster\nplaster\nplastic\nplate\nplatform\nplatypus\nplay\nplayer\nplayground\nplaystation\nplead\npleasant\nplease\npleasure\npledge\nplot\nplough\nplug\nplumber\nplunger\npluto\npneumonia\npocket\npoem\npoetry\npogo stick\npoint\npoison\npoisonous\npoke\npokemon\npolar bear\npole\npoliceman\npolicy\npolish\npolite\npolitical\npolitician\npolitics\npoll\npollution\npolo\npond\npony\nponytail\npoodle\npool\npoop\npoor\npop\npopcorn\npope\npopeye\npoppy\npopular\npopulation\nporch\nporcupine\nporky pig\nportable\nportal\nporter\nportion\nportrait\nportugal\nposeidon\nposition\npositive\npossession\npossibility\npossible\npost\npostcard\nposter\npostpone\npot\npotato\npotential\npotion\npot of gold\npottery\npound\npour\npowder\npower\npowerful\npractical\npractice\npraise\nprawn\npray\nprayer\npreach\nprecede\nprecedent\nprecise\nprecision\npredator\npredecessor\npredictable\nprefer\npreference\npregnant\nprejudice\npremature\npremium\npreoccupation\npreparation\nprescription\npresence\npresent\npresentation\npreservation\npresidency\npresident\npresidential\npress\npressure\nprestige\npretzel\nprevalence\nprevent\nprey\nprice\nprice tag\npride\npriest\nprimary\nprince\nprincess\nprinciple\npringles\nprint\nprinter\npriority\nprism\nprison\nprisoner\nprivacy\nprivate\nprivilege\nprivileged\nprize\npro\nprobability\nproblem\nprocedure\nprocess\nproclaim\nprocrastination\nproduce\nproducer\nproduct\nproduction\nproductive\nprofession\nprofessional\nprofessor\nprofile\nprofit\nprofound\nprogram\nprogrammer\nprogress\nprogressive\nproject\nprojection\nprolonged\npromise\npromotion\nproof\npropaganda\nproper\nproperty\nproportion\nproportional\nproposal\nproposition\nprosecute\nprosecution\nprospect\nprosperity\nprotect\nprotection\nprotein\nprotest\nproud\nprove\nprovide\nprovincial\nprovision\nprovoke\nprune\npsychologist\npsychology\npub\npublic\npublication\npublicity\npublish\npublisher\npudding\npuddle\npuffin\npull\npuma\npumba\npump\npumpkin\npunch\npunish\npunishment\npunk\npupil\npuppet\npure\npurity\npurpose\npurse\npursuit\npush\nput\npuzzle\npyramid\nqualification\nqualified\nqualify\nquality\nquantitative\nquantity\nquarter\nqueen\nquest\nquestion\nquestionnaire\nqueue\nquicksand\nquiet\nquill\nquilt\nquit\nquota\nquotation\nquote\nrabbit\nraccoon\nrace\nracial\nracing car\nracism\nrack\nradar\nradiation\nradical\nradio\nradish\nraft\nrage\nraid\nrail\nrailcar\nrailway\nrain\nrainbow\nraincoat\nraindrop\nrainforest\nraise\nraisin\nrake\nrally\nram\nramp\nrandom\nrange\nrank\nrapper\nrare\nraspberry\nrat\nrate\nratio\nrational\nravioli\nraw\nrazor\nrazorblade\nreach\nreaction\nreactor\nread\nreader\nready\nreal\nrealise\nrealism\nrealistic\nreality\nrear\nreason\nreasonable\nrebel\nrebellion\nreceipt\nreception\nreceptionist\nrecession\nreckless\nrecognise\nrecognition\nrecommend\nrecommendation\nrecord\nrecording\nrecover\nrecovery\nrecreation\nrecruit\nrectangle\nrecycle\nrecycling\nred\nred carpet\nreddit\nredeem\nreduction\nredundancy\nreeds\nrefer\nreferee\nreference\nreferral\nreflect\nreflection\nreform\nrefugee\nrefusal\nrefuse\nregard\nregion\nregional\nregister\nregistration\nregret\nregular\nregulation\nrehabilitation\nrehearsal\nreign\nreindeer\nreinforce\nreject\nrejection\nrelate\nrelated\nrelation\nrelationship\nrelative\nrelax\nrelaxation\nrelease\nrelevance\nrelevant\nreliable\nreliance\nrelief\nrelieve\nreligion\nreligious\nrelinquish\nreluctance\nrely\nremain\nremark\nremedy\nremember\nremind\nremote\nrent\nrepeat\nrepetition\nreplace\nreplacement\nreport\nreporter\nrepresent\nrepresentative\nreproduce\nreproduction\nreptile\nrepublic\nreputation\nrequest\nrequire\nrequirement\nrescue\nresearch\nresearcher\nresemble\nresent\nreserve\nreservoir\nresidence\nresident\nresidential\nresign\nresignation\nresist\nresolution\nresort\nresource\nrespect\nrespectable\nresponse\nresponsibility\nresponsible\nrest\nrestaurant\nrestless\nrestoration\nrestrain\nrestraint\nrestricted\nrestriction\nresult\nretail\nretailer\nretain\nretire\nretired\nretirement\nretreat\nreturn\nreveal\nrevenge\nreverse\nreview\nrevise\nrevival\nrevive\nrevolution\nrevolutionary\nrevolver\nreward\nrewind\nrhetoric\nrhinoceros\nrhythm\nrib\nribbon\nrice\nrich\nrick\nride\nrider\nridge\nrifle\nright\nright wing\nring\nringtone\nriot\nrise\nrisk\nritual\nriver\nroad\nroadblock\nroar\nrob\nrobber\nrobbery\nrobbie rotten\nrobin\nrobin hood\nrobot\nrock\nrocket\nrockstar\nrole\nroll\nromania\nromantic\nrome\nroof\nroom\nrooster\nroot\nrope\nrose\nrotation\nrotten\nrough\nround\nroute\nroutine\nrow\nroyal\nroyalty\nrub\nrubber\nrubber\nrubbish\nrubbish bin\nruby\nrug\nrugby\nruin\nrule\nruler\nrumour\nrun\nrune\nrunner\nrural\nrush\nrussia\nsacred\nsacrifice\nsad\nsaddle\nsafari\nsafe\nsafety\nsail\nsailboat\nsailor\nsalad\nsale\nsaliva\nsalmon\nsalon\nsalt\nsaltwater\nsalvation\nsample\nsamsung\nsanctuary\nsand\nsandal\nsandbox\nsand castle\nsandstorm\nsandwich\nsanta\nsatellite\nsatisfaction\nsatisfactory\nsatisfied\nsaturn\nsauce\nsauna\nsausage\nsave\nsaxophone\nsay\nscale\nscan\nscandal\nscar\nscarecrow\nscarf\nscary\nscatter\nscenario\nscene\nscent\nschedule\nscheme\nscholar\nscholarship\nschool\nscience\nscientific\nscientist\nscissors\nscooby doo\nscoop\nscore\nscotland\nscramble\nscrap\nscrape\nscratch\nscream\nscreen\nscrew\nscribble\nscript\nscuba\nsculpture\nscythe\nsea\nseafood\nseagull\nseahorse\nseal\nsea lion\nsearch\nseashell\nseasick\nseason\nseasonal\nseat\nseat belt\nseaweed\nsecond\nsecondary\nsecret\nsecretary\nsecretion\nsection\nsector\nsecular\nsecure\nsecurity\nsee\nseed\nseek\nseem\nseesaw\nsegway\nseize\nselection\nself\nsell\nseller\nsemicircle\nseminar\nsend\nsenior\nsensation\nsense\nsensei\nsensitive\nsensitivity\nsentence\nsentiment\nseparate\nseparation\nsequence\nseries\nserious\nservant\nserve\nserver\nservice\nsession\nset\nsettle\nsettlement\nsew\nsewing machine\nshade\nshadow\nshaft\nshake\nshallow\nshame\nshampoo\nshape\nshare\nshareholder\nshark\nsharp\nshatter\nshave\nshaving cream\nshed\nsheep\nsheet\nshelf\nshell\nshelter\nsherlock holmes\nshield\nshift\nshine\nshipwreck\nshirt\nshiver\nshock\nshoe\nshoebox\nshoelace\nshoot\nshop\nshopping\nshopping trolley\nshort\nshortage\nshorts\nshot\nshotgun\nshoulder\nshout\nshovel\nshow\nshower\nshrek\nshrew\nshrink\nshrub\nshrug\nshy\nsick\nsickness\nside\nsiege\nsigh\nsight\nsightsee\nsign\nsignature\nsilence\nsilk\nsilo\nsilver\nsilverware\nsimilar\nsimilarity\nsimplicity\nsin\nsing\nsingapore\nsinger\nsingle\nsink\nsip\nsister\nsit\nsite\nsituation\nsix pack\nsize\nskate\nskateboard\nskateboarder\nskates\nskeleton\nsketch\nski\nski jump\nskill\nskilled\nskin\nskinny\nskirt\nskittles\nskribbl.rs\nskrillex\nskull\nskunk\nsky\nskydiving\nskyline\nskype\nskyscraper\nslab\nslam\nslap\nslave\nsledge\nsledgehammer\nsleep\nsleeve\nslice\nslide\nslime\nslingshot\nslinky\nslip\nslippery\nslogan\nslope\nslot\nsloth\nslow\nslump\nsmall\nsmart\nsmash\nsmell\nsmile\nsmoke\nsmooth\nsnail\nsnake\nsnap\nsnatch\nsneeze\nsniff\nsniper\nsnow\nsnowball\nsnowball fight\nsnowboard\nsnowflake\nsnowman\nsnuggle\nsoak\nsoap\nsoar\nsoccer\nsocial\nsocialist\nsocial media\nsociety\nsociology\nsock\nsocket\nsocks\nsoda\nsodium\nsoft\nsoftware\nsoil\nsolar\nsolar system\nsoldier\nsolid\nsolidarity\nsolo\nsolution\nsolve\nsombrero\nson\nsonic\nsophisticated\nsoprano\nsoul\nsound\nsoup\nsour\nsource\nsouth\nsow\nspace\nspaceship\nspace suit\nspade\nspaghetti\nspain\nspare\nspark\nsparkles\nspartacus\nspatial\nspatula\nspeaker\nspear\nspecialist\nspecies\nspecified\nspecimen\nspectrum\nspeculate\nspeech\nspeed\nspell\nspelunker\nspend\nsphere\nsphinx\nspider\nspiderman\nspill\nspin\nspinach\nspine\nspiral\nspirit\nspit\nspite\nsplit\nspoil\nspoiler\nspokesman\nsponge\nspongebob\nspontaneous\nspool\nspoon\nspore\nsport\nsports\nspot\nspray\nspray paint\nspread\nspring\nsprinkler\nspy\nsquad\nsquare\nsqueeze\nsquid\nsquidward\nsquirrel\nstab\nstable\nstadium\nstaff\nstage\nstain\nstaircase\nstake\nstall\nstamp\nstand\nstandard\nstapler\nstar\nstarfish\nstarfruit\nstart\nstar wars\nstate\nstatement\nstation\nstatistical\nstatistics\nstatue\nstatue of liberty\nstay\nsteady\nsteak\nsteam\nsteel\nsteep\nstegosaurus\nstem\nstep\nstereo\nsteve jobs\nsteward\nstick\nsticky\nstill\nstimulation\nsting\nstingray\nstir\nstitch\nstock\nstomach\nstone\nstone age\nstoned\nstool\nstop\nstop sign\nstorage\nstore\nstork\nstorm\nstory\nstove\nstraight\nstraighten\nstrain\nstrange\nstrap\nstrategic\nstraw\nstrawberry\nstream\nstreamer\nstreet\nstrength\nstress\nstretch\nstrict\nstride\nstrike\nstring\nstrip\nstroke\nstroll\nstrong\nstructural\nstructure\nstruggle\nstubborn\nstudent\nstudio\nstudy\nstuff\nstumble\nstunning\nstupid\nstyle\nstylus\nsubject\nsubjective\nsubmarine\nsubmit\nsubsequent\nsubstance\nsubstitute\nsuburb\nsubway\nsuccess\nsuccessful\nsudden\nsudoku\nsuez canal\nsuffer\nsuffering\nsufficient\nsugar\nsuggest\nsuggestion\nsuicide\nsuit\nsuitcase\nsuite\nsulphur\nsum\nsummary\nsummer\nsummit\nsun\nsunburn\nsunflower\nsunglasses\nsunrise\nsunshade\nsunshine\nsuperintendent\nsuperior\nsuperman\nsupermarket\nsuperpower\nsupervisor\nsupplementary\nsupply\nsupport\nsuppose\nsuppress\nsurface\nsurfboard\nsurgeon\nsurgery\nsurprise\nsurprised\nsurprising\nsurround\nsurvey\nsurvival\nsurvivor\nsusan wojcicki\nsushi\nsuspect\nsuspicion\nsustain\nswag\nswallow\nswamp\nswan\nswarm\nswear\nsweat\nsweater\nsweep\nsweet\nswell\nswim\nswimming pool\nswimsuit\nswing\nswipe\nswitch\nsword\nswordfish\nsydney opera house\nsyllable\nsymbol\nsymmetry\nsympathetic\nsymphony\nsymptom\nsyndrome\nsystem\nsystematic\ntable\ntablecloth\ntablet\ntable tennis\ntabletop\ntaco\ntactic\ntadpole\ntail\ntailor\ntails\ntake\ntake off\ntalented\ntalent show\ntalk\ntalkative\ntall\ntampon\ntangerine\ntank\ntap\ntap\ntape\ntarantula\ntarget\ntarzan\ntaser\ntaste\ntasty\ntattoo\ntax\ntaxi\ntaxi driver\ntaxpayer\ntea\nteacher\nteam\nteapot\ntear\ntease\nteaspoon\ntechnical\ntechnique\ntechnology\nteddy bear\nteenager\ntelephone\ntelescope\nteletubby\ntelevision\ntell\ntemperature\ntemple\ntemporary\ntempt\ntemptation\ntenant\ntendency\ntender\ntennis\ntennis racket\ntense\ntension\ntent\ntentacle\nterm\nterminal\nterminator\nterrace\nterrify\nterrorist\ntest\ntestify\ntetris\ntext\ntexture\nthank\nthanks\ntheatre\nthe beatles\ntheft\ntheme\ntheology\ntheorist\ntheory\ntherapist\ntherapy\nthermometer\nthesis\nthick\nthief\nthigh\nthin\nthink\nthinker\nthirst\nthirsty\nthor\nthought\nthoughtful\nthread\nthreat\nthreaten\nthreshold\nthroat\nthrone\nthrow\nthrust\nthug\nthumb\nthunder\nthunderstorm\ntick\nticket\ntickle\ntide\ntidy\ntie\ntiger\ntight\ntile\ntimber\ntime\ntime machine\ntimetable\ntimpani\ntin\ntiny\ntip\ntiramisu\ntire\ntired\ntissue\ntissue box\ntitanic\ntitle\ntoad\ntoast\ntoaster\ntoe\ntoenail\ntoilet\ntolerant\ntolerate\ntoll\ntomato\ntomb\ntombstone\nton\ntone\ntongue\ntool\ntoolbox\ntooth\ntoothbrush\ntooth fairy\ntoothpaste\ntoothpick\ntop\ntop hat\ntorch\ntornado\ntorpedo\ntortoise\ntorture\ntoss\ntotal\ntotem\ntoucan\ntouch\ntough\ntourism\ntourist\ntournament\ntowel\ntower\ntower bridge\ntower of pisa\ntown\ntow truck\ntoxic\ntoy\ntrace\ntrack\ntract\ntractor\ntrade\ntradition\ntraditional\ntraffic\ntraffic light\ntragedy\ntrailer\ntrain\ntrainer\ntraining\ntrait\ntransaction\ntransfer\ntransform\ntransition\ntranslate\ntransmission\ntransparent\ntransport\ntrap\ntrapdoor\ntraveler\ntray\ntread\ntreadmill\ntreasure\ntreasurer\ntreat\ntreatment\ntreaty\ntree\ntreehouse\ntremble\ntrench\ntrend\nt-rex\ntrial\ntriangle\ntribe\ntribute\ntrick\ntrick shot\ntricycle\ntrigger\ntrip\ntriplets\ntripod\ntrivial\ntrolley\ntrombone\ntroop\ntrophy\ntropical\ntrouble\ntrouser\ntruck\ntruck driver\ntrue\ntrumpet\ntrunk\ntrust\ntrustee\ntruth\ntry\nt-shirt\ntuba\ntube\ntug\ntumble\ntumour\ntumour\ntuna\ntune\ntunnel\nturd\nturkey\nturn\nturnip\nturtle\ntuxedo\ntweety\ntwig\ntwin\ntwist\ntwitter\ntycoon\ntype\ntypical\ntyre\nudder\nufo\nugly\nukulele\nulcer\nultimate\numbrella\nunanimous\nunaware\nuncertainty\nuncle\nuncomfortable\nunderground\nunderline\nundermine\nunderstand\nunderstanding\nundertake\nunderweight\nundo\nuneasy\nunemployed\nunemployment\nunexpected\nunfair\nunfortunate\nunibrow\nunicorn\nunicycle\nuniform\nunion\nunique\nunit\nunity\nuniversal\nuniverse\nuniversity\nunlawful\nunlike\nunlikely\nunpleasant\nunrest\nupdate\nupgrade\nupset\nuranus\nurban\nurge\nurgency\nurine\nusain bolt\nusb\nuse\nuseful\nuseless\nuser\nusual\nutter\nvacant\nvacation\nvaccine\nvacuum\nvague\nvain\nvalid\nvalley\nvaluable\nvalue\nvampire\nvan\nvanilla\nvanish\nvariable\nvariant\nvariation\nvaried\nvariety\nvat\nvatican\nvault\nvault boy\nvector\nvegetable\nvegetarian\nvegetation\nvehicle\nveil\nvein\nvelociraptor\nvelvet\nvent\nventure\nvenus\nverbal\nverdict\nversion\nvertical\nvessel\nveteran\nveterinarian\nviable\nvicious\nvictim\nvictory\nvideo\nvideo game\nview\nvigorous\nvilla\nvillage\nvillager\nvillain\nvin diesel\nvine\nvinegar\nviola\nviolation\nviolence\nviolent\nviolin\nvirgin\nvirtual reality\nvirtue\nvirus\nvise\nvisible\nvision\nvisit\nvisitor\nvisual\nvitamin\nvlogger\nvocational\nvodka\nvoice\nvolcano\nvolleyball\nvolume\nvoluntary\nvolunteer\nvomit\nvoodoo\nvortex\nvote\nvoter\nvoucher\nvoyage\nvulnerable\nvulture\nvuvuzela\nwaffle\nwage\nwagon\nwaist\nwait\nwaiter\nwake\nwake up\nwalk\nwall\nwall-e\nwallpaper\nwalnut\nwalrus\nwander\nwant\nwar\nward\nwardrobe\nwarehouse\nwarm\nwarn\nwarning\nwarrant\nwarrior\nwart\nwash\nwasp\nwaste\nwatch\nwater\nwater cycle\nwaterfall\nwater gun\nwave\nwax\nway\nweak\nweakness\nwealth\nweapon\nwear\nweasel\nweather\nweave\nweb\nwebsite\nwedding\nweed\nweek\nweekend\nweekly\nweigh\nweight\nwelcome\nwelder\nwelfare\nwell\nwerewolf\nwest\nwestern\nwet\nwhale\nwhatsapp\nwheat\nwheel\nwheelbarrow\nwhip\nwhisk\nwhisky\nwhisper\nwhistle\nwhite\nwhole\nwiden\nwidow\nwidth\nwife\nwig\nwiggle\nwild\nwilderness\nwildlife\nwill\nwilliam shakespeare\nwilliam wallace\nwillow\nwillpower\nwin\nwind\nwindmill\nwindow\nwindscreen\nwine\nwine glass\nwing\nwingnut\nwinner\nwinnie the pooh\nwinter\nwipe\nwire\nwireless\nwise\nwitch\nwithdraw\nwithdrawal\nwitness\nwizard\nw-lan\nwolf\nwolverine\nwoman\nwonder\nwonderland\nwonder woman\nwood\nwoodpecker\nwool\nword\nwording\nwork\nworker\nwork out\nworkplace\nworkshop\nworld\nworm\nworry\nworth\nwound\nwrap\nwrapping\nwreath\nwreck\nwrench\nwrestle\nwrestler\nwrestling\nwrinkle\nwrist\nwrite\nwriter\nwritten\nwrong\nxbox\nxerox\nx-ray\nxylophone\nyacht\nyard\nyardstick\nyawn\nyear\nyearbook\nyellow\nyeti\nyin and yang\nyoda\nyogurt\nyolk\nyoshi\nyoung\nyouth\nyoutube\nyoutuber\nyo-yo\nzebra\nzelda\nzeppelin\nzero\nzeus\nzigzag\nzipline\nzipper\nzombie\nzone\nzoo\nzoom\nzorro\nzuma"
  },
  {
    "path": "internal/game/words/en_us",
    "content": "abandon\nabbey\nability\nable\nabnormal\nabolish\nabortion\nabraham lincoln\nabridge\nabsence\nabsent\nabsolute\nabsorb\nabsorption\nabstract\nabundant\nabuse\nabyss\nac/dc\nacademic\nacademy\naccent\naccept\nacceptable\nacceptance\naccess\naccessible\naccident\naccompany\naccordion\naccount\naccountant\naccumulation\naccurate\nace\nachievement\nacid\nacne\nacorn\nacquaintance\nacquisition\nact\naction\nactivate\nactive\nactivity\nactor\nacute\nadd\naddicted\naddiction\naddition\naddress\nadequate\nadidas\nadjust\nadministration\nadministrator\nadmiration\nadmire\nadmission\nadmit\nadopt\nadoption\nadorable\nadult\nadvance\nadvantage\nadventure\nadvertisement\nadvertising\nadvice\nadviser\nadvocate\naesthetic\naffair\naffect\naffinity\nafford\nafraid\nafrica\nafro\nafterlife\nafternoon\nage\nagency\nagenda\nagent\naggressive\nagile\nagony\nagree\nagreement\nagricultural\nagriculture\naid\naids\nair\nair conditioner\nairbag\naircraft\nairline\nairplane\nairport\naisle\naladdin\nalarm\nalbatross\nalbum\nalcohol\nalert\nalien\nalive\nallergy\nalley\nalligator\nallocation\nallow\nallowance\nally\nalmond\naloof\nalpaca\naltar\naluminium\namateur\namber\nambiguity\nambiguous\nambition\nambitious\nambulance\namendment\namerica\nample\namputate\namsterdam\namuse\nanaconda\nanalogy\nanalysis\nanalyst\nanchor\nandroid\nangel\nangelina jolie\nanger\nangle\nanglerfish\nangry\nangry birds\nanimal\nanimation\nanime\nankle\nanniversary\nannouncement\nannual\nanonymous\nanswer\nant\nantarctica\nanteater\nantelope\nantenna\nanthill\nanticipation\nantivirus\nanubis\nanvil\nanxiety\napartment\napathy\napocalypse\napologise\napology\napparatus\nappeal\nappear\nappearance\nappendix\nappetite\napplaud\napplause\napple\napple pie\napple seed\napplicant\napplication\napplied\nappoint\nappointment\nappreciate\napproach\nappropriate\napproval\napprove\napricot\naquarium\narbitrary\narch\narchaeological\narchaeologist\narcher\narchitect\narchitecture\narchive\narea\narena\nargentina\nargument\naristocrat\narm\narmadillo\narmchair\narmor\narmpit\narmy\narrange\narrangement\narrest\narrogant\narrow\nart\narticle\narticulate\nartificial\nartist\nartistic\nascertain\nash\nashamed\nasia\nask\nasleep\naspect\nassassin\nassault\nassembly\nassertion\nassertive\nassessment\nasset\nassignment\nassociation\nassume\nassumption\nassurance\nasterix\nasteroid\nastonishing\nastronaut\nasylum\nasymmetry\nathlete\natlantis\natmosphere\natom\nattach\nattachment\nattack\nattention\nattic\nattitude\nattract\nattraction\nattractive\nauction\naudi\naudience\nauditor\naunt\naustralia\nauthorise\nauthority\nautograph\nautomatic\nautonomy\navailable\navenue\naverage\naviation\navocado\navoid\nawake\naward\naware\nawful\nawkward\naxe\naxis\nbaboon\nbaby\nback\nback pain\nbackbone\nbackflip\nbackground\nbackpack\nbacon\nbad\nbadger\nbag\nbagel\nbagpipes\nbaguette\nbail\nbait\nbake\nbakery\nbaklava\nbalance\nbalanced\nbalcony\nbald\nball\nballerina\nballet\nballoon\nballot\nbambi\nbamboo\nban\nbanana\nband\nband-aid\nbandage\nbandana\nbang\nbanjo\nbank\nbanker\nbankruptcy\nbanner\nbar\nbarack obama\nbarbarian\nbarbecue\nbarbed wire\nbarber\nbarcode\nbare\nbargain\nbark\nbarn\nbarrel\nbarrier\nbart simpson\nbartender\nbase\nbaseball\nbasement\nbasic\nbasin\nbasis\nbasket\nbasketball\nbat\nbath\nbathroom\nbathtub\nbatman\nbattery\nbattle\nbattlefield\nbattleship\nbay\nbayonet\nbazooka\nbeach\nbeak\nbeam\nbean\nbean bag\nbeanie\nbeanstalk\nbear\nbear trap\nbeard\nbeat\nbeatbox\nbeautiful\nbeaver\nbecome\nbed\nbed bug\nbed sheet\nbedroom\nbedtime\nbee\nbeef\nbeer\nbeet\nbeethoven\nbeetle\nbeg\nbegin\nbeginning\nbehave\nbehaviour\nbehead\nbelief\nbell\nbell pepper\nbellow\nbelly\nbelly button\nbelong\nbelow\nbelt\nbench\nbend\nbeneficiary\nbenefit\nberry\nbet\nbetray\nbible\nbicycle\nbig ben\nbike\nbill\nbill gates\nbilliards\nbin\nbind\nbingo\nbinoculars\nbiography\nbiology\nbirch\nbird\nbird bath\nbirthday\nbiscuit\nbishop\nbitch\nbitcoin\nbite\nbitter\nblack\nblack friday\nblack hole\nblackberry\nblackmail\nblacksmith\nblade\nblame\nbland\nblank\nblanket\nblast\nbleach\nbleed\nblender\nbless\nblimp\nblind\nblindfold\nblizzard\nblock\nblonde\nblood\nbloodshed\nbloody\nblow\nblowfish\nblue\nblue jean\nblueberry\nblush\nbmw\nbmx\nboar\nboard\nboat\nbobsled\nbody\nbodyguard\nboil\nbold\nbolt\nbomb\nbomber\nbomberman\nbond\nbone\nbooger\nbook\nbookmark\nbookshelf\nboom\nboomerang\nboot\nboots\nborder\nborrow\nbother\nbottle\nbottle flip\nbottom\nbounce\nbouncer\nbow\nbowel\nbowl\nbowling\nbox\nboy\nbracelet\nbraces\nbracket\nbrag\nbrain\nbrainwash\nbrake\nbranch\nbrand\nbrave\nbrazil\nbread\nbreak\nbreakdown\nbreakfast\nbreast\nbreath\nbreathe\nbreed\nbreeze\nbrewery\nbrick\nbricklayer\nbride\nbridge\nbring\nbroadcast\nbroccoli\nbroken\nbroken heart\nbronze\nbroom\nbroomstick\nbrother\nbrown\nbrownie\nbruise\nbrunette\nbrush\nbubble\nbubble gum\nbucket\nbudget\nbuffet\nbugs bunny\nbuilding\nbulb\nbulge\nbull\nbulldozer\nbullet\nbulletin\nbump\nbumper\nbundle\nbungee jumping\nbunk bed\nbunny\nbureaucracy\nbureaucratic\nburglar\nburial\nburn\nburp\nburrito\nburst\nbury\nbus\nbus driver\nbus stop\nbush\nbusiness\nbusinessman\nbusy\nbutcher\nbutler\nbutt cheeks\nbutter\nbutterfly\nbutton\nbuy\ncab driver\ncabin\ncabinet\ncable\ncactus\ncafe\ncage\ncake\ncalculation\ncalendar\ncalf\ncall\ncalm\ncalorie\ncamel\ncamera\ncamp\ncampaign\ncampfire\ncamping\ncan\ncan opener\ncanada\ncanary\ncancel\ncancer\ncandidate\ncandle\ncane\ncanister\ncannon\ncanvas\ncanyon\ncap\ncapable\ncape\ncapital\ncapitalism\ncappuccino\ncapricorn\ncaptain\ncaptain america\ncaptivate\ncapture\ncar\ncar wash\ncarbon\ncard\ncardboard\ncare\ncareer\ncareful\ncarnival\ncarnivore\ncarpenter\ncarpet\ncarriage\ncarrier\ncarrot\ncarry\ncart\ncartoon\ncarve\ncase\ncash\ncasino\ncassette\ncast\ncastle\ncasualty\ncat\ncat woman\ncatalog\ncatalogue\ncatapult\ncatch\ncategory\ncater\ncaterpillar\ncatfish\ncathedral\ncattle\ncauldron\ncauliflower\ncause\ncautious\ncave\ncaveman\ncaviar\nceiling\nceiling fan\ncelebrate\ncelebration\ncelebrity\ncell\ncell phone\ncellar\ncello\ncement\ncemetery\ncensorship\ncensus\ncentaur\ncenter\ncentipede\ncentral\ncentury\ncerberus\ncereal\nceremony\ncertain\ncertificate\nchain\nchainsaw\nchair\nchalk\nchallenge\nchameleon\nchampagne\nchampion\nchance\nchandelier\nchange\nchannel\nchaos\nchap\nchapter\ncharacter\ncharacteristic\ncharge\ncharger\ncharismatic\ncharity\ncharlie chaplin\ncharm\nchart\ncharter\nchase\nchauvinist\ncheap\ncheck\ncheek\ncheeks\ncheerful\ncheerleader\ncheese\ncheeseburger\ncheesecake\ncheetah\nchef\nchemical\nchemistry\ncheque\ncherry\ncherry blossom\nchess\nchest\nchest hair\nchestnut\nchestplate\nchew\nchewbacca\nchicken\nchief\nchihuahua\nchild\nchildhood\nchildish\nchime\nchimney\nchimpanzee\nchin\nchina\nchinatown\nchinchilla\nchip\nchocolate\nchoice\nchoke\nchoose\nchop\nchopsticks\nchord\nchorus\nchristmas\nchrome\nchronic\nchuck norris\nchurch\ncicada\ncigarette\ncinema\ncircle\ncirculation\ncircumstance\ncircus\ncitizen\ncity\ncivic\ncivilian\ncivilization\nclaim\nclap\nclarify\nclarinet\nclash\nclass\nclassical\nclassify\nclassroom\nclaw\nclay\nclean\nclear\nclearance\nclerk\nclickbait\ncliff\nclimate\nclimb\nclinic\ncloak\nclock\nclose\nclosed\ncloth\nclothes\nclothes hanger\ncloud\nclover\nclown\nclownfish\nclub\nclue\ncluster\ncoach\ncoal\ncoalition\ncoast\ncoast guard\ncoaster\ncoat\ncobra\ncockroach\ncocktail\ncoconut\ncocoon\ncode\ncoffee\ncoffee shop\ncoffin\ncoin\ncoincide\ncoincidence\ncola\ncold\ncollapse\ncollar\ncolleague\ncollect\ncollection\ncollege\ncolon\ncolony\ncolor-blind\ncolosseum\ncolour\ncolourful\ncolumn\ncoma\ncomb\ncombination\ncombine\ncomedian\ncomedy\ncomet\ncomfort\ncomfortable\ncomic book\ncommand\ncommander\ncomment\ncommerce\ncommercial\ncommission\ncommitment\ncommittee\ncommon\ncommunication\ncommunism\ncommunist\ncommunity\ncompact\ncompany\ncomparable\ncompare\ncomparison\ncompartment\ncompass\ncompatible\ncompensate\ncompensation\ncompete\ncompetence\ncompetent\ncompetition\ncompetitive\ncomplain\ncomplete\ncomplex\ncompliance\ncomplication\ncomposer\ncompound\ncomprehensive\ncompromise\ncomputer\ncomputing\nconcede\nconceive\nconcentrate\nconcentration\nconcept\nconception\nconcern\nconcert\nconcession\nconclusion\nconcrete\ncondiment\ncondition\nconductor\ncone\nconference\nconfession\nconfidence\nconfident\nconfine\nconflict\nconfront\nconfrontation\nconfused\nconfusion\nconglomerate\ncongratulate\ncongress\nconnection\nconscience\nconscious\nconsciousness\nconsensus\nconservation\nconservative\nconsider\nconsiderable\nconsideration\nconsistent\nconsole\nconsolidate\nconspiracy\nconstant\nconstellation\nconstituency\nconstitution\nconstitutional\nconstraint\nconstruct\nconstructive\nconsultation\nconsumer\nconsumption\ncontact\ncontain\ncontemporary\ncontempt\ncontent\ncontest\ncontext\ncontinent\ncontinental\ncontinuation\ncontinuous\ncontract\ncontraction\ncontradiction\ncontrary\ncontrast\ncontribution\ncontrol\ncontroller\ncontroversial\nconvenience\nconvenient\nconvention\nconventional\nconversation\nconvert\nconvict\nconviction\nconvince\ncook\ncookie\ncookie jar\ncookie monster\ncool\ncooperate\ncooperation\ncooperative\ncope\ncopper\ncopy\ncopyright\ncoral\ncoral reef\ncord\ncore\ncork\ncorkscrew\ncorn\ncorn dog\ncorner\ncornfield\ncorporate\ncorpse\ncorrection\ncorrelation\ncorrespond\ncorrespondence\ncorruption\ncostume\ncottage\ncotton\ncotton candy\ncough\ncouncil\ncount\ncounter\ncountry\ncountryside\ncoup\ncouple\ncourage\ncourse\ncourt\ncourtesy\ncousin\ncover\ncoverage\ncow\ncowbell\ncowboy\ncoyote\ncrab\ncrack\ncraft\ncraftsman\ncrash\ncrash bandicoot\ncrate\ncrawl space\ncrayon\ncream\ncreate\ncreation\ncredibility\ncredit\ncredit card\ncreed\ncreep\ncreeper\ncrew\ncricket\ncrime\ncriminal\ncringe\ncrisis\ncritic\ncritical\ncriticism\ncroatia\ncrocodile\ncroissant\ncrop\ncross\ncrossbow\ncrossing\ncrouch\ncrow\ncrowbar\ncrowd\ncrown\ncrucible\ncrude\ncruel\ncruelty\ncruise\ncrust\ncrutch\ncry\ncrystal\ncuba\ncube\ncuckoo\ncucumber\ncultivate\ncultural\nculture\ncup\ncupboard\ncupcake\ncupid\ncurious\ncurl\ncurrency\ncurrent\ncurriculum\ncurry\ncurtain\ncurve\ncushion\ncustody\ncustomer\ncut\ncute\ncutting\ncyborg\ncycle\ncylinder\ncymbal\ndaffy duck\ndagger\ndaily\ndairy\ndaisy\ndalmatian\ndamage\ndamn\ndance\ndandelion\ndandruff\ndanger\ndangerous\ndare\ndark\ndarts\ndarwin\ndarwin watterson\ndashboard\ndate\ndaughter\nday\ndaylight\ndead\ndeadline\ndeadly\ndeadpool\ndeaf\ndeal\ndealer\ndeath\ndebate\ndebt\ndebut\ndecade\ndecay\ndecide\ndecisive\ndeck\ndeclaration\ndecline\ndecoration\ndecorative\ndecrease\ndedicate\ndeep\ndeer\ndefault\ndefeat\ndefend\ndefendant\ndefense\ndeficiency\ndeficit\ndefine\ndefinite\ndefinition\ndegree\ndelay\ndelegate\ndelete\ndelicate\ndeliver\ndelivery\ndemand\ndemocracy\ndemocratic\ndemolish\ndemon\ndemonstrate\ndemonstration\ndemonstrator\ndenial\ndenounce\ndensity\ndent\ndentist\ndeny\ndeodorant\ndepart\ndeparture\ndepend\ndependence\ndependent\ndeposit\ndepressed\ndepression\ndeprivation\ndeprive\ndeputy\nderp\ndescent\ndescribe\ndesert\ndeserve\ndesign\ndesigner\ndesirable\ndesire\ndesk\ndespair\ndesperate\ndespise\ndessert\ndestruction\ndetail\ndetective\ndetector\ndeter\ndeteriorate\ndetonate\ndevelop\ndevelopment\ndeviation\ndevote\ndew\ndexter\ndiagnosis\ndiagonal\ndiagram\ndialect\ndialogue\ndiameter\ndiamond\ndiaper\ndice\ndictate\ndictionary\ndie\ndiet\ndiffer\ndifference\ndifferent\ndifficult\ndifficulty\ndig\ndigital\ndignity\ndilemma\ndilute\ndimension\ndine\ndinner\ndinosaur\ndip\ndiploma\ndiplomat\ndiplomatic\ndirect\ndirection\ndirector\ndirectory\ndirty\ndisability\ndisadvantage\ndisagreement\ndisappear\ndisappoint\ndisappointment\ndisaster\ndiscipline\ndisco\ndiscord\ndiscount\ndiscourage\ndiscourse\ndiscover\ndiscovery\ndiscreet\ndiscrimination\ndiscuss\ndisease\ndisguise\ndish\ndishrag\ndisk\ndislike\ndismiss\ndismissal\ndisorder\ndispenser\ndisplay\ndisposition\ndispute\ndiss track\ndissolve\ndistance\ndistant\ndistinct\ndistort\ndistortion\ndistribute\ndistributor\ndistrict\ndisturbance\ndiva\ndive\ndivide\ndividend\ndivision\ndivorce\ndizzy\ndna\ndock\ndoctor\ndocument\ndog\ndoghouse\ndoll\ndollar\ndollhouse\ndolphin\ndome\ndomestic\ndominant\ndominate\ndomination\ndominoes\ndonald duck\ndonald trump\ndonate\ndonkey\ndonor\ndoor\ndoorknob\ndora\ndoritos\ndose\ndots\ndouble\ndoubt\ndough\ndownload\ndozen\ndracula\ndraft\ndrag\ndragon\ndragonfly\ndrain\ndrama\ndramatic\ndraw\ndrawer\ndrawing\ndream\ndress\ndressing\ndrift\ndrill\ndrink\ndrip\ndrive\ndriver\ndrool\ndrop\ndroplet\ndrought\ndrown\ndrug\ndrum\ndrum kit\ndry\nduck\nduct tape\ndue\nduel\nduke\ndull\ndumbo\ndump\nduration\ndust\nduty\ndwarf\ndynamic\ndynamite\neager\neagle\near\nearbuds\nearly\nearth\nearthquake\nearwax\neast\neaster\neaster bunny\neasy\neat\neavesdrop\necho\neclipse\neconomic\neconomics\neconomist\neconomy\nedge\nedition\neducation\neducational\neel\neffect\neffective\nefficient\neffort\negg\neggplant\nego\negypt\neiffel tower\neinstein\nelbow\nelder\nelect\nelection\nelectorate\nelectric car\nelectric guitar\nelectrician\nelectricity\nelectron\nelectronic\nelectronics\nelegant\nelement\nelephant\nelevator\neligible\neliminate\nelite\nelmo\nelon musk\neloquent\nelsa\nembark\nembarrassment\nembassy\nembers\nembryo\nemerald\nemergency\neminem\nemoji\nemotion\nemotional\nemphasis\nempire\nempirical\nemploy\nemployee\nemployer\nemployment\nempty\nemu\nencourage\nencouraging\nend\nendure\nenemy\nenergy\nengagement\nengine\nengineer\nengland\nenhance\nenjoyable\nenlarge\nensure\nenter\nentertain\nentertainment\nenthusiasm\nenthusiastic\nentitlement\nentry\nenvelope\nenvironment\nenvironmental\nepisode\nequal\nequation\nequator\nequilibrium\nequipment\nera\neraser\nerosion\nerror\nescape\neskimo\nespresso\nessay\nessence\nessential\nestablish\nestablished\nestate\nestimate\neternal\nethical\nethics\nethnic\neurope\nevaporate\neven\nevening\nevolution\nexact\nexaggerate\nexam\nexamination\nexample\nexcalibur\nexcavation\nexcavator\nexceed\nexception\nexcess\nexchange\nexcited\nexcitement\nexciting\nexclude\nexclusive\nexcuse\nexecute\nexecution\nexecutive\nexemption\nexercise\nexhibit\nexhibition\nexile\nexit\nexotic\nexpand\nexpansion\nexpect\nexpectation\nexpected\nexpedition\nexpenditure\nexpensive\nexperience\nexperienced\nexperiment\nexperimental\nexpert\nexpertise\nexplain\nexplanation\nexplicit\nexplode\nexploit\nexploration\nexplosion\nexport\nexpose\nexposure\nexpress\nexpression\nextend\nextension\nextent\nexternal\nextinct\nextraordinary\nextraterrestrial\nextreme\neye\neyebrow\neyelash\neyeshadow\nfabric\nfabulous\nfacade\nface\nface paint\nfacebook\nfacility\nfact\nfactor\nfactory\nfade\nfail\nfailure\nfaint\nfair\nfairy\nfaith\nfaithful\nfake teeth\nfall\nfalse\nfame\nfamiliar\nfamily\nfamily guy\nfan\nfanta\nfantasy\nfar\nfare\nfarm\nfarmer\nfascinate\nfashion\nfashion designer\nfashionable\nfast\nfast food\nfast forward\nfastidious\nfat\nfather\nfaucet\nfault\nfavor\nfavorable\nfavour\nfavourite\nfax\nfear\nfeast\nfeather\nfeature\nfederal\nfederation\nfee\nfeedback\nfeel\nfeeling\nfeminine\nfeminist\nfence\nfencing\nfern\nferrari\nferry\nfestival\nfever\nfew\nfibre\nfiction\nfidget spinner\nfield\nfig\nfight\nfigure\nfigurine\nfile\nfill\nfilm\nfilmmaker\nfilter\nfinal\nfinance\nfinancial\nfind\nfine\nfinger\nfingernail\nfingertip\nfinish\nfinished\nfinn\nfinn and jake\nfire\nfire alarm\nfire hydrant\nfire truck\nfireball\nfirecracker\nfirefighter\nfirefly\nfirehouse\nfireman\nfireplace\nfireproof\nfireside\nfirework\nfirm\nfirst\nfirsthand\nfish\nfish bowl\nfisherman\nfist\nfist fight\nfit\nfitness\nfitness trainer\nfix\nfixture\nfizz\nflag\nflagpole\nflamethrower\nflamingo\nflash\nflashlight\nflask\nflat\nflavour\nflawed\nflea\nfleet\nflesh\nflexible\nflight\nflight attendant\nfling\nflock\nflood\nfloodlight\nfloor\nfloppy disk\nflorida\nflorist\nflour\nflourish\nflower\nflu\nfluctuation\nfluid\nflush\nflute\nfly\nfly swatter\nflying pig\nfog\nfoil\nfold\nfolder\nfolk\nfolklore\nfollow\nfood\nfool\nfoolish\nfoot\nfootball\nforbid\nforce\nforecast\nforehead\nforeigner\nforest\nforest fire\nforestry\nforge\nforget\nfork\nform\nformal\nformat\nformation\nformula\nformulate\nfort\nfortress\nfortune\nforum\nforward\nfossil\nfoster\nfoundation\nfountain\nfox\nfraction\nfragment\nfragrant\nframe\nfrance\nfranchise\nfrank\nfrankenstein\nfraud\nfreckle\nfreckles\nfred flintstone\nfree\nfreedom\nfreeze\nfreezer\nfreight\nfrequency\nfrequent\nfresh\nfreshman\nfridge\nfriend\nfriendly\nfriendship\nfries\nfrighten\nfrog\nfront\nfrostbite\nfrosting\nfrown\nfrozen\nfruit\nfrustration\nfuel\nfull\nfull moon\nfull-time\nfun\nfunction\nfunctional\nfund\nfuneral\nfunny\nfur\nfurniture\nfuss\nfuture\ngain\ngalaxy\ngallery\ngallon\ngame\ngandalf\ngandhi\ngang\ngangster\ngap\ngarage\ngarbage\ngarden\ngardener\ngarfield\ngarlic\ngas\ngas mask\ngasoline\ngasp\ngate\ngaze\ngear\ngem\ngender\ngene\ngeneral\ngenerate\ngeneration\ngenerator\ngenerous\ngenetic\ngenie\ngenius\ngentle\ngentleman\ngenuine\ngeography\ngeological\ngerm\ngermany\ngesture\nget\ngeyser\nghost\ngiant\ngift\ngiraffe\ngirl\ngive\nglacier\nglad\ngladiator\nglance\nglare\nglass\nglasses\nglide\nglimpse\nglitter\nglobe\ngloom\nglorious\nglory\ngloss\nglove\nglow\nglowstick\nglue\nglue stick\ngnome\ngo\ngoal\ngoalkeeper\ngoat\ngoatee\ngoblin\ngod\ngodfather\ngold\ngold chain\ngolden apple\ngolden egg\ngoldfish\ngolf\ngolf cart\ngood\ngoofy\ngoogle\ngoose\ngorilla\ngovernment\ngovernor\ngown\ngrace\ngrade\ngradual\ngraduate\ngraduation\ngraffiti\ngrain\ngrammar\ngrand\ngrandfather\ngrandmother\ngrant\ngrapefruit\ngrapes\ngraph\ngraphic\ngraphics\ngrass\ngrasshopper\ngrateful\ngrave\ngravedigger\ngravel\ngraveyard\ngravity\ngreat\ngreat wall\ngreece\ngreed\ngreen\ngreen lantern\ngreet\ngreeting\ngregarious\ngrenade\ngrid\ngrief\ngrill\ngrimace\ngrin\ngrinch\ngrind\ngrip\ngroan\ngroom\nground\ngrounds\ngrow\ngrowth\ngru\ngrumpy\nguarantee\nguard\nguerrilla\nguess\nguest\nguide\nguideline\nguillotine\nguilt\nguinea pig\nguitar\ngumball\ngummy\ngummy bear\ngummy worm\ngun\ngutter\nhabit\nhabitat\nhacker\nhair\nhair roller\nhairbrush\nhaircut\nhairspray\nhairy\nhalf\nhall\nhallway\nhalo\nhalt\nham\nhamburger\nhammer\nhammock\nhamster\nhand\nhandicap\nhandle\nhandshake\nhandy\nhang\nhanger\nhappen\nhappy\nhappy meal\nharbor\nharbour\nhard\nhard hat\nhardship\nhardware\nharm\nharmful\nharmonica\nharmony\nharp\nharpoon\nharry potter\nharsh\nharvest\nhashtag\nhat\nhate\nhaul\nhaunt\nhave\nhawaii\nhay\nhazard\nhazelnut\nhead\nheadache\nheadband\nheadboard\nheading\nheadline\nheadphones\nheadquarters\nheal\nhealth\nhealthy\nhear\nheart\nheat\nheaven\nheavy\nhedge\nhedgehog\nheel\nheight\nheir\nheist\nhelicopter\nhell\nhello kitty\nhelmet\nhelp\nhelpful\nhelpless\nhemisphere\nhen\nherb\nhercules\nherd\nhermit\nhero\nheroin\nhesitate\nhexagon\nhibernate\nhiccup\nhide\nhierarchy\nhieroglyph\nhigh\nhigh five\nhigh heels\nhigh score\nhighlight\nhighway\nhike\nhilarious\nhill\nhip\nhip hop\nhippie\nhippo\nhistorian\nhistorical\nhistory\nhit\nhitchhiker\nhive\nhobbit\nhockey\nhold\nhole\nholiday\nhollywood\nholy\nhome\nhome alone\nhomeless\nhomer simpson\nhonest\nhoney\nhoneycomb\nhonorable\nhonour\nhoof\nhook\nhop\nhope\nhopscotch\nhorizon\nhorizontal\nhorn\nhoroscope\nhorror\nhorse\nhorsewhip\nhose\nhospital\nhospitality\nhost\nhostage\nhostile\nhostility\nhot\nhot chocolate\nhot dog\nhot sauce\nhotel\nhour\nhourglass\nhouse\nhouseplant\nhousewife\nhousing\nhover\nhovercraft\nhug\nhuge\nhula hoop\nhulk\nhuman\nhuman body\nhumanity\nhummingbird\nhumour\nhunger\nhungry\nhunter\nhunting\nhurdle\nhurt\nhusband\nhut\nhyena\nhypnotize\nhypothesis\nice\nice cream\nice cream truck\niceberg\nicicle\nidea\nideal\nidentification\nidentify\nidentity\nideology\nignorance\nignorant\nignore\nikea\nillegal\nillness\nillusion\nillustrate\nillustration\nimage\nimagination\nimagine\nimmigrant\nimmigration\nimmune\nimpact\nimperial\nimplication\nimplicit\nimport\nimportance\nimportant\nimpossible\nimpress\nimpressive\nimprove\nimprovement\nimpulse\ninadequate\ninappropriate\nincapable\nincentive\ninch\nincident\ninclude\nincognito\nincome\nincongruous\nincrease\nincredible\nindependent\nindex\nindia\nindication\nindigenous\nindirect\nindividual\nindoor\nindulge\nindustrial\nindustry\ninevitable\ninfect\ninfection\ninfinite\ninflate\ninflation\ninfluence\ninfluential\ninformal\ninformation\ninfrastructure\ningredient\ninhabitant\ninherit\ninhibition\ninitial\ninitiative\ninject\ninjection\ninjure\ninjury\ninn\ninner\ninnocent\ninnovation\ninquest\ninsect\ninsert\ninside\ninsider\ninsight\ninsist\ninsistence\ninsomnia\ninspector\ninspiration\ninspire\ninstal\ninstall\ninstinct\ninstitution\ninstruction\ninstrument\ninsufficient\ninsurance\ninsure\nintegrated\nintegration\nintegrity\nintel\nintellectual\nintelligence\nintense\nintensify\nintention\ninteraction\ninteractive\ninterest\ninteresting\ninterface\ninterference\nintermediate\ninternal\ninternational\ninternet\ninterpret\ninterrupt\nintersection\nintervention\ninterview\nintroduce\nintroduction\ninvasion\ninvention\ninvestigation\ninvestigator\ninvestment\ninvisible\ninvitation\ninvite\nipad\niphone\nireland\niron\niron giant\niron man\nirony\nirrelevant\nisland\nisolation\nisrael\nissue\nitaly\nitem\nivory\nivy\njack-o-lantern\njacket\njackhammer\njackie chan\njaguar\njail\njalapeno\njam\njames bond\njanitor\njapan\njar\njaw\njayz\njazz\njealous\njeans\njeep\njello\njelly\njellyfish\njenga\njerk\njest\njester\njesus christ\njet\njet ski\njewel\njimmy neutron\njob\njockey\njohn cena\njohnny bravo\njoint\njoke\njoker\njournal\njournalist\njourney\njoy\njudge\njudgment\njudicial\njuggle\njuice\njump\njump rope\njunction\njungle\njunior\njunk food\njurisdiction\njury\njust\njustice\njustification\njustify\nkangaroo\nkaraoke\nkarate\nkatana\nkaty perry\nkazoo\nkebab\nkeep\nkeg\nkendama\nkermit\nketchup\nkettle\nkey\nkeyboard\nkfc\nkick\nkid\nkidney\nkill\nkiller\nkim jong-un\nkind\nkindergarten\nking\nking kong\nkingdom\nkinship\nkirby\nkiss\nkit\nkitchen\nkite\nkitten\nkiwi\nknead\nknee\nkneel\nknife\nknight\nknit\nknock\nknot\nknow\nknowledge\nknuckle\nkoala\nkoran\nkraken\nkung fu\nlabel\nlaboratory\nlabour\nlabourer\nlace\nlack\nladder\nlady\nlady gaga\nladybug\nlake\nlamb\nlamp\nland\nlandlord\nlandowner\nlandscape\nlane\nlanguage\nlantern\nlap\nlaptop\nlarge\nlas vegas\nlasagna\nlaser\nlasso\nlast\nlate\nlatest\nlaugh\nlaunch\nlaundry\nlava\nlava lamp\nlaw\nlawn\nlawn mower\nlawyer\nlay\nlayer\nlayout\nlazy\nlead\nleader\nleadership\nleaf\nleaflet\nleak\nlean\nlearn\nlease\nleash\nleather\nleave\nlecture\nleech\nleft\nleftovers\nleg\nlegal\nlegend\nlegislation\nlegislative\nlegislature\nlego\nlegs\nleisure\nlemon\nlemonade\nlemur\nlend\nlength\nlens\nleonardo da vinci\nleonardo dicaprio\nleprechaun\nlesson\nlet\nletter\nlettuce\nlevel\nlevitate\nliability\nliberal\nliberty\nlibrarian\nlibrary\nlicence\nlicense\nlick\nlicorice\nlid\nlie\nlife\nlifestyle\nlift\nlight\nlightbulb\nlighter\nlighthouse\nlightning\nlightsaber\nlike\nlikely\nlily\nlilypad\nlimb\nlimbo\nlime\nlimit\nlimitation\nlimited\nlimousine\nline\nlinear\nlinen\nlinger\nlink\nlion\nlion king\nlip\nlips\nlipstick\nliquid\nlist\nlisten\nliteracy\nliterary\nliterature\nlitigation\nlitter box\nlive\nlively\nliver\nlizard\nllama\nload\nloading\nloaf\nloan\nlobby\nlobster\nlocate\nlocation\nlock\nlodge\nlog\nlogic\nlogical\nlogo\nlollipop\nlondon\nlondon eye\nlonely\nlong\nlook\nloop\nloose\nloot\nlose\nloser\nloss\nlost\nlot\nlotion\nlottery\nloud\nlounge\nlove\nlover\nlow\nlower\nloyal\nloyalty\nluck\nlucky\nluggage\nluigi\nlumberjack\nlump\nlunch\nlung\nlynx\nlyrics\nmacaroni\nmachine\nmachinery\nmacho\nmadagascar\nmafia\nmagazine\nmagic\nmagic trick\nmagic wand\nmagician\nmagma\nmagnet\nmagnetic\nmagnifier\nmagnitude\nmaid\nmail\nmailbox\nmailman\nmain\nmainstream\nmaintenance\nmajor\nmajority\nmake\nmakeup\nmall\nmammoth\nman\nmanage\nmanagement\nmanager\nmanatee\nmanhole\nmanicure\nmannequin\nmanner\nmansion\nmantis\nmanual\nmanufacture\nmanufacturer\nmanuscript\nmap\nmaracas\nmarathon\nmarble\nmarch\nmargarine\nmargin\nmarigold\nmarine\nmario\nmark\nmark zuckerberg\nmarket\nmarketing\nmarmalade\nmarmot\nmarriage\nmarried\nmars\nmarsh\nmarshmallow\nmascot\nmask\nmass\nmassage\nmaster\nmatch\nmatchbox\nmaterial\nmathematical\nmathematics\nmatrix\nmatter\nmattress\nmature\nmaximum\nmayonnaise\nmayor\nmaze\nmcdonalds\nmeadow\nmeal\nmean\nmeaning\nmeaningful\nmeans\nmeasure\nmeat\nmeatball\nmeatloaf\nmechanic\nmechanical\nmechanism\nmedal\nmedicine\nmedieval\nmedium\nmedusa\nmeerkat\nmeet\nmeeting\nmegaphone\nmelon\nmelt\nmember\nmembership\nmeme\nmemorable\nmemorandum\nmemorial\nmemory\nmental\nmention\nmenu\nmercedes\nmerchant\nmercury\nmercy\nmerit\nmermaid\nmessage\nmessy\nmetal\nmeteorite\nmethod\nmethodology\nmexico\nmichael jackson\nmickey mouse\nmicrophone\nmicroscope\nmicrosoft\nmicrowave\nmiddle\nmiddle-class\nmidnight\nmigration\nmild\nmile\nmilitary\nmilk\nmilkman\nmilkshake\nmilky way\nmill\nmime\nmind\nmine\nminecraft\nminer\nmineral\nminiclip\nminigolf\nminimise\nminimum\nminion\nminister\nministry\nminivan\nminor\nminority\nminotaur\nmint\nminute\nmiracle\nmirror\nmiscarriage\nmiserable\nmisery\nmislead\nmiss\nmissile\nmist\nmix\nmixture\nmobile\nmodel\nmodern\nmodest\nmodule\nmohawk\nmold\nmole\nmolecular\nmolecule\nmoment\nmomentum\nmona lisa\nmonarch\nmonarchy\nmonastery\nmonday\nmoney\nmonk\nmonkey\nmonopoly\nmonster\nmonstrous\nmont blanc\nmonth\nmonthly\nmood\nmoon\nmoose\nmop\nmoral\nmorale\nmorgan freeman\nmorning\nmorse code\nmorsel\nmortgage\nmorty\nmosaic\nmosque\nmosquito\nmoss\nmoth\nmothball\nmother\nmotherboard\nmotif\nmotivation\nmotorbike\nmotorcycle\nmotorist\nmotorway\nmould\nmount everest\nmount rushmore\nmountain\nmourning\nmouse\nmousetrap\nmouth\nmove\nmovement\nmovie\nmoving\nmozart\nmr bean\nmr meeseeks\nmr. bean\nmr. meeseeks\nmtv\nmud\nmuffin\nmug\nmultimedia\nmultiple\nmultiply\nmummy\nmunicipal\nmurder\nmurderer\nmuscle\nmuseum\nmushroom\nmusic\nmusical\nmusician\nmusket\nmustache\nmustard\nmutation\nmutter\nmutual\nmyth\nnachos\nnail\nnail file\nnail polish\nname\nnap\nnapkin\nnarrow\nnarwhal\nnasa\nnascar\nnational\nnationalism\nnationalist\nnationality\nnative\nnature\nnavy\nnecessary\nneck\nneed\nneedle\nnegative\nneglect\nnegligence\nnegotiation\nneighbor\nneighborhood\nneighbour\nneighbourhood\nnemo\nnephew\nneptune\nnerd\nnerve\nnervous\nnest\nnet\nnetherlands\nnetwork\nneutral\nnew\nnew zealand\nnewcomer\nnews\nnewspaper\nnice\nnickel\nnight\nnightclub\nnightmare\nnike\nninja\nnintendo switch\nnoble\nnod\nnode\nnoise\nnoisy\nnominate\nnomination\nnonsense\nnoob\nnoodle\nnorm\nnormal\nnorth\nnorth korea\nnorthern lights\nnorway\nnose\nnose hair\nnose ring\nnosebleed\nnostrils\nnotch\nnote\nnotebook\nnotepad\nnothing\nnotice\nnotification\nnotion\nnotorious\nnoun\nnovel\nnuclear\nnugget\nnuke\nnumber\nnun\nnurse\nnursery\nnut\nnutcracker\nnutella\nnutmeg\nnutshell\noak\noar\nobelix\nobese\nobey\nobject\nobjection\nobjective\nobligation\nobscure\nobservation\nobservatory\nobserver\nobstacle\nobtain\nobvious\noccasion\noccupation\noccupational\noccupy\nocean\noctagon\noctopus\nodd\noffence\noffend\noffender\noffensive\noffer\noffice\nofficer\nofficial\noffset\noffspring\noil\nolaf\nold\nomelet\nomission\nonion\nopen\nopera\noperation\noperational\nopinion\nopponent\noppose\nopposed\nopposite\nopposition\noptimism\noptimistic\noption\noptional\noral\norange\norangutan\norbit\norca\norchestra\norchid\norder\nordinary\noreo\norgan\norganic\norganisation\norganise\norientation\norigami\norigin\noriginal\northodox\nostrich\nother\notter\nouter\noutfit\noutlet\noutline\noutlook\noutput\noutside\noval\noven\noverall\noverlook\noverview\noverweight\noverwhelm\nowe\nowl\nowner\nownership\noxygen\noyster\npac-man\npace\npack\npackage\npacket\npaddle\npage\npain\npainful\npaint\npaintball\npainter\npair\npajamas\npalace\npalette\npalm\npalm tree\npan\npancake\npanda\npanel\npanic\npanpipes\npanther\npants\npapaya\npaper\npaper bag\nparachute\nparade\nparadox\nparagraph\nparakeet\nparallel\nparalyzed\nparameter\npardon\nparent\nparental\nparents\nparis\npark\nparking\nparliament\nparrot\npart\npart-time\nparticipant\nparticipate\nparticle\nparticular\npartner\npartnership\nparty\npass\npassage\npassenger\npassion\npassionate\npassive\npassport\npassword\npast\npasta\npastel\npastry\npasture\npat\npatch\npatent\npath\npatience\npatient\npatio\npatrick\npatriot\npatrol\npattern\npause\npavement\npaw\npay\npayment\npaypal\npeace\npeaceful\npeach\npeacock\npeak\npeanut\npear\npeas\npeasant\npedal\npedestrian\npelican\npen\npenalty\npencil\npencil case\npencil sharpener\npendulum\npenetrate\npenguin\npeninsula\npenny\npension\npensioner\npeople\npeppa pig\npepper\npepperoni\npepsi\nperceive\npercent\nperception\nperfect\nperforate\nperform\nperformance\nperformer\nperfume\nperiod\nperiscope\npermanent\npermission\npersist\npersistent\nperson\npersonal\npersonality\npersuade\npest\npet\npet food\npet shop\npetal\npetty\npharmacist\nphenomenon\nphilosopher\nphilosophical\nphilosophy\nphineas and ferb\nphoto frame\nphotocopy\nphotograph\nphotographer\nphotography\nphotoshop\nphysical\nphysics\npiano\npicasso\npick\npickaxe\npickle\npicnic\npicture\npie\npiece\npier\npig\npigeon\npiggy bank\npigsty\npikachu\npike\npile\npill\npillar\npillow\npillow fight\npilot\npimple\npin\npinball\npine\npine cone\npineapple\npink\npink panther\npinky\npinocchio\npinwheel\npioneer\npipe\npirate\npirate ship\npistachio\npistol\npit\npitch\npitchfork\npity\npizza\nplace\nplague\nplain\nplaintiff\nplan\nplane\nplanet\nplank\nplant\nplaster\nplastic\nplate\nplatform\nplatypus\nplay\nplayer\nplayground\nplaystation\nplead\npleasant\nplease\npleasure\npledge\nplot\nplow\nplug\nplumber\nplunger\npluto\npneumonia\npocket\npoem\npoetry\npogo stick\npoint\npoison\npoisonous\npoke\npokemon\npolar bear\npole\npoliceman\npolicy\npolish\npolite\npolitical\npolitician\npolitics\npoll\npollution\npolo\npond\npony\nponytail\npoodle\npool\npoop\npoor\npop\npopcorn\npope\npopeye\npoppy\npopsicle\npopular\npopulation\nporch\nporcupine\nporky pig\nportable\nportal\nporter\nportion\nportrait\nportugal\nposeidon\nposition\npositive\npossession\npossibility\npossible\npost\npostcard\nposter\npostpone\npot\npot of gold\npotato\npotential\npotion\npottery\npound\npour\npowder\npower\npowerful\npractical\npractice\npraise\nprawn\npray\nprayer\npreach\nprecede\nprecedent\nprecise\nprecision\npredator\npredecessor\npredictable\nprefer\npreference\npregnant\nprejudice\npremature\npremium\npreoccupation\npreparation\nprescription\npresence\npresent\npresentation\npreservation\npresidency\npresident\npresidential\npress\npressure\nprestige\npretzel\nprevalence\nprevent\nprey\nprice\nprice tag\npride\npriest\nprimary\nprince\nprincess\nprinciple\npringles\nprint\nprinter\npriority\nprism\nprison\nprisoner\nprivacy\nprivate\nprivilege\nprivileged\nprize\npro\nprobability\nproblem\nprocedure\nprocess\nproclaim\nprocrastination\nproduce\nproducer\nproduct\nproduction\nproductive\nprofession\nprofessional\nprofessor\nprofile\nprofit\nprofound\nprogram\nprogrammer\nprogress\nprogressive\nproject\nprojection\nprolonged\npromise\npromotion\nproof\npropaganda\nproper\nproperty\nproportion\nproportional\nproposal\nproposition\nprosecute\nprosecution\nprospect\nprosperity\nprotect\nprotection\nprotein\nprotest\nproud\nprove\nprovide\nprovincial\nprovision\nprovoke\nprune\npsychologist\npsychology\npub\npublic\npublication\npublicity\npublish\npublisher\npudding\npuddle\npuffin\npull\npuma\npumba\npump\npumpkin\npunch\npunish\npunishment\npunk\npupil\npuppet\npure\npurity\npurpose\npurse\npursuit\npush\nput\npuzzle\npyramid\nqualification\nqualified\nqualify\nquality\nquantitative\nquantity\nquarter\nqueen\nquest\nquestion\nquestionnaire\nqueue\nquicksand\nquiet\nquill\nquilt\nquit\nquota\nquotation\nquote\nrabbit\nraccoon\nrace\nracecar\nracial\nracism\nrack\nradar\nradiation\nradical\nradio\nradish\nraft\nrage\nraid\nrail\nrailcar\nrailway\nrain\nrainbow\nraincoat\nraindrop\nrainforest\nraise\nraisin\nrake\nrally\nram\nramp\nrandom\nrange\nrank\nrapper\nrare\nraspberry\nrat\nrate\nratio\nrational\nravioli\nraw\nrazor\nrazorblade\nreach\nreaction\nreactor\nread\nreader\nready\nreal\nrealise\nrealism\nrealistic\nreality\nrear\nreason\nreasonable\nrebel\nrebellion\nreceipt\nreception\nreceptionist\nrecession\nreckless\nrecognise\nrecognition\nrecommend\nrecommendation\nrecord\nrecording\nrecover\nrecovery\nrecreation\nrecruit\nrectangle\nrecycle\nrecycling\nred\nred carpet\nreddit\nredeem\nreduction\nredundancy\nreeds\nrefer\nreferee\nreference\nreferral\nreflect\nreflection\nreform\nrefugee\nrefusal\nrefuse\nregard\nregion\nregional\nregister\nregistration\nregret\nregular\nregulation\nrehabilitation\nrehearsal\nreign\nreindeer\nreinforce\nreject\nrejection\nrelate\nrelated\nrelation\nrelationship\nrelative\nrelax\nrelaxation\nrelease\nrelevance\nrelevant\nreliable\nreliance\nrelief\nrelieve\nreligion\nreligious\nrelinquish\nreluctance\nrely\nremain\nremark\nremedy\nremember\nremind\nremote\nrent\nrepeat\nrepetition\nreplace\nreplacement\nreport\nreporter\nrepresent\nrepresentative\nreproduce\nreproduction\nreptile\nrepublic\nreputation\nrequest\nrequire\nrequirement\nrescue\nresearch\nresearcher\nresemble\nresent\nreserve\nreservoir\nresidence\nresident\nresidential\nresign\nresignation\nresist\nresolution\nresort\nresource\nrespect\nrespectable\nresponse\nresponsibility\nresponsible\nrest\nrestaurant\nrestless\nrestoration\nrestrain\nrestraint\nrestricted\nrestriction\nresult\nretail\nretailer\nretain\nretire\nretired\nretirement\nretreat\nreturn\nreveal\nrevenge\nreverse\nreview\nrevise\nrevival\nrevive\nrevolution\nrevolutionary\nrevolver\nreward\nrewind\nrhetoric\nrhinoceros\nrhythm\nrib\nribbon\nrice\nrich\nrick\nride\nrider\nridge\nrifle\nright\nright wing\nring\nringtone\nriot\nrise\nrisk\nritual\nriver\nroad\nroadblock\nroar\nrob\nrobber\nrobbery\nrobbie rotten\nrobin\nrobin hood\nrobot\nrock\nrocket\nrockstar\nrole\nroll\nromania\nromantic\nrome\nroof\nroom\nrooster\nroot\nrope\nrose\nrotation\nrotten\nrough\nround\nroute\nroutine\nrow\nroyal\nroyalty\nrub\nrubber\nrubbish\nruby\nrug\nrugby\nruin\nrule\nruler\nrumour\nrun\nrune\nrunner\nrural\nrush\nrussia\nsacred\nsacrifice\nsad\nsaddle\nsafari\nsafe\nsafety\nsail\nsailboat\nsailor\nsalad\nsale\nsaliva\nsalmon\nsalon\nsalt\nsaltwater\nsalvation\nsample\nsamsung\nsanctuary\nsand\nsand castle\nsandal\nsandbox\nsandstorm\nsandwich\nsanta\nsatellite\nsatisfaction\nsatisfactory\nsatisfied\nsaturn\nsauce\nsauna\nsausage\nsave\nsaxophone\nsay\nscale\nscan\nscandal\nscar\nscarecrow\nscarf\nscary\nscatter\nscenario\nscene\nscent\nschedule\nscheme\nscholar\nscholarship\nschool\nscience\nscientific\nscientist\nscissors\nscooby doo\nscoop\nscore\nscotland\nscramble\nscrap\nscrape\nscratch\nscream\nscreen\nscrew\nscribble\nscript\nscuba\nsculpture\nscythe\nsea\nsea lion\nseafood\nseagull\nseahorse\nseal\nsearch\nseashell\nseasick\nseason\nseasonal\nseat\nseat belt\nseaweed\nsecond\nsecondary\nsecret\nsecretary\nsecretion\nsection\nsector\nsecular\nsecure\nsecurity\nsee\nseed\nseek\nseem\nseesaw\nsegway\nseize\nselection\nself\nsell\nseller\nsemicircle\nseminar\nsend\nsenior\nsensation\nsense\nsensei\nsensitive\nsensitivity\nsentence\nsentiment\nseparate\nseparation\nsequence\nseries\nserious\nservant\nserve\nserver\nservice\nsession\nset\nsettle\nsettlement\nsew\nsewing machine\nshade\nshadow\nshaft\nshake\nshallow\nshame\nshampoo\nshape\nshare\nshareholder\nshark\nsharp\nshatter\nshave\nshaving cream\nshed\nsheep\nsheet\nshelf\nshell\nshelter\nsherlock holmes\nshield\nshift\nshine\nshipwreck\nshirt\nshiver\nshock\nshoe\nshoebox\nshoelace\nshoot\nshop\nshopping\nshopping cart\nshort\nshortage\nshorts\nshot\nshotgun\nshoulder\nshout\nshovel\nshow\nshower\nshrek\nshrew\nshrink\nshrub\nshrug\nshy\nsick\nsickness\nside\nsiege\nsigh\nsight\nsightsee\nsign\nsignature\nsilence\nsilk\nsilo\nsilver\nsilverware\nsimilar\nsimilarity\nsimplicity\nsin\nsing\nsingapore\nsinger\nsingle\nsink\nsip\nsister\nsit\nsite\nsituation\nsix pack\nsize\nskate\nskateboard\nskateboarder\nskates\nskeleton\nsketch\nski\nski jump\nskill\nskilled\nskin\nskinny\nskirt\nskittles\nskribbl.rs\nskrillex\nskull\nskunk\nsky\nskydiving\nskyline\nskype\nskyscraper\nslab\nslam\nslap\nslave\nsledge\nsledgehammer\nsleep\nsleeve\nslice\nslide\nslime\nslingshot\nslinky\nslip\nslippery\nslogan\nslope\nslot\nsloth\nslow\nslump\nsmall\nsmart\nsmash\nsmell\nsmile\nsmoke\nsmooth\nsnail\nsnake\nsnap\nsnatch\nsneeze\nsniff\nsniper\nsnow\nsnowball\nsnowball fight\nsnowboard\nsnowflake\nsnowman\nsnuggle\nsoak\nsoap\nsoar\nsoccer\nsocial\nsocial media\nsocialist\nsociety\nsociology\nsock\nsocket\nsocks\nsoda\nsodium\nsoft\nsoftware\nsoil\nsolar\nsolar system\nsoldier\nsolid\nsolidarity\nsolo\nsolution\nsolve\nsombrero\nson\nsonic\nsophisticated\nsoprano\nsoul\nsound\nsoup\nsour\nsource\nsouth\nsow\nspace\nspace suit\nspaceship\nspade\nspaghetti\nspain\nspare\nspark\nsparkles\nspartacus\nspatial\nspatula\nspeaker\nspear\nspecialist\nspecies\nspecified\nspecimen\nspectrum\nspeculate\nspeech\nspeed\nspell\nspelunker\nspend\nsphere\nsphinx\nspider\nspiderman\nspill\nspin\nspinach\nspine\nspiral\nspirit\nspit\nspite\nsplit\nspoil\nspoiler\nspokesman\nsponge\nspongebob\nspontaneous\nspool\nspoon\nspore\nsport\nsports\nspot\nspray\nspray paint\nspread\nspring\nsprinkler\nspy\nsquad\nsquare\nsqueeze\nsquid\nsquidward\nsquirrel\nstab\nstable\nstadium\nstaff\nstage\nstain\nstaircase\nstake\nstall\nstamp\nstand\nstandard\nstapler\nstar\nstar wars\nstarfish\nstarfruit\nstart\nstate\nstatement\nstation\nstatistical\nstatistics\nstatue\nstatue of liberty\nstay\nsteady\nsteak\nsteam\nsteel\nsteep\nstegosaurus\nstem\nstep\nstereo\nsteve jobs\nsteward\nstick\nsticky\nstill\nstimulation\nsting\nstingray\nstir\nstitch\nstock\nstomach\nstone\nstone age\nstoned\nstool\nstop\nstop sign\nstorage\nstore\nstork\nstorm\nstory\nstove\nstraight\nstraighten\nstrain\nstrange\nstrap\nstrategic\nstraw\nstrawberry\nstream\nstreamer\nstreet\nstrength\nstress\nstretch\nstrict\nstride\nstrike\nstring\nstrip\nstroke\nstroll\nstrong\nstructural\nstructure\nstruggle\nstubborn\nstudent\nstudio\nstudy\nstuff\nstumble\nstunning\nstupid\nstyle\nstylus\nsubject\nsubjective\nsubmarine\nsubmit\nsubsequent\nsubstance\nsubstitute\nsuburb\nsubway\nsuccess\nsuccessful\nsudden\nsudoku\nsuez canal\nsuffer\nsuffering\nsufficient\nsugar\nsuggest\nsuggestion\nsuicide\nsuit\nsuitcase\nsuite\nsulphur\nsum\nsummary\nsummer\nsummit\nsun\nsunburn\nsunflower\nsunglasses\nsunrise\nsunshade\nsunshine\nsuperintendent\nsuperior\nsuperman\nsupermarket\nsuperpower\nsupervisor\nsupplementary\nsupply\nsupport\nsuppose\nsuppress\nsurface\nsurfboard\nsurgeon\nsurgery\nsurprise\nsurprised\nsurprising\nsurround\nsurvey\nsurvival\nsurvivor\nsusan wojcicki\nsushi\nsuspect\nsuspicion\nsustain\nswag\nswallow\nswamp\nswan\nswarm\nswear\nsweat\nsweater\nsweep\nsweet\nswell\nswim\nswimming pool\nswimsuit\nswing\nswipe\nswitch\nsword\nswordfish\nsydney opera house\nsyllable\nsymbol\nsymmetry\nsympathetic\nsymphony\nsymptom\nsyndrome\nsystem\nsystematic\nt-rex\nt-shirt\ntable\ntable tennis\ntablecloth\ntablet\ntabletop\ntaco\ntactic\ntadpole\ntail\ntailor\ntails\ntake\ntake off\ntalent show\ntalented\ntalk\ntalkative\ntall\ntampon\ntangerine\ntank\ntap\ntape\ntarantula\ntarget\ntarzan\ntaser\ntaste\ntasty\ntattoo\ntax\ntaxi\ntaxi driver\ntaxpayer\ntea\nteacher\nteam\nteapot\ntear\ntease\nteaspoon\ntechnical\ntechnique\ntechnology\nteddy bear\nteenager\ntelephone\ntelescope\nteletubby\ntelevision\ntell\ntemperature\ntemple\ntemporary\ntempt\ntemptation\ntenant\ntendency\ntender\ntennis\ntennis racket\ntense\ntension\ntent\ntentacle\nterm\nterminal\nterminator\nterrace\nterrify\nterrorist\ntest\ntestify\ntetris\ntext\ntexture\nthank\nthanks\nthe beatles\ntheatre\ntheft\ntheme\ntheology\ntheorist\ntheory\ntherapist\ntherapy\nthermometer\nthesis\nthick\nthief\nthigh\nthin\nthink\nthinker\nthirst\nthirsty\nthor\nthought\nthoughtful\nthread\nthreat\nthreaten\nthreshold\nthroat\nthrone\nthrow\nthrust\nthug\nthumb\nthunder\nthunderstorm\ntick\nticket\ntickle\ntide\ntidy\ntie\ntiger\ntight\ntile\ntimber\ntime\ntime machine\ntimetable\ntimpani\ntin\ntiny\ntip\ntiramisu\ntire\ntired\ntissue\ntissue box\ntitanic\ntitle\ntoad\ntoast\ntoaster\ntoe\ntoenail\ntoilet\ntolerant\ntolerate\ntoll\ntomato\ntomb\ntombstone\nton\ntone\ntongue\ntool\ntoolbox\ntooth\ntooth fairy\ntoothbrush\ntoothpaste\ntoothpick\ntop\ntop hat\ntorch\ntornado\ntorpedo\ntortoise\ntorture\ntoss\ntotal\ntotem\ntoucan\ntouch\ntough\ntourism\ntourist\ntournament\ntow truck\ntowel\ntower\ntower bridge\ntower of pisa\ntown\ntoxic\ntoy\ntrace\ntrack\ntract\ntractor\ntrade\ntradition\ntraditional\ntraffic\ntraffic light\ntragedy\ntrailer\ntrain\ntrainer\ntraining\ntrait\ntransaction\ntransfer\ntransform\ntransition\ntranslate\ntransmission\ntransparent\ntransport\ntrap\ntrapdoor\ntrash can\ntraveler\ntray\ntread\ntreadmill\ntreasure\ntreasurer\ntreat\ntreatment\ntreaty\ntree\ntreehouse\ntremble\ntrench\ntrend\ntrial\ntriangle\ntribe\ntribute\ntrick\ntrick shot\ntricycle\ntrigger\ntrip\ntriplets\ntripod\ntrivial\ntrolley\ntrombone\ntroop\ntrophy\ntropical\ntrouble\ntrouser\ntruck\ntruck driver\ntrue\ntrumpet\ntrunk\ntrust\ntrustee\ntruth\ntry\ntuba\ntube\ntug\ntumble\ntumor\ntumour\ntuna\ntune\ntunnel\nturd\nturkey\nturn\nturnip\nturtle\ntuxedo\ntweety\ntwig\ntwin\ntwist\ntwitter\ntycoon\ntype\ntypical\ntyre\nudder\nufo\nugly\nukulele\nulcer\nultimate\numbrella\nunanimous\nunaware\nuncertainty\nuncle\nuncomfortable\nunderground\nunderline\nundermine\nunderstand\nunderstanding\nundertake\nunderweight\nundo\nuneasy\nunemployed\nunemployment\nunexpected\nunfair\nunfortunate\nunibrow\nunicorn\nunicycle\nuniform\nunion\nunique\nunit\nunity\nuniversal\nuniverse\nuniversity\nunlawful\nunlike\nunlikely\nunpleasant\nunrest\nupdate\nupgrade\nupset\nuranus\nurban\nurge\nurgency\nurine\nusain bolt\nusb\nuse\nuseful\nuseless\nuser\nusual\nutter\nvacant\nvacation\nvaccine\nvacuum\nvague\nvain\nvalid\nvalley\nvaluable\nvalue\nvampire\nvan\nvanilla\nvanish\nvariable\nvariant\nvariation\nvaried\nvariety\nvat\nvatican\nvault\nvault boy\nvector\nvegetable\nvegetarian\nvegetation\nvehicle\nveil\nvein\nvelociraptor\nvelvet\nvent\nventure\nvenus\nverbal\nverdict\nversion\nvertical\nvessel\nveteran\nveterinarian\nviable\nvicious\nvictim\nvictory\nvideo\nvideo game\nview\nvigorous\nvilla\nvillage\nvillager\nvillain\nvin diesel\nvine\nvinegar\nviola\nviolation\nviolence\nviolent\nviolin\nvirgin\nvirtual reality\nvirtue\nvirus\nvise\nvisible\nvision\nvisit\nvisitor\nvisual\nvitamin\nvlogger\nvocational\nvodka\nvoice\nvolcano\nvolleyball\nvolume\nvoluntary\nvolunteer\nvomit\nvoodoo\nvortex\nvote\nvoter\nvoucher\nvoyage\nvulnerable\nvulture\nvuvuzela\nw-lan\nwaffle\nwage\nwagon\nwaist\nwait\nwaiter\nwake\nwake up\nwalk\nwall\nwall-e\nwallpaper\nwalnut\nwalrus\nwander\nwant\nwar\nward\nwardrobe\nwarehouse\nwarm\nwarn\nwarning\nwarrant\nwarrior\nwart\nwash\nwasp\nwaste\nwatch\nwater\nwater cycle\nwater gun\nwaterfall\nwave\nwax\nway\nweak\nweakness\nwealth\nweapon\nwear\nweasel\nweather\nweave\nweb\nwebsite\nwedding\nweed\nweek\nweekend\nweekly\nweigh\nweight\nwelcome\nwelder\nwelfare\nwell\nwerewolf\nwest\nwestern\nwet\nwhale\nwhatsapp\nwheat\nwheel\nwheelbarrow\nwhip\nwhisk\nwhisky\nwhisper\nwhistle\nwhite\nwhole\nwiden\nwidow\nwidth\nwife\nwig\nwiggle\nwild\nwilderness\nwildlife\nwill\nwilliam shakespeare\nwilliam wallace\nwillow\nwillpower\nwin\nwind\nwindmill\nwindow\nwindshield\nwine\nwine glass\nwing\nwingnut\nwinner\nwinnie the pooh\nwinter\nwipe\nwire\nwireless\nwise\nwitch\nwithdraw\nwithdrawal\nwitness\nwizard\nwolf\nwolverine\nwoman\nwonder\nwonder woman\nwonderland\nwood\nwoodpecker\nwool\nword\nwording\nwork\nwork out\nworker\nworkplace\nworkshop\nworld\nworm\nworry\nworth\nwound\nwrap\nwrapping\nwreath\nwreck\nwrench\nwrestle\nwrestler\nwrestling\nwrinkle\nwrist\nwrite\nwriter\nwritten\nwrong\nx-ray\nxbox\nxerox\nxylophone\nyacht\nyard\nyardstick\nyawn\nyear\nyearbook\nyellow\nyeti\nyin and yang\nyo-yo\nyoda\nyogurt\nyolk\nyoshi\nyoung\nyouth\nyoutube\nyoutuber\nzebra\nzelda\nzeppelin\nzero\nzeus\nzigzag\nzipline\nzipper\nzombie\nzone\nzoo\nzoom\nzorro\nzuma"
  },
  {
    "path": "internal/game/words/fa",
    "content": "آئودی\nآب\nآب دهان\nآب شدن\nآب شور\nآب‌پاش\nآبجو\nآب‌خوری پرنده\nآبراهام لینکلن\nآبشار\nآب‌فشان\nآبمیوه\nآب‌نبات چوبی\nآبی\nآپارتمان\nآتش\nآتش کمپ\nآتش‌بازی\nآتش‌سوزی جنگل\nآتشفشان\nآتش‌نشان\nآتش‌نشان\nآتلانتیس\nآجر\nآجیل\nآچار\nآخر هفته\nآخرالزمان\nآخرین\nآخوندک\nآدامس\nآدامس\nآدرس\nآدم پررو\nآدم شرور\nآدم‌برفی\nآدمکش\nآدیداس\nآرام\nآرام\nآرام\nآرام شدن\nآرامش\nآرایش\nآرایشگاه\nآرایشگر\nآرد\nآرژانتین\nآرشیو\nآرمادیلو\nآرنج\nآروغ\nآروم\nآزاد\nآزاد کردن\nآزادی\nآزادی\nآزمایش\nآزمایشگاه\nآزمایشی\nآزمون\nآژانس\nآژیر آتش‌سوزی\nآس\nآسان\nآسانسور\nآسانسور\nآستانه\nآستریکس\nآستین\nآسمان‌خراش\nآسمون\nآسیا\nآسیاب\nآسیاب بادی\nآسیاب بادی کوچک\nآسیاب کردن\nآسیب\nآسیب زدن\nآسیب زدن\nآسیب زدن\nآسیب‌پذیر\nآشپزخونه\nآشغال\nآشکار کردن\nآشکارساز\nآشنا\nآشنا\nآفت\nآفتاب‌پرست\nآفتاب‌سوختگی\nآفتابگردان\nآفریقا\nآفرینش\nآقای بین\nآقای بین\nآقای می‌سیکس\nآقای می‌سیکس\nآکادمی\nآکاردئون\nآکواریوم\nآکورد\nآگاه\nآگاه\nآگاهی\nآلارم\nآلباتروس\nآلبوم\nآلپاکا\nآلپاکا\nآلمان\nآلودگی\nآلومینیوم\nآماده\nآماده‌سازی\nآمار\nآماری\nآمبولانس\nآمپول\nآمریکا\nآمستردام\nآموزش\nآموزشی\nآناکوندا\nآناناس\nآنتن\nآنتی‌ویروس\nآنجلینا جولی\nآنفلوآنزا\nآنوبیس\nآه کشیدن\nآهن\nآهن‌ربا\nآهنگ\nآهنگر\nآهنگری\nآهنگساز\nآهو\nآوردن\nآونگ\nآووکادو\nآویز یخی\nآویزون کردن\nآیپد\nآیرون من\nآیفون\nآینده\nآینه\nآیین\nائتلاف\nابتکار\nابدی\nابر\nابرو\nابرو تک\nابریشم\nابزار\nابهام\nابوالهول\nاپرا\nاپرای سیدنی\nاتاق\nاتاق خواب\nاتحادیه\nاتفاق افتادن\nاتکا\nاتکا کردن\nاتم\nاتواستاپ‌زن\nاتوبان\nاتوبوس\nاثبات\nاثبات کردن\nاثر\nاجاره کردن\nاجاره کردن\nاجازه\nاجازه دادن\nاجازه دادن\nاجاق\nاجتماعی\nاجتماعی\nاجتناب‌ناپذیر\nاجرا\nاجرا کردن\nاجرا کردن\nاجراکننده\nاجرایی\nاجماع\nاحترام\nاحترام\nاحتمال\nاحتمال\nاحتمالا\nاحراز هویت\nاحساس\nاحساس\nاحساس\nاحساس کردن\nاحساسی\nاحمق\nاحمق\nاحمقانه\nاحیاء\nاحیاء کردن\nاخاذی\nاختراع\nاختراع\nاختلاف\nاختلاف\nاختلال\nاختیار\nاختیاری\nاخراج\nاخراج کردن\nاخگر\nاخلاق\nاخلاقی\nاخلاقی\nاخم\nاخمو\nادامه\nادای احترام\nادب\nادبی\nادبیات\nادرار\nادراک\nادعا\nادعا\nارائه\nاراده\nاراده قوی\nارتباط\nارتباط\nارتدوکس\nارتش\nارتفاع\nارتقا دادن\nارتودنسی\nارث بردن\nارجاع\nارجاع دادن\nاردک\nارز\nارزان\nارزش\nارزش\nارزشمند\nارزیابی\nارسال کردن\nارکستر\nارکیده\nارگانیک\nاره‌برقی\nاروپا\nاز دست دادن\nازدحام\nازدواج\nاژدها\nاسب\nاسب آبی\nاسب دریایی\nاسب کوچک\nاسباب‌بازی\nاسپارتاکوس\nاسپاگتی\nاسپانیا\nاسپایدرمن\nاسپرسو\nاسپری رنگ\nاسپری کردن\nاسپری مو\nاسپور\nاسپویلر\nاستاد\nاستاد\nاستاندار\nاستاندارد\nاستانی\nاستثنا\nاستحقاق داشتن\nاستخدام کردن\nاستخدام کردن\nاستخر\nاستخر شنا\nاستخوان\nاسترئو\nاستراتژیک\nاستراحت\nاسترالیا\nاسترس\nاستریمر\nاستعفا\nاستعفا دادن\nاستفاده کردن\nاستفراغ\nاستگوسوروس\nاستودیو\nاستیک\nاستیو جابز\nاسرائیل\nاسطوره\nاسفناج\nاسفنج\nاسفنج‌باب\nاسقف\nاسکاتلند\nاسکایپ\nاسکریبل\nاسکریلکس\nاسکلت\nاسکله\nاسکله\nاسکن کردن\nاسکوبی دو\nاسکوییدوارد\nاسکی\nاسکیت\nاسکیت کردن\nاسکیت‌بورد\nاسکیت‌بوردسوار\nاسکیتلز\nاسکیمو\nاسلینکی\nاسم\nاسم\nاسنوبورد\nاسید\nاشاره\nاشتباه\nاشتراک گذاشتن\nاشتغال\nاشتها\nاشتیاق\nاشراف‌زاده\nاشعه ایکس\nاشغال کردن\nاشک\nاصرار کردن\nاصرار کردن\nاصطلاح\nاصل\nاصلاح\nاصلاح\nاصلاحیه\nاصلی\nاصلی\nاصلی\nاصیل\nاضافه\nاضافه\nاضافه کردن\nاضافه وزن\nاضافه‌کاری\nاضطراب\nاضطراری\nاطاعت کردن\nاطلاعات\nاطمینان\nاطمینان دادن\nاظهارنظر\nاعتبار\nاعتبار\nاعتبار مالی\nاعتراض\nاعتراض کردن\nاعتراف\nاعتراف کردن\nاعتصاب\nاعتماد\nاعتمادبه‌نفس\nاعتیاد\nاعدام\nاعطا کردن\nاعلام کردن\nاعلامیه\nاعلامیه\nاعلان\nاعوجاج\nاغراق کردن\nافتادن\nافتادن\nافتادن\nافتخار\nافتضاح\nافزایش\nافزونه\nافسانه\nافسانه عامیانه\nافسر\nافسردگی\nافسرده\nافق\nافقی\nافول\nاقامتگاه\nاقتصاد\nاقتصاد\nاقتصاددان\nاقتصادی\nاقدام\nاقلیت\nاقلیم\nاقیانوس\nاکتشاف\nاکثریت\nاکسپدیشن\nاکسکالیبور\nاکسیژن\nالاغ\nالاکلنگ\nالتماس کردن\nالتماس کردن\nالسا\nالکترون\nالکترونیک\nالکترونیکی\nالکل\nالگو\nالماس\nالمو\nالهام\nالهام دادن\nالهیات\nامانت‌دار\nامپراتوری\nامپراتوری\nامتحان\nامتناع\nامتناع کردن\nامتیاز\nامتیاز\nامتیاز\nامتیاز تجاری\nامتیاز دادن\nام‌تی‌وی\nامضا\nامکانات\nاملت\nامن\nامنیت\nامید\nامینم\nانبار\nانبار\nانبار\nانباشت\nانتخاب\nانتخاب\nانتخاب کردن\nانتخاب کردن\nانتخاب کردن\nانتخابات\nانتزاعی\nانتشار\nانتظار\nانتظار\nانتظار داشتن\nانتقاد\nانتقال\nانتقال\nانتقام\nانجمن\nانجمن\nانجیر\nانجیل\nانحراف\nانحصاری\nانداختن\nاندازه\nاندازه گرفتن\nاندام\nاندام\nاندروید\nاندوه\nانرژی\nانزوا\nانسان\nانسان\nانسانیت\nانضباط\nانطباق\nانعام\nانعطاف‌پذیر\nانعکاس\nانفجار\nانفجار\nانقباض\nانقلاب\nانقلابی\nانکار\nانکار کردن\nانگری بردز\nانگشت\nانگشت پا\nانگشت کوچک\nانگلستان\nانگور\nانگیزه\nانگیزه\nانیمه\nانیمیشن\nاهدا کردن\nاهداکننده\nاهمیت\nاوبلیکس\nاوج گرفتن\nاورانگوتان\nاورانوس\nاوریگامی\nاوریو\nاول\nاولاف\nاولویت\nاولین حضور\nاولیه\nاولیه\nایالت\nایتالیا\nایدئولوژی\nایدز\nایده\nایده\nایده‌آل\nایربادز\nایربگ\nایرلند\nایستادن\nایستگاه\nایستگاه آتش‌نشانی\nایستگاه اتوبوس\nایکس‌باکس\nایکیا\nایگو\nایلان ماسک\nایمان\nایمن\nایمنی\nایموجی\nاینترنت\nاینتل\nاینچ\nاینشتین\nایوان\nبا نفوذ\nبااستعداد\nبااعتماد\nباب‌اسلد\nبابون\nباتجربه\nباتری\nباتلاق\nباتلاق\nباحال\nباختن\nباد\nباد کردن\nبادام\nبادام‌زمینی\nبادبادک\nبادکنک\nبادمجان\nبادیگارد\nبار\nبار\nبار\nباراک اوباما\nباران\nبارانی\nباربر\nبارت سیمپسون\nباردار\nبارکد\nباریک\nباز\nباز کردن\nبازار\nبازاریابی\nبازبینی کردن\nبازپرس\nبازتوانی\nبازجویی\nبازخرید کردن\nبازخورد\nبازدارندگی\nبازداری\nبازدید کردن\nبازدیدکننده\nبازرس\nبازسازی\nبازمانده\nبازنده\nبازنشستگی\nبازنشسته\nبازنشسته\nبازنشسته شدن\nبازو\nبازو\nبازوکا\nبازی\nبازی با توپ و توپ‌بازی\nبازی کردن\nبازی ویدیویی\nبازیافت\nبازیافت کردن\nبازیکن\nبازیگر\nباستان‌شناس\nباستان‌شناسی\nباسن\nباسن\nباشکوه\nباشگاه\nباغ\nباغبان\nباغ‌وحش\nبافت\nبافت\nبافتن\nبافندگی\nباقلوا\nباقی ماندن\nباکره\nباگت\nباگز بانی\nبال\nبالا\nبالا بردن\nبالا رفتن\nبالا رفتن\nبالرین\nبالش\nبالغ\nبالقوه\nبالکن\nبالن\nباله\nبامبرمن\nبامبو\nبامبی\nبامزه\nبانجو\nبانجی جامپینگ\nباند\nباند\nباندان\nبانک\nبانک کوکی\nبانکدار\nباهوش\nباور\nباورنکردنی\nببخشید\nببر\nبتمن\nبتن\nبتهوون\nبچگانه\nبچه\nبچه‌گربه\nبحث\nبحث کردن\nبحث‌برانگیز\nبحران\nبحرانی\nبخار\nبخش\nبخش\nبخش\nبد\nبدبخت\nبدبختی\nبدجنس\nبدشانس\nبدن\nبدن انسان\nبدنام\nبدهکار بودن\nبدهی\nبرآمدگی\nبرآورد\nبرابر\nبرادر\nبرادرزاده\nبراق\nبراکت\nبراونی\nبربر\nبرتر\nبرج\nبرج ایفل\nبرج پیزا\nبرج جدی\nبرچسب\nبرچسب قیمت\nبرخلاف\nبرخلاف\nبردن\nبرده\nبررسی\nبررسی اجمالی\nبرزیل\nبرس\nبرش\nبرش زدن\nبرف\nبرق\nبرق\nبرق زدن\nبرق‌کار\nبرکت دادن\nبرکه\nبرگ\nبرگشتن\nبرگه\nبرنامه\nبرنامه درسی\nبرنامه زمانی\nبرنامه‌نویس\nبرنج\nبرند\nبرنده\nبرنز\nبره\nبرهنه\nبروکلی\nبریدن\nبز\nبزاق\nبزرگ\nبزرگ\nبزرگ کردن\nبزرگراه\nبزرگسال\nبزرگی\nبسامد\nبستن\nبستن\nبستنی\nبستنی یخی\nبستنی‌ماشین\nبسته\nبسته\nبسته\nبسته‌بندی\nبسکتبال\nبشقاب\nبشقاب\nبشکه\nبشکه آبجو\nبصری\nبطری\nبعد\nبعدازظهر\nبعدی\nبعید\nبغل کردن\nبغل کردن گرم\nبقا\nبلاغت\nبلعیدن\nبلند\nبلند\nبلند\nبلند شدن\nبلندگو\nبلوبری\nبلوط\nبلوط\nبلوک\nبلوند\nبلیت\nبمب\nبمب اتمی\nبمب‌افکن\nبنا\nبند\nبند انگشت\nبند کفش\nبندر\nبنر\nبنزین\nبنیاد\nبه تعویق انداختن\nبه دست آوردن\nبه فرزندی گرفتن\nبه نظر آمدن\nبهار\nبهانه\nبهبود\nبهبود دادن\nبهبودی\nبهبودی پیدا کردن\nبه‌دست آوردن\nبهره‌برداری\nبه‌روزرسانی\nبهشت\nبه‌یادماندنی\nبو\nبو\nبو کشیدن\nبوته\nبوته\nبوته آزمایش\nبودجه\nبورس تحصیلی\nبوریتو\nبوسیدن\nبوفه\nبوقلمون\nبولتن\nبولدوزر\nبولینگ\nبوم\nبومرنگ\nبومی\nبومی\nبیابان\nبیابان\nبی‌ام‌و\nبیان\nبیان کردن\nبیانیه\nبی‌پروا\nبیت‌باکس\nبیت‌کوین\nبیتلز\nبی‌توجهی کردن\nبیچاره\nبی‌حسی\nبی‌خانمان\nبی‌خبر\nبی‌خوابی\nبید مجنون\nبیدار\nبیدار شدن\nبیدار کردن\nبی‌ربط\nبی‌رحم\nبی‌رحمی\nبیرون\nبیسبال\nبیسکویت\nبی‌سیم\nبیضی\nبی‌فایده\nبی‌قرار\nبی‌قرار\nبیکار\nبیکاری\nبیکن\nبیگ بن\nبیگل\nبی‌گناه\nبیگودی\nبیل\nبیل گیتس\nبیل مکانیکی\nبیلچه\nبیلیارد\nبیمار\nبیمارستان\nبیماری\nبیماری\nبیماری\nبی‌مزه\nبیمه\nبیمه کردن\nبی‌میلی\nبین‌المللی\nبینایی\nبین‌بگ\nبینش\nبی‌نظمی\nبینگو\nبی‌نهایت\nبینی\nبیوه\nپا\nپا\nپاپ\nپاپ\nپاپ‌آی\nپاپایا\nپاپ‌کورن\nپاتریک\nپاداش\nپادشاه\nپادشاه\nپادشاهی\nپادشاهی\nپارادوکس\nپاراگراف\nپارامتر\nپارچه\nپارچه\nپارک\nپارکینگ\nپارلمان\nپاره‌وقت\nپارو\nپارو زدن\nپاریس\nپاسپورت\nپاستا\nپاستلی\nپاستیلی\nپاستیلی خرسی\nپاستیلی کرمی\nپاسخ\nپاشنه\nپافشاری\nپافشاری کردن\nپاک کردن\nپاکت\nپاکت\nپاک‌کن\nپاکی\nپالت\nپالتو\nپاندا\nپانک\nپاها\nپای\nپای سیب\nپایان\nپایان‌نامه\nپایتخت\nپایدار\nپایدار\nپایدار\nپایه\nپایین\nپایین\nپایین\nپایین‌تر کردن\nپپا پیگ\nپپرونی\nپپسی\nپتو\nپختن\nپختن\nپخش\nپدال\nپدر\nپدربزرگ\nپدرخوانده\nپدیده\nپذیرایی\nپذیرایی کردن\nپذیرش\nپذیرش\nپر\nپر\nپر انرژی\nپر سر و صدا\nپر قلم\nپر کردن\nپراکنی کردن\nپرت کردن\nپرتاب\nپرتاب کردن\nپرتاب کردن\nپرتره\nپرتزل\nپرتغال\nپرتقال\nپرتگاه\nپرتو\nپرچم\nپرچین\nپرخاشگر\nپرداخت\nپرداخت کردن\nپرده\nپررنگ\nپرستار\nپرسشنامه\nپرسه زدن\nپرسیدن\nپرش اسکی\nپرشور\nپرمو\nپرنده\nپرواز\nپرواز کردن\nپروانه\nپروانه شب‌پره\nپروتئین\nپروجکشن\nپرورش دادن\nپرورش دادن\nپروژه\nپروفایل\nپری\nپری دریایی\nپریدن\nپریدن\nپریز\nپریسکوپ\nپرینتر\nپرینگلز\nپژواک\nپست\nپست\nپستان گاو\nپستچی\nپسته\nپسر\nپسر\nپسرعمو\nپس‌زمینه\nپشت\nپشتک\nپشته\nپشم\nپشمک\nپشه\nپشیمانی\nپک‌من\nپل\nپل تاور\nپلاتیپوس\nپلاستیک\nپلنگ\nپلنگ سیاه\nپلنگ سیاه\nپله\nپلوتو\nپلی‌استیشن\nپلیس\nپلیکان\nپمپ\nپناهگاه\nپناهگاه\nپناهنده\nپنبه\nپنجره\nپنجه\nپنکه سقفی\nپنکیک\nپنگوئن\nپنل\nپنی\nپنیر\nپودر\nپودل\nپودینگ\nپورکی پیگ\nپوزخند\nپوزیدون\nپوست\nپوست درخت\nپوستر\nپوسته\nپوسته\nپوسیدگی\nپوشاندن\nپوشش\nپوشک\nپوشه\nپوشیدن\nپوکمون\nپول\nپول نقد\nپولو\nپولیش کردن\nپومبا\nپوند\nپویا\nپیاده‌رو\nپیاز\nپیام\nپیامد\nپیانو\nپی‌پال\nپیتزا\nپیچ\nپیچ\nپیچ بال\nپیچاندن\nپیچک\nپیچک\nپیچیدگی\nپیچیدن\nپیچیده\nپیچیده\nپیدا کردن\nپیدا کردن\nپیر\nپیراهن\nپیروزی\nپیژامه\nپیشانی\nپیش‌بینی\nپیش‌پاافتاده\nپیشخدمت\nپیشخوان\nپیش‌ذهن\nپیشرفت\nپیشرفت\nپیشرو\nپیش‌فرض\nپیشگام\nپیشنهاد\nپیشنهاد\nپیشنهاد\nپیشنهاد دادن\nپیشنهاد کردن\nپیش‌نویس\nپیشینی\nپیکاچو\nپیکاسو\nپیک‌نیک\nپیله\nپیمانه\nپین‌بال\nپینت‌بال\nپینک پنتر\nپینوکیو\nپیوست\nپیوسته\nپیوند\nتأثیر گذاشتن\nتأسیس کردن\nتأسیس‌شده\nتأیید\nتأیید کردن\nتئاتر\nتا کردن\nتاب خوردن\nتابستان\nتابلو ایست\nتابه\nتابوت\nتاثیر\nتاثیر گذاشتن\nتاثیرگذار\nتاج\nتاج گل\nتاجر\nتاجر\nتاخیر\nتار\nتارزان\nتاریخ\nتاریخ‌دان\nتاریخی\nتاریک\nتازه\nتازه‌کار\nتازه‌کار\nتازه‌وارد\nتاس\nتاکتیک\nتاکسی\nتاکو\nتاکید\nتالار\nتامپون\nتامین\nتانک\nتایتانیک\nتب\nتبخیر شدن\nتبدیل کردن\nتبر\nتبریک گفتن\nتبعید\nتبعیض\nتبلت\nتبلیغ\nتبلیغات\nتبلیغات\nتبلیغات\nتبلیغاتی\nتپانچه\nتپانچه\nتپه\nتتریس\nتجارت\nتجارت\nتجربه\nتجربی\nتجمع\nتجهیزات\nتحت تاثیر قرار دادن\nتحریک\nتحریک کردن\nتحسین\nتحسین کردن\nتحقیر\nتحقیق\nتحقیق\nتحلیل\nتحلیل‌گر\nتحمل کردن\nتحمل کردن\nتحمل‌کننده\nتحویل\nتحویل دادن\nتخت\nتخت پادشاهی\nتخت دوطبقه\nتخته\nتخته\nتخته سنگ\nتخته موج‌سواری\nتخریب کردن\nتخصص\nتخصیص\nتخفیف\nتخلیه\nتخم‌مرغ\nتخم‌مرغ طلایی\nتخیل\nتدارکات\nتدریجی\nتراژدی\nتراس\nتراش مداد\nتراشیدن\nترافیک\nتراکتور\nتراکنش\nتراموا\nتربچه\nترتیب دادن\nترجمه کردن\nترجیح\nترجیح دادن\nترحم\nترخیص\nتردمیل\nتردید کردن\nترس\nترساندن\nترساندن\nترساندن\nترسناک\nترسناک\nترسیده\nترش\nترشح\nترفیع\nترقه\nترک\nترک\nترک کردن\nترکیب\nترکیب\nترکیب کردن\nترکیدن\nترمز\nترمیناتور\nترمینال\nتروریست\nترومبون\nترومپت\nتریلر\nتزئین\nتزئینی\nتزریق کردن\nتست\nتسکین\nتسکین دادن\nتشبیه\nتشخیص\nتشدید کردن\nتشعشع\nتشک\nتشکر کردن\nتشکیل\nتشنگی\nتشنه\nتشویق\nتشویق کردن\nتشویق‌کننده\nتصاحب کردن\nتصادف\nتصادف\nتصادف\nتصادفی\nتصمیم\nتصمیم گرفتن\nتصور\nتصور کردن\nتصور کردن\nتصویر\nتصویر\nتصویرسازی\nتضعیف کردن\nتظاهرات\nتظاهرکننده\nتعادل\nتعادل\nتعامل\nتعاملی\nتعاونی\nتعبیر کردن\nتعجب\nتعجب\nتعجب‌آور\nتعریف\nتعریف کردن\nتعصب\nتعطیلات\nتعطیلات\nتعقیب\nتعقیب\nتعقیب قضایی\nتعلق داشتن\nتعمیر کردن\nتعهد\nتعهد\nتعویق انداختن\nتغییر\nتغییر\nتغییر شیفت\nتغییر قیافه\nتف کردن\nتفاوت\nتفاوت داشتن\nتفریح\nتفریح\nتفریحگاه\nتفنگ\nتفنگ\nتفنگ آب‌پاش\nتفنگ قدیمی\nتقارن\nتقاضا\nتقاطع\nتقسیم\nتقسیم کردن\nتقصیر\nتقویت کردن\nتقویت کردن\nتقویم\nتکامل\nتکان دادن\nتکان دادن\nتک‌تیرانداز\nتک‌چرخه\nتکرار\nتکرار کردن\nتکلیف\nتکنولوژی\nتکنیک\nتکه\nتکه\nتکه\nتکه کوچک\nتکه‌پاره\nتکی\nتکی\nتلاش\nتلاش کردن\nتلتبی\nتلخ\nتلسکوپ\nتلفات\nتلفن\nتله\nتله خرس\nتله موش\nتلویزیون\nتم\nتماس\nتماس گرفتن\nتماشاگر\nتمام کردن\nتمام‌شده\nتمام‌وقت\nتمبر\nتمدن\nتمرکز\nتمرکز کردن\nتمرین\nتمرین\nتمرین\nتمساح\nتمساح\nتمشک\nتمشک\nتمیز\nتمیز کردن\nتن\nتن ماهی\nتناسب اندام\nتناقض\nتنبل\nتنبل\nتنبیه\nتنبیه کردن\nتند\nتنش\nتنظیم کردن\nتنگ\nتنگ ماهی\nتنه\nتنه درخت\nتنها\nتنها در خانه\nتنوع\nتنیس\nتنیس روی میز\nتهاجم\nتهدید\nتهدید کردن\nتهویه\nتوافق\nتوالت\nتوالی\nتوان مالی داشتن\nتوانایی\nتوانستن\nتوانمند\nتوانمند\nتوپ\nتوپ برفی\nتوپ جنگی\nتوپا\nتوت\nتوت‌فرنگی\nتوتم\nتوجه\nتوجه کردن\nتوجیه\nتوجیه کردن\nتوده\nتوده\nتور\nتور\nتورپدو\nتورم\nتورنمنت\nتوزیع کردن\nتوزیع‌کننده\nتوستر\nتوسعه\nتوسعه دادن\nتوصیف کردن\nتوصیه\nتوصیه کردن\nتوضیح\nتوضیح دادن\nتوضیح دادن با تصویر\nتوطئه\nتوقف کردن\nتوقف کردن\nتوکان\nتولد\nتولید\nتولید کردن\nتولید کردن\nتولید کردن\nتولید مثل\nتولید مثل کردن\nتولیدکننده\nتولیدکننده\nتولیدمثل\nتومور\nتومور\nتونل\nتوهم\nتوهین‌آمیز\nتویتی\nتوییتر\nتی دستی\nتیتر\nتیر\nتی‌رекс\nتیرامیسو\nتیراندازی کردن\nتیز\nتیزر\nتی‌شرت\nتیغ\nتیغ اصلاح\nتیغه\nتیک\nتیم\nتیمپانی\nثابت\nثابت\nثانیه\nثبت کردن\nثبت‌نام\nثروت\nثروت\nثروتمند\nثور\nجاده\nجادو\nجادوگر\nجادوگر\nجاذبه\nجارو\nجارو کردن\nجاروبرقی\nجاری\nجاسوس\nجالب\nجام\nجامد\nجامدادی\nجامع\nجامعه\nجامعه\nجامعه‌شناسی\nجاه‌طلب\nجاه‌طلبی\nجای زخم\nجایزه\nجایزه\nجایگزین\nجایگزین\nجایگزین کردن\nجبران\nجبران خسارت\nجبران کردن\nجدا کردن\nجدایی\nجدول زمانی\nجدی\nجدید\nجدیدترین\nجذاب\nجذابیت\nجذابیت\nجذب\nجذب کردن\nجذب کردن\nجرئت\nجراح\nجراحت\nجرعه جرعه خوردن\nجرقه\nجرم\nجرم\nجرم\nجرم گوش\nجریان\nجریان اصلی\nجریان برق متناوب\nجریمه\nجز\nجزئیات\nجزر و مد\nجزیره\nجستجو\nجستجو کردن\nجستجو کردن\nجسد\nجسمانی\nجشن\nجشن گرفتن\nجشنواره\nجعبه\nجعبه\nجعبه ابزار\nجعبه خاک گربه\nجعبه دستمال\nجعبه شنی\nجعبه کبریت\nجعبه کفش\nجغد\nجغرافیا\nجفت\nجک‌همری\nجکی چان\nجگر\nجلبک دریایی\nجلسه\nجلسه\nجلو\nجلو\nجلو بردن سریع\nجلوگیری کردن\nجمجمه\nجمع\nجمع‌آوری\nجمعه سیاه\nجمعیت\nجمعیت\nجمله\nجمهوری\nجن کوتوله ایرلندی\nجن گا\nجنایتکار\nجنبه\nجنتلمن\nجنسیت\nجنگ\nجنگ بالشی\nجنگ توپ برفی\nجنگ ستارگان\nجنگجو\nجنگل\nجنگل\nجنگل بارانی\nجنگلداری\nجنوب\nجنین\nجهان\nجهان\nجهانی\nجهت\nجهت\nجهت‌گیری\nجهش\nجهنم\nجهیدن\nجو\nجواب\nجوان\nجوانی\nجوجه‌تیغی\nجوجه‌تیغی\nجوراب\nجوراب‌ها\nجوز هندی\nجوش\nجوش\nجوشکار\nجوشیدن\nجونیور\nجویدن\nجیب\nجیپ\nجیرجیرک\nجی‌زی\nجیغ زدن\nجیمز باند\nجین آبی\nجیوه\nچابک\nچاپ کردن\nچادر\nچارلی چاپلین\nچاشنی\nچاق\nچاق\nچاقو\nچاک نوریس\nچالش\nچانه\nچاه\nچای\nچپ\nچتر\nچتر نجات\nچتربازی\nچراغ\nچراغ راهنمایی\nچراغاه\nچراغ‌قوه\nچرت زدن\nچرخ\nچرخ خیاطی\nچرخاندن بطری\nچرخ‌دستی\nچرخ‌دنده\nچرخش\nچرخه\nچرخه آب\nچرخیدن\nچرخیدن\nچرم\nچرند\nچریکی\nچسب\nچسب زخم\nچسب ماتیکی\nچسب نواری\nچسبناک\nچشم\nچشم لندن\nچشم‌انداز\nچشم‌انداز\nچشم‌بند\nچغندر\nچک\nچک\nچکش\nچکش بزرگ\nچکمه\nچکمه‌ها\nچکه\nچگالی\nچمباتمه\nچمدان\nچمدون\nچمن\nچمن\nچمنزار\nچمن‌زن\nچندرسانه‌ای\nچندگانه\nچنگ\nچنگال\nچنگال\nچنگک\nچنگک\nچهارپایه\nچهارراه\nچوب\nچوب\nچوب\nچوب شب‌تاب\nچوب غذا\nچوباکا\nچوب‌بر\nچوب‌پران\nچوب‌پنبه\nچوب‌پنبه‌بازکن\nچوب‌لباسی\nچوب‌لباسی\nچیپس\nچیدمان\nچیدمان\nچیزبرگر\nچیزکیک\nچیزها\nچین\nچین و چروک\nچینچیلا\nچیواوا\nحاد\nحادثه\nحاشیه\nحاضر\nحافظه\nحال‌به‌هم‌زن\nحال‌به‌هم‌زن\nحالت\nحامل\nحامی\nحباب\nحجم\nحد\nحداقل\nحداکثر\nحدس زدن\nحذف\nحذف کردن\nحذف کردن\nحذف کردن\nحرف زدن\nحرف‌زن\nحرفه\nحرفه‌ای\nحرفه‌ای\nحرفه‌ای\nحرکت\nحرکت\nحرکت کردن\nحرکت کردن\nحریف\nحریم خصوصی\nحس\nحس\nحساب\nحسابدار\nحساس\nحساسیت\nحساسیت\nحسود\nحشره\nحصار\nحضانت\nحضور\nحفاظت\nحفاظت\nحفاظت\nحفاظت کردن\nحق\nحق نشر\nحق‌السهم\nحقه\nحقیقت\nحکاکی\nحکم\nحکم\nحکومت\nحکیم\nحل شدن\nحل کردن\nحل و فصل کردن\nحلزون\nحلقه\nحلقه\nحلقه بینی\nحمام\nحمایت کردن\nحمایت کردن\nحمل کردن\nحمل و نقل\nحمله\nحمله\nحوزه انتخابیه\nحوزه قضایی\nحوله\nحومه\nحومه\nحیات وحش\nحیاط\nحیاط\nحیوان\nحیوان خانگی\nخار دادن\nخاراندن\nخارجی\nخارجی\nخارجی\nخاص\nخاک\nخاک رس\nخاکستر\nخاکستری\nخال\nخالص\nخالکوبی\nخاله\nخالی\nخالی\nخالی\nخام\nخام\nخامه\nخانگی\nخانم\nخانم خونه‌دار\nخانه عروسکی\nخانواده\nخاویار\nخبر\nخبرنگار\nخبرنگار\nخجالت\nخجالت‌زده\nخجالتی\nخدا\nخدمت\nخدمتکار\nخدمتکار\nخدمه\nخراب کردن\nخراشیدن\nخربزه\nخرت\nخرج کردن\nخرچنگ\nخرد کردن\nخردسال\nخردل\nخرده‌فروش\nخرده‌فروشی\nخرس\nخرس قطبی\nخرگوش\nخرگوش\nخرگوش عید پاک\nخروج\nخروجی\nخروس\nخرید\nخریدن\nخز\nخزانه‌دار\nخزنده\nخزه\nخسته\nخشخاش\nخشک\nخشکسالی\nخشم\nخشم\nخشن\nخشن\nخشن\nخشونت\nخصوصی\nخط\nخط استوا\nخط افق شهر\nخط هوایی\nخطا\nخط‌خطی کردن\nخطر\nخطر\nخطرناک\nخط‌کش\nخط‌کش یارد\nخطی\nخفاش\nخفه شدن\nخلاصه\nخلاصه\nخلاصه کردن\nخلال دندان\nخلبان\nخلق کردن\nخلیج\nخم شدن\nخمیازه\nخمیر\nخمیر دندان\nخنثی\nخنجر\nخنجر زدن\nخندق\nخنده‌دار\nخندیدن\nخواب\nخواب زمستونی\nخوابیدن\nخواستن\nخواندن\nخواننده\nخواننده\nخواهر\nخوب\nخوب\nخود\nخودجوش\nخودکار\nخودکار\nخودکشی\nخودگردان\nخوردن\nخورشید\nخورشیدگرفتگی\nخورشیدی\nخوره\nخوش‌آمدگویی\nخوشبو\nخوش‌بین\nخوش‌بینی\nخوشحال\nخوشحال\nخوش‌شانس\nخوشگل\nخوشمزه\nخوشه\nخوک\nخوک پرنده\nخوکچه هندی\nخوک‌دانی\nخون\nخون‌آشام\nخون‌دماغ\nخوندن\nخونریزی\nخونریزی\nخونه\nخونه\nخونی\nخویشاوندی\nخیابان\nخیار\nخیارشور\nخیاط\nخیانت کردن\nخیره شدن\nخیره شدن\nخیریه\nخیس\nخیس کردن\nخیلی\nخیلی بامزه\nدائمی\nداخل\nداخلی\nداخلی\nداخلی\nدادستانی\nدادگاه\nدادن\nدارایی\nدارت\nدارکوب\nدارو\nداروساز\nداروین\nداروین واترسون\nداس\nداستان\nداستان\nداستانی\nداشبورد\nداشتن\nداغ\nدافی داک\nدالماسی\nداماد\nدامبو\nدامپزشک\nدامن\nدامن\nدانستن\nدانش\nدانش‌آموز\nدانشجو\nدانشجو\nدانشگاه\nدانشگاه\nدانشگاهی\nدانشمند\nدانلود\nدانه\nدانه\nدانه برف\nدانه سیب\nداور\nداوطلب\nداوطلبانه\nدایره\nدایناسور\nدبیر\nدخالت\nدختر\nدختر\nدخترعمو\nددپول\nددلاین\nدر\nدر بر گرفتن\nدر تله\nدر حال بارگذاری\nدر حال حرکت\nدر دسترس\nدر دسترس\nدر زدن\nدر ظرف\nدر معرض بودن\nدر معرض گذاشتن\nدر نظر گرفتن\nدر نظر گرفتن\nدرآمد\nدراز کشیدن\nدراز کشیدن\nدراکولا\nدرام\nدراماتیک\nدربازکن\nدرپ\nدرخت\nدرخت توس\nدرخت‌خانه\nدرخشش\nدرخشیدن\nدرخشیدن\nدرخواست\nدرخواست\nدرد\nدردناک\nدرس\nدرست\nدرشکه\nدرصد\nدرک\nدرک کردن\nدرگیری\nدرگیری\nدرمان\nدرمان\nدرمان\nدرمانگر\nدره\nدره\nدرهم ریختن\nدرهم شکستن\nدرو\nدروازه\nدروازه\nدروازه‌بان\nدریا\nدریاچه\nدریازده\nدریایی\nدریچه فاضلاب\nدریل\nدزد\nدزد\nدزد\nدزد دریایی\nدزدی\nدزدی\nدزدی کردن\nدژ\nدست\nدست دادن\nدست زدن\nدست زدن\nدست کشیدن\nدستاورد\nدست‌اول\nدستبند\nدسترسی\nدستشویی\nدستکش\nدستگاه\nدستگاه پخش\nدستگیره\nدستگیره در\nدستگیری\nدستمال\nدستمال سفره\nدستمال کاغذی\nدستمزد\nدست‌نوشته\nدسته جارو\nدسته‌بندی\nدسته‌بندی\nدست‌ودل‌باز\nدستور\nدستور\nدستور زبان\nدستور کار\nدستورالعمل\nدستورالعمل\nدستی\nدسر\nدشمن\nدشمن‌وار\nدشمنی\nدعا\nدعا کردن\nدعوا\nدعوا با مشت\nدعوای حقوقی\nدعوت کردن\nدعوت‌نامه\nدفاع\nدفاع کردن\nدفتر\nدفترچه\nدفن\nدفن کردن\nدقت\nدقیق\nدقیق\nدقیق\nدقیقه\nدکتر\nدکستر\nدکمه\nدگرگون کردن\nدلار\nدلال\nدل‌بخواهی\nدلپذیر\nدلتنگی کردن\nدلسرد کردن\nدل‌شکستگی\nدلفین\nدلقک\nدلقک دربار\nدلگرم‌کننده\nدلیل\nدم\nدم اسبی\nدما\nدماسنج\nدم‌ها\nدموکراتیک\nدموکراسی\nدمیدن\nدنبال کردن\nدنباله‌دار\nدندان\nدندان مصنوعی\nدندانپزشک\nدنده\nدندون‌پری\nدهان\nدهانی\nدهقان\nدهکده\nدهه\nدو برابر\nدوئل\nدوجین\nدوچرخه\nدوچرخه\nدوچرخه بی‌ام‌ایکس\nدوختن\nدوختن\nدود\nدودکش\nدور\nدور\nدور\nدور ریختن\nدورا\nدوراهی\nدوربین\nدوربین دوچشمی\nدوره\nدوره\nدوره\nدوری کردن\nدوریتوس\nدوز\nدوزیست کوچک\nدوست\nدوست داشتن\nدوست نداشتن\nدوستانه\nدوستی\nدوش\nدوشاخه\nدوشنبه\nدوقلو\nدوک\nدولت\nدومینو\nدونالد ترامپ\nدونالد داک\nدوندہ\nدویدن\nدی‌ان‌ای\nدیپلمات\nدیپلماتیک\nدیجیتال\nدیدن\nدیدن\nدیر\nدیس ترک\nدیسک\nدیسک فلاپی\nدیسکو\nدیسکورد\nدیکته کردن\nدیگ\nدیگ طلا\nدیگر\nدیلم\nدین\nدینامیت\nدیو\nدیوا\nدیوار\nدیوار چین\nدیوان‌سالارانه\nدیوان‌سالاری\nذات\nذات‌الریه\nذخیره کردن\nذخیره کردن\nذرت\nذره\nذره‌بین\nذکر کردن\nذهن\nذهنی\nذهنی\nذی‌نفع\nرأی دادن\nرأی‌دهندگان\nرأی‌دهنده\nرأی‌گیری\nرئالیسم\nرئیس\nرئیس‌جمهور\nرابط\nرابطه\nرابطه\nرابی روتن\nرابین‌هود\nراحت\nراحت\nراحتی\nراحتی\nرادار\nرادیکال\nرادیو\nراز\nراست\nراست\nراست کردن\nراست‌گرا\nراست‌گو\nراسوی بدبو\nراسوی کوچک\nراضی\nراک‌استار\nراکت تنیس\nراکتور\nراکن\nراگبی\nران\nرانش\nرانندگی\nراننده\nراننده\nراننده اتوبوس\nراننده تاکسی\nراننده تاکسی\nراننده کامیون\nراه\nراه رفتن\nراه‌آهن\nراهب\nراهبه\nراهپیمایی\nراهپیمایی\nراه‌حل\nراهرو\nراهرو\nراهنما\nراویولی\nربات\nربط داشتن\nربع\nرپر\nرتبه\nرحم\nرد شدن\nرد کردن\nردیابی\nردیت\nردیف\nرژ لب\nرژیم\nرستگاری\nرستوران\nرسمی\nرسمی\nرسوایی\nرسید\nرسیدن\nرشته\nرشد\nرشد کردن\nرصدخانه\nرضایت\nرضایت‌بخش\nرعد\nرفاه\nرفاه\nرفتار\nرفتار\nرفتار کردن\nرفتن\nرفتن\nرقابت\nرقابت کردن\nرقابتی\nرقص\nرقیق کردن\nرک\nرکود\nرکورد\nرکورد بالا\nرگ\nرم\nرمان\nرمانتیک\nرمپ\nرمز عبور\nرنج\nرنج بردن\nرنجاندن\nرنجیدن\nرنگ\nرنگ کردن\nرنگارنگ\nرنگین‌کمان\nرهبر\nرهبر ارکستر\nرهبری\nرهبری کردن\nروانشناس\nروانشناسی\nروبان\nروباه\nروبند\nروبه‌رو شدن\nروتین\nروح\nروح\nروح\nروحیه\nرودخانه\nروده\nروده بزرگ\nروز\nروزانه\nروزنامه\nروستایی\nروستایی\nروسیه\nروش\nروش‌شناسی\nروشویی\nروغن\nروکش کیک\nرومانی\nرومیزی\nرون\nروند\nروند\nرونق\nروی میز\nرویا\nرویارویی\nرویکرد\nریاست‌جمهوری\nریاست‌جمهوری\nریاضی\nریاضیات\nریتم\nریختن\nریختن\nریختن\nریسک\nریش\nریش بزی\nریشه\nریشه\nریک\nریل\nریه\nزئوس\nزالو\nزامبی\nزانو\nزانو زدن\nزاویه\nزایلافون\nزباله\nزبان\nزبان\nزپلین\nزحل\nزخم\nزخم معده\nزدن\nزدن\nزرافه\nزرد\nزردآلو\nزرده\nزره\nزره سینه\nزشت\nزغال\nزگیل\nزلدا\nزلزله\nزمان\nزمرد\nزمزمه کردن\nزمستان\nزمین\nزمین\nزمین\nزمین بازی\nزمین بازی\nزمین‌شناسی\nزن\nزنانه\nزنبور\nزنبور\nزنجره\nزنجیر\nزنجیر طلا\nزندان\nزندان\nزندانی\nزندگی\nزندگی پس از مرگ\nزندگی‌نامه\nزنده\nزنده بودن\nزنگ\nزنگ\nزنگ موبایل\nزنگوله گاو\nزهره\nزوج\nزوج\nزود\nزور\nزورو\nزوم\nزوما\nزیبایی‌شناسانه\nزیپ\nزیپ‌لاین\nزیر بغل\nزیرخط کشیدن\nزیردریایی\nزیرزمین\nزیرزمینی\nزیرساخت\nزیرلب گفتن\nزیرلیوانی\nزیروکس\nزیست‌شناسی\nزیست‌محیطی\nزیگزاگ\nزین\nژاپن\nژاکت\nژامبون\nژله\nژله\nژن\nژنتیکی\nژنراتور\nسابقه\nساحل\nساحل\nساختار\nساختمان\nساختن\nساختن\nسادگی\nساده\nساده\nساز\nسازدهنی\nسازگار\nسازگار\nسازمان\nسازماندهی کردن\nسازنده\nسازه‌ای\nساس\nساعت\nساعت\nساعت\nساعت شنی\nسافاری\nساق پا\nساقه\nساقه لوبیا\nساکسیفون\nساکن\nساکن\nسال\nسالاد\nسالانه\nسال‌اولی\nسالگرد\nسالم\nسالمند\nسالمند\nسالمون\nسالن استراحت\nسالنامه\nسامسونگ\nسانتا\nساندویچ\nسانسور\nسایبان\nسایبورگ\nسایه\nسایه\nسایه چشم\nسبد\nسبد خرید\nسبز\nسبزیجات\nسبک\nسبک زندگی\nسبیل\nسپر\nسپر\nسپرده\nست درام\nست کردن\nستاره\nستاره دریایی\nستاره میوه‌ای\nستایش کردن\nستون\nستون\nستون فقرات\nستون فقرات\nسخت\nسخت\nسخت\nسخت‌افزار\nسخت‌گیر\nسختی\nسختی\nسخنرانی\nسخنرانی\nسخنگو\nسدیم\nسر\nسر تکان دادن\nسر خوردن\nسر خوردن\nسرآشپز\nسرایدار\nسرباز\nسربروس\nسرپرست\nسرپناه\nسرپوشیده\nسرتاپا گرفتار\nسرتخت\nسرخ شدن\nسرخس\nسرد\nسرداب\nسردرد\nسردرگمی\nسرزمین عجایب\nسرزنده\nسرزنش\nسرشماری\nسرطان\nسرعت\nسرعت\nسرفه\nسرقت\nسرقت مسلحانه\nسرکه\nسرکوب کردن\nسرگرم کردن\nسرگرم کردن\nسرگرمی\nسرگیجه\nسرمازدگی\nسرمایه‌داری\nسرمایه‌گذاری\nسرنخ\nسرنیزه\nسرو کردن\nسرور\nسروصدا\nسری\nسریع\nسس\nسس تند\nسس سالاد\nسطح\nسطح\nسطل\nسطل\nسطل آشغال\nسفارت\nسفالگری\nسفر\nسفر\nسفر دریایی\nسفید\nسقط جنین\nسقط جنین\nسقف\nسقف\nسکته\nسکسکه\nسکه\nسکو\nسکوت\nسکولار\nسکونتگاه\nسگ\nسگ آبی\nسگ‌وی\nسلاح\nسلام\nسلام کردن\nسلامت\nسلبریتی\nسلسله‌مراتب\nسلطنت\nسلطنتی\nسلطه\nسلول\nسم\nسم اسب\nسمفونی\nسمور آبی\nسمی\nسمی\nسمینار\nسن\nسناریو\nسنت\nسنتی\nسنج\nسنجاب\nسنجاق\nسنجاقک\nسند\nسندان\nسندرم\nسنسی\nسنگ\nسنگ\nسنگ قبر\nسنگ قیمتی\nسنگاپور\nسنگین\nسهام\nسهام‌دار\nسه‌پایه\nسه‌چرخه\nسه‌قلو\nسهل‌انگاری\nسهم\nسهمیه\nسوءاستفاده\nسواد\nسوار\nسوار شدن\nسوال\nسوایپ کردن\nسوپ\nسوپرانو\nسوپرمارکت\nسوپرمن\nسوت\nسوخت\nسوختن\nسود\nسود تقسیمی\nسودوکو\nسوراخ\nسوراخ کردن\nسوراخ‌های بینی\nسورتمه\nسوزان وجیکی\nسوزن\nسوسک\nسوسک\nسوسیالیست\nسوسیس\nسوشی\nسوکت\nسوگ\nسوگواری\nسومبررو\nسونا\nسونیک\nسوهان ناخن\nسوییت\nسوییچ\nسیارک\nسیاره\nسیاست\nسیاست\nسیاستمدار\nسیاسی\nسیال\nسیاه\nسیاه‌چاله\nسیب\nسیب طلایی\nسیب‌زمینی\nسیب‌زمینی سرخ‌کرده\nسیر\nسیرک\nسیستم\nسیستماتیک\nسیفون\nسیکس پک\nسیگار\nسیل\nسیلندر\nسیلو\nسیلی زدن\nسیم\nسیم خاردار\nسیمان\nسینک\nسینما\nسینه\nسینه\nسینه‌سرخ\nسینی\nشات\nشات حقه‌ای\nشاتگان\nشاخ\nشاخه\nشاخه نازک\nشاد\nشادی\nشارژ\nشارژر\nشاکی\nشال‌گردن\nشام\nشام خوردن\nشامپانزه\nشامپاین\nشامپو\nشامل شدن\nشانس\nشانس\nشانه\nشانه عسل\nشاه‌بلوط\nشاهد\nشاهزاده\nشاهزاده خانم\nشایستگی\nشایعه\nشب\nشباهت\nشب‌تاب\nشبدر\nشبکه\nشبکه\nشبکه اجتماعی\nشبنم\nشبه‌جزیره\nشبیه\nشبیه بودن\nشتاب\nشتر\nشترمرغ\nشترمرغ\nشجاع\nشجاعت\nشخص\nشخصی\nشخصیت\nشخصیت\nشخم زدن\nشدن\nشدید\nشدید\nشراب\nشراکت\nشرایط\nشرایط\nشرط\nشرق\nشرک\nشرکت\nشرکت کردن\nشرکت‌کننده\nشرکتی\nشرلوک هولمز\nشرم\nشرور\nشرور\nشروع\nشروع کردن\nشروع کردن\nشروع کردن\nشریف\nشریک\nشست دست\nشستن\nشست‌وشوی مغزی\nشش‌ضلعی\nشطرنج\nشعار\nشعبده‌باز\nشعبده‌بازی\nشعر\nشعر\nشعله‌افکن\nشغل\nشغلی\nشفا دادن\nشفاف\nشفاف\nشفاف‌سازی\nشفت\nشفق قطبی\nشک\nشک\nشکار\nشکار کردن\nشکارچی\nشکارچی\nشکاف\nشکاف\nشکاف\nشکافتن\nشکایت کردن\nشکر\nشکست\nشکست خوردن\nشکست دادن\nشکستن\nشکسته\nشکل\nشکل\nشکل\nشکلات\nشکم\nشکنجه\nشکوفا شدن\nشکوفه گیلاس\nشگفت‌انگیز\nشگفت‌انگیز\nشل\nشلاق\nشلاق اسب\nشلغم\nشلنگ\nشلوار\nشلوار\nشلوار جین\nشمال\nشمردن\nشمرده حرف زدن\nشمشیر\nشمشیر سامورایی\nشمشیر نوری\nشمشیربازی\nشمشیرماهی\nشمع\nشن\nشن\nشن روان\nشنا کردن\nشناخت\nشناختن\nشناختن\nشناسایی\nشناور شدن\nشناور شدن\nشنل\nشنل\nشنیدن\nشهاب‌سنگ\nشهر\nشهر\nشهرت\nشهرت\nشهردار\nشهرداری\nشهروند\nشهری\nشوالیه\nشوخی\nشوخی کردن\nشور و اشتیاق\nشورا\nشورت\nشورش\nشورش\nشورشی\nشوره سر\nشوک\nشومینه\nشونه\nشونه\nشونه بالا انداختن\nشوهر\nشیء\nشیب\nشیر\nشیر\nشیر آب\nشیر آب\nشیر آتش‌نشانی\nشیر دریایی\nشیرجه\nشیرشاه\nشیرفروش\nشیروانی\nشیرین\nشیرین‌بیان\nشیرینی\nشیشه\nشیشه\nشیشه جلو\nشیک\nشیمی\nشیمیایی\nشیوع\nصابون\nصاحب‌خونه\nصادرات\nصاف\nصاف\nصبح\nصبحانه\nصبر\nصحنه\nصحنه\nصخره\nصخره مرجانی\nصدا\nصدا\nصداقت\nصدای انفجار\nصدف\nصدف دریایی\nصریح\nصف\nصف\nصفحه\nصفحه نمایش\nصفر\nصلاحیت\nصلاحیت\nصلح\nصلیب\nصندل\nصندلی\nصندلی\nصندوق\nصندوق پستی\nصنعت\nصنعتگر\nصنعتی\nصورت\nصورت فلکی\nصورت‌بندی\nصورتحساب\nصورتی\nصومعه\nصومعه\nضبط\nضخیم\nضدحریق\nضرب کردن\nضربه\nضروری\nضعف\nضعیف\nضمانت\nضمنی\nضمیمه\nضیافت\nطاعون\nطاق\nطاق\nطاووس\nطبقه\nطبقه متوسط\nطبل\nطبیعت\nطراح\nطراح مد\nطراحی\nطرح\nطرح زدن\nطرح کلی\nطرفدار\nطعم\nطعمه\nطعمه کلیک\nطعنه\nطلا\nطلاق\nطلسم کردن\nطلوع آفتاب\nطمع\nطناب\nطناب\nطناب‌اندازی\nطناب‌بازی\nطوطی\nطوطی دریایی\nطوطی کوچک\nطوفان\nطوفان رعد و برق\nطوفان شنی\nطول\nطولانی\nطولانی\nطیف\nظاهر\nظاهر شدن\nظرف بزرگ\nظروف نقره\nظریف\nعابر پیاده\nعاج\nعادت\nعادلانه\nعادی\nعاشق\nعالی\nعالی\nعامل\nعبارتبندی\nعجله کردن\nعجیب\nعجیب‌وغریب\nعدالت\nعدد\nعدم تقارن\nعدم قطعیت\nعذاب\nعذرخواهی\nعذرخواهی کردن\nعرشه\nعرض\nعرق کردن\nعروس\nعروس دریایی\nعروسک\nعروسک تدی\nعروسک خیمه‌شب‌بازی\nعروسی\nعسل\nعشق\nعصا\nعصا\nعصای جادویی\nعصب\nعصبانی\nعصبی\nعصر\nعصر حجر\nعضله\nعضو\nعضویت\nعطر\nعطسه کردن\nعفونت\nعفونت دادن\nعقاب\nعقب\nعقب بردن\nعقب‌نشینی\nعکاس\nعکاسی\nعکاسی ماشین\nعکس\nعلاءالدین\nعلاقه\nعلاقه\nعلامت\nعلامت\nعلت\nعلف هرز\nعلم\nعلمی\nعمارت\nعمل\nعمل جراحی\nعمل جراحی\nعملی\nعملیاتی\nعمه\nعمو\nعمودی\nعمومی\nعمومی\nعمیق\nعمیق\nعنصر\nعنکبوت\nعنکبوت تارانتولا\nعنوان\nعهد\nعوارض\nعید پاک\nعینک\nعینک آفتابی\nغار\nغارنشین\nغارنورد\nغاز\nغالب\nغایب\nغذا\nغذای حیوان خانگی\nغذای دریایی\nغذای مونده\nغرب\nغربی\nغرش کردن\nغرفه\nغرق شدن\nغرق شدن کشتی\nغرق کردن\nغرور\nغریدن\nغریزه\nغش\nغفلت\nغلات\nغلبه کردن\nغلتیدن\nغلتیدن\nغلغلک دادن\nغم\nغمگین\nغواصی\nغول\nغول آهنی\nغول تجارت\nغول چراغ\nغول‌پیکر\nغیبت\nغیررسمی\nغیرعادی\nغیرقانونی\nغیرقانونی\nغیرمستقیم\nغیرممکن\nغیرمنتظره\nغیرنظامی\nفاجعه\nفاخته\nفارغ‌التحصیل شدن\nفارغ‌التحصیلی\nفاسد\nفاصله\nفال روزانه\nفانتا\nفانتزی\nفانوس\nفانوس دریایی\nفایده\nفایل\nفتوشاپ\nفتوکپی\nفحش\nفدراسیون\nفدرال\nفر\nفر کردن\nفراتر رفتن\nفرار\nفراری\nفرازمینی\nفراغت\nفراموش کردن\nفرانسه\nفرانکنشتاین\nفراهم کردن\nفراوان\nفراوان\nفرایند\nفرد\nفرد\nفرد فلینتستون\nفرزند\nفرزندخواندگی\nفرسایش\nفرستادن\nفرش\nفرش قرمز\nفرش کوچک\nفرشته\nفرض\nفرض کردن\nفرض کردن\nفرضیه\nفرغون\nفرمانده\nفرمت\nفرمول\nفرهنگ\nفرهنگ لغت\nفرهنگی\nفرو بردن\nفروپاشی\nفروپاشی\nفروختن\nفرودگاه\nفرورفتگی\nفروش\nفروشگاه\nفروشگاه حیوان خانگی\nفروشنده\nفریاد زدن\nفریزر\nفساد\nفست‌فود\nفست‌فود\nفسیل\nفشار\nفشار آوردن\nفشار دادن\nفشار دادن\nفشردن\nفشرده\nفصل\nفصل\nفصلی\nفصیح\nفضا\nفضاپیما\nفضانورد\nفضای خزیدن\nفضایی\nفضیلت\nفعال\nفعال کردن\nفعالیت\nفقیر\nفک\nفکر\nفکر کردن\nفکری\nفکس\nفلاخن\nفلاسک\nفلامینگو\nفلج\nفلز\nفلسفه\nفلسفی\nفلش\nفلفل\nفلفل جلابینو\nفلفل دلمه‌ای\nفلوت\nفلوت پان\nفلوریدا\nفمیلی گای\nفمینیست\nفنجان\nفندق\nفندق‌شکن\nفندک\nفنی\nفهرست\nفهرست\nفهرست\nفهمیدن\nفواره\nفوتبال\nفوتبال\nفوریت\nفوق‌العاده\nفوک\nفولاد\nفویل\nفیبر\nفیجت اسپینر\nفیزیک\nفیس‌بوک\nفیگور\nفیل\nفیلتر\nفیلسوف\nفیلم\nفیلم\nفیلم‌ساز\nفیلمنامه\nفین\nفین و جیک\nفینیاس و فرب\nقاب\nقاب عکس\nقابل اجرا\nقابل اعتماد\nقابل پیش‌بینی\nقابل توجه\nقابل حمل\nقابل دیدن\nقابل قبول\nقابل مقایسه\nقاپیدن\nقاتل\nقاتل\nقادر\nقارچ\nقاره\nقاره‌ای\nقاشق\nقاشق چای‌خوری\nقاصدک\nقاضی\nقاطع\nقاطع\nقانع کردن\nقانون\nقانون\nقانون\nقانون اساسی\nقانون‌گذاری\nقانونی\nقانونی\nقایق\nقایق بادبانی\nقایق بادی\nقایق تفریحی\nقایقرانی\nقایم شدن\nقبر\nقبرستان\nقبرکن\nقبول کردن\nقبیله\nقتل\nقدرت\nقدرت\nقدرت فوق‌العاده\nقدرتمند\nقدردان\nقدردانی کردن\nقرآن\nقرار\nقرار ملاقات\nقرارداد\nقربانی\nقربانی\nقرص\nقرص نون\nقرض دادن\nقرض گرفتن\nقرقره\nقرمز\nقرن\nقرون وسطی\nقسم خوردن\nقسمت\nقسمت\nقشنگ\nقصاب\nقصد\nقضاوت\nقضایی\nقطار\nقطب\nقطب جنوب\nقطب‌نما\nقطر\nقطره\nقطره باران\nقطری\nقطع عضو\nقطع کردن\nقطعه زمین\nقطعی\nقطعی\nقفس\nقفسه\nقفسه\nقفسه کتاب\nقفل\nقلاب\nقلاده\nقلب\nقلع\nقلعه\nقلعه\nقلعه شنی\nقلک\nقلم نوری\nقله\nقله\nقله اورست\nقناری\nقنطورس\nقهرمان\nقهرمان\nقهوه\nقهوه‌ای\nقهوه‌خانه\nقو\nقوچ\nقورباغه\nقوری چای\nقوطی\nقول دادن\nقومیتی\nقوی\nقیچی\nقیمت\nکابل\nکابوس\nکابوی\nکابینت\nکابینت\nکاپشن\nکاپ‌کیک\nکاپوچینو\nکاپیتان\nکاپیتان آمریکا\nکاتالوگ\nکاج\nکاخ\nکادوپیچی\nکار\nکار\nکار راه بنداز\nکارآگاه\nکارآمد\nکارائوکه\nکاراته\nکاربر\nکاربردی\nکاربردی\nکارت\nکارت اعتباری\nکارت پستال\nکارتون\nکارخانه\nکارخانه آبجوسازی\nکاردک\nکارزار\nکارشناس\nکارفرما\nکارکرد\nکارکنان\nکارگاه\nکارگر\nکارگر\nکارگردان\nکارمند\nکارمند\nکارناوال\nکارواش\nکاری\nکاریزماتیک\nکازو\nکازینو\nکاست\nکاسه\nکاشتن\nکاشی\nکاغذ\nکاغذ دیواری\nکافه\nکافی\nکافی\nکاکتوس\nکالری\nکامپیوتر\nکامل\nکامل\nکامل\nکامیون\nکامیون یدک‌کش\nکانادا\nکانال\nکانال سوئز\nکانگورو\nکاهش\nکاهش\nکاهو\nکاوش\nکایوت\nکباب\nکباب\nکبرا\nکبریت\nکبوتر\nکبودی\nکپک\nکپک\nکپی\nکت رسمی\nکت و شلوار\nکتاب\nکتاب کمیک\nکتابخونه\nکتابدار\nکتان\nکتری\nکت‌وومن\nکتی پری\nکثیف\nکثیف\nکج کردن\nکچاپ\nکچل\nکد\nکد مورس\nکدو تنبل\nکدو تنبل نورانی\nکراکن\nکرامت\nکراوات\nکرایه\nکربن\nکربی\nکرش بندیکوت\nکرکس\nکرگدن\nکرم\nکرم ابریشم\nکرم اصلاح\nکرمیت\nکره\nکره\nکره\nکره شمالی\nکرواسی\nکروز\nکروسان\nکروم\nکریپر\nکریستال\nکریسمس\nکسب\nکسب‌وکار\nکسر\nکسری\nکسل‌کننده\nکش آمدن\nکشاورز\nکشاورزی\nکشاورزی\nکشتن\nکشتی\nکشتی\nکشتی دزدان دریایی\nکشتی‌گیر\nکشتی‌گیری\nکشتی‌گیری کردن\nکشف\nکشف کردن\nکشمش\nکشنده\nکشو\nکشور\nکشیدن\nکشیدن\nکشیدن\nکشیدن\nکشیش\nکف دست\nکفتار\nکفش\nکفش پاشنه‌بلند\nکفشدوزک\nکک\nکک‌ومک\nکک‌ومک‌ها\nکل\nکل\nکلاب شبانه\nکلارینت\nکلاس\nکلاس درس\nکلاسیک\nکلاغ\nکلامی\nکلاه\nکلاه\nکلاه استوانه‌ای\nکلاه ایمنی\nکلاه ایمنی\nکلاه بافتنی\nکلاهبرداری\nکلاه‌گیس\nکلبه\nکلبه\nکلبه\nکلمه\nکلنگ\nکلوسئوم\nکلی\nکلید\nکلیسا\nکلیسا\nکلیک کردن\nکلینیک\nکلیه\nکم\nکم کردن\nکما\nکمان\nکمان پولادی\nکماندار\nکمبود\nکمبود\nکمبود\nکمپ\nکمپینگ\nکمد لباس\nکمدی\nکمدین\nکمر\nکمربند\nکمربند ایمنی\nکمردرد\nکم‌عمق\nکمک\nکمک کردن\nکم‌وزن\nکمونیست\nکمونیسم\nکمی\nکمیته\nکمیسیون\nکنار\nکنار آتش\nکنار آمدن\nکنار کشیدن\nکنتراست\nکنترل\nکنترل‌کننده\nکنجکاو\nکنداما\nکندن\nکندو\nکنسرت\nکنسول\nکنفرانس\nکنگره\nکنگلومرا\nکنوانسیون\nکهربا\nکهکشان\nکهکشان راه شیری\nکهنه‌سرباز\nکوآلا\nکوبا\nکوبیدن\nکوپن\nکوتاه\nکوتاهی مو\nکوتوله\nکوتوله\nکوچک\nکوچک شدن\nکوچه\nکوچه\nکوچولو\nکوچیک\nکودتا\nکودک\nکودکی\nکور\nکوررنگ\nکوسن\nکوسه\nکوفته گوشت\nکوکتل\nکوکی\nکوکی مانستر\nکولاک\nکولر\nکوله‌پشتی\nکونگ‌فو\nکوه\nکوه راشمور\nکوه یخ\nکوه‌پیمایی\nکی‌اف‌سی\nکیبورد\nکیت\nکیسه کاغذی\nکیف\nکیف دستی\nکیفیت\nکیک\nکیم جونگ اون\nکینگ‌کنگ\nکیوپید\nکیوی\nگابلین\nگاراژ\nگارد ساحلی\nگارسون\nگارفیلد\nگاز\nگاز گرفتن\nگازدار\nگالری\nگالن\nگام\nگام بلند\nگاندی\nگانگستر\nگاو\nگاو دریایی\nگاو نر\nگچ\nگچ\nگدازه\nگذار\nگذاشتن\nگذاشتن\nگذرگاه\nگذرگاه\nگذشته\nگراز\nگراز دریایی\nگرافیتی\nگرافیک\nگرافیکی\nگران\nگرانش\nگرایش\nگرایش\nگربه\nگربه‌سان وحشی\nگرد\nگرد و خاک\nگرداب\nگردباد\nگردش\nگردش دیدنی\nگردشگر\nگردشگری\nگردن\nگردن زدن\nگردو\nگرسنگی\nگرسنه\nگرفتن\nگرفتن\nگرفتن\nگرفتن\nگرفتن\nگرفتن\nگرگ\nگرگینه\nگرم\nگرما\nگرمسیری\nگره\nگره\nگرو\nگروگان\nگروه\nگروه\nگروه\nگروه کر\nگریپ‌فروت\nگریل\nگرین لنترن\nگرینچ\nگریه\nگزارش\nگزینه\nگسترش\nگسترش دادن\nگسترش دادن\nگسترش دادن\nگشاد کردن\nگشت‌زنی\nگشت‌وگذار\nگفتمان\nگفتن\nگفتن\nگفت‌وگو\nگفت‌وگو\nگل\nگل رز\nگل سوسن\nگل مینا\nگل همیشه‌بهار\nگل‌آلود\nگلابی\nگلادیاتور\nگلبرگ\nگلدان\nگلدون خونه\nگلف\nگل‌فروش\nگل‌کلم\nگله\nگله\nگله گاو\nگلو\nگلوله\nگلوله آتش\nگمانه‌زنی کردن\nگمراه کردن\nگم‌شده\nگناه\nگناه\nگنبد\nگنج\nگندالف\nگندم\nگواهی\nگواهی دادن\nگواهینامه\nگوجه‌فرنگی\nگودال\nگودال آب\nگورخر\nگورستان\nگورکن\nگوریل\nگوزن\nگوزن شمالی\nگوزن شمالی\nگوسفند\nگوش\nگوش دادن\nگوشت\nگوشت\nگوشت چرخ‌کرده پخته\nگوشت گاو\nگوشت‌خوار\nگوشه\nگوشه‌گیر\nگوشه‌گیر\nگوفی\nگوگرد\nگوگل\nگونه\nگونه\nگونه‌ها\nگویش\nگیاه\nگیاه دارویی\nگیاهان\nگیاه‌خوار\nگیتار\nگیتار برقی\nگیج\nگیره\nگیلاس\nگیوتین\nلئوناردو دا وینچی\nلئوناردو دی‌کاپریو\nلابستر\nلابی\nلابیرنت\nلاتاری\nلازانیا\nلازم\nلاستیک\nلاستیک\nلاستیک\nلاستیک\nلاس‌وگاس\nلاغر\nلاغر شدن\nلاف زدن\nلاک ناخن\nلاک‌پشت\nلاک‌پشت\nلاما\nلامپ\nلامپ\nلامپ لاوا\nلانه\nلانه سگ\nلانه مورچه\nلایه\nلب\nلباس\nلباس\nلباس\nلباس رسمی\nلباس فضایی\nلباس مبدل\nلباسشویی\nلبخند\nلبخند\nلبنیات\nلبه\nلب‌ها\nلپ‌تاپ\nلجباز\nلجبازی\nلجن\nلحاف\nلحظه\nلحظه‌ای دیدن\nلحن\nلذت\nلذت بردن\nلذت‌بخش\nلرزیدن\nلرزیدن\nلطف\nلطف\nلطفا\nلطیف\nلعنت\nلغزنده\nلغزیدن\nلغو کردن\nلغو کردن\nلک‌لک\nلکه\nلکه\nلگد زدن\nلگو\nلمس کردن\nلمور\nلندن\nلنز\nلنگ زدن\nلنگر\nله کردن\nلهجه\nلوئیجی\nلوبیا\nلوستر\nلوسیون\nلوگو\nلوله\nلوله\nلوله‌بازکن\nلوله‌کش\nلیبرال\nلیدی گاگا\nلیزر\nلیس زدن\nلیست\nلیمبو\nلیمو\nلیموترش\nلیموزین\nلیموناد\nلینک\nلیوان بزرگ\nلیوان شراب\nماتریکس\nماجرا\nماجراجویی\nماجراجویی\nماداگاسکار\nمادر\nمادربزرگ\nمادربورد\nماده\nماده\nماده\nمار\nماراتن\nماراکاس\nمارپیچ\nمارشملو\nمارک زاکربرگ\nمارگارین\nمارماهی\nمارمولک\nماریو\nماژول\nماساژ\nماست\nماسک\nماسک گاز\nماشه\nماشین\nماشین\nماشین آتش‌نشانی\nماشین برقی\nماشین زمان\nماشین گلف\nماشین مسابقه\nماشین‌آلات\nمافیا\nمافین\nماکارونی\nماگما\nمالک\nمالک زمین\nمالکیت\nمالکیت\nمالی\nمالی\nمالیات\nمالیات‌دهنده\nمالیدن\nمام\nماموت\nماندن\nمانع\nمانع\nمانع پرش\nمانع جاده\nمانکن\nمانیکور\nماه\nماه\nماه کامل\nماهر\nماهواره\nماهی\nماهی بادکنکی\nماهی دلقک\nماهی قرمز\nماهی قلاب‌دار\nماهی گربه‌ای\nماهیانه\nماهیگیر\nمایع\nمایکروسافت\nمایکروویو\nمایکل جکسون\nمایل\nماینکرفت\nمایو\nمایونز\nمبادله\nمبارزه\nمبل\nمبلمان\nمبنا\nمبهم\nمبهم\nمبهم\nمتأهل\nمتحد\nمتخصص\nمتداول\nمترسک\nمترو\nمتصدی بار\nمتعادل\nمتعجب\nمتعهد شدن\nمتغیر\nمتفاوت\nمتفق‌القول\nمتفکر\nمتقاضی\nمتقاعد کردن\nمتکبر\nمتمایز\nمتن\nمتن آهنگ\nمتناسب\nمتنفر بودن\nمتنفر بودن\nمتنوع\nمتهم\nمتواضع\nمتوجه شدن\nمتورم شدن\nمتوسط\nمتوسط\nمتوسطه\nمثال\nمثبت\nمثلث\nمجذوب کردن\nمجذوب کردن\nمجرم\nمجسمه\nمجسمه آزادی\nمجسمه‌سازی\nمجلس قانون‌گذاری\nمجله\nمجمع\nمجموعه\nمجوز\nمچ پا\nمچ دست\nمحاسبات\nمحاسبه\nمحاصره\nمحاصره کردن\nمحافظه‌کار\nمحاکمه\nمحبوب\nمحتاط\nمحتاط\nمحتاط\nمحترم\nمحتوا\nمحدود\nمحدود\nمحدود کردن\nمحدوده\nمحدودیت\nمحدودیت\nمحدودیت\nمحدودیت\nمحراب\nمحروم کردن\nمحرومیت\nمحصول\nمحصول\nمحفظه\nمحقق\nمحکم\nمحکوم\nمحکوم کردن\nمحکومیت\nمحل\nمحل سکونت\nمحل کار\nمحله\nمحله\nمحله چینی‌ها\nمحو شدن\nمحور\nمحوطه\nمحیط زندگی\nمحیط زیست\nمخالف\nمخالفت\nمخالفت کردن\nمخروط\nمخروط کاج\nمخزن\nمخلوط\nمخلوط کردن\nمخلوط‌کن\nمخمل\nمد\nمد روز\nمداخله\nمداد\nمدادشمعی\nمدار\nمدال\nمدت\nمدرسه\nمدرک\nمدرک\nمدرن\nمدفوع\nمدفوع\nمدل\nمدنی\nمدوسا\nمدیر\nمدیر\nمدیریت\nمدیریت\nمدیریت کردن\nمذاکره\nمذهبی\nمراسم\nمراسم تدفین\nمراقبت\nمرام\nمربا\nمربع\nمربی\nمربی\nمربی تناسب اندام\nمرتبط\nمرتبط\nمرتبط کردن\nمرجان\nمرجع\nمردانه\nمردسالار\nمردم\nمردم\nمردن\nمرده\nمرز\nمرسدس\nمرغ\nمرغ\nمرغ دریایی\nمرغ مگس‌خوار\nمرکب\nمرکز\nمرکز خرید\nمرکزی\nمرگ\nمرمالاد\nمرمر\nمرموت\nمریخ\nمریض\nمزاحم شدن\nمزایده\nمزرعه\nمزرعه ذرت\nمزمن\nمزه\nمزیت\nمژه\nمس\nمسئله\nمسئول\nمسئولیت\nمسئولیت قانونی\nمسابقه\nمسابقه\nمسافر\nمسافر\nمسافرخونه\nمست\nمستاجر\nمستطیل\nمستعمره\nمستقل\nمستقیم\nمستمری\nمسجد\nمسخره کردن\nمسکن\nمسکونی\nمسواک\nمسیر\nمسیر\nمسیر\nمسیر شغلی\nمشارکت\nمشاهده\nمشاور\nمشاوره\nمشت\nمشت\nمشتاق\nمشتاق\nمشترک\nمشتری\nمشخص‌شده\nمشعل\nمشکل\nمشکل\nمصاحبه\nمصالحه\nمصر\nمصرف\nمصرف‌کننده\nمصنوعی\nمضر\nمضطرب\nمطالعه کردن\nمطلق\nمطلوب\nمطلوب\nمظنون\nمعادله\nمعاصر\nمعافیت\nمعامله\nمعامله خوب\nمعاهده\nمعاون\nمعبد\nمعتاد\nمعتبر\nمعجزه\nمعجون\nمعدن\nمعدنچی\nمعدنی\nمعده\nمعذب\nمعرفی\nمعرفی کردن\nمعطل شدن\nمعکوس\nمعلم\nمعلول بودن\nمعما\nمعمار\nمعماری\nمعمول\nمعمولی\nمعمولی\nمعمولی\nمعنادار\nمعنی\nمعیوب\nمغازه\nمغرور\nمغرور\nمغز\nمغناطیسی\nمفهوم\nمفید\nمفید\nمقابل\nمقاله\nمقاله\nمقاوم\nمقاومت کردن\nمقایسه\nمقایسه\nمقبره\nمقدار\nمقدس\nمقدس\nمقدم بودن\nمقر اصلی\nمقررات\nمقوا\nمقیاس\nمکاتبات\nمکاتبه داشتن\nمکان\nمکان\nمکانی\nمکانیزم\nمکانیک\nمکانیکی\nمکث\nمک‌دونالد\nمکرر\nمکزیک\nمکعب\nمکمل\nمگافون\nمگس‌کش\nملاحظه\nملایم\nملایم\nملحفه\nملخ\nملک\nملک\nملکه\nملوان\nملی\nملیت\nممتاز\nممتاز\nممکن\nممنوع کردن\nممنوع کردن\nممنون\nمناسب\nمناسب\nمناسبت\nمناظره\nمنبع\nمنبع\nمنتشر کردن\nمنتظر ماندن\nمنتقد\nمنجنیق\nمنحصربه‌فرد\nمنحنی\nمنشور\nمنشور\nمنشی پذیرش\nمنصفانه\nمنصوب کردن\nمنطق\nمنطقه\nمنطقه\nمنطقه\nمنطقه\nمنطقه‌ای\nمنطقی\nمنطقی\nمنطقی\nمنظره\nمنظره\nمنظم\nمنظومه شمسی\nمنعکس کردن\nمنفجر شدن\nمنفجر کردن\nمنفعل\nمنفی\nمنقار\nمنقرض\nمنگنه\nمنو\nمه\nمه\nمهاجر\nمهاجرت\nمهاجرت\nمهار\nمهار کردن\nمهارت\nمهارت\nمهدکودک\nمهدکودک\nمهربان\nمهربون\nمهم\nمهمان\nمهمان کردن\nمهماندار\nمهماندار\nمهمان‌نوازی\nمهمانی\nمهندس\nمو\nمو قهوه‌ای\nمواد اولیه\nمواد مخدر\nموازی\nموافق بودن\nموبایل\nموبایل\nموتزارت\nموتور\nموتورسیکلت\nموتورسیکلت\nموثر\nموج\nمودب\nمورتی\nمورچه\nمورچه‌خوار\nمورد\nمورد انتظار\nمورد علاقه\nمورگان فریمن\nموز\nموزاییک\nموزه\nموزیکال\nموسیقی\nموسیقی‌دان\nموش\nموش\nموش کور\nموشک\nموشک\nموضوع\nموعد\nموعظه کردن\nموفق\nموفقیت\nموقت\nموقعیت\nمولد\nمولکول\nمولکولی\nموم\nمومیایی\nمونالیزا\nمون‌بلان\nمونوپولی\nموهاک\nموی آفرو\nموی بینی\nموی سینه\nمیانگین\nمیخ\nمیخ\nمیخونه\nمیدان\nمیدان\nمیدان نبرد\nمیرکت\nمیز\nمیز\nمیزبان\nمیکروب\nمیکروسکوپ\nمیکروفون\nمیکی ماوس\nمیگو\nمیل\nمیلک‌شیک\nمیله پرچم\nمیم\nمیم\nمیمون\nمینوتور\nمینی‌کلیپ\nمینی‌گلف\nمینیون\nمینی‌ون\nمیهن‌پرست\nمیوه\nناآرام\nناآرامی\nناامید کردن\nناامیدی\nناامیدی\nنابغه\nناپدید شدن\nناپدید شدن\nناتوان\nناتوانی\nناچو\nناخن\nناخن پا\nناخوشایند\nنادان\nنادانی\nنادر\nنادرست\nنادیده گرفتن\nناراحت\nناراحت\nنارس\nنارگیل\nنارنجک\nنارنگی\nناروال\nناز\nنازک\nناسا\nناسکار\nناسیونالیست\nناسیونالیسم\nناشر\nناشناس\nناشناس\nناشنوا\nناظر\nناظر\nناظر\nناعادلانه\nناف\nناکافی\nناکافی\nناکامی\nناگت\nناگهانی\nناله\nنامرئی\nنامزد\nنامزد کردن\nنامزدی\nنامزدی\nنامناسب\nنامه\nنان\nنان تست\nنانوایی\nناهار\nناهماهنگ\nناو جنگی\nناودان\nناوگان\nنایکی\nنبرد\nنپتون\nنتیجه\nنتیجه‌گیری\nنجات دادن\nنجار\nنجیب\nنخ\nنخبه\nنخل\nنخودفرنگی\nنرخ\nنردبان\nنرم\nنرم‌افزار\nنروژ\nنزول\nنژادپرستی\nنژادی\nنسبت\nنسبت\nنسبی\nنسبی\nنسخه\nنسخه\nنسل\nنسیم\nنشان دادن\nنشانک\nنشانه\nنشتی\nنشستن\nنصب کردن\nنصف\nنصیحت\nنظامی\nنظر\nنظر\nنظرسنجی\nنظرسنجی\nنظریه\nنظریه‌پرداز\nنعناع\nنفتالین\nنفس\nنفس کشیدن\nنفس‌نفس زدن\nنفوذ کردن\nنقاش\nنقاشی\nنقاشی صورت\nنقره\nنقش\nنقش\nنقشه\nنقشه\nنقص\nنقض\nنقطه\nنقطه‌ها\nنقل قول\nنقل کردن\nنگاه کردن\nنگاه کوتاه\nنگرانی\nنگرانی\nنگرش\nنگه داشتن\nنگه داشتن\nنگهبان\nنگهبان در\nنگهداری\nنما\nنما\nنماد\nنماد\nنمایش\nنمایش استعداد\nنمایش دادن\nنمایشگاه\nنمایشگاه\nنمایندگی کردن\nنماینده\nنماینده\nنماینده\nنمره\nنمره\nنمک\nنمو\nنمودار\nنمودار\nنمودار\nنمونه\nنمونه\nننو\nنهاد\nنهایی\nنهایی\nنهنگ\nنهنگ قاتل\nنوآوری\nنوار\nنوار چسب\nنوار سر\nنوازش کردن\nنوت‌پد\nنوتلا\nنوجوان\nنودل\nنور\nنور خورشید\nنور روز\nنورافکن\nنوزاد\nنوسان\nنوشابه\nنوشابه\nنوشتن\nنوشته‌شده\nنوشیدن\nنوع\nنوک انگشت\nنویسنده\nنی\nنیاز\nنیاز داشتن\nنیاز داشتن\nنی‌انبان\nنیروی دریایی\nنیزار\nنیزه\nنیزه ماهیگیری\nنیزه‌ماهی\nنیش زدن\nنیکل\nنیلوفر آبی\nنیم‌دایره\nنیمکت\nنیم‌کره\nنیمه‌شب\nنینتندو سوییچ\nنینجا\nنیوزیلند\nهابیت\nهات‌چاکلت\nهات‌داگ\nهات‌داگ ذرتی\nهاکی\nهالک\nهاله\nهالیوود\nهاوایی\nهاورکرافت\nهای‌فایو\nهایلایت کردن\nهپی‌میل\nهتل\nهجا\nهدر دادن\nهدف\nهدف\nهدف\nهدف\nهدفون\nهدیه\nهرج‌ومرج\nهرس کردن\nهرکول\nهرم\nهروئین\nهری پاتر\nهزارپا\nهزینه\nهزینه\nهسته\nهسته‌ای\nهشت‌پا\nهشت‌ضلعی\nهشتگ\nهشدار\nهشدار\nهشدار دادن\nهفتگی\nهفته\nهکر\nهل دادن\nهلند\nهلو\nهلو کیتی\nهلیکوپتر\nهم زدن\nهماهنگی\nهمبرگر\nهمبستگی\nهمبستگی\nهمدرد\nهمراهی کردن\nهمزمان شدن\nهم‌زن\nهمسایه\nهمسایه\nهمستر\nهمسر\nهمکار\nهمکاری\nهمکاری کردن\nهنجار\nهند\nهنر\nهنرمند\nهنری\nهنوز\nهوا\nهوا\nهواپیما\nهواپیما\nهواپیما\nهوانوردی\nهوپ‌اسکاچ\nهوس یهویی\nهوش\nهولا‌هوپ\nهومر سیمپسون\nهویت\nهویج\nهیئت منصفه\nهیاهو\nهیپنوتیزم کردن\nهیپ‌هاپ\nهیپی\nهیجان\nهیجان‌انگیز\nهیجان‌زده\nهیچی\nهیروگلیف\nهیولا\nهیولاوار\nو لاگر\nوابستگی\nوابسته\nوابسته بودن\nواتس‌اپ\nواتیکان\nواجد شرایط\nواجد شرایط\nواجد شرایط شدن\nواحد\nوارث\nوارد شدن\nوارد کردن\nوارد کردن\nواریانت\nواضح\nوافل\nواقع‌گرایانه\nواقعی\nواقعیت\nواقعیت\nواقعیت مجازی\nواکسن\nواکنش\nواگن\nواگن قطار\nوال-ای\nوالد\nوالدین\nوالدینی\nوالیبال\nوام\nوام مسکن\nوان\nواندر وومن\nوانیل\nوایتکس\nوای‌فای\nوبسایت\nوثیقه\nوجدان\nوحدت\nوحشت\nوحشی\nوخیم شدن\nودکا\nورز دادن\nورزش\nورزش\nورزش کردن\nورزشکار\nورزشگاه\nورزش‌ها\nورشکستگی\nورق\nورودی\nوزارتخانه\nوزغ\nوزن\nوزن کردن\nوزیر\nوسط\nوسواسی\nوسوسه\nوسوسه کردن\nوسیله\nوسیله\nوسیله نقلیه\nوصل کردن\nوضعیت\nوظیفه\nوعده غذا\nوفادار\nوفادار\nوفاداری\nوقار\nوقت خواب\nوقف کردن\nوقف کردن\nوکتور\nوکیل\nول کردن\nولت بوی\nولورین\nولوسیراپتور\nون\nوودو\nووووزلا\nویتامین\nویدیو\nویران کردن\nویران کردن\nویرانی\nویرایش\nویروس\nویژگی\nویژگی\nویژگی\nویسکی\nویلا\nویلیام شکسپیر\nویلیام والاس\nوین دیزل\nوینی پو\nویولا\nویولن\nویولنسل\nیاد گرفتن\nیادآوری کردن\nیادآوری کردن\nیادبود\nیادداشت\nیادداشت رسمی\nیارو\nیاقوت کبود\nیتیم\nیخ\nیخ زدن\nیخچال\nیخچال طبیعی\nیخ‌زده\nیدکی\nیقه\nیکپارچگی\nیکپارچه\nیکپارچه کردن\nیو‌اس‌بی\nیواشکی گوش دادن\nیوتیوب\nیوتیوبر\nیودا\nیورش\nیوزپلنگ\nیوسین بولت\nیوشی\nیوفو\nیوکولله\nیونان\nیونجه\nیونیفرم\nیونیکورن\nیو‌یو\nیین و یانگ"
  },
  {
    "path": "internal/game/words/fr",
    "content": "capacité\navortement\nabus\nacadémie\naccident\ncomptable\nacide\nacte\najouter\naccro\najout\nadresse\nadministrateur\nadulte\npublicité\nliaison\neffrayé\naprès-midi\nâge\nagence\nagent\naccord\naérer\naéronef\ncompagnie aérienne\naéroport\nallée\nalarme\nalbum\nalcool\nallocation\nallié\nautel\nambre\nambulance\namputer\nanalyse\nange\ncolère\nangle\nfâché\nanimal\ncheville\nannonce\nannuel\nanonyme\nfourmi\nanticipation\nanxiété\napparaître\nappétit\napplaudir\npomme\napplication\nnomination\napprouver\naquarium\narche\narchiver\narène\nbras\nfauteuil\narmée\narrestation\nflèche\nart\narticle\nartificiel\nartiste\nartistique\ncendre\nendormi\naspect\nassaut\natout\naffectation\nasile\nathlète\natome\nattaque\ngrenier\nattirer\nenchères\nauditoire\nautomatique\nmoyenne\naviation\néveillé\nprix\naxe\nbébé\ndos\narrière-plan\nlardon\nsac\ncaution\ncuire\néquilibre\nbalcon\nchauve\nballe\nballet\nballon\nbanane\nbande\ndétonation\nbanque\nbannière\nbar\nécorce\nbaril\nbarrière\nbase\nbaseball\nbassin\npanier\nbasket-ball\nbatte\nbain\nbatterie\nbataille\nchamp de bataille\nbaie\nplage\nfaisceau\nharicot\nours\nbarbe\nbattre\nlit\nchambre\nabeille\nbœuf\nbière\nsupplier\ndécapiter\ncloche\nventre\nceinture\nbanc\nvirage\npari\nbible\nvélo\npoubelle\nbiographie\nbiologie\noiseau\nanniversaire\nbiscuit\névêque\nchienne\nmorsure\namer\nnoir\nlame\nvierge\nexplosion\nsaigner\nbénir\naveugle\nbloc\nblonde\nsang\ncarnage\nsanglante\nsouffler\nbleu\nplanche\nbateau\ncorps\nbouillir\nboulon\nbombe\nbombardier\nlien\nos\nlivre\nboom\nbotte\nfrontière\ndéranger\nbouteille\nbas\nrebondir\narc\nentrailles\nbol\nboîte\ngarçon\ncerveau\nfrein\nsuccursale\nmarque\ncourageux\npain\npause\npoitrine\nrespirer\nrace\nbrise\nbrasserie\nbrique\nmariée\npont\napporter\ndiffuser\nbrocoli\ncassé\nbronze\nfrère\nbrun\nbrosse\nbulle\nseau\nbuffet\nbâtiment\nbulbe\ninhumation\nbrûler\nenterrer\nbus\nbrousse\nentreprise\nbeurre\npapillon\nbouton\nacheter\ncabine\ncabinet\ncâble\ncafé\ncage\ngâteau\ncalcul\ncalendrier\nveau\nappeler\ncaméra\ncamp\nannuler\ncancer\ncandidat\nbougie\ncanne\ntoile\nbouchon\ncapital\ncapitaine\ncapture\nvoiture\ncarte\ncarrière\ntapis\ncarrosse\ncarotte\nporter\nchariot\ntailler\ncas\nespèces\ncassette\nchâteau\nchat\nattraper\ncathédrale\ncause\ngrotte\nplafond\ncélébration\ncellule\ncave\ncimetière\ncensure\ncentre\ncéréale\ncérémonie\ncertificat\nchaîne\nchaise\ncraie\nchampagne\nchampion\nchangement\nchaos\nchapitre\ncaractère\ncharge\ncharité\ncharme\ngraphe\nradin\nvérifier\njoue\nfromage\nchimique\nchimie\ncerise\nmâcher\npoulet\nchef\nenfant\nenfance\ncheminée\nmenton\ncroustille\nchocolat\nétouffer\nhacher\nchronique\néglise\ncigarette\ncinéma\ncercle\ncirculation\ncitoyen\nville\ncivil\nréclamation\nclasse\nclassique\nsalle de classe\nargile\nnettoyer\ngrimper\nclinique\nhorloge\nfermer\nfermé\nvêtements\nnuage\nclub\nindice\nautocar\ncharbon\ncôte\nmanteau\ncode\ncercueil\npièce\nfroid\neffondrement\ncollègue\nrecueillir\ncollection\ncollège\ncolonie\ncouleur\ncoloré\ncolonne\ncoma\ncombinaison\ncombiner\ncomédie\ncomète\ncommande\ncommentaire\ncommunication\ncommunauté\ncompagnie\ncomparer\nrivaliser\nse plaindre\ncomplète\nordinateur\nconcentrer\nconcert\nbéton\nconducteur\nconférence\nconfiant\nconflit\nconfusion\nconnexion\nconscience\nconsensus\nenvisager\nconspiration\nconstellation\ncontrainte\nconstruire\ncontact\nconcours\ncontrat\ncontradiction\nconvention\nconversation\nconvertir\nbagnard\ncuivre\ncopie\ncorde\nnoyau\ncor\ncoin\ncorrection\ncostume\ncottage\ncoton\ntoux\ncompter\ncompteur\npays\ncouple\ncours\ncouvrir\nvache\ncrack\nmétier\nartisan\ncrash\ncrème\ncréation\ncarte de crédit\ncrédit\nramper\néquipage\ncricket\ncrime\ncriminel\ncroix\ncroisement\naccroupis\nfoule\ncouronne\npleurer\ncristal\nconcombre\ntasse\nplacard\nboucle\nmonnaie\nactuel\ncursus\nrideau\ncourbe\ncoussin\nclient\ncouper\nmignon\ndécoupage\ncycle\ncylindre\nlaitière\ndommage\ndanse\ndanger\nsombre\ndate\nfille\njour\nmorts\nmortel\nsourd\ntraiter\ndealer\nmort\ndette\ndiminuer\nprofond\ncerf\ndéfaite\ndéfendre\ndegré\nlivrer\nlivraison\ndémolir\ndémonstration\ndentiste\nquitter\ndépart\ndépôt\ndépression\ndescente\ndésert\nconception\nbureau\ndestruction\ndétective\ndétecteur\ndiagnostic\ndiagramme\ndiamètre\ndiamant\ndicter\ndictionnaire\nmourir\ndifférer\ndifférence\ncreuser\nnumérique\ndîner\ntremper\ndirection\ndirecteur\nrépertoire\nsale\ninvalidité\ndisparaître\ndiscothèque\nrabais\ndécouverte\ndiscret\ndiscuter\nmaladie\nplat\nantipathie\nafficher\ndissoudre\ndistance\nlointain\nplongée\ndiviser\ndivision\ndivorce\nmédecin\ndocument\nchien\npoupée\ndollar\ndauphin\ndôme\ndomination\ndonner\nporte\ndose\ndouble\npâte\ntraîner\ndragon\ndrain\ndessiner\ntiroir\ndessin\nrêve\nrobe\nperceuse\nboire\nlecteur\ngoutte\nnoyer\ndrogue\ntambour\nsec\ncanard\ndue\nterne\nlarguer\ndurée\naigle\noreille\nprécoce\nséisme\norient\nmanger\nécho\nbord\néducation\noeuf\ncoude\nélection\nélectricité\nélectron\nélectronique\nélément\néléphant\néliminer\nurgence\némotion\nempire\nvide\nfin\nennemi\nénergie\nmoteur\ningénieur\nagrandir\nentrer\nenthousiasme\nentrée\nenveloppe\nenvironnement\népisode\négal\néquation\néquipement\nerreur\néchapper\neurope\nmême\nsoir\névolution\ndépasser\nexcité\nexécution\nsortie\nexpansion\ncoûteux\nexpérimenter\nexploser\nexploration\nexporter\nexpression\nextension\néteint\nextraterrestre\nœil\nsourcil\nfaçade\nvisage\ninstallation\nusine\néchouer\néchec\nfaible\néquitable\nfée\nchute\ngloire\nfamille\nventilateur\nfantasme\nloin\nferme\nagriculteur\nrapide\ngraisse\npère\ntélécopieur\ncrainte\nfestin\nplume\nhonoraires\nclôture\nferry\nfestival\nfièvre\nfibre\nfiction\nchamp\nlutte\nfichier\nremplir\npellicule\nfiltre\nfinancer\nfinancier\ntrouver\ndoigt\nfinir\nlicencier\npompier\npremier\npoissons\npêcheur\npoing\napte\naptitude\nfixer\ndrapeau\néclair\nflotte\nchair\nvol\npassade\ninondation\nplancher\nfarine\nfleur\ngrippe\nfluide\nvoler\nplier\nnourriture\nimbécile\npied\nfootball\ninterdire\nfront\nétranger\nforêt\nfourche\nformel\nformule\nfortune\navancer\nfossile\nfondation\nfontaine\nrenard\nfragment\nfranchise\nfraude\ntache de rousseur\nlibre\ngeler\nfret\nfréquence\nfraîche\nfrigo\nami\namitié\ngrenouille\ndevant\ncongelé\nfruit\ncarburant\namusant\nfunérailles\ndrôle\nfourrure\nmobilier\ngalaxie\ngalerie\ngallon\njeu\nécart\ngarage\nordures\njardin\nail\ngaz\ngénie\ngentilhomme\ngéographie\ngéologique\ngeste\nfantôme\ngéant\ncadeau\nglacier\nverre\nlunettes\nglisser\nmorosité\ngant\nlueur\ncolle\naller\nobjectif\ngardien\nchèvre\ndieu\nor\ngolf\nbonne\ngouvernement\nprogressive\ndiplômé\ngrain\ngrand-père\ngrand-mère\ngraphique\ngraphisme\nherbe\ngrave\ngraviers\ngravité\nvert\nsaluer\nsalutation\ngrimace\nsourire\npoignée\nsol\ncroître\ncroissance\ngarde\ninvité\nculpabilité\nguitare\npistolet\ncaniveau\nhabitat\ncheveux\ncoupe\nmoitié\nsalle\ncouloir\nmarteau\nmain\nhandicap\naccrocher\nheureux\nport\ndur\nmatériel\nharmonie\nrécolte\nchapeau\ndétester\nhanter\nfoin\ntête\nmanchette\nquartier général\nsanté\nsain\nentendre\ncœur\nchaleur\nciel\nlourd\nhaie\nhauteur\nhélicoptère\nenfer\ncasque\nhémisphère\npoule\ntroupeau\nhéros\nhéroïne\ncacher\nélevé\nsouligner\nrandonnée\ncolline\nhanche\nhistorique\nfrapper\ntenir\ntrou\nvacances\nfoyer\nmiel\ncrochet\nhorizon\nhorizontal\ncorne\nhorreur\ncheval\nhôpital\notage\nchaud\nhôtel\nheure\nabriter\nfemme au foyer\nplaner\nénorme\nhomme\nhumanité\nchasseur\nchasse\nblesser\nmari\nhutte\nhypnotiser\ncrème glacée\nglace\nidée\nidentification\nidentifier\nidentité\nillégal\nimage\nimagination\nimaginer\nimmigrant\nimmigration\nimporter\nimpulsion\nincident\nrevenu\nindividuel\nintérieur\nindustrielle\nindustrie\ninfecter\ninfection\ninfini\ngonfler\ninformations\ningrédient\nhabitant\ninjecter\ninjection\nblessure\ninnocent\ninsecte\ninsérer\ninspecteur\ninstruction\ninstrument\nintégration\nintelligence\ninternational\nentrevue\ninvasion\nenquêteur\ninvitation\ninviter\nfer\nîle\nisolement\npoint\nveste\nprison\nconfiture\nbocal\nmâchoire\njazz\ngelée\nsecousse\njet\njoyau\nemploi\njockey\narticulation\nblague\njoie\njuge\njugement\njus\nsauter\njungle\njunior\njury\njustice\nbouilloire\nclé\nbotter\ngamin\nrein\ntuer\ntueur\ngenre\nroi\nroyaume\nbaiser\ncuisine\ncerf-volant\ngenou\nagenouiller\ncouteau\nnœud\nétiquette\nlaboratoire\ndentelle\néchelle\ndame\nlac\nagneau\nlampe\nterre\npropriétaire\npaysage\nlangue\ngenoux\ngrand\nlaser\ndernier\nrire\nlancement\nblanchisserie\ngazon\navocat\npondre\ndisposition\nleadership\nfeuille\ndépliant\nfuite\nmaigre\napprendre\ncuir\ncongé\ngauche\nrestes\njambe\nlégende\ncitron\nlongueur\nleçon\nlettre\nniveau\nbibliothèque\nlicence\nlécher\ncouvercle\nmensonge\nascenseur\nlumière\nlys\nmembre\nlimite\nligne\nlion\nlèvre\nliquide\nliste\nécouter\nlittérature\nvivre\nfoie\nlobby\nlocaliser\nemplacement\nverrouiller\nloge\nbûche\nseul\nlong\nregarder\nlâche\nperdre\nlot\nbruyant\nsalon\namour\nabaisser\nchanceux\nbosse\ndéjeuner\npoumon\nmachine\nmagazine\nmagnétique\nservante\ncourrier\ncommercial\nentretien\nmajeur\nmaquillage\nmec\ngestion\nmanuel\nfabriquer\nmarathon\nmarbre\nmarche\nmarin\nmarketing\nmariage\nmarié\nmars\nmarais\nmasque\nmasse\nmaître\nmatch\nmatériau\nmathématique\nmathématiques\nmaximum\nmaire\ndédale\nrepas\nmesurer\nviande\nmécanique\nmédaille\nmédecine\nmédiéval\nmoyen\nrencontrer\nréunion\nadhésion\nmémorial\nmémoire\nmenu\nmarchand\nmessage\nmétal\nmicrophone\nmilieu\nminuit\nmille\nlait\nesprit\nmineur\nminéral\nminimiser\nminimum\nminute\nmiroir\nfausse couche\nmanquer\nmissile\nmobile\nmodèle\ntaupe\nmoléculaire\nargent\nmoine\nsinge\nmonopole\nmonstre\nmonstrueux\nmois\nlune\nmatin\nmosquée\nmoustique\nmère\nautoroute\nmontagne\nsouris\nbouche\ndéplacer\némouvant\nboue\nmug\nmultimédia\nmultiple\nmultiplier\nmeurtre\nmuscle\nmusée\nchampignon\nmusique\nmusicien\nmutuel\nmythe\nongle\nnom\nsieste\nétroit\nnature\nmarine\ncou\naiguille\nvoisin\nquartier\nneveu\nnid\nnet\nréseau\nnouvelles\nnuit\ncauchemar\nhochement\nbruit\nnord\nnez\nnote\ncahier\nroman\nnucléaire\nnombre\nnonne\ninfirmière\npépinière\nécrou\nchêne\nobèse\nobéir\nobservation\nobservateur\nobstacle\nobtenir\nocéan\nimpair\noffrir\nofficier\nprogéniture\nhuile\nvieux\nomission\noignon\nouvrir\nopéra\nopération\nadversaire\nopposé\noption\noral\norange\norbite\norchestre\norgane\noriginal\ntenue\nexutoire\nesquisse\nvue\nextérieur\nfour\nhibou\npropriété\noxygène\npaquet\npage\ndouleur\npeinture\npeintre\npaire\npalais\npaume\npoêle\npapier\nparade\nparagraphe\nparallèle\nparent\nparc\nparking\nparticule\npartenaire\npartenariat\npartie\npassage\npassager\npasseport\nmot de passe\npassé\ntapoter\nbrevet\nchemin\nchaussée\npayer\npaiement\npaisible\narachide\npiétonne\nstylo\ncrayon\npenny\ngens\npoivre\npourcent\nperforé\ninterprète\npériode\npersonne\nanimal de compagnie\nphilosophe\nphotocopie\nphoto\nphotographe\nphotographie\nphysique\npiano\ntarte\njetée\ncochon\npigeon\npile\npilule\noreiller\npilote\népingle\npionnier\ntuyau\nfosse\nplan\navion\nplanète\nplante\nplastique\nplate-forme\njouer\nagréable\ngage\nbrancher\npoche\npoème\npoésie\nperche\npolitique\nsondage\npollution\nponey\npiscine\npauvre\nportrait\npositif\nposte\ncarte postale\npot\npomme de terre\npoterie\nverser\npoudre\npuissance\nprier\nprière\nprécis\nprédécesseur\nprévisible\nenceinte\nprésent\nprésentation\nprésidence\nprésident\npresse\npression\nproie\nprince\nprincesse\nimpression\nimprimante\nprisonnier\nprivilège\nproduire\nproducteur\nproduit\nproduction\nproductives\nprofesseur\nprofil\nprogramme\nprojection\npreuve\npropagande\nproportion\nproportionnelle\nprotéger\nprotection\nprotéines\nprotestation\npsychologue\npub\npublier\npudding\ntirer\npompe\ncitrouille\ncoup de poing\nélève\npousser\npuzzle\npyramide\nqualifié\nqualité\nquart\nreine\nquestion\nquestionnaire\nfile d'attente\narrêter\ncitation\nlapin\ncourse\nracisme\nrack\nrayonnement\nradio\nfureur\nraid\nwagon\nchemin de fer\npluie\narc-en-ciel\nrassemblement\naléatoire\nrang\nrat\ntaux\nratio\ncru\natteindre\nréaction\nréacteur\nlire\narrière\nrebelle\nreçu\nréception\nenregistrement\nrécupération\nrecycler\nrouge\nréduction\nredondance\nréfléchir\nréflexion\nrégion\nréadaptation\nrépétition\nrègne\nliés\nrelation\nrelâche\nreligieux\nréticence\nremarque\nloyer\nrépéter\nremplacer\nremplacement\nrapport\nreporter\nreproduction\nreptile\nrecherche\nchercheur\nrésident\nstation\nressource\nrestaurant\nrestriction\nrésultat\nvengeance\ninverse\nrenouveau\nrevivre\nruban\nriz\nriche\ncavalier\nfusil\ndroite\nsonnerie\némeute\nélévation\nrituel\nrivière\nroute\nrugissement\ncambriolage\nrobot\nrocher\nfusée\nrôle\nrouler\nromantique\ntoit\nrose\nroyauté\nbêtises\nrugby\ncourir\ncoureur\nsacré\nsacrifice\nvoile\nsalade\nvente\nsaumon\nsel\nsalut\nsable\nsandale\nsatellite\nsatisfaisant\nsauce\nsaucisse\nsauvegarder\nscanner\ndisperser\nscène\nécole\nscience\nscientifique\nscore\ngratter\nécran\nscript\nsculpture\nmer\nsceller\nsaison\nsaisonnière\nsiège\nseconde\nsecondaire\nsecrétaire\nsécurisé\nvoir\nsemence\nvendre\nvendeur\nséminaire\nsenior\nséparation\nséquence\nsérie\nserviteur\nservir\nservice\nrèglement\nombre\nforme\npartager\nrequin\npointu\nbrousiller\nmoutons\nétagère\ncoquille\nbouclier\ndéplacement\nbriller\nchemise\nchoc\nchaussure\nboutique\nshopping\ncourt\npénurie\nshort\ntir\népaule\nmontrer\ndouche\nrétrécir\nhausser les épaules\ntimide\nmalade\nsigne\nsignature\nsilence\nsoie\nsimilaire\nsimilitude\npéché\nchanteur\névier\nsœur\nsite\ntaille\npatins\ncroquis\nski\ncrâne\ndalle\nslam\ngifle\nesclave\ndormir\nmanche\ntranche\nglissante\nfente\ndoucement\nintelligent\nfrappe\nodeur\nfumer\nescargot\nserpent\nrenifler\nneige\nsavon\nfoot\nchaussette\ndoux\nlogiciel\nsolaire\nsoldat\nsolide\nsolo\nsolution\nrésoudre\nâme\nson\nsoupe\nsud\nespace\norateur\nspécimen\ndiscours\nvitesse\népeler\nsphère\naraignée\nrépandre\ntourner\népinards\ncolonne vertébrale\nsplit\ncuillère\nsport\nspot\npulvérisation\npropagation\nprintemps\nespionne\nescouade\ncarré\npresser\npoignarder\npersonnel\ntache\nescalier\ndécrochage\ntimbre\nétoile\nstatue\nsteak\nvapeur\ntige\npas\ncollante\npiqûre\nstock\nestomac\npierre\ntabouret\nstockage\nmagasin\ntempête\ndroit\npaille\nfraise\nrue\nforce\nétirer\ngrève\navc\nfort\nétudiant\nstudio\nstyle\nsubjective\nsubstance\nbanlieue\nréussi\nsucre\nsuicide\nsuite\nsomme\nrésumé\nété\nsoleil\nlever du soleil\nsupérieur\nsupermarché\nsuperviseur\nsoutien\nsupprimer\nsurface\nchirurgien\nchirurgie\nsurprise\nentourer\nenquête\nsuspect\nsueur\npull\nbalayage\ngoule\nnager\nbalançoire\nbalayer\ninterrupteur\népée\nsymétrie\nsystème\nt-shirt\ntable\ntablette\nqueue\nréservoir\ntoucher\ncible\nsavoureux\ntaxi\nthé\néquipe\ndéchirure\ntechnique\ntechnologie\nadolescent\ntéléphone\ntélévision\ntempérature\ntemple\nlocataire\ntendre\ntennis\ntente\nterminal\nterrasse\nterroriste\ntest\ntexte\nthéâtre\nthérapeute\nthérapie\népais\nmince\npensée\nmenace\nmenacer\ngorge\ntrône\nlancer\npouce\nbillet\nmarée\ncravate\ntigre\nserré\ntuile\ntemps\nétain\npourboire\nfatigué\ntissu\ntitre\ntoast\norteil\ntomate\ntonne\noutil\ndent\nhaut\ntorche\ntorture\njetons\ntotal\ntourisme\ntournoi\nserviette\ntour\ntoxique\njouet\ntrace\npiste\ncommerce\ntrafic\ntrain\nformateur\nformation\ntransfert\ntransparent\ntransport\npiège\ntrésor\ntraitement\narbre\ntendance\nprocès\ntriangle\ntribu\nhommage\nvoyage\ntroupe\ntropicale\npantalon\ncamion\ncoffre\ntube\ntumeur\ntunnel\ndinde\njumeau\ntordre\nmagnat\npneu\nparapluie\nmal à l'aise\nuniforme\nunique\nunité\nuniversité\nmise à jour\ncontrarié\nurbain\nurine\nutilisateur\nvallée\nprécieux\ncamionnette\nvariante\nlégume\nvégétation\nvéhicule\nvénus\nverbale\nversion\nverticale\nvaisseau\nvétéran\nvictime\nvictoire\nvidéo\nvilla\nvillage\nviolent\nvision\nvitamine\nvoix\nvolcan\nvolume\nbon d'achat\nmarcher\nmur\nguerre\ngarde-robe\navertissement\nguerrier\nlaver\ngaspillage\neau\ncascade\nvague\nfaiblesse\nrichesse\narme\nmétéo\ntissage\nsemaine\nweek-end\nhebdomadaire\npoids\nouest\nmouillé\nbaleine\nblé\nroue\nfouet\nwhisky\nmurmure\nblanc\nentières\nveuve\nlargeur\nfemme\nsauvage\nfaune\ngagner\nvent\nfenêtre\nvin\naile\ngagnant\nhiver\nessuyer\nfil\nsorcière\ntémoin\nloup\nbois\nlaine\nmot\nmonde\nver\nemballage\népave\nlutter\npoignet\nécrire\nécrivain\nécrit\nradiographie\nyacht\nbâiller\nannée\njeune\njeunesse"
  },
  {
    "path": "internal/game/words/he",
    "content": "לנטוש\nמנזר\nיכולת\nמסוגל\nלא שגרתי\nלבטל\nהפלה\nאברהם לינקולן\nלקצר\nהיעדרות\nנעדר\nמוחלט\nלספוג\nספיגה\nמופשט\nשופע\nלנצל\nתהום\nזרם ישר וזרם חילופין\nאקדמי\nאקדמיה\nמבטא\nלקבל\nקביל\nקבלה\nגישה\nנגיש\nתאונה\nללוות\nאקורדיון\nחשבון\nרואה חשבון\nצבירה\nמדויק\nאס\nהישג\nחומצה\nאקנה\nבלוט\nהיכרות\nרכישה\nלפעול\nפעולה\nלהפעיל\nפעיל\nפעילות\nשחקן\nחריף\nלהוסיף\nמכור\nהתמכרות\nהוספה\nכתובת\nהולם\nאדידס\nלהתאים\nמנהל\nאדמיניסטרטור\nהערצה\nלהעריץ\nקבלה\nלהודות\nלאמץ\nאימוץ\nחמוד\nמבוגר\nלהתקדם\nיתרון\nהרפתקה\nפרסומת\nפרסום\nעצה\nיועץ\nפרקליט\nאסתטיקה\nרומן\nלהשפיע\nזיקה\nלהרשות לעצמו\nמפוחד\nאפריקה\nאפרו\nחיים לאחר המוות\nאחר הצהריים\nגיל\nסוכנות\nסדר יום\nסוכן\nתוקפני\nזריז\nייסורים\nלהסכים\nהסכם\nחקלאי\nחקלאות\nסיוע\nאיידס\nאוויר\nמזגן\nכרית אוויר\nמטוס\nחברת תעופה\nמטוס\nשדה תעופה\nמעבר\nאלאדין\nאזעקה\nאלבטרוס\nאלבום\nאלכוהול\nהתראה\nחייזר\nחי\nאלרגיה\nסמטה\nאליגטור\nהקצאה\nלהרשות\nקצבה\nבן ברית\nשקד\nמרוחק\nאלפקה\nמזבח\nאלומיניום\nחובבן\nענבר\nדו-משמעות\nדו-משמעי\nשאיפה\nשאפתני\nאמבולנס\nתיקון\nאמריקה\nשופע\nלקטוע\nאמסטרדם\nלשעשע\nאנקונדה\nאנלוגיה\nניתוח\nאנליסט\nעוגן\nאנדרואיד\nמלאך\nאנג׳לינה ג׳ולי\nכעס\nזווית\nדג חכאי\nכועס\nאנגרי בירדס\nבעל חיים\nאנימציה\nאנימה\nעקב\nיום נישואין\nהודעה\nשנתי\nאנונימי\nתשובה\nנמלה\nאנטרקטיקה\nאוכל נמלים\nאנטילופה\nאנטנה\nקן נמלים\nציפייה\nאנטיוירוס\nאנוביס\nסדן\nחרדה\nדירה\nאדישות\nאפוקליפסה\nלהתנצל\nהתנצלות\nמנגנון\nלערער\nלהופיע\nהופעה\nתוספתן\nתיאבון\nלהריע\nמחיאות כפיים\nתפוח\nפאי תפוחים\nזרעי תפוח\nמועמד\nאפליקציה\nמיושם\nלמנות\nפגישה\nלהעריך\nגישה\nמתאים\nאישור\nלאשר\nמשמש\nאקווריום\nשרירותי\nקשת\nארכיאולוגי\nארכאלוג\nקשת\nאדריכל\nארכיטקטורה\nארכיון\nשטח\nארינה\nארגנטינה\nמריבה\nאריסטוקרטי\nזרוע\nארמדילו\nכורסה\nשיריון\nבית שחי\nצבא\nלסדר\nסידור\nלעצור\nיהיר\nחץ\nאומנות\nמאמר\nרהוט\nמלאכותי\nאומן\nאומנותי\nלוודא\nאפר\nמבוייש\nאסיה\nלשאול\nישן\nהיבט\nמתנקש\nתקיפה\nאסיפה\nטענה\nאסרטיבי\nהערכה\nנכס\nמשימה\nאיגוד\nלשער\nהשערה\nביטחון\nכוכבית\nאסטרואיד\nמדהים\nאסטרונאוט\nמקלט מדיני\nאסימטרי\nאתלט\nאטלנטיס\nאטמוספירה\nאטום\nלצרף\nקובץ מצורף\nלתקוף\nתשומת לב\nעליית גג\nיחס\nלמשוך\nמשיכה\nאטרקטיבי\nמכירה פומבית\nאאודי\nקהל\nמבקר\nדודה\nאוסטרליה\nלאשר\nסמכות\nחתימה\nאוטומטי\nאוטונומיה\nזמין\nשדרה\nממוצע\nתעופה\nאבוקדו\nלהימנע\nער\nפרס\nמודע\nנוראי\nמוזר\nגרזן\nציר\nבבון\nתינוק\nגב\nכאב גב\nעמוד שדרה\nסלטה לאחור\nרקע\nתיק גב\nבייקון\nרע\nגירית\nשקית\nבייגל\nחמת חלילים\nבאגט\nערבות\nפיתיון\nלאפות\nמאפייה\nבקלאווה\nאיזון\nמאוזן\nמרפסת\nקירח\nכדור\nבלרינה\nבלט\nבלון\nפתק הצבעה\nבמבי\nבמבוק\nלאסור\nבננה\nלהקה\nתחבושת\nתחבושת\nבנדנה\nלחבוט\nבנגו\nבנק\nבנקאי\nפשיטת רגל\nבאנר\nבר\nברק אובמה\nברברי\nברביקיו\nגדר תייל\nספר\nברקוד\nחשוף\nמיקוח\nלנבוח\nאסם\nחבית\nמחסום\nבארט סימפסון\nברמן\nבסיס\nבייסבול\nמרתף\nבסיסי\nאגן\nבסיס\nסל\nכדורסל\nעטלף\nאמבט\nחדר אמבטיה\nגקוזי\nבאטמן\nסוללה\nקרב\nשדה קרב\nספינת קרב\nמפרץ\nכידון\nבזוקה\nחוף\nמקור\nקרן\nשעועית\nפוף\nכובע גרב\nשעועית\nדוב\nמלכודת דובים\nזקן\nקצב\nביטבוקס\nיפייפה\nבונה\nלהפוך ל\nמיטה\nפשפש מיטה\nסדין\nחדר שינה\nזמן שינה\nדבורה\nבקר\nבירה\nסלק\nבטהובן\nחיפושית\nלבקש\nלהתחיל\nהתחלה\nלהתנהג\nהתנהגות\nעריפת ראש\nאמונה\nפעמון\nגמבה\nשאגה\nבטן\nפופיק\nשייך\nמתחת\nחגורה\nספסל\nעיקול\nמוטב\nתועלת\nפירות יער\nלהתערב\nלבגוד\nתנך\nאופניים\nביג בן\nאופניים\nחשבון\nביל גייטס\nביליארד\nפח\nלקשור\nבינגו\nמשקפת\nביוגרפיה\nביולוגיה\nעץ שדר\nציפור\nמקלחת ציפורים\nיום הולדת\nביסקוויט\nבישופ\nכלבה\nביטקוין\nלנשוך\nמר\nשחור\nבלאק פריידי\nחור שחור\nאוכמנית\nסחיטה\nנפח\nלהב\nלהאשים\nתפל\nריק\nשמיכה\nפיצוץ\nאקונומיקה\nלדמם\nבלנדר\nלברך\nספינת אוויר\nעיוור\nכיסוי עיניים\nסופה\nלחסום\nבלונד\nדם\nשפיכות דמים\nמדמם\nמכה\nדג אבו נפחא\nכחול\nגינס\nאוכמנית\nלהסמיק\nבמוו\nאופניים\nחזיר בר\nלוח\nסירה\nמזחלת שלג\nגוף\nשומר ראש\nלהרתיח\nמודגש\nבריח\nפצצה\nמפציץ\nמחבל\nקשר\nעצם\nנזלת\nספר\nסימניה\nמדף\nבום\nבומרנג\nמגף\nמגפיים\nגבול\nלהלוות\nאח\nבקבוק\nהקפצת בקבוק\nתחתית\nלהקפיץ\nמאבטח\nקשת\nקיבה\nקערה\nבאולינג\nקופסה\nילד\nצמיד\nגשר לשיניים\nסוגריים\nלהתרברב\nמוח\nשטיפת מוח\nבלמים\nענף\nמותג\nאמיץ\nברזיל\nלחם\nלשבור\nהתמוטטת\nארוחת בוקר\nחזה\nנשימה\nלנשום\nגזע\nבריזה\nמבשלה\nלבנה\nלבנים\nכלה\nגשר\nלהביא\nשידור\nברוקולי\nשבור\nלב שבור\nברונזה\nמטאטא\nמקל מטאטא\nאח\nחום\nבראוני\nחבורה\nברונט\nמברשת\nבועה\nמסטיק\nדלי\nתקציב\nמזנון\nבאגס באני\nבניין\nנורה\nבליטה\nשור\nבולדוזר\nקליע\nלוח מודעות\nמכה\nפגוש\nצרור\nקפיצת באנג׳י\nמיטת קומותיים\nארנבון\nבירוקרטיה\nביורוקרטי\nפורץ\nלקבור\nלשרוף\nלגהק\nבוריטו\nלהתפוצץ\nלקבור\nאוטובוס\nנהג אוטובוס\nתחנת אוטובוס\nשיח\nעסק\nאיש עסקים\nעסוק\nקצב\nמשרת\nלחי של טוסיק\nחמאה\nפרפר\nכפתור\nלקנות\nנהג מונית\nתא\nארון\nכבל\nקקטוס\nבית קפה\nכלוב\nעוגה\nחישוב\nלוח שנה\nעגל\nלהתקשר\nרגוע\nקלוריה\nגמל\nמצלמה\nמחנה\nקמפיין\nמדורה\nקמפינג\nפחית\nפותחן\nקנדה\nכנרית\nלבטל\nסרטן\nמועמד\nנר\nמקל הליכה\nקופסה\nתותח\nבד\nקניון\nכובע\nמסוגל\nגלימה\nבירה\nקפיטליזם\nקפוצ׳ינו\nמזל גדי\nקפטן\nקפטן אמריקה\nשובה לב\nללכוד\nמכונית\nשטיפת מכוניות\nפחמן\nכרטיס\nארון\nלדאוג\nקריירה\nזהיר\nקרנבל\nקרניבור\nנגר\nשטיח\nכרכרה\nמנשא\nגזר\nלשאת\nעגלה\nסרט מצוייר\nלגלף\nכיסוי\nמזומן\nקזינו\nקלטת\nלצקת\nטירה\nקורבן\nחתול\nאשת חתול\nקטלוג\nקטלוג\nקטפולטה\nלתפוס\nקטגוריה\nלספק\nזחל\nשפמנון\nקתדרלה\nבקר\nקלחת\nכרובית\nגורם\nזהיר\nמערה\nאיש מערה\nקוויאר\nתקרה\nמאוורר תקרה\nלחגוג\nחגיגה\nסלבריטי\nתא\nטלפון סלולרי\nמרתף\nצלו\nמלט\nבית קברות\nצנזורה\nמפקד אוכלוסין\nסנטאור\nמרכז\nמרבה רגליים\nמרכזי\nמאה\nקרברוס\nדגני בוקר\nטקס\nמסויים\nתעודה\nשרשרת\nמסור שרשרת\nכסא\nגיר\nאתגר\nזיקית\nשמפניה\nאלוף\nהזדמנות\nנברשת\nלשנות\nערוץ\nבלאגן\nבחור\nפרק\nדמות\nאופייני\nלהטעין\nמטען\nכריזמטי\nצדקה\nצ׳ארלי צ׳פלין\nחן\nטבלה\nצארטר\nמרדף\nשוביניסט\nזול\nלבדוק\nלחי\nלחיים\nעליז\nמעודדת\nגבינה\nציזבורגר\nעוגת גבינה\nציטה\nשף\nכימיקל\nכימיה\nצק\nדובדבן\nפריחת דובדבן\nשחמט\nחזה\nשיער חזה\nערמון\nחזה\nללעוס\nצובקה\nתרנגולת\nציף\nציוואוואה\nילד\nילדות\nילדותי\nצלצול\nארובה\nשימפנזה\nסנטר\nסין\nציינה טאון\nצינצילה\nשבב\nשוקולד\nבחירה\nלחנוק\nלבחור\nלחתוך\nצופסטיקס\nמיתר\nפזמון\nקריסמס\nכרום\nכרוני\nצאק נוריס\nכנסייה\nציקדה\nסיגריה\nקולנוע\nעיגול\nמחזור\nנסיבות\nקרקס\nתושב\nעיר\nאזרחי\nאזרחות\nציוויליזציה\nטענה\nמחיאות כפיים\nלהבהיר\nקלרינט\nהתנגשות\nמחלקה\nקלאסי\nסיווג\nכיתה\nטופר\nחימר\nנקי\nניקוי\nפינוי\nפקיד\nקליקבייט\nצוק\nאקלים\nטיפוס\nמרפאה\nגלימה\nשעון\nלסגור\nסגור\nבגד\nבגים\nמתלה בגדים\nענן\nתלתן\nליצן\nדג ליצן\nמועדון\nרמז\nאשכול\nמאמן\nפחם\nקואליציה\nחוף\nמשמר החופים\nתחתית לכוס\nמעיל\nקוברה\nתיקן\nקוקטייל\nקוקוס\nגולם\nקוד\nקפה\nבית קפה\nארון קבורה\nמטבע\nלחפוף\nצירוף מקרים\nקולה\nקר\nהתמוטטות\nקולר\nקולגה\nלאסוף\nאוסף\nמכללה\nנקודותיים\nקולוניה\nעיוור צבעים\nקולוסיאום\nצבע\nצבעוני\nעמודה\nתרדמת\nמסרק\nשילוב\nלשלב\nקומיקאי\nקומדיה\nכוכב שביט\nנוחות\nנוח\nקומיקס\nפקודה\nמפקד\nהערה\nמסחר\nמסחרי\nועדה\nמחויבות\nועדה\nתקשורת\nמשותף\nקומיוניזם\nקומוניסט\nקהילה\nקומפקטי\nחברה\nדומה\nלהשוות\nהשוואה\nתא\nמצפן\nתואם\nלפצות\nפיצוי\nלהתחרות\nיכולת\nמוכשר\nתחרות\nתחרותי\nלהתלונן\nשלם\nמורכב\nתאימות\nסיבוך\nמלחין\nמורכב\nמקיף\nלהתפשר\nמחשב\nמחשוב\nלהודות\nלהגות\nלהתרכז\nריכוז\nרעיון\nתפיסה\nדאגה\nקונצרט\nויתור\nמסקנה\nבטון\nתבלין\nמצב\nמנצח\nקונוס\nוועידה\nווידוי\nביטחון\nבטוח בעצמו\nלהגביל\nסכסוך\nלהתעמת\nעימות\nמבולבל\nבלבול\nתאגיד\nלברך\nקונגרס\nחיבור\nמצפון\nמודע\nתודעה\nקונצנזוס\nשימור\nשמרני\nלשקול\nמשמעותי\nהתחשבות\nעקבי\nקונסולה\nלאחד\nקונספירציה\nקבוע\nקונסטלציה\nמחוז בחירה\nחוקה\nחוקתי\nאילוץ\nלבנות\nבונה\nהתייעצות\nצרכן\nצריכה\nקשר\nמכיל\nעכשווי\nזלזול\nתוכן\nתחרות\nהקשר\nיבשה\nיבשתי\nהמשכיות\nהמשכי\nחוזה\nהתכווצות\nסתירה\nמנוגד\nלהשוות\nתרומה\nשליטה\nשלט\nשנוי במחלוקת\nנוחות\nנוח\nכנס\nמוסכם\nשיחה\nלהמיר\nלהרשיע\nהרשעה\nלשכנע\nטבח\nעוגייה\nצנצנת עוגיות\nמפלצת עוגיות\nקריר\nלשתף פעולה\nשיתוף פעולה\nשיתופי\nלהתמודד\nנחושת\nלהעתיק\nזכויות יוצרים\nאלמוג\nריף אלמוגים\nחוט\nליבה\nפקק שעם\nפותחן\nתירס\nקורן דוג\nפינה\nשדה תירס\nתאגיד\nגופה\nתיקון\nקורלציה\nלהתכתב\nהתכתבות\nשחיתות\nתחפושת\nקוטג\nכותנה\nשיערות סבתא\nשיעול\nמועצה\nלספור\nדלפק\nמדינה\nכפר\nהפיכה\nזוג\nאומץ\nקורס\nבית משפט\nאדיבות\nבן דוד\nלכסות\nכיסוי\nפרה\nפעמון פרה\nקאובוי\nקויוטי\nסרטן\nסדק\nמלאכה\nאומן\nהתרסקות\nקראש בנדיקוט\nארגז\nחלל זחילה\nצבע פנדה\nקרם\nליצור\nיצירה\nאמינות\nקרדיט\nכרטיס אשראי\nאמונה\nלזחול\nזוחל\nצוות\nקריקט\nפשע\nפושע\nמוזר\nמשבר\nמבקר\nקריטי\nביקורת\nקרואטיה\nקרוקודיל\nקוראסון\nייבול\nלחצות\nחץ וקשת\nמעבר\nלכרוע ברך\nעורב\nמוט ברזל\nקהל\nכתר\nכור היתוך\nגס\nרשע\nרשעות\nשייט\nקרום\nקב\nלבכות\nקריסטל\nקובה\nקוביה\nקוקיה\nמלפפון\nעיבוד אדמה\nתרבותי\nתרבות\nגביע\nארון\nקאפקייק\nקופיד\nסקרן\nסלסול\nמטבע\nנוכחי\nתוכנית לימודים\nקארי\nוילון\nעקומה\nכרית\nמשמורת\nלקוח\nלחתוך\nחמוד\nגזירה\nסייבורג\nעיגול\nגליל\nמצילתיים\nדאפי דאק\nפגיון\nיומי\nמוצרי חלב\nחרצית\nדלמטי\nנזק\nלעזאזל\nלרקוד\nשן הארי\nקשקשים\nסכנה\nמסוכן\nלהעז\nחושך\nחיצים\nדארווין\nדארווין ווטרסן\nלוח מחוונים\nדייט\nבת\nיום\nאור יום\nמת\nתאריך יעד\nמסוכן\nדדפול\nחרש\nעסקה\nסוחר\nמוות\nדיון\nחוב\nבכורה\nעשור\nרקבון\nלהחליט\nמכריע\nסיפון\nהצהרה\nלסרב\nקישוט\nדקורטיבי\nלהוריד\nלהקדיש\nעמוק\nצבי\nברירת מחדל\nלהביס\nלהגן\nנאשם\nהגנה\nמחסור\nחוסר\nלהגדיר\nמוגדר\nהגדרה\nמעלה\nעיכוב\nנציג\nלמחוק\nעדין\nלשלוח\nמשלוח\nדרישה\nדמוקרטיה\nדמוקרטי\nלהרוס\nשד\nלהפגין\nהפגנה\nמפגין\nהכחשה\nלהוקיע\nצפיפות\nשקע\nרופא שיניים\nלהכחיש\nדאודורנט\nלעזוב\nעזיבה\nלסמוך\nתלות\nתלוי\nלהפקיד\nמדוכא\nדיכאון\nשלילה\nלשלול\nסגן\nטיפש\nלנחות\nלתאר\nמדבר\nראוי\nלעצב\nמעצב\nרצוי\nתשוקה\nשולחן\nיאוש\nנואש\nלסלוד\nקינוח\nהרס\nפרט\nבלש\nגלאי\nלהרתיע\nלהתדרדר\nלפוצץ\nלפתח\nפיתוח\nחריגה\nלהקדיש\nטל\nדקסטר\nאבחנה\nאלכסון\nתרשים\nמבטא\nדיאלוג\nקוטר\nיהלום\nחיתול\nקוביית משחק\nלהכתיב\nמילון\nלמות\nדיאטה\nשונה\nשוני\nשונה\nקשה\nקושי\nלחפור\nדיגיטלי\nכבוד\nדילמה\nלדלל\nמימד\nלסעוד\nארוחת ערב\nדינוזאור\nלטבול\nתעודה\nדיפלומט\nדיפלומטי\nישיר\nכיוון\nבמאי\nתיקייה\nמלוכלך\nנכות\nחיסרון\nחוסר הסכמה\nלהיעלם\nלאכזב\nאכזבה\nאסון\nמשמעת\nדיסקו\nמחלוקת\nהנחה\nלהרתיע\nשיח\nלגלות\nתגלית\nדיסקרטי\nאפלייה\nלדון\nמחלה\nהסוואה\nמנה\nמטלית\nדיסק\nלא אוהב\nלפטר\nהדחה\nהפרעה\nדיספנסר\nתצוגה\nהלך רוח\nמחלוקת\nשיר העלבה\nלהמיס\nמרחק\nרחוק\nייחודי\nלעוות\nעיוות\nלהפיץ\nמפיץ\nרובע\nהפרעה\nדיווה\nלצלול\nלחלק\nמחולק\nחלוקה\nלהתגרש\nמסוחרר\nדי אן איי\nמעגן\nרופא\nמסמך\nכלב\nמלונה\nבובה\nדולר\nבית בובות\nדולפין\nכיפה\nמקומי\nדומיננטי\nלשלוט\nשליטה\nדומינו\nדונלד דאק\nדונלד טראמפ\nלתרום\nחמור\nתורם\nדלת\nידית\nדורה\nדוריטוס\nמנה\nנקודות\nכפול\nספק\nבצק\nלהוריד\nתריסר\nדרקולה\nטיוטה\nלגרור\nדרקון\nשפירית\nביוב\nדרמה\nדרמטי\nלצייר\nמגירה\nציור\nחלום\nשמלה\nרוטב\nלהיסחף\nלקדוח\nמשקה\nלטפטף\nלנהוג\nנהג\nלרייר\nלהפיל\nטיפה\nבצורת\nלטבוע\nסם\nתוף\nמערכת תופים\nיבש\nברווז\nסלוטייפ\nתאריך יעד\nדו קרב\nדוכס\nמשעמם\nדמבו\nמזבלה\nפרק זמן\nאבק\nתפקיד\nגמד\nדינמי\nדינמיט\nלהוט\nנשר\nאוזן\nאוזניות\nמוקדם\nכדור הארץ\nרעידת אדמה\nשעוות אוזניים\nמזרח\nפסחא\nארנב של פסחא\nקל\nלאכול\nלהאזין\nהד\nליקוי\nכלכלי\nכלכלה\nכלכלן\nכלכלה\nקצה\nמהדורה\nחינוך\nחינוכי\nצלופח\nהשפעה\nיעיל\nחסכוני\nמאמץ\nביצה\nחציל\nאגו\nמצריים\nמגדל אייפל\nאיינשטיין\nמרפק\nקשיש\nלבחור\nבחירות\nציבור בוחרים\nמכונית חשמלית\nגיטרה חשמלית\nחשמלאי\nחשמל\nאלקטרון\nאלקטרוני\nאלקטרוניקה\nאלגנטי\nאלמנט\nפיל\nמעלית\nזכאי\nלחסל\nעלית\nאלמו\nאילון מסק\nרהוט\nאלזה\nלצאת לדרך\nמבוכה\nשגרירות\nגחלים\nעובר\nברקת\nמקרה חירום\nאמינם\nאמוגי\nרגש\nרגשי\nדגש\nאימפריה\nאמפירי\nלהעסיק\nעובד\nמעסיק\nתעסוקה\nריק\nאמו\nלעודד\nמעודד\nסוף\nלסבול\nאוייב\nאנרגיה\nאירוסין\nמנוע\nמהנדס\nאנגליה\nלשפר\nמהנה\nלהגדיל\nלוודא\nלהיכנס\nלבדר\nבידור\nנלהבות\nנלהב\nזכות\nכניסה\nמעטפה\nסביבה\nסביבתי\nפרק\nשווה\nמשווה\nקו המשווה\nשיווי משקל\nציוד\nתקופה\nמחק\nשחיקה\nטעות\nלברוח\nאסקימו\nאספרסו\nמאמר\nמהות\nחיוני\nלבסס\nלהקים\nאחוזה\nלהעריך\nנצחי\nאתי\nאתיקה\nאתני\nאירופה\nהתאדות\nזוגי\nער\nאבולוציה\nמדוייק\nלהגזים\nמבחן\nבחינה\nדוגמה\nאקסקליבר\nחפירה\nמחפר\nחורג\nחריג\nעודף\nהחלפה\nנרגש\nהתרגשות\nמרגש\nלא לכלול\nבלעדי\nתירוץ\nלבצע\nהוצאה להורג\nמנהל\nפטור\nתרגיל\nלהציג\nתערוכה\nגלות\nיציאה\nאקזוטי\nלהרחיב\nהרחבה\nלצפות\nציפייה\nצפוי\nמשלחת\nהוצאה\nיקר\nניסיון\nמנוסה\nניסוי\nניסיוני\nמומחה\nמומחיות\nלהסביר\nהסבר\nמפורש\nלהתפוצץ\nלנצל\nגישוש\nפיצוץ\nלייצא\nלחשוף\nחשיפה\nמהיר\nביטוי\nלהאריך\nהרחבה\nמידה\nחיצוני\nנכחד\nיוצא מהכלל\nחוצן\nאקסטרים\nעין\nגבה\nריס\nצללית\nבד\nנפלא\nחזית\nפנים\nאיפור\nפייסבוק\nמתקן\nעובדה\nגורם\nמפעל\nלדעוך\nלהיכשל\nכשלון\nלהתעלף\nהוגן\nפייה\nאמונה\nנאמן\nשן זהב\nסתיו\nשלילי\nתהילה\nמוכר\nמשפחה\nאיש משפחה\nמאוורר\nפאנטה\nפנטזיה\nרחוק\nדמי נסיעה\nחווה\nחוואי\nלהקסים\nאופנה\nמעצב אופנה\nאופנתי\nמהיר\nמזון מהיר\nלהריץ קדימה\nבררני\nשמן\nאבא\nכיור\nאשמה\nטובה\nמועדף\nטובה\nמועדף\nפקס\nפחד\nסעודה\nנוצה\nתכונה\nפדרלי\nפדרציה\nעמלה\nמשוב\nלהרגיש\nהרגשה\nנשי\nפמיניסטי\nגדר\nסייף\nשרך\nפרארי\nמעבורת\nפסטיבל\nחום\nמעט\nסיב\nבידיוני\nספינר\nשדה\nתאנה\nקרב\nדמות\nבובה\nתיקייה\nלמלא\nסרט\nבמאי\nפילטר\nסופי\nלממן\nפיננסי\nלמצוא\nקנס\nאצבע\nציפורן\nקצה אצבע\nלסיים\nסיים\nפיני\nהרפתקאות פין וגייק\nאש\nאזעקת אש\nברז כיבוי אש\nכבאית\nכדור אש\nקפצון\nכבאי\nגחלילית\nתחנת כיבוי\nכבאי\nאח\nחסין אש\nמדורה\nזיקוק\nקשיח\nראשון\nמקור ראשון\nדג\nקערת דגים\nדייג\nאגרוף\nקרב אגרופים\nבכושר\nכושר\nמאמן כושר\nלתקן\nמתקן\nקצף\nדגל\nמוט דגל\nלהביור\nפלמינגו\nהבזק\nפנס\nבקבוק\nשטוח\nטעם\nפגום\nלברוח\nצי\nבשר\nגמיש\nטיסה\nדיילת\nלזרוק\nעדר\nשיטפון\nזרקור\nרצפה\nדיסקט\nפלורידה\nמוכר פרחים\nקמח\nשגשוג\nפרח\nשפעת\nתנודה\nנוזל\nלשטוף\nחליל\nזבוב\nחובט זבובים\nחזיר מעופף\nערפל\nנייר כסף\nלקפל\nתיקייה\nעם\nפולקלור\nלעקוב\nאוכל\nטיפש\nטיפשי\nרגל\nכדורגל\nלאסור\nכח\nתחזית\nמצח\nזר\nיער\nשריפת יער\nיערנות\nחישול\nלשכוח\nמזלג\nטופס\nרשמי\nתבנית\nמבנה\nנוסחה\nלנסח\nמבצר\nטירה\nעושר\nפורום\nקדימה\nמאובן\nחורג\nיסודות\nמזרקה\nשועל\nחלק\nרסיס\nריחני\nמסגרת\nצרפת\nמותג\nכן\nפרנקישטיין\nהונאה\nנמש\nנמשים\nפרד פלינסטון\nחופשי\nחופש\nלהקפיא\nמקפיא\nמטען\nתדר\nתדיר\nטרי\nסטודנט שנה א\nמקפיא\nחבר\nידידותי\nחברות\nציפס\nמפוחד\nצפרדע\nחזית\nכוויית קור\nציפוי\nמבט כועס\nקפוא\nפרי\nתסכול\nדלק\nמלא\nירח מלא\nמשרה מלאה\nכיף\nפונקציה\nפונקציונלי\nקרן\nהלוויה\nמצחיק\nפרווה\nריהוט\nרעשני\nעתיד\nתועלת\nגלקסיה\nגלריה\nגלון\nמשחק\nגנדלף\nגנדי\nכנופיה\nגנגסטר\nמרווח\nמוסך\nזבל\nגינה\nגנן\nגרפילד\nשום\nגז\nמסיכת גז\nדלק\nאנחה\nשער\nמבט\nגלגל\nאבן חן\nמגדר\nגן\nכללי\nליצור\nדור\nגנרטור\nנדיב\nגנטי\nגיני\nגאון\nעדין\nגנטלמן\nאמיתי\nגאוגרפיה\nגאולוגי\nחיידק\nגרמניה\nמחווה\nלקבל\nגייזר\nרוח רפאים\nענק\nמתנה\nגירפה\nילדה\nלתת\nקרחון\nשמח\nגלדיאטור\nמבט\nלבהות\nזכוכית\nמשפיים\nלדאות\nהצצה\nנצנוץ\nגלובוס\nחשיכה\nמפואר\nתהילה\nברק\nכפפה\nזוהר\nסטיקלייט\nדבק\nדבק סטיק\nגמד\nללכת\nמטרה\nשוער\nעז\nזקן תיש\nגובלין\nאלוהים\nסנדק\nזהב\nשרשרת זהב\nהתפוח הזהוב\nביצת זהב\nדג זהב\nגולף\nעגלת גולף\nטוב\nגופי\nגוגל\nאווז\nגורילה\nממשלה\nמושל\nגלימה\nחן\nציון\nהדרגתי\nבוגר אוניברסיטה\nטקס סיום\nגרפיטי\nדגן\nדקדוק\nגדול\nסבא\nסבתא\nמענק\nאשכולית\nענבים\nגרף\nגרפי\nגרפיקה\nדשא\nצרצר\nאסיר תודה\nקבר\nקברן\nחצץ\nקבר\nכוח המשיכה\nגדול\nהחומה הגדולה של סין\nיוון\nחמדנות\nירוק\nגרין לנטרן\nלברך\nברכה\nחברותי\nרימון\nרשת\nצער\nגריל\nגרימייס\nחיוך\nגרינץ\nלטחון\nידית\nאנקה\nחתן\nקרקע\nשטחים\nלגדול\nגדילה\nגרו\nזועף\nהתחייבות\nשומר\nגורילה\nלנחש\nאורח\nמדריך\nהנחיות\nגיליוטינה\nאשמה\nשרקן\nגיטרה\nמסטיק\nגומי\nדובי גומי\nתולעת גומי\nאקדח\nמרזב\nהרגל\nבית גידול\nהאקר\nשיער\nרולר שיער\nמברשת שיער\nתספורת\nספריי שיער\nשעיר\nחצי\nאולם\nמסדרון\nהילה\nלעצור\nחזיר\nהמבורגר\nפטיש\nערסל\nאוגר\nיד\nנכה\nידית\nלחיצת יד\nשימושי\nלתלות\nקולב\nלקרות\nשמח\nארוחת ילדים\nנמל\nנמל\nקשה\nקסדה\nקושי\nחומרה\nלפגוע\nפוגעני\nמפוחית\nהרמוניה\nנבל\nצלצל\nהארי פוטר\nקשה\nקציר\nסולמית\nכובע\nשנאה\nלגרור\nלרדוף\nיש\nהוואי\nחציר\nמפגע\nאגוז לוז\nראש\nכאב ראש\nסרט ראש\nראש מיטה\nכיוון\nכותרת\nאוזניות\nמפקדה\nלרפא\nבריאות\nבריא\nלשמוע\nלב\nחום\nגן עדן\nכבד\nגדר חיה\nקיפוד\nעקב\nגובה\nיורש\nשוד\nמסוק\nגיהנום\nהלו קיטי\nקסדה\nעזרה\nעוזר\nחסר ישע\nחצי כדור\nתרנגולת\nעשבי תיבול\nהרקולס\nעדר\nנזיר\nגיבור\nהרואין\nלהסס\nמשושה\nשנת חורף\nשיהוק\nלהתחבא\nהיררכיה\nהירוגליף\nגבוה\nכיף\nנעלי עקב\nשיא\nשיא\nכביש מהיר\nטיול\nמצחיק\nגבעה\nירך\nהיפ הופ\nהיפי\nהיפופוטם\nהיסטוריון\nהיסטורי\nהיסטוריה\nלהכות\nטרמפיסט\nכוורת\nהוביט\nהוקי\nלהחזיק\nחור\nחג\nהוליוד\nקדוש\nבית\nלבד בבית\nהומלס\nהומר סימפסון\nכן\nדבש\nחלת דבש\nמכובד\nכבוד\nפרסה\nוו\nדילוג\nתקווה\nקלאס\nאופק\nאופקי\nקרן\nהורוסקופ\nאימה\nסוס\nשוט\nצינור\nבית חולים\nהכנסת אורחים\nמארח\nשבוי\nעוין\nעוינות\nחם\nשוקו\nנקניקיה\nרוטב חריף\nבית מלון\nשעה\nשעון חול\nבית\nצמח בית\nעקרת בית\nמגורים\nלרחף\nרחפת\nחיבוק\nענק\nחישוק\nהענק הירוק\nאדם\nגוף האדם\nאנושות\nיונק הדבש\nהומור\nרעב\nרעב\nצייד\nציד\nמכשול\nפגוע\nבעל\nבקתה\nצבוע\nלהפנט\nהשערה\nקרח\nגלידה\nאוטו גלידה\nקרחון\nנטיף\nרעיון\nאידאלי\nהזדהות\nלזהות\nלזהות\nאידיאולוגיה\nבורות\nבור\nלהתעלם\nאיקאה\nלא חוקי\nחולי\nאשלייה\nלאייר\nאיור\nתמונה\nדימיון\nלדמיין\nמהגר\nהגירה\nחסין\nפגיעה\nאימפריאלי\nהשלכה\nמשתמע\nלייבא\nחשיבות\nחשוב\nבלתי אפשרי\nלהרשים\nמרשים\nלשפר\nשיפור\nדחף\nלקוי\nבלתי הולם\nלא מסוגל\nתמריץ\nאינץ\nאירוע\nכולל\nבסתר\nהכנסה\nלא הולם\nלהגדיל\nמדהים\nעצמאי\nמדד\nהודו\nסימן\nיליד\nעקיף\nאישי\nמקורה\nלפנק\nתעשייתי\nתעשייה\nבלתי נמנע\nלזהם\nזיהום\nאינסופי\nלנפח\nאינפלציה\nהשפעה\nמשפיען\nלא פורמלי\nמידע\nתשתית\nרכיב\nתושב\nלרשת\nעכבה\nהתחלתי\nיוזמה\nלהזריק\nזריקה\nלפצוע\nפציעה\nפונדק\nפנימי\nתמים\nחדשנות\nחקירה\nחרק\nלהכניס\nבפנים\nפנימי\nתובנה\nלהתעקש\nהתעקשות\nנדודי שינה\nמפקח\nהשראה\nלתת השראה\nלהתקין\nלהתקין\nאינסטינקט\nמוסד\nהוראה\nכלי נגינה\nלא מספיק\nביטוח\nלבטח\nמשולב\nאינטגרציה\nיושרה\nמידע\nאינטלקטואלי\nאינטליגנציה\nאינטנסיבי\nלהגביר\nכוונה\nאינטרקציה\nאינטרקטיבי\nריבית\nמעניין\nממשק\nהפרעה\nבינוני\nפנימי\nבינלאומי\nאינטרנט\nלפרש\nלהפריע\nצומת\nהתערבות\nראיון\nלהכיר\nהיכרות\nפלישה\nהמצאה\nחקירה\nחוקר\nהשקעה\nבלתי נראה\nהזמנה\nלהזמין\nאייפד\nאייפון\nאירלנד\nברזל\nענק הברזל\nאיירונמן\nאירוניה\nלא רלוונטי\nאי\nבידוד\nישראל\nלהנפיק\nאיטליה\nחפץ\nשנהב\nקיסוס\nמנורת דלעת\nגאקט\nפטיש אוויר\nגקי צאן\nיגואר\nכלא\nחלפיניו\nריבה\nגיימס בונד\nמנקה\nיפן\nצנצנת\nלסת\nגיי זי\nגאז\nקנאי\nגינס\nגיפ\nריבה\nגלי\nמדוזה\nגנגה\nלנדנד\nהלצה\nליצן\nישו\nסילון\nאופנוע ים\nתכשיט\nגימי ניוטרון\nעבודה\nרוכב\nגון סנה\nגוני בראבו\nמפרק\nבדיחה\nגוקר\nיומן\nעיתונאי\nמסע\nשמחה\nשופט\nשיפוט\nמשפטי\nללהטט\nמיץ\nלקפוץ\nחבל קפיצה\nצומת\nגונגל\nזוטר\nמזון מהיר\nסמכות שיפוט\nחבר מושפעים\nרק\nצדק\nהצדקה\nלהצדיק\nקנגורו\nקריוקי\nקרטה\nקטנה\nקטי פרי\nקאזו\nקבב\nלשמור\nחבית\nקנדמה\nקרמיט\nקטשופ\nקומקום\nמפתח\nמקלדת\nקיי אף סי\nלבעוט\nילד\nכלייה\nלהרוג\nרוצח\nקים גונג און\nסוג\nגן ילדים\nמלך\nקינג קונג\nממלכה\nקרבה\nקירבי\nנשיקה\nערכה\nמטבח\nעפיפון\nחתלתול\nקיווי\nללוש\nברך\nלכרוע ברך\nסכין\nאביר\nלסרוג\nלדפוק\nקשר\nלדעת\nידע\nמפרק\nקואלה\nקוראן\nקראקן\nקונג פו\nתווית\nמעבדה\nעבודה\nמעביד\nשרוך\nחוסר\nסולם\nליידי\nליידי גאגה\nפרת משה רבינו\nאגם\nטלה\nמנורה\nאדמה\nבעל דירה\nבעל קרקע\nנוף\nמסלול\nשפה\nעששית\nהקפה\nלפטופ\nגדול\nלאס וגאס\nלזנייה\nלייזר\nלאסו\nאחרון\nמאוחר\nאחרון\nצחוק\nארוחת צהריים\nכביסה\nלבה\nמנורת לבה\nחוק\nמדשאה\nמכסחת דשא\nעורך דין\nלהניח\nשכבה\nפריסה\nעצלן\nלהוביל\nמוביל\nהנהגה\nעלה\nעלון\nנזילה\nלהישען\nללמוד\nלחכור\nרצועה\nעור\nלעזוב\nהרצאה\nעלוקה\nשמאל\nשאריות\nרגל\nחוקי\nאגדה\nחקיקה\nחקיקה\nבית מחוקקים\nלגו\nרגליים\nפנאי\nלימון\nלימונדה\nלמור\nלהלוות\nאורך\nעדשה\nלאונרדו דה וינצי\nלאונרדו די קפריו\nלפרקון\nשיעור\nלתת\nמכתב\nחדה\nשלב\nלרחף\nאחריות\nליברלי\nחירות\nספרנית\nספרייה\nרישיון\nרישיון\nללקק\nליקריץ\nמכסה\nלשקר\nחיים\nסגנון חיים\nמעלית\nאור\nנורה\nקל יותר\nמגדלור\nברק\nחרב אור\nכמו\nסביר\nשושן\nנופר\nגף\nלימבו\nליים\nלהגביל\nהגבלה\nמוגבל\nלימוזינה\nקו\nלינארי\nפשתן\nלהתעכב\nקשר\nאריה\nמלך האריות\nשפה\nשפתיים\nשפתון\nנוזל\nרשימה\nלהקשיב\nידיעת קרוא וכתוב\nבאופן מילולי\nספרות\nהתדיינות\nקופסת חול\nחי\nתוסס\nכבד\nלטאה\nלאמה\nמטען\nנטען\nלחם\nהלוואה\nלובי\nלובסטר\nלמצוא\nמיקום\nלנעול\nאכסניה\nבול עץ\nהגיון\nהגיוני\nלוגו\nסוכרייה על מקל\nלונדון\nגלגל ענק\nבודד\nארוך\nלהסתכל\nלופ\nרופף\nלבזוז\nלהפסיד\nמפסידן\nהפסד\nהפסיד\nמגרש\nקרם לחות\nלוטו\nרועש\nטרקלין\nאהבה\nמאהב\nנמוך\nנמוך יותר\nנאמן\nנאמנות\nמזל\nבר מזל\nמטען\nלואיגי\nחוטב עצים\nגוש\nארוחת צהריים\nריאה\nלינקס\nמילות שיר\nמקרוני\nמכונה\nמכונות\nמאצו\nמדגסקר\nמאפיה\nמגזין\nקסם\nקסם\nשרביט קסמים\nקוסם\nמגמה\nמגנט\nמגנטי\nזכוכית מגדלת\nעוצמה\nעוזרת בית\nדואר\nתיבת דואר\nדוור\nראשי\nמיינסטרים\nתחזוקה\nראשי\nרוב\nלעשות\nאיפור\nקניון\nממוטה\nאיש\nלנהל\nהנהלה\nמנהל\nתחש נהרות\nבור בכביש\nמניקור\nבובת ראווה\nמידה\nאחוזה\nגמל שלמה\nידני\nלייצר\nיצרן\nכתב יד\nמפה\nמאראקס\nמרתון\nשייש\nלצעוד\nמרגרינה\nשוליים\nציפורני חתול\nימי\nמאריו\nציון\nמארק זוקרברג\nשוק\nשיווק\nריבה\nמרמיטה\nנישואין\nנשוי\nמאדים\nביצה\nמרשמלו\nקמע\nמסיכה\nמסה\nמסג\nראשי\nגפרור\nקופסת גפרורים\nחומר\nמתמטיקאי\nמתמטיקאי\nמטריצה\nחומר\nמזרון\nבוגר\nמקסימום\nמיונז\nראש עיר\nמבוך\nמקדונלדס\nאחו\nארוחה\nממוצע\nמשמעות\nבעל משמעות\nאמצעים\nלמדוד\nבשר\nקציצה\nקציץ\nמכונאי\nמכני\nמנגנון\nמדליה\nתרופה\nימי הביניים\nבינוני\nמדוזה\nסוריקטה\nלפגוש\nפגישה\nמגפון\nמלון\nנמס\nחבר\nחברות\nמם\nזכור\nתזכיר\nאנדרטה\nזיכרון\nמנטלי\nלציין\nתפריט\nמרצדס\nסוחר\nכספית\nרחמים\nערך\nבת ים\nהודעה\nמבולגן\nמתחת\nמטאור\nשיטה\nמתודולוגיה\nמקסיקו\nמיכאל גקסון\nמיקי מאוס\nמיקרופון\nמיקרוסקופ\nמיקרוסופט\nמיקרוגל\nאמצע\nמעמד הביניים\nחצות\nהגירה\nמתון\nמייל\nצבא\nחלב\nחלבן\nמילקשייק\nשביל החלב\nטחנה\nפנטומימה\nמוח\nשלי\nמיינקרפט\nכורה\nמינרל\nמיניקליפ\nמיני גולף\nלצמצם\nמינימום\nמיניון\nשר\nמשרד\nמיני ואן\nמינורי\nמיעוט\nמינוטאור\nמנטה\nדקה\nנס\nמראה\nהפלה\nאומלל\nאומללות\nלהטעות\nלהתגעגע\nטיל\nערפל\nתערובת\nתערובת\nנייד\nדגם\nמודרני\nצנוע\nמודול\nמוהוק\nעובש\nחפרפרת\nמולקולרי\nמולקולה\nרגע\nמומנטום\nמונה ליזה\nמונרך\nמלוכה\nמנזר\nיום שני\nכסף\nנזיר\nקוף\nמונופול\nמפלצת\nמפלצתי\nמון בלאן\nחודש\nחודשי\nמצב רוח\nירח\nאייל\nמגב\nמוסרי\nמורל\nמורגן פרימן\nבוקר\nקוד מורס\nפת\nמשכנתא\nמורטי\nפסיפס\nמסגד\nיתוש\nטחב\nעש\nרעל עש\nאמא\nלוח אם\nמוטיב\nמוטיבציה\nאופנוע\nאופנוע\nנהג\nכביש מהיר\nעובש\nהר אוורסט\nהר רושמור\nהר\nהתאבלות\nעכבר\nמלכודת עכברים\nפה\nלזוז\nתזוזה\nסרט\nזז\nמוצארט\nמיסטר בין\nמיסטר מיסיקס\nמיסטר בין\nמיסטר מיסיקס\nאמ טי וי\nבוץ\nמאפין\nספל\nמולטימדיה\nהרבה\nלהכפיל\nאמא\nעירוני\nרצח\nרוצח\nשריר\nמוזיאון\nפטרייה\nמוזיקה\nמוזיקלי\nמוזיקאי\nמוסקט\nשפם\nחרדל\nמוטציה\nמלמול\nהדדי\nמיתוס\nנאצוס\nציפורן\nפצירה\nלק\nשם\nתנומה\nמפית\nצר\nחד שן\nנאסא\nנאסקאר\nלאומי\nלאומיות\nלאומני\nאזרחות\nיליד\nטבע\nחיל הים\nחיוני\nצוואר\nצורך\nמחט\nשלילי\nלהתעלם\nרשלנות\nמשא ומתן\nשכן\nשכונה\nשכן\nשכונה\nנימו\nאחיין\nנפטון\nחנון\nעצב\nלחוץ\nקן\nרשת\nהולנד\nרשת\nניטרלי\nחדש\nניו זילנד\nעולה חדש\nחדשות\nעיתון\nנחמד\nניקל\nלילה\nמועדון לילה\nסיוט\nנייק\nנינגה\nנינטנדו סוויטץ\nאצילי\nהנהון\nצומת\nרעש\nרעשני\nלמנות\nמועמדות\nשטויות\nטירון\nנודל\nנורמה\nנורמלי\nצפון\nצפון קוריאה\nהזוהר הצפוני\nנורווגיה\nאף\nשיער אף\nנזם\nאף מדמם\nנחיריים\nחריץ\nהערה\nמחברת\nפנקס\nכלום\nהודעה\nנוטיפיקציה\nרעיון\nידוע לשמצה\nשם עצם\nרומן\nגרעיני\nנאגט\nאטום\nמספר\nנזירה\nאחות\nמשתלה\nאגוז\nמפצח אגוזים\nנוטלה\nמוסקט\nקצה המזלג\nאלון\nמשוט\nאובליקס\nמשקל עודף\nלציית\nאובייקט\nהתנגדות\nמטרה\nחובה\nמעורפל\nתצפית\nמצפה כוכבים\nצופה\nמכשול\nלהשיג\nברור\nהזדמנות\nעיסוק\nמקצועי\nלהעסיק\nאוקיינוס\nמתומן\nתמנון\nמוזר\nעבירה\nלהעליב\nעבריין\nמעליב\nהצעה\nמשרד\nקצין\nרשמי\nלקזז\nצאצא\nשמן\nאולף\nישן\nאומלט\nהשמטה\nבצל\nפתוח\nאופרה\nמבצע\nמבצעי\nדעה\nמתחרה\nהתנגדות\nמתנגד\nההפך\nאופוזיציה\nאופטימיות\nאופטימי\nאפשרות\nאופציונלי\nאוראלי\nתפוז\nאורנגוטן\nמסלול\nאורקה\nתזמורת\nסחלב\nהזמנה\nרגיל\nאוראו\nאיבר\nאורגני\nאירגון\nלארגן\nהתמצאות\nאוריגמי\nמקור\nמקורי\nאורתודוקסי\nיען\nאחר\nלוטרה\nחיצוני\nתלבושת\nמוצא\nתמצית\nהשקפה\nפלט\nבחוץ\nאליפטי\nתנור\nבסך הכל\nלהתעלם\nתצפית\nמשקל חורג\nהצפה\nחייב\nינשוף\nבעל\nבעלות\nחמצן\nצדפה\nפקמן\nקצב\nלארוז\nחבילה\nחפיסה\nשלולית\nעמוד\nכאב\nכואב\nצבע\nפיינטבול\nצייר\nזוג\nפיגמה\nארמון\nפלטה\nכף יד\nעץ דקל\nמחבת\nפנקייק\nפנדה\nפאנל\nפניקה\nחליל פאן\nפנתר\nמכנסיים\nפפאיה\nנייר\nשקית נייר\nמצנח\nמצעד\nפרדוקס\nפסקה\nתוכי\nמקביל\nמשותק\nפרמטר\nחנינה\nהורה\nהורי\nהורים\nפריז\nפארק\nחנייה\nפרלמנט\nתוכי\nחלק\nמשרה חלקית\nמשתתף\nלהשתתף\nחלקיק\nמסוים\nשותף\nשותפות\nמסיבה\nלמסור\nמעבר\nנוסע\nתשוקה\nתשוקתי\nפסיבי\nדרכון\nסיסמה\nעבר\nפסטה\nפסטל\nמאפה\nמראה\nללטף\nטלאי\nפטנט\nדרך\nסבלנות\nפציינט\nפטיו\nפטריק\nפטריוט\nפטרול\nתבנית\nלעצור\nמדרכה\nכף רגל\nלשלם\nתשלום\nפייפאל\nשלום\nשקט\nאפרסק\nטווס\nפסגה\nבוטן\nאגס\nאפונים\nאיכר\nדוושה\nהולך רגל\nשקנאי\nעט\nעונשין\nעיפרון\nקלמר\nמחדד\nמטוטלת\nלחדור\nפינגווין\nחצי אי\nפני\nפנסיה\nפנסיונר\nאנשים\nהחזירה פפה\nפלפל\nפפרוני\nפפסי\nלתפוס\nאחוז\nתפיסה\nמושלם\nלנקב\nלבצע\nביצוע\nמבצע\nבושם\nתקופה\nפריסקופ\nקבוע\nאישור\nלהתמיד\nמתמיד\nאיש\nאישי\nאישיות\nלשכנע\nמזיק\nחיית מחמד\nאוכל של חיות\nחנות חיות\nעלה כותרת\nרחמים\nרוקח\nתופעה\nפילוסוף\nפילוסופי\nפילוסופיה\nפיניאס ופרב\nמסגרת תמונה\nצילום מסמך\nתמונה\nצלם\nצילום\nפוטושופ\nפיזי\nפיזיקה\nפסנתר\nפיקאסו\nלבחור\nגרזן\nמלפפון חמוץ\nפיקניק\nתמונה\nפאי\nחתיכה\nמזח\nחזיר\nיונה\nקופת חזיר\nדיר חזירים\nפיקאצו\nכידון\nערימה\nגלולה\nעמוד\nכרית\nמלחמת כריות\nטייס\nחצקון\nסיכה\nפינבול\nאורן\nאצטרובל\nאננס\nורוד\nהפנתר הורוד\nזרת\nפינוקיו\nשבשבת\nחלוץ\nצינור\nפיראט\nספינת פיראטים\nפיסטוק\nאקדח\nבור\nנאום\nקלשון\nרחמים\nפיצה\nמקום\nמגיפה\nמישור\nתובע\nתוכנית\nמטוס\nכוכב לכת\nקרש\nצמח\nפלסטר\nפלסטיק\nצלחת\nפלטפורמה\nברווזן\nלשחק\nשחקן\nגן משחקים\nפלייסטיישן\nלהפציר\nנעים\nבבקשה\nעונג\nערובה\nמגרש\nלחרוש\nשסתום\nאינסטלטור\nפומפה\nפלוטו\nדלקת ריאות\nכיס\nשיר\nשירה\nמקל פוגו\nנקודה\nרעל\nרעיל\nלדקור\nפוקימון\nדוב קוטב\nעמוד\nשוטר\nמדיניות\nלהבריק\nמנומס\nפוליטי\nפוליטיקאי\nפוליטיקה\nסקר\nזיהום\nפולו\nאגם\nפוני\nקוקו\nפודל\nבריכה\nקקי\nעני\nלפוצץ\nפופקורן\nאפיפיור\nפופאי\nפרג\nקרטיב\nפופולרי\nאוכלוסייה\nמרפסת\nדורבן\nפורקי פיג\nנייד\nפורטל\nסבל\nחלק\nפורטרט\nפורטוגל\nפסואידון\nעמדה\nחיובי\nרשות\nאפשרות\nאפשרי\nדואר\nגלוייה\nפוסטר\nלדחות\nסיר\nסיר זהב\nתפוח אדמה\nפוטנציאל\nשיקוי\nקדרות\nלחבוט\nלמזוג\nאבקה\nכח\nכוחני\nפרקטי\nאימון\nלהלל\nחסילון\nלהתפלל\nתפילה\nלהטיף\nלהקדים\nתקדים\nמדויק\nדיוק\nטורף\nקודם\nצפוי\nלהעדיף\nהעדפה\nהריון\nדעה קדומה\nמוקדם מידי\nפרימיום\nעיסוק\nהכנה\nמרשם\nנוכחות\nמתנה\nהצגה\nשמירה\nנשיאות\nנשיא\nנשיאותי\nללחוץ\nלחץ\nיוקרה\nפרטצל\nשכיחות\nלמנוע\nטרף\nמחיר\nתג מחיר\nגאווה\nכומר\nראשי\nנסיך\nנסיכה\nעיקרון\nפרינגלס\nלהדפיס\nמדפסת\nעדיפות\nפריזמה\nבית כלא\nאסיר\nפרטיות\nפרטי\nזכות\nמיוחס\nפרס\nבעד\nהסתברות\nבעיה\nנוהל\nתהליך\nלהכריז\nדחיינות\nלייצר\nמפיק\nמוצר\nייצור\nפרודוקטיבי\nמקצוע\nמקצועי\nפרופסור\nפרופיל\nרווח\nעמוק\nתוכנית\nמתכנת\nהתקדמות\nפרוגרסיבי\nפרויקט\nהשלכה\nממושך\nהבטחה\nקידום\nהוכחה\nתעמולה\nתקין\nרכוש\nפרופורציה\nפרופורציונלית\nהצעה\nהצעה\nלהעמיד לדין\nתביעה\nסיכוי\nשגשוג\nלהגן\nהגנה\nחלבון\nמחאה\nגאה\nלהוכיח\nלספק\nמחוזי\nהוראה\nלעורר\nשזיף מיובש\nפסיכולוג\nפסיכולוגיה\nפאב\nציבורי\nפרסום\nפרסום\nלפרסם\nמוציא לאור\nפודינג\nשלולית\nפאפין\nמשיכה\nפומה\nפומבה\nמשאבה\nדלעת\nאגרוף\nלהעניש\nענישה\nפאנק\nתלמיד\nמריונטה\nטהור\nטוהר\nמטרה\nארנק\nמרדף\nלדחוף\nלשים\nפאזל\nפירמידה\nהסמכה\nמוסמך\nלהעפיל\nאיכות\nכמותי\nכמות\nרבע\nמלכה\nמסע\nשאלה\nשאלון\nתור\nחול טובעני\nשקט\nעט נוצה\nשמיכה\nלהפסיק\nמכסת\nציטוט\nציטוט\nארנב\nרקון\nמירוץ\nמכונית מירוץ\nגיזעי\nגזענות\nמתלה\nראדאר\nקרינה\nקיצוני\nרדיו\nצנון\nרפסודה\nזעם\nפשיטה\nמסילה\nקרון\nמסילת ברזל\nגשם\nקשת בענן\nמעיל גשם\nטיפה\nיער גשם\nלהרים\nצימוקים\nלגרף\nלהרים\nראלי\nרמפה\nשרירותי\nמטווח\nדירוג\nראפר\nנדיר\nפטל\nחולדה\nקצב\nיחס\nרציונלי\nרביולי\nנא\nלהב\nסכין גילוח\nלהושיט יד\nתגובה\nכור\nלקרוא\nקורא\nמוכן\nאמיתי\nלהבין\nמציאותיות\nמציאותי\nמציאות\nאחורי\nסיבה\nסביר\nמורד\nמרד\nקבלה\nקבלה\nפקיד קבלה\nמיתון\nפזיז\nזהה\nהכרה\nממליץ\nהמלצה\nהקלטה\nהקלטה\nלשחזר\nהחלמה\nבילוי\nגיוס\nמלבן\nלמחזר\nמיחזור\nאדום\nשטיח אדום\nרדיט\nלגאול\nהפחתה\nיתירות\nקנים\nלהפנות\nשופט\nהפניה\nהפניה\nלהרהר\nהשתקפות\nרפורמה\nפליט\nסירוב\nלסרב\nלהתייחס\nאזור\nאזורי\nלרשום\nרישום\nחרטה\nרגיל\nרגולציה\nשיקום\nחזרה\nשלטון\nאייל\nלחזק\nלדחות\nדחייה\nלהתייחס\nקשור\nקשר\nמערכת יחסים\nיחסי\nלהירגע\nהרפיה\nשחרור\nרלוונטיות\nרלוונטי\nאמין\nהסתמכות\nהקלה\nלהקל\nדת\nדתי\nלוותר\nלהיסחף\nלהסתמך\nלהישאר\nלהעיר\nתרופה\nלזכור\nלהזכיר\nמרחוק\nלהשכיר\nלחזור\nחזרה\nלהחליף\nהחלפה\nדווח\nמדווח\nלייצג\nנציג\nלשכפל\nרבייה\nזוחל\nרפובליקה\nמוניטין\nבקשה\nלדרוש\nדרישה\nהצלה\nמחקר\nחוקר\nדומה\nלהביע כעס\nשמורה\nמאגר\nמגורים\nתושב\nמגורים\nלהתפטר\nהתפטרות\nלהתנגד\nפתרון\nאתר נופש\nמשאב\nלכבד\nמכובד\nתגובה\nאחריות\nאחראי\nמנוחה\nמסעדה\nחסר מנוחה\nשיקום\nלרסן\nריסון\nמוגבל\nהגבלה\nתוצאה\nקמעונאות\nקמעונאי\nלשמור\nלפרוש\nפריש\nפרישה\nנסיגה\nלהחזיר\nלחשוף\nנקמה\nלהפוך\nלסקור\nלתקן\nהחייה\nלהחיות\nמהפכה\nמהפכנית\nאקדח\nגמול\nלהריץ אחורה\nרטוריקה\nקרנף\nקצב\nצלע\nסרט\nאורז\nעשיר\nלנקוע\nלרכב\nרוכב\nרכס\nרובה\nימין\nימני\nלצלצל\nצלצול\nלהפגין\nלהרים\nסיכון\nטקס\nנהר\nכביש\nמחסום\nשאגה\nלשדוד\nשודד\nשוד\nרובי רוטן\nציפור אדום החזה\nרובין הוד\nרובוט\nאבן\nרקטה\nכוכב רוק\nתפקיד\nלגלגל\nרומניה\nרומנטי\nרומא\nגג\nחדר\nתרנגול\nשורש\nחדר\nורד\nסיבוב\nרקוב\nמחוספס\nעגול\nמסלול\nשגרה\nשורה\nמלכותי\nתמלוג\nלשפשף\nגומי\nזבל\nאודם\nשטיח\nרוגבי\nהריסה\nכלל\nסרגל\nשמועה\nלרוץ\nאלפאבית רוני\nאצן\nכפרי\nלמהר\nרוסיה\nקדוש\nלהקריב\nעצוב\nאוכף\nספארי\nבטוח\nבטיחות\nלהפליג\nספינת מפרש\nמלח\nסלט\nלמכור\nרוק\nסלמון\nסלון\nמלח\nמי ים\nישועה\nדוגמית\nסמסונג\nמקלט\nחול\nטירת חול\nסנדל\nארגז חול\nסופת חול\nסנדוויץ\nסנטה\nלווין\nשביעות רצון\nמשביע רצון\nמרוצה\nשבתאי\nרוטב\nסאונה\nנקניק\nלשמור\nסקסופון\nלומר\nמשקל\nלסרוק\nשערוריה\nצלקת\nדחליל\nצעיף\nמפחיד\nפיזור\nתסריט\nסצנה\nריח\nלוח זמנים\nתבנית\nמלומד\nמלגה\nבית ספר\nמדע\nמדעי\nמדען\nמספריים\nסקובי דו\nלגרוף\nניקוד\nסקוטלנד\nלטרוף\nלזרוק\nלגרד\nלגרד\nצעקה\nמסך\nבורג\nלשרבט\nתסריט\nצלילה\nפסל\nחרמש\nים\nאריה ים\nמאכלי ים\nשחף\nסוס ים\nכלב ים\nלחפש\nצדף\nמחלת ים\nעונה\nעונתי\nמושב\nחגורת בטיחות\nאצה\nשני\nמשני\nסוד\nמזכירה\nהפרשה\nסעיף\nמגזר\nחילוני\nמאובטח\nאבטחה\nלראות\nזרע\nלחפש\nנראה\nנדנדה\nסגווי\nלתפוס\nבחירה\nעצמי\nלמכור\nמוכר\nחצי עיגול\nסמינר\nלשלוח\nותיק\nתחושה\nלהרגיש\nסנסאיי\nרגיש\nרגישות\nמשפט\nרגש\nנפרד\nהפרדה\nרצף\nסדרה\nרציני\nמשרת\nלשרת\nשרת\nשירות\nישיבה\nסט\nלהתיישב\nישוב\nלתפור\nמכונת תפירה\nצל\nצל\nמוט\nלנהר\nרדוד\nבושה\nשמפו\nצורה\nלחלוק\nבעל מניות\nכריש\nחד\nלנפץ\nלהתגלח\nקצף גילוח\nמחסן\nכבשה\nדף\nמדף\nפגז\nמקלט\nשרלוק הולמס\nמגן\nמשמרת\nלזהור\nספינה טרופה\nחולצה\nלרעוד\nשוק\nנעל\nקופסת נעליים\nשרוך\nלירות\nחנות\nופינג\nעגלת קניות\nנמוך\nמחסור\nמכנסיים\nבעיטה\nרובה צייד\nכתף\nלצעוק\nיעה\nהצגה\nמקלחת\nשרק\nחדף\nלהקטין\nשיח\nלמשוך כתפיים\nביישן\nחולה\nמחלה\nצד\nמצור\nאנחה\nמראה\nסיור\nסימן\nחתימה\nשקט\nמשי\nסילו\nכסף\nכלי כסף\nדומה\nדמיון\nפשטות\nחטא\nלשיר\nסינגפור\nזמר\nיחיד\nכיור\nללגום\nאחות\nלשבת\nאתר\nמצב\nשישייה\nמידה\nלהחליק\nסקייטבורד\nרוכב סקייטבורד\nגלגליות\nשלד\nסקיצה\nסקי\nמקפצת סקי\nמיומנות\nמיומן\nעור\nרזה\nחצאית\nסקיטלס\nסקריבל\nסקרילקס\nגולגולת\nבואש\nשמיים\nצניחה חופשית\nקו רקיע\nסקייפ\nגורד שחקים\nלוח\nלטרוק\nסתירה\nעבד\nמזחלת\nפטיש\nלישון\nשרוול\nחתיכה\nלגלוש\nסליים\nקלע\nקפיץ\nלהחליק\nחלקלק\nסיסמה\nמדרון\nחריץ\nעצלן\nלאט\nליפול\nקטן\nחכם\nלרסק\nריח\nחיוך\nעשן\nחלק\nחילזון\nנחש\nלצלם\nלחטוף\nלהתעטש\nלרחרח\nצלף\nשלג\nכדור שלג\nמלחמת כדורי שלג\nסנובורד\nפתית שלג\nאיש שלג\nלהתכרבל\nלהשרות\nסבון\nלדאות\nכדורגל\nחברתי\nמדיה חברתית\nסוציאליסט\nחברה\nסוציולוגיה\nגרב\nכיס\nגרביים\nסודה\nנתרן\nרך\nתוכנה\nאדמה\nסולרי\nמערכת השמש\nחייל\nמוצק\nסולידריות\nסולו\nפיתרון\nלפתור\nסומבררו\nבן\nקולי\nמתוחכם\nסופרנו\nנשמה\nצליל\nמרק\nחמוץ\nמקור\nדרום\nלזרוע\nחלל\nחליפת חלל\nספינת חלל\nאת חפירה\nספגטי\nספרד\nרזרבה\nניצוץ\nניצוצות\nספרטקוס\nמרחבי\nמרית\nרמקול\nחנית\nמומחה\nזן\nנקוב\nדוגמה\nספקטרום\nלשער\nדיבור\nמהירות\nלאיית\nחוקר מערות\nלבזבז\nכדור\nספינקס\nעכביש\nספיידרמן\nלשפוך\nלסובב\nתרד\nעמוד השדרה\nספירלי\nרוח\nלירוק\nלהכעיס\nלפצל\nלפנק\nספוילר\nדובר\nספוג\nספונג בוב\nספונטני\nסליל\nכף\nנבג\nספורט\nספורט\nנקודה\nתרסיס\nספריי צבע\nממרח\nאביב\nממטרה\nמרגל\nחוליה\nריבוע\nלמעוך\nדיונון\nסקווידוויד\nסנאי\nלדקור\nחווה\nאצטדיון\nצוות\nבמה\nכתם\nגרם מדרגות\nיתד\nדוכן\nחותמת\nלעמוד\nסטנדרטי\nשדכן\nכוכב\nמלחמת הכוכבים\nכוכב ים\nקרמבולה\nהתחלה\nמצב\nהצהרה\nתחנה\nסטטיסטי\nסטטיסטיקה\nפסל\nפסל החירות\nלהישאר\nיציב\nסטייק\nקיטור\nפלדה\nתלול\nסטגוזאורוס\nגזע\nצעד\nסטריאו\nסטיב גובס\nדייל\nלהדביק\nדביק\nשקט\nגירוי\nעוקץ\nטריגון\nלערבב\nתפר\nמלאי\nקיבה\nאבן\nעידן האבן\nמסטול\nשרפרף\nלעצור\nתמרור עצור\nאחסון\nחנות\nחסידה\nסופה\nסיפור\nתנור\nישר\nליישר\nלמתוח\nמוזר\nרצועה\nאסטרטגי\nקש\nתות\nנחל\nסטרימר\nרחוב\nכוח\nלחץ\nלמתוח\nקפדן\nצעד\nמכה\nשרשרת\nרצועה\nשבץ\nהליכה\nחזק\nמבני\nמבנה\nמאבק\nעקשן\nתלמיד\nסטודיו\nללמוד\nחפצים\nלמעוד\nמדהים\nטיפש\nסגנון\nעט\nנושא\nסובייקטיבי\nצוללת\nלהגיש\nלאחר מכן\nחומר\nלהחליף\nפרבר\nרכבת תחתית\nהצלחה\nמוצלח\nפתאומי\nסודוקו\nתעלת סואץ\nלסבול\nסבל\nמספיק\nסוכר\nלהציע\nהצעה\nלהתאבד\nחליפה\nמזוודה\nחליפה\nגופרית\nסכום\nסיכום\nקיץ\nפסגה\nשמש\nכוויה\nחמנייה\nמשקפי שמש\nזריחה\nשמשיה\nאור שמש\nמפקח\nטוב יותר\nסופרמן\nסופרמרקט\nכח על\nמנהל\nכלול\nאספקה\nתמיכה\nלהניח\nלדכא\nשטח\nגלשן\nמנתח\nניתוח\nהפתעה\nמופתע\nמפתיע\nלהקיף\nסקר\nהשרדות\nשורד\nסוזן ווציצקי\nסושי\nחשוד\nחשד\nלתמוך\nסוואג\nלבלוע\nביצה\nברבור\nנחיל\nלהישבע\nזיעה\nסוודר\nלטאטא\nמתוק\nנפוח\nלשחות\nבריכת שחייה\nבגד ים\nלנדנד\nלהחליק\nמפסק\nחרב\nדג חרב\nבית האופרה בסידני\nהברה\nסמל\nסימטריה\nסימפטי\nסימפוניה\nסימפטום\nסינדרום\nמערכת\nשיטתי\nטי רקס\nטי שירט\nשולחן\nטניס שולחן\nמפת שולחן\nטאבלט\nשולחן\nטאקו\nטקטיקה\nראשן\nזנב\nחייט\nזנבות\nלקחת\nהמראה\nמופע כשרונות\nכשרוני\nלדבר\nפטפטן\nגבוה\nטמפון\nמנדרינה\nטנק\nברז\nסרט\nטרנטולה\nמטרה\nטרזן\nטייזר\nטעם\nטעים\nקעקוע\nמס\nמונית\nנהג מונית\nמשלם מיסים\nתה\nמורה\nקבוצה\nקנקן תה\nדמעה\nלהקניט\nכפית\nטכני\nטכניקה\nטכנולוגיה\nבובת דובי\nנוער\nטלפון\nטלסקופ\nטלטאבי\nטלוויזיה\nלספר\nטמפרטורה\nמקדש\nזמני\nלפתות\nפיתוי\nדייר\nמגמה\nמכרז\nטניס\nמחבט טניס\nמתוח\nמתח\nאוהל\nזרוע\nמונח\nטרמינל\nמחסל\nמרפסת\nמפחיד\nמחבל\nמבחן\nלהעיד\nטטריס\nטקסט\nטקסטורה\nלהודות\nתודה\nהחיפושיות\nתאטרון\nגניבה\nנושא\nתאולוגיה\nתאורטיקן\nתאוריה\nתרפיסט\nתרפיה\nמד חום\nתזה\nעבה\nגנב\nירך\nדק\nלחשוב\nהוגה\nצמא\nצמא\nטור\nמחשבה\nמתחשב\nשרוך\nאיום\nלאיים\nסף\nגרון\nכס מלכות\nלזרוק\nדחף\nבריון\nאגודל\nברק\nסופת ברקים\nקרציה\nכרטיס\nלדגדג\nגאות\nלנקות\nעניבה\nטייגר\nצמוד\nמרצפת\nעץ\nזמן\nמכונת זמן\nלוח זמנים\nטימפני\nפח\nקטנטן\nטיפ\nטירמיסו\nצמיג\nעייף\nטישו\nקופסת טישו\nטיטאניק\nכותרת\nקרפדה\nטוסט\nמצנם\nבוהן\nציפורן\nבית שימוש\nסובלני\nלסבול\nאגרה\nעגבניה\nקבר\nמצבה\nטון\nטון\nלשון\nכלי\nארגז כלים\nשן\nפיית שיניים\nמברשת שיניים\nמשחת שיניים\nקיסם שיניים\nראש\nמגבעת\nלפיד\nטורנדו\nטורפדו\nצב\nעינוי\nלזרוק\nסך הכל\nטוטם\nטוקאן\nלגעת\nקשוח\nתיירות\nתייר\nטורניר\nמשאית גרר\nמגבת\nמגדל\nגשר לונדון\nמגדל פיזה\nעיר\nרעיל\nצעצוע\nזכר\nמסלול\nמסלול\nטרקטור\nמסחר\nמסורת\nמסורתי\nתנועה\nרמזור\nטרגדיה\nנגרר\nרכבת\nמאמן\nאימון\nתכונה\nטרנזקציה\nלהעביר\nלשנות\nמעבר\nלתרגם\nתמסורת\nשקוף\nתחבורה\nמלכודת\nמלכודת\nפח אשפה\nנוסע\nמגש\nלדרוך\nהליכון\nאוצר\nגזבר\nלטפל\nטיפול\nאמנה\nעץ\nבית עץ\nלרעוד\nחפירה\nטרנד\nמשפט\nמשולש\nשבט\nהוקרה\nטריק\nטריקשוט\nתלת אופן\nהדק\nטיול\nשלישיות\nחצובה\nטריוויאלי\nעגלה\nטרומבון\nגדוד\nגביע\nטרופי\nצרה\nמכנס\nמשאית\nנהג משאית\nאמת\nחצוצרה\nגזע\nאמון\nנאמן\nאמת\nלנסות\nטובה\nצינור\nלמשוך\nלהתגלגל\nגידול\nגידול\nטונה\nמנגינה\nמנהרה\nצואה\nתרנגול הודו\nפנייה\nלפת\nצב\nטוקסידו\nטוויטי\nמקל\nתאום\nלהתפתל\nטוויטר\nטייקון\nסוג\nטיפוסי\nצמיג\nעטין\nחייזר\nמכוער\nיוקלילי\nכיב\nסופי\nמטרייה\nפה אחד\nלא מודע\nאי וודאות\nדוד\nלא נוח\nתת קרקעי\nלמתוח קו מתחת\nלחתור\nלהבין\nהבנה\nלוקח על עצמו\nתת משקל\nלבטל\nלא נוח\nמובטל\nאבטלה\nלא צפוי\nלא הוגן\nחסר מזל\nחד גבה\nחד קרן\nחד אופן\nמדים\nאיגוד\nייחודי\nיחידה\nאחדות\nאוניברסלי\nייקום\nאוניברסיטה\nלא חוקי\nשונה\nבלתי סביר\nלא נעים\nאי שקט\nלעדכן\nשדרוג\nלשבש\nאורנוס\nאורבני\nדחף\nדחוף\nשטן\nיוסיין בולט\nיו אס בי\nלהשתמש\nשימושי\nחסר שימוש\nמשתמש\nרגיל\nמוחלט\nפנוי\nחופשה\nחיסון\nואקום\nמעורפל\nיהיר\nתקף\nעמק\nיקר ערך\nערך\nערפד\nואן\nוניל\nנעלם\nמשתנה\nסוג\nוריאציה\nמגוון\nגיוון\nמעמ\nותיקן\nכספת\nנער הכספת\nוקטור\nירק\nצמחוני\nצמחייה\nכלי רכב\nצעיף\nוריד\nולוסירפטור\nקטיפה\nפתח איוורור\nלהעז\nנוגה\nמילולי\nגזר דין\nגרסה\nאנכי\nכלי שיט\nותיק\nוטרינר\nאפשרי\nמרושע\nקורבן\nניצלון\nוידאו\nמשחק וידאו\nנוף\nנמרץ\nוילה\nכפר\nתושב כפר\nרשע\nוין דיזל\nגפן\nחומץ\nכונרת\nהפרה\nאלימות\nאלים\nכינור\nבתול\nמציאות מדומה\nמעלה\nוירוס\nמלחציים\nנראה\nראייה\nביקור\nמבקר\nויזואלי\nויטמין\nולוגר\nמקצועי\nוודקה\nקול\nהר געש\nכדורעף\nווליום\nרצוני\nמתנדב\nלהקיא\nוודוו\nמערבולת\nלהצביע\nמצביע\nשובר\nמסע\nפגיע\nנשר\nוווזלה\nרשת אלחוטית\nוופל\nשכר\nעגלה\nמותן\nלחכות\nמלצר\nער\nלהעיר\nללכת\nקיר\nוול-אי\nטפט\nאגוז מלך\nסוס ים\nלשוטט\nרוצה\nמלחמה\nמחלקה\nמלתחה\nמחסן\nחמים\nלהזהיר\nאזהרה\nצו\nלוחם\nיבלת\nלשטוף\nצרעה\nזבל\nשעון\nמים\nמחזור המים\nרובה מים\nמפל\nגל\nשעווה\nדרך\nחלש\nחולשה\nעושר\nכלי נשק\nללבוש\nסמור\nמזג אוויר\nלארוג\nרשת\nאתר\nחתונה\nעשב\nשבוע\nסוף שבועי\nשבועי\nלשקול\nמשקל\nברוך הבא\nרתך\nרווחה\nבאר\nאיש זאב\nמערב\nמערבי\nרטוב\nליוויתן\nוואטסאפ\nחיטה\nגלגל\nמריצה\nשוט\nלהקציף\nוויסקי\nלחישה\nשריקה\nלבן\nשלם\nלהרחיב\nאלמנה\nרוחב\nאישה\nפאה\nלהתפתל\nפראי\nמדבר\nחיות בר\nרצון\nוויליאם שייקספיר\nוויליאם וולאס\nעץ ערבה\nכח רצון\nניצחון\nרוח\nטחנת רוח\nחלון\nשמשה\nיין\nכוס יין\nכנף\nאום כנפיים\nמנצח\nפו הדוב\nחורף\nלמחוק\nכבל\nאלחוטי\nחכם\nמכשפה\nלסגת\nנסיגה\nעד ראייה\nמכשף\nזאב\nגרגרן\nאישה\nפלא\nוונדר וומן\nארץ הפלאות\nעץ\nנקר\nצמר\nמילה\nניסוח\nלעבוד\nאימון\nעובד\nמקום עבודה\nסדנה\nעולם\nתולעת\nלדאוג\nשווי\nפצע\nלעטוף\nעטיפה\nזר\nהריסות\nמפתח ברגים\nלהתאבק\nמתאבק\nהאבקות\nקמט\nזרוע\nלכתוב\nכותב\nכתוב\nטעות\nרנטגן\nאקסבוקס\nמכונת צילום\nקסילופון\nיאכטה\nחצר\nסרט מדידה\nלפהק\nשנה\nספר מחזור\nצהוב\nיטי\nיין-יאנג\nיו יו\nיודה\nיוגורט\nחלבון ביצה\nיושי\nצעיר\nנוער\nיוטיוב\nיוטיובר\nזברה\nזלדה\nצפלין\nאפס\nזאוס\nזיגזג\nאומגה\nרוכסן\nזומבי\nאיזור\nגן חיות\nזום\nזורו\nזומה"
  },
  {
    "path": "internal/game/words/it",
    "content": "capacità\naborto\nabuso\naccademia\nincidente\ncontabile\nacido\natto\ninserisci\ndipendente\naggiunta\nindirizzo\namministratore\nadulto\npubblicità\naffare\nimpaurito\npomeriggio\netà\nagenzia\nagente\naccordo\naria\naereo\nlinea aerea\naeroporto\ncorridoio\nallarme\nalbum\nalcool\nindennità\nalleato\naltare\nambra\nambulanza\namputare\nanalisi\nangelo\nrabbia\nangolo\narrabbiato\nanimale\ncaviglia\nannuncio\nannuale\nanonimo\nformica\nanticipati\nansia\nscusarsi\napparire\nappetito\napplaudire\nmela\napplicazione\nappuntamento\napprovare\nacquario\narco\narchivio\narena\nbraccio\npoltrona\nesercito\narresto\nfreccia\narte\narticolo\nartificiale\nartista\nartistico\ncenere\naddormentato\naspetto\nassalto\nrisorsa\nincarico\nasilo\natleta\natomo\nattacco\nattico\nattirare\nsala delle aste\npubblico\nautomatico\nmedia\naviazione\nsveglio\npremio\nasse\nbambino\nindietro\nsfondo\nbacon\nborsa\ncauzione\ninfornare\nequilibrio\nbalcone\ncalvo\npalla\nballetto\npalloncino\nbanana\ngruppo musicale\nscoppio\nbanca\nbandiera\nbar\nabbaiare\nbarile\nbarriera\nbase\nbaseball\nbacino\ncestino\npallacanestro\npipistrello\nbagno\nbatteria\nbattaglia\ncampo di battaglia\nbaia\nspiaggia\nfascio\nfagiolo\norso\nbarba\nbattere\nletto\ncamera da letto\nape\nmanzo\nbirra\nelemosinare\ndecapitare\ncampana\npancia\ncintura\npanchina\npiegare\nbacca\nscommessa\nbibbia\nbicicletta\nbidone\nbiografia\nbiologia\nuccello\ncompleanno\nbiscotto\nvescovo\ncagna\nmordere\namaro\nnero\nlama\nvuoto\nesplosione\nsanguinare\nbenedire\ncieco\nbloccare\nbionda\nsangue\nmassacro\nsanguinoso\nsoffio\nblu\ntavola\nbarca\ncorpo\nbollire\nbullone\nbomba\nbombardiere\nlegame\nosso\nlibro\nesplosione\nstivale\nconfine\npreoccuparsi\nbottiglia\nsotto\nrimbalzo\narco\nintestino\nciotola\nscatola\nragazzo\ncervello\nfreno\nramo\nmarca\ncoraggioso\npane\nrompere\nseno\nrespirare\nrazza\nbrezza\nfabbrica di birra\nmattone\nsposa\nponte\nportare\ntrasmissione\nbroccoli\nrotto\nbronzo\nfratello\nmarrone\nspazzola\nbolla\nsecchio\nbuffet\nedificio\nlampadina\nproiettile\nfascio\nsepoltura\nbruciare\nseppellire\nautobus\ncespuglio\nattività commerciale\nuomo d'affari\nburro\nfarfalla\npulsante\nacquistare\ncabina\nconsiglio dei ministri\ncavo\nbar\ngabbia\ntorta\ncalcolo\ncalendario\nvitello\nchiamata\ntelecamera\ncampo\nannulla\ncancro\ncandidato\ncandela\ncanna\ntela\nberretto\ncapitale\ncapitano\ncatturare\nauto\ncarta\ncarriera\ntappeto\ncarrozza\ncarota\ntrasportare\ncarrello\nintagliare\nastuccio\ndenaro\ncassetta\ncastello\ngatto\ncatturare\ncattedrale\ncausa\ngrotta\nsoffitto\ncelebrazione\ncellula\ncantina\ncimitero\ncensura\ncentro\ncereale\ncerimonia\ncertificato\ncatena\nsedia\ngesso\nchampagne\ncampione\nmodificare\ncanale\ncaos\ncapitolo\npersonaggio\ncaricare\nbeneficenza\nfascino\ngrafico\nsvalutare\ncontrollare\nguancia\nformaggio\nchimico\nchimica\nciliegia\npetto\nmasticare\npollo\ncapo\nbambino\ninfanzia\ncamino\nmento\npatatine fritte\ncioccolato\nsoffocare\ntritare\ncronico\nchiesa\nsigaretta\ncinema\ncerchio\ncircolazione\ncittadino\ncittà\ncivile\nrichiesta\nclasse\nclassico\naula\nargilla\npulito\nscalata\nclinica\norologio\nvicino\nchiuso\nabiti\nnube\nclub\ntraccia\nallenatore\ncarbone\ncosta\ncappotto\ncodice\ncaffè\nbara\nmoneta\nfreddo\ncrollo\ncollega\nraccogliere\ncollezione\nuniversità\ncolonia\ncolore\ncolorato\ncolonna\ncoma\ncombinazione\ncombinare\ncommedia\ncometa\ncomando\ncommento\ncomunicazione\ncomunità\nazienda\nconfrontare\ncompetere\nlamentarsi\ncompletare\ncomputer\nconcentrato\nconcerto\ncalcestruzzo\nconduttore\nconferenza\nfiducioso\nconflitto\nconfusione\nconnessione\ncoscienza\nconsenso\nritenere\ncospirazione\ncostellazione\ncostrizione\ncostruire\ncontatto\nconcorso\ncontrarre\ncontraddizione\nconvenzione\nconversazione\nconvertire\ngaleotto\ncucinare\nrame\ncopia\ncordone\nnucleo\nmais\nangolo\ncorrezione\ncostume\nvilletta\ncotone\ntosse\ncontare\ncontatore\nnazione\ncoppia\ncorso\ncopertina\nmucca\ncrepa\nmestiere\nartigiano\nschianto\ncrema\ncreazione\ncarta di credito\ncredito\nstrisciamento\nequipaggio\ncricket\ncrimine\npenale\nattraversare\nattraversamento\naccovacciarsi\nfolla\ncorona\npiangere\ncristallo\ncetriolo\ntazza\ncredenza\narricciare\nmoneta\nattuale\nprogramma scolastico\ntenda\ncurva\ncuscino\ncliente\ntagliare\ncarino\ntaglio\nciclo\ncilindro\nlatteria\ndanno\ndanza\npericolo\nbuio\ndata\nfiglia\ngiorno\nluce del giorno\nmorto\nmortale\nsordo\naffare\ncommerciante\nmorte\ndebito\ndiminuire\nprofondità\ncervo\nsconfitta\ndifendere\ngrado\nconsegnare\nconsegna\ndemolire\ndimostrazione\ndentista\nallontanarsi\npartenza\ndepositare\ndepressione\ndiscesa\ndeserto\ndesign\nscrivania\ndistruzione\ninvestigatore\nrivelatore\ndiagnosi\ndiagramma\ndiametro\ndiamante\ndettare\ndizionario\nmorire\ndifferire\ndifferenza\nscavare\ndigitale\ncena\ntuffo\ndirezione\ndirettore\nelenco\nsporco\ninvalidità\nscomparire\ndiscoteca\nsconto\nscoperta\ndiscreto\ndiscutere\nmalattia\npiatto\nantipatia\nschermo\nsciogliere\ndistanza\nlontano\ntuffo\ndividere\ndivisione\ndivorzio\nmedico\ndocumento\ncane\nbambola\ndollaro\ndelfino\ncupola\ndominio\ndonare\nporta\ndose\ndoppio\nimpasto\ntrascinare\ndrago\ndrain\ndisegnare\ncassetto\ndisegno\nsognare\nvestito\ntrapano\nbevanda\nguidare\nautista\ngoccia\nannegare\ndroga\ntamburo\nasciutto\nanatra\ndovuto\nnoioso\ndiscarica\ndurata\naquila\norecchio\npresto\nterremoto\nest\nmangiare\norigliare\neco\nbordo\neducazione\nuovo\ngomito\nelezione\nelettricità\nelettrone\nelettronico\nelettronica\nelemento\nelefante\neliminare\nemergenza\nemozione\nimpero\nvuoto\nfine\nnemico\nenergia\nmotore\ningegnere\ningrandire\naccedere\nentusiasmo\niscrizione\nbusta\nambiente\nepisodio\npari\nequazione\nattrezzatura\nerrore\nfuga\nEuropa\nanche\nsera\nevoluzione\nsuperare\neccitato\nesecuzione\nuscita\nespandere\nespansione\ncostoso\nsperimentare\nesplodere\nesplorazione\nesplosione\nesportare\nespressione\nampliare\nestinto\nextraterrestre\nocchio\nsopracciglio\nfacciata\nviso\nagevolazione\nfabbrica\nfallire\nfallimento\nsvenire\ngiusto\nfata\nautunno\nfama\nfamiglia\nfan\nfantasia\nlontano\nazienda agricola\ncontadino\nveloce\ngrasso\npadre\nfax\npaura\nfesta\npiuma\ntassa\nrecinto\ntraghetto\nfestival\nfebbre\nfibra\nfinzione\ncampo\ncombattimento\nfile\nriempire\nfilm\nfiltro\nfinanza\nfinanziario\ntrova\ndito\nfinire\nfuoco\npompiere\nprimo\npesce\npescatore\ncazzotto\nadattarsi\nfitness\naggiustare\nbandiera\nveloce\nflotta\ncarne\nvolo\nscagliare\nalluvione\npavimento\nfarina\nfiore\ninfluenza\nflui\nsciacquone\nvolare\npiegare\ncibo\nscemo\npiede\ncalcio\nvietare\nfronte\nstraniero\nforesta\nforchetta\nformale\nformula\nfortuna\ninoltrare\nfossile\nfondazione\nfontana\nvolpe\nframmento\nfranchigia\nfrode\nlentiggine\ngratuito\ncongelare\nnolo\nfrequenza\nfresco\nfrigo\namico\namicizia\nrana\ndavanti\ncongelato\nfrutta\ncarburante\ndivertimento\nfunerale\ndivertente\npelliccia\nmobilia\ngalassia\ngalleria\ngallone\ngioco\ndivario\nbox auto\nspazzatura\ngiardino\naglio\ngas\ncancello\ngenio\nsignore\ngeografia\ngeologica\ngesto\nfantasma\ngigante\nregalo\nragazza\ndare\nghiacciaio\nbicchiere\nbicchieri\nplanata\noscurità\nguanto\nsplendore\ncolla\npartire\nobbiettivo\nportiere\ncapra\ndio\noro\ngolf\nbene\ngoverno\ngraduale\ndiplomato\ngrano\nnonno\nnonna\ngrafo\ngrafica\nerba\ntomba\nghiaia\ngravità\nverde\nsalutare\nsaluto\nsmorfia\nsorriso\npresa\nterra\ncrescere\ncrescita\nguardia\nospite\ncolpa\nchitarra\npistola\ngrondaia\nhabitat\ncapelli\ntagliare i capelli\nmetà\nsala\ncorridoio\nmartello\nmano\nhandicap\nappendere\ncontento\nporto\ndifficile\nhardware\ndanno\narmonia\nraccogliere\ncappello\nodiare\nritrovo\nfieno\ntesta\ntitolo\nsede centrale\nsalute\nsalutare\nsentire\ncuore\ncalore\nparadiso\npesante\nsiepe\naltezza\nelicottero\ninferno\ncasco\nemisfero\ngallina\nmandria\neroe\neroina\nnascondere\nalto\nevidenziare\nescursione\ncollina\nanca\nstorico\ncolpire\nstretta\nbuco\nvacanza\ncasa\nmiele\ngancio\norizzonte\norizzontale\ncorno\norrore\ncavallo\nospedale\nostaggio\ncaldo\nhotel\nora\ncasa\npianta della casa\ncasalinga\nlibrarsi\nenorme\numano\numanità\ncacciatore\ncacciare\nmale\nmarito\ncapanna\nipnotizzare\ngelato\nghiaccio\nidea\nidentificazione\nidentificare\nidentità\nillegale\nmalattia\nimmagine\nimmaginazione\nimmaginare\nimmigrante\nimmigrazione\nimportare\nimpulso\nincidente\nreddito\nindividuale\ninterno\nindustriale\nindustria\ninfettare\ninfezione\ninfinito\ngonfiare\ninformazione\ningrediente\nabitante\niniettare\niniezione\ninfortunio\ninnocente\ninsetto\ninserire\ndentro\nispettore\nimpiantare\nistruzione\nstrumento\nintegrazione\nintelligenza\ninternazionale\ncolloquio\ninvasione\ninvestigatore\ninvito\ninvitare\nferro\nisola\nsolitudine\narticolo\ngiacca\nprigione\nmarmellata\nvaso\nmascella\njazz\ngelatina\ncretino\njet\ngioiello\nlavoro\nfantino\ncomune\nscherzo\ngioia\ngiudice\ngiudizio\nsucco\nsaltare\ngiungla\njunior\ngiuria\ngiustizia\nbollitore\nchiave\ncalcio\nragazzo\nrene\nuccidere\nuccisore\ngenere\nre\nregno\nbacio\ncucina\naquilone\nginocchio\ninginocchiarsi\ncoltello\nbussare\nnodo\netichetta\nlaboratorio\npizzo\nscala\nsignora\nlago\nagnello\nlampada\nterra\nproprietario\nproprietario terriero\npaesaggio\nlinguaggio\ngiro\ngrande\nlaser\nultimo\nultimo\nridere\nlanciare\nlavanderia\nprato\navvocato\nposare\ndisposizione\ncomando\nfoglia\nvolantino\nperdita\nmagro\nimparare\npelle\npartire\nconferenza\nsinistra\navanzi\ngamba\nleggenda\nlimone\nlunghezza\nlezione\nlettera\nlivello\nbiblioteca\nlicenza\nleccare\ncoperchio\nmenzogna\nsollevamento\nleggero\ngiglio\narto\nlimite\nlinea\ncollegamento\nleone\nlabbro\nliquido\nelenco\nascolta\nletteratura\nvivere\nfegato\natrio\nindividuare\nposizione\nserratura\ncasetta\nlog\nsolitario\nlungo\nguarda\ncappio\nlargo\nperdere\nlotto\nforte\nsala\namore\ninferiore\nfortunato\ngrumo\npranzo\npolmone\nmacchina\nrivista\nmagnetico\ndomestica\nposta\ncorrente principale\nmanutenzione\nmaggiore\ntrucco\nuomo\ngestione\nmanuale\nproduzione\ncarta geografica\nmaratona\nmarmo\nmarzo\nmarino\nmarketing\nmatrimonio\nsposato\nMarte\npalude\nmaschera\nmassa\nmaestro\nincontro\nmateriale\nmatematico\nmatematica\nmassimo\nsindaco\nlabirinto\npasto\nmisurare\ncarne\nmeccanico\nmedaglia\nmedicina\nmedievale\nmedio\nincontrare\nincontro\nmembro\nmembri\nmemoriale\nmemoria\nmenù\nmercante\nmessaggio\nmetallo\nmicrofono\nmezzo\nmezzanotte\nmiglio\nmilitare\nlatte\nmente\nminatore\nminerale\nminimizzare\nminimo\nminore\nminuto\nspecchio\naborto spontaneo\nperdere\nmissile\nmobile\nmodello\ntalpa\nmolecolare\nsoldi\nmonaco\nscimmia\nmonopolio\nmostro\nmostruoso\nmese\nluna\nmattina\nmoschea\nzanzara\nmadre\nautostrada\nmontagna\ntopo\nbocca\nmossa\nmuovere\nfango\nboccale\nmultimedia\nmultiplo\nmoltiplicare\nomicidio\nmuscolo\nmuseo\nfungo\nmusica\nmusicista\nreciproco\nmito\nchiodo\nnome\npisolino\nstretto\nnatura\nmarina militare\ncollo\nago\nvicino\nquartiere\nnipote\nnido\nnetto\nrete\nnotizia\nnotte\nincubo\ncenno\nrumore\nnord\nnaso\nnota\ntaccuino\nromanzo\nnucleare\nnumero\nsuora\ninfermiera\nasilo\nnoce\nquercia\nobeso\nobbedire\nosservazione\nosservatore\nostacolo\nottenere\noceano\ndispari\noffrire\nufficio\nufficiale\nprole\nolio\nvecchio\nomissione\ncipolla\naperto\nmusica lirica\noperazione\navversario\nopporsi\nfrontale\nopzione\norale\narancia\norbita\norchestra\norgano\noriginale\nattrezzatura\npresa\nschema\nprospettiva\nesternamente\nforno\ngufo\nproprietà\nossigeno\npacco\npacchetto\npagina\ndolore\ndipingere\npittore\npaio\npalazzo\npalma\npadella\ncarta\nparata\nparagrafo\nparallelo\ngenitore\nparco\nparcheggio\nparticella\ncompagno\nassociazione\nfesta\npassaggio\npasseggeri\npassaporto\npassword\npassato\ncolpetto\nbrevetto\nsentiero\nmodello\npausa\nmarciapiede\npagare\npagamento\ntranquillo\narachide\npedone\npenna\nmatita\ncentesimo\npersone\npepe\nper cento\nperforare\nesecutore\nperiodo\npersona\nanimale domestico\nfilosofo\nfotocopia\nfotografia\nfotografo\nfotografia\nfisica\npianoforte\nraccogliere\nimmagine\ntorta\npezzo\nmolo\nmaiale\npiccione\nmucchio\npillola\ncuscino\npilota\nperno\npioniere\nseme\nfossa\npiano\naereo\npianeta\npianta\nplastica\npiattaforma\ngiocare\npiacevole\nimpegno\nspina\ntasca\npoema\npoesia\npunto\nveleno\npolo\npolitica\nsondaggio\ninquinamento\npony\npiscina\npovero\nritratto\npositivo\ninviare\ncartolina\npentola\npatata\nceramica\nversare\npolvere\nenergia\npregare\npreghiera\npreciso\npredecessore\nprevedibile\nincinta\npresente\npresentazione\npresidenza\npresidente\nstampa\npressione\npreda\nprezzo\nprincipe\nprincipessa\nstampa\nstampante\nprigione\nprigioniero\nvita privata\nprivilegio\npremio\nprodurre\nproduttore\nprodotto\nproduzione\nproduttivo\nprofessoressa\nprofilo\nprogramma\nproiezione\nprova\npropaganda\nproprietà\nproporzione\nproporzionale\nproteggere\nprotezione\nproteina\nprotesta\npsicologo\npub\npubblicare\nbudino\ntirare\npompa\nzucca\npugno\nallievo\nspingere\npuzzle\npiramide\nqualificato\nqualità\ntrimestre\nregina\ndomanda\nquestionario\ncoda\nsmettere\nquotazione\ncitazione\nconiglio\ngara\nrazzismo\ncremagliera\nradiazione\nradio\nrabbia\nincursione\nautomotrice\nferrovia\npioggia\narcobaleno\nrally\ncasuale\nrango\nratto\nvota\nrapporto\ncrudo\nraggiungere\nreazione\nreattore\nleggere\nlettore\nposteriore\nribelle\nricevuta\nricezione\ndisco\nregistrazione\nrecupero\nriciclare\nrosso\nriduzione\nridondanza\nriflettere\nriflessione\nregione\nregistrati\nreinserimento\nprova\nregno\nrelazionato\nrelazione\nrilassare\npubblicazione\nreligioso\nriluttanza\nrimanere\nosservazione\nricordare\naffitto\nripetere\nripetizione\nsostituire\nsostituzione\nrapporto\nreporter\nriproduzione\nrettile\nricerca\nricercatore\nresidente\nricorrere\nrisorsa\nriposo\nristorante\nrestrizione\nrisultato\nvendetta\ninverso\nrinascita\nrivivere\ncostola\nnastro\nriso\nricco\nciclista\nfucile\ngiusto\nsquillare\nrivolta\nsalire\nrituale\nfiume\nstrada\nruggito\nrapinare\nrapina\nrobot\nroccia\nrazzo\nruolo\nrotolo\nromantico\ntetto\ncamera\ncorda\nrosa\nriga\nreali\nsciocchezze\nrugby\ncorrere\ncorridore\nsacro\nsacrificio\nsicuro\nvela\nmarinaio\ninsalata\nvendita\nsalmone\nsale\nsalvezza\nsabbia\nsandalo\nsatellitare\nsoddisfacente\nsalsa\nsalsiccia\nsalva\ndire\nscansione\nspargimento\nscena\nprogramma\nscuola\nscienza\nscienziato\npunto\ngraffiare\nurlare\nschermo\ncopione\nscultura\nmare\nfoca\nricerca\nstagione\nstagionale\nposto a sedere\nsecondo\nsecondario\nsegretario\nsicuro\nvedere\nseme\nvendere\nvenditore\nseminario\nanziano\nseparazione\nsequenza\nserie\nservitore\nservire\nservizio\ninsediamento\nsfumatura\nombra\nsuperficiale\nvergogna\nforma\ncondividere\nsqualo\nacuto\nfrantumarsi\nradersi\npecora\nfoglio\nmensola\nconchiglia\nscudo\ncambio\nbrillare\ncamicia\nshock\nscarpa\nsparare\nnegozio\nshopping\ncorto\ncarenza\npantaloncini\ntiro\nspalla\ngrido\nmostrare\ndoccia\ncontrarsi\nalzare le spalle\ntimido\nmalato\nmalattia\nvista\ngiro turistico\ncartello\nfirma\nsilenzio\nseta\nargento\nsimile\nsomiglianza\npeccato\ncantare\ncantante\nsingolo\nlavello\nsorella\nsedersi\nluogo\ntaglia\npattinare\nschizzo\nsciare\ncranio\ncielo\nlastra\nsbattere\nschiaffo\nschiavo\ndormire\nmanica\nfetta\nlimo\nscivolare\nscivoloso\nfessura\nlento\nintelligente\ndistruggere\nodore\nsorridi\nfumo\nlumaca\nserpente\nannusare\nneve\nrannicchiarsi\nsapone\ncalcio\ncalzino\nmorbido\nsoftware\nsuolo\nsolare\nsoldato\nsolido\nassolo\nsoluzione\nrisolvere\nanima\nsuono\nminestra\nsud\nspazio\naltoparlante\ncampione\ndiscorso\nvelocità\nsillabare\nsfera\nragno\nversare\nrotazione\nspinaci\ncolonna vertebrale\nspirito\nsputare\ndiviso\ncucchiaio\nsport\nindividuare\nspray\ndiffusione\nprimavera\nspiare\nsquadra\npiazza\nspremere\npugnalata\npersonale\npalcoscenico\nmacchia\nscala\nstalla\nfrancobollo\nstare in piedi\nstella\nstazione\nstatua\nbistecca\nvapore\nstelo\npasso\nbastone\nappiccicoso\npuntura\npunto\nazione\nstomaco\npietra\nsgabello\nconservazione\nmemorizzare\ntempesta\ndritto\ncannuccia\nfragola\nstrada\nforza\nallungare\nsciopero\ncorda\nictus\nforte\nalunno\nstudio\nstupido\nstile\nsoggettivo\nsostanza\nsobborgo\nriuscito\nzucchero\nsuicidio\ncompleto da uomo\nappartamento\nsomma\nsommario\nestate\nsole\nalba\nluce del sole\nsuperiore\nsupermercato\nsupervisore\nsupporto\nsopprimere\nsuperficie\nchirurgo\nchirurgia\nsorpresa\ncircondare\nsondaggio\nsospettare\ngiurare\nsudore\nmaglione\nspazzare\ndolce\ngonfiarsi\nnuotare\nswing\nrubare\ninterruttore\nspada\nsimmetria\nsistema\nmaglietta\ntavolo\ntavoletta\ncoda\nalto\nserbatoio\nrubinetto\nnastro\nbersaglio\ngustoso\ntaxi\ntè\ninsegnante\nsquadra\nlacrima\ntecnico\ntecnica\ntecnologia\nadolescente\ntelefono\ntelevisione\ntemperatura\ntempio\ninquilino\ntenero\ntennis\ntenda\nterminale\nterrazza\nterrorista\ntest\ntesto\nteatro\nfurto\nterapista\nterapia\nspesso\nmagro\npensare\npensato\nminaccia\nminacciare\ngola\ntrono\ngettare\npollice\nzecca\nbiglietto\nmarea\ncravatta\ntigre\nstretto\npiastrella\ntempo\norario\nlattina\nmancia\nstanco\nfazzoletto di carta\ntitolo\ncrostini\ndito del piede\npomodoro\ntonnellata\nlingua\nattrezzo\ndente\nsuperiore\ntorcia\ntortura\nscossa\ntotale\ntoccare\nturismo\ntorneo\nasciugamano\ntorre\ncittadina\ntossico\ngiocattolo\ntracciare\ntraccia\ncommercio\ntraffico\ntreno\nallenatore\nformazione\ntrasferimento\ntrasparente\ntrasporto\ntrappola\ntesoro\ntrattamento\nalbero\ntendenza\nprova\ntriangolo\ntribù\nomaggio\ntrucco\nviaggio\ncarrello\ntruppe\ntropicale\npantaloni\ncamion\ntronco\ntubo\ncaduta\ntumore\ntunnel\ntacchino\ngirare\ngemello\ntorcere\nmagnate\npneumatico\nbrutto\nombrello\nscomodo\nsottolineare\nuniforme\nunico\nunità\nunità\nuniversità\naggiornare\nirritato\nurbano\nurina\nutente\nvuoto\nvalle\nprezioso\nfurgone\nvariante\nverdura\nvegetazione\nveicolo\nvelo\nvenere\nverbale\nversione\nverticale\nnave\nveterano\nvittima\nvittoria\nvideo\nvisualizza\nvilla\nvillaggio\nviolento\nvergine\nvisione\nvitamina\nvoce\nvulcano\nvolume\nvoucher\nviaggio\ncarro\nvita\nscia\ncamminare\nparete\nguerra\narmadio\ncaldo\navvertimento\nguerriero\nlavare\nrifiuto\norologio\nacqua\ncascata\nonda\nmodo\ndebolezza\nricchezza\narma\nindossare\ntempo metereologico\ntessere\nnozze\nerba\nsettimana\nfine settimana\nsettimanalmente\npeso\nbene\novest\nbagnato\nbalena\ngrano\nruota\nfrusta\nwhisky\nsussurro\nbianca\ntotale\nvedova\nlarghezza\nmoglie\nselvaggio\nnatura selvaggia\nnatura\nvincere\nvento\nfinestra\nvino\nala\nvincitore\ninverno\npulire\nfilo\nstrega\ntestimone\nlupo\ndonna\nlegna\nlana\nparola\nmondo\nverme\npreoccupazione\nferita\navvolgere\nrelitto\nlottare\npolso\nscrivi\nscrittore\nscritto\nsbagliato\nraggi X\nyacht\ncortile\nsbadiglio\nanno\ngiovane\ngioventù\nzero\nzona"
  },
  {
    "path": "internal/game/words/nl",
    "content": "aanbieding\naandrijving\naangename\naankondiging\naantrekken\naanval\naanwezig\naanwijzing\naap\naardappel\naardbei\naardbeving\naardewerk\nabortus\nacademie\naccountant\nachter\nachtergrond\nachteruit\nachtervolgen\nadelaar\nademen\nadres\nadvocaat\nafbeelding\nafbeeldingen\nafdaling\naffaire\nafgelopen\nafgestudeerde\naflevering\nafluisteren\nafname\nafspraak\nafstand\nafval\nafvoer\nagent\nalarm\nAlbertHeijn\nalbum\nalcohol\naltaar\nambacht\namber\nambulance\namputeren\nanalyse\nangst\nannuleer\nanoniem\nanticipatie\nappel\napplaudisseren\naquarium\narchief\narena\narm\narrest\nart\nartikel\nartistiek\nas\nasiel\naspect\natleet\natoom\nautomatisch\navond\naward\nbaan\nbaard\nbaby\nbad\nbak\nbal\nbalkon\nballet\nballon\nbanaan\nband\nbang\nbank\nbanner\nbarrière\nbasis\nbasketbal\nbatterij\nbean\nbed\nbedreig\nbedreiging\nbedrijf\nbedrijfstak\nbeen\nbeer\nbegraaf\nbegraafplaats\nbegrafenis\nbegroet\nbehandeling\nbeheerder\nbeker\nbekijk\nbekken\nbel\nbelofte\nbemanning\nbeperking\nbereik\nberekening\nberg\nbericht\nberijder\nberoerte\nbes\nbescherm\nbescherming\nbespaar\nbespreek\nbestand\nbestrating\nbestuurder\nbetaal\nbetaling\nbeton\nbevredigend\nbevriezen\nbevroren\nbewaker\nbewijs\nbezienswaardigheden\nbibliotheek\nbid\nbier\nbij\nbijbel\nbijt\nbin\nbinding\nbinnen\nbiografie\nbiologie\nbioscoop\nbisschop\nbitter\nblad\nblanco\nblauw\nblijven\nblind\nbloed\nbloeden\nbloedvergieten\nbloem\nblok\nblonde\nbocht\nboek\nboem\nboer\nboerderij\nbol\nbom\nbommenwerper\nbondgenoot\nboog\nboom\nboor\nboos\nboot\nbord\nborgtocht\nborst\nborstel\nbos\nbot\nboter\nbout\nbranden\nbrandstof\nbrandweerman\nbreedte\nbreng\nbriefkaart\nbril\nbroccoli\nbroek\nbroer\nbrok\nbron\nbrons\nbrood\nbrouwerij\nbrug\nbruid\nbruiloft\nbruin\nbrullen\nbubbel\nbuffet\nbuigen\nbuik\nbuis\nbuiten\nbuitenaards\nbuitenlander\nbuitenwijk\nbundel\nbureau\nburgemeester\nburger\nbus\nbuur\nbuurt\ncafé\ncake\ncamera\ncanvas\ncap\ncarrière\ncarve\ncassette\ncat\ncel\ncensuur\nceremonie\ncertificaat\nchampagne\nchaos\ncharme\nchemie\nchemische\nchip\nchirurg\nchocolade\nchronische\ncilinder\ncirculatie\ncirkel\ncitaat\nciteer\ncitroen\nclaim\nclub\ncoach\ncode\ncollectie\ncollega\ncollege\ncoma\ncombinatie\ncombineren\ncommando\ncommentaar\ncommunicatie\ncomputer\nconcentraat\nconcert\nconcurreren\nconferentie\nconflict\nconsensus\nconstruct\ncontact\ncontant\ncontract\ncontroleer\nconventie\ncorrectie\ncrack\ncrash\ncreatie\ncreditcard\ncrème\ncricket\ncrimineel\ncurriculum\ncursus\ncurve\ncyclus\ndacht\ndag\ndaglicht\ndak\ndaling\ndame\ndans\ndappere\ndarm\ndatum\ndeal\ndealer\ndeeg\ndeel\ndeeltje\ndeining\ndekking\ndeksel\ndemonstratie\ndenk\ndepressie\ndetective\ndetector\ndeur\ndiagnose\ndiagram\ndiamant\ndiameter\ndicteer\ndiefstal\ndienaar\ndiep\ndier\ndigitale\ndik\ndiner\ndip\ndirectory\ndirigent\ndisco\ndiscrete\ndivisie\ndochter\ndocument\ndodelijke\ndoel\ndoelman\ndokter\ndolfijn\ndollar\ndoneer\ndonker\ndood\ndoof\ndoolhof\ndorp\ndosis\ndouche\ndraad\ndraag\ndraai\ndraak\ndragen\ndriehoek\ndrink\ndroog\ndroom\ndrug\ndruk\ndrum\ndubbel\nduif\nduik\nduivin\ndump\ndun\ndutje\nduur\ndwaas\necho\nechtgenoot\nechtscheiding\neenheid\neenzaam\neerbetoon\neerlijke\neerste\neet\neetlust\nei\neigendom\neikel\neiken\neiland\neinde\nelektriciteit\nelektron\nelektronica\nelektronische\nelement\nelimineren\nelleboog\nemmer\nemotie\nenergie\nengel\nenkel\nenkele\nenorme\nenthousiasme\nenvelop\nEuropa\nevenredig\nevolutie\nexcuses\nexemplaar\nexperiment\nexplosie\nexport\nextensie\nfabricage\nfabriek\nfaciliteit\nfalen\nfamilie\nfantasie\nfase\nfauteuil\nfax\nfee\nfeest\nfestival\nfictie\nfiets\nfilm\nfilosoof\nfilter\nfinanciële\nfinanciën\nfinish\nfitness\nfix\nfles\nflits\nfluisteren\nflush\nfolder\nfontein\nformele\nformule\nfortuin\nfossiel\nfoto\nfotograaf\nfotografie\nfotokopie\nfout\nfragment\nfranchise\nfraude\nfrequentie\nfruit\nga\nGalaxy\ngalerij\ngallon\ngang\ngangpad\ngarage\ngast\ngat\ngazon\ngebaar\ngebed\ngebouw\ngebroken\ngebruiker\ngedenkteken\ngedicht\ngeest\ngeeuw\ngegijzeld\ngeheugen\ngehoorzamen\ngeit\ngekwalificeerd\ngekwetst\ngeld\ngelei\ngeleidelijke\ngelijkspel\ngeluid\ngeluk\ngelukkig\ngemalen\ngemeenschap\ngemiddeld\ngeneeskunde\ngenie\ngeografie\ngeologische\ngereedschap\ngerelateerde\ngeschenk\ngeschreven\ngeslacht\ngesloten\ngesprek\ngetrouwd\ngetuige\ngeur\ngevaar\ngevangene\ngevangenis\ngevel\ngeweer\ngewelddadige\ngeweten\ngewicht\ngezamenlijke\ngezicht\ngezond\ngezondheid\ngiet\ngiftig\ngitaar\ngladde\nglans\nglas\ngletsjer\nglijden\nglimlach\ngloed\ngod\ngoed\ngoedkoop\ngolf\ngooi\ngoot\ngordijn\ngoud\ngraad\ngraaf\ngraan\ngraf\ngrafiek\ngrap\ngrappig\ngras\ngratis\ngrens\ngriep\ngrijns\ngrimas\ngrind\ngrip\ngroeien\ngroen\ngroente\ngroet\ngrond\ngrootmoeder\ngrootvader\ngrot\ngrote\nhaai\nhaak\nhaar\nhaat\nhabitat\nhak\nhal\nhalfrond\nhamer\nhand\nhanddoek\nhandel\nhandelaar\nhandelen\nhandicap\nhandleiding\nhandschoen\nhandtekening\nhang\nhard\nhardware\nharmonie\nhart\nhaven\nhedge\nheersen\nheet\nheilige\nhek\nheks\nhel\nheld\nhele\nhelikopter\nhelm\nhemel\nherhaal\nherhaling\nherinneren\nherleven\nheroïne\nheropleving\nhersenen\nherstel\nhert\nheup\nheuvel\nhistorisch\nhoek\nhoest\nhond\nhonkbal\nhoofd\nhoofdkantoor\nhoofdletter\nhoofdstuk\nhoog\nhoogte\nhooi\nhoor\nhoorn\nhorizon\nhorizontaal\nhorror\nhotel\nhoud\nhout\nhuidige\nhuilen\nhuis\nhuisdier\nhuisje\nhuisvrouw\nhurken\nhut\nhuur\nhuurder\nhuwelijk\nhypnotiseren\nidee\nidentificatie\nidentificeer\nidentiteit\nijs\nijzer\nillegaal\nimmigrant\nimmigratie\nimporteer\nimpuls\nincident\nindeling\nindividuele\nindustrieel\ninfecteren\ninfectie\ninformatie\ningenieur\ningrediënt\ninjecteer\ninjectie\ninkomen\ninschrijving\ninsect\ninspecteur\ninstal\ninstorten\ninstructie\ninstrument\nintegratie\nintelligentie\ninternationaal\ninterview\ninvasie\ninwoner\ninzet\nisolatie\nitem\njaar\njaarlijks\njacht\njager\njam\njammer\njas\njazz\njet\njeugd\njockey\njonge\njongen\njuist\njungle\njunior\njurk\njury\njuweel\nkaak\nkaal\nkaars\nkaart\nkaas\nkabel\nkalender\nkalf\nkalkoen\nkamer\nkamerplant\nkamp\nkampioen\nkanaal\nkandidaat\nkanker\nkant\nkantoor\nkapitein\nkapsel\nkarakter\nkast\nkasteel\nkathedraal\nkatoen\nkauw\nkeel\nkelder\nkerk\nkern\nkers\nketting\nkeuken\nkick\nkies\nkijk\nkikker\nkin\nkind\nkindertijd\nkip\nkist\nklagen\nklant\nklap\nklaslokaal\nklasse\nklassiek\nkleerkast\nklei\nkleren\nkleur\nkleurrijk\nkleverige\nklim\nkliniek\nklok\nkloof\nklop\nknal\nknie\nkniel\nknijp\nknik\nknoflook\nknoop\nknop\nkoe\nkoekje\nkoelkast\nkoepel\nkoffie\nkolen\nkolom\nkolonie\nkom\nkomedie\nkomeet\nkomkommer\nkonijn\nkoning\nkoningin\nkoninkrijk\nkooi\nkook\nkoop\nkoorts\nkop\nkoper\nkopieer\nkoppel\nkorte\nkorting\nkostuum\nkoud\nkraam\nkras\nkrijger\nkrijt\nkrimpen\nkristal\nkroon\nkruip\nkruis\nkruising\nkruk\nkrul\nkudde\nkunstenaar\nkunstmatige\nkussen\nkust\nkwaliteit\nkwart\nkwekerij\nlaat\nlaatste\nlabel\nlaboratorium\nlach\nladder\nlade\nlading\nlagere\nlam\nlamp\nland\nlandeigenaar\nlandschap\nlang\nlange\nlangzaam\nlaser\nlast\nledemaat\nleef\nleeftijd\nleeg\nleer\nleerling\nlees\nleeuw\nleg\nlegende\nleger\nleiderschap\nlek\nlekker\nlelie\nlelijk\nlengte\nlente\nlepel\nleraar\nles\nletsel\nletter\nleugen\nleuk\nlever\nleveren\nlevering\nlezer\nlezing\nlicentie\nlichaam\nlicht\nlid\nlidmaatschap\nliefdadigheid\nliefde\nlift\nlijm\nlijn\nlijst\nlik\nlimiet\nlink\nlinks\nlint\nlip\nliteratuur\nlobby\nlocatie\nlodge\nlog\nlong\nlopen\nloper\nlosse\nlounge\nlucht\nluchthaven\nluchtvaart\nluchtvaartmaatschappij\nluid\nluister\nlunch\nlus\nmaag\nmaagd\nmaaltijd\nmaan\nmaand\nmaart\nmaat\nmachine\nmagere\nmagnetische\nmail\nmainstream\nmaïs\nmake-up\nmanagement\nmand\nmanier\nmarathon\nmarine\nmarkeer\nmarketing\nmarmer\nmars\nmarteling\nmasker\nmassa\nmateriaal\nmatroos\nmechanisch\nmedaille\nmeer\nmeerdere\nmeester\nmeid\nmeisje\nmelk\nmeneer\nmenigte\nmens\nmensen\nmensheid\nmenu\nmerk\nmes\nmetaal\nmeubels\nmicrofoon\nmiddag\nmiddeleeuws\nmidden\nmiddernacht\nmier\nmijl\nmijnwerker\nmilitaire\nmineraal\nminimaal\nminimaliseren\nminor\nminuut\nmisbruik\nmisdaad\nmislukking\nmobiel\nmodder\nmodel\nmoe\nmoeder\nmoer\nmoeras\nmok\nmol\nmoleculair\nmond\nmonnik\nmonopolie\nmonster\nmonsterlijke\nmoord\nmoordenaar\nmorsen\nmoskee\nmotor\nmotorwagen\nmouw\nmug\nmuis\nmultimedia\nmunt\nmuseum\nmuur\nmuziek\nmuzikant\nmythe\nnaald\nnaam\nnacht\nnachtmerrie\nnagel\nnakomelingen\nnat\nnatuur\nnatuurkunde\nnauwkeurige\nnederlaag\nneef\nnek\nnest\nnetto\nnetwerk\nneus\nnier\nnieuws\nniveau\nnon\nnood\nnoord\nnotitieboek\nnucleair\nnul\nnummer\nobservatie\nobstakel\noceaan\nochtend\noffer\nofficier\nolie\nolifant\nomgeving\nomissie\nonderdrukken\nonderhoud\nonderkant\nondersteuning\nonderstreep\nonderwijs\nonderzoek\nonderzoeker\nondiep\noneindig\noneven\nongemakkelijk\nongeval\nonschuldige\nontbijtgranen\nontbinden\nontdekking\nonthoof\nontmoet\nontploffen\nontploffing\nontsnappen\nontvangst\nontwerp\nonzin\noog\noogst\noor\noordeel\noorlog\noorzaak\noost\nopdracht\nopen\nopera\noperatie\nopgewonden\noplossing\nopmerking\nopname\nopperhoofd\noppervlakte\nopslag\nopsommingsteken\noptie\noraal\noranje\norgel\norigineel\norkest\noude\nouder\noutfit\noven\noverdracht\novereenkomst\noverheersing\noverheid\noverstroming\noverstuur\noverval\noverweeg\noverwinning\noverzicht\npaar\npaard\npad\npaddenstoel\npagina\npak\npakket\npaleis\npalm\npan\npapier\nparade\nparagraaf\nparallel\nparaplu\npark\nparkeren\npartij\npartner\npartnerschap\npaspoort\npassage\npassagier\npast\npatent\npatroon\npauze\npen\npenny\npeper\nperforeer\nperiode\npersoneel\npersoon\npiano\npier\npijl\npijn\npijp\npil\npiloot\npinda\npionier\npiramide\npistool\nplaat\nplaats\nplafond\nplak\nplan\nplaneet\nplank\nplant\nplastic\nplatform\nplek\nploeg\nplug\npoeder\npoëzie\npolitiek\npoll\npols\npomp\npompoen\npony\npool\npoort\npop\nportret\npositieve\npost\npot\npotlood\npresentatie\npresident\nprijs\nprins\nprinses\nprint\nprinter\nprivacy\nprivilege\nprocent\nproducent\nproduceren\nproduct\nproductie\nproductieve\nproef\nprofessor\nprofiel\nprogramma\nprojectie\nprooi\npropaganda\nproteïne\nprotest\npsycholoog\npub\npubliceer\npubliek\npudding\npunch\npunt\nput\npuzzel\nrace\nracisme\nradio\nraid\nraket\nrally\nrand\nrangschikking\nrapport\nras\nrat\nreactie\nreactor\nrebel\nreceptie\nrechte\nrechter\nrechtvaardigheid\nreclame\nrecord\nrecycle\nredding\nreductie\nredundantie\nreeks\nreflectie\nregen\nregenboog\nregio\nregisseur\nregister\nrehabilitatie\nreis\nrek\nrel\nrelatie\nrelax\nreligieuze\nrem\nren\nrepetitie\nreproductie\nreptiel\nrestaurant\nrestjes\nresultaat\nreus\nrib\nrichting\nriem\nrij\nrijk\nrijkdom\nrijst\nring\nritueel\nrivier\nrob\nrobot\nrock\nroem\nrol\nroman\nromantisch\nrood\nrook\nroyalty\nrug\nrugby\nruimte\nrundvlees\nrust\nruwe\nsaaie\nsalade\nsaldo\nsamenvatting\nsamenzwering\nsandaal\nsap\nsatelliet\nsaus\nscan\nscène\nschade\nschaduw\nschakelaar\nschapen\nschat\nschattig\nschedel\nscheiding\nschema\nscheren\nscherm\nscherpe\nschets\nscheur\nschiet\nschikking\nschild\nschilder\nschip\nschoen\nschok\nschommel\nschool\nschoon\nschoorsteen\nschoot\nschors\nschot\nschotel\nschouder\nschouderophalen\nschreeuw\nschrijf\nschrijver\nschuld\nscore\nscript\nsculptuur\nsecretaris\nsecundair\nseizoen\nseizoensgebonden\nseminar\nsenior\nserie\nserveren\nservice\nshell\nshift\nshirt\nsigaret\nsin\nsite\nskate\nski\nskribbl.rs\nslaaf\nslaap\nslaapkamer\nslachtoffer\nslagveld\nslak\nslam\nslang\nslechte\nsleep\nsleutel\nslijm\nslimme\nslip\nslopen\nslot\nsluier\nsluiten\nsmakelijke\nsmal\nsmash\nsmeken\nsneeuw\nsnel\nsnelheid\nsnelweg\nsnijd\nsnijden\nsnoer\nsnuif\nsoep\nsoftware\nsok\nsoldaat\nsolide\nsolo\nsom\nsomberheid\nsoort\nsoortgelijke\nspeel\nspeelgoed\nspek\nspel\nspell\nspiegel\nspier\nspin\nspinazie\nspion\nsplit\nspoorweg\nsport\nspray\nspreiding\nspreker\nsproet\nsprong\nspuug\nstaan​​\nstaart\nstad\nstaking\nstam\nstandbeeld\nstap\nstapel\nstart\nstation\nsteak\nsteeg\nsteek\nsteen\nstem\nstempel\nsterk\nsterkte\nsterrenbeeld\nsterven\nstichting\nstick\nstijgen\nstijl\nstikken\nstilte\nstoel\nstof\nstok\nstom\nstoom\nstop\nstorm\nstorting\nstraal\nstraat\nstrak\nstraling\nstrand\nstretch\nstrijd\nstring\nstro\nstruik\nstudent\nstudio\nstuiteren\nstuk\nsubjectief\nsuccesvol\nsuiker\nsuite\nsuperieur\nsupermarkt\nsupervisor\nsurround\nsymmetrie\nsysteem\nt-shirt\ntaal\ntaart\ntablet\ntafel\ntaille\ntand\ntandarts\ntank\ntape\ntapijt\ntarief\ntarwe\ntaxi\nteam\ntechniek\ntechnische\ntechnologie\nteef\nteen\ntegel\ntegen\ntegenover\ntegenstander\ntegenstrijdigheid\ntegenzin\ntegoed\ntegoedbon\nteken\ntekening\ntekort\ntekst\ntel\ntelefoon\ntelevisie\nteller\ntempel\ntemperatuur\ntennis\ntent\nterminal\nterras\nterrorist\nterug\ntest\ntheater\ntherapeut\ntherapie\nthumb\ntick\nticket\ntiener\ntij\ntijd\ntijdschema\ntijdschrift\ntijger\ntin\ntip\ntitel\ntoast\ntoepassing\ntoerisme\ntoernooi\ntoespraak\ntoevoeging\ntomaat\nton\ntong\ntoon\ntop\ntoren\ntotaal\ntouw\ntrace\ntrack\ntrainer\ntraining\ntransparant\ntrap\ntrein\ntrek\ntrend\ntrip\ntroep\ntrolley\ntroon\ntropische\ntruc\ntrui\ntuimelen\ntuin\ntumor\ntunnel\ntweede\ntwin\ntycoon\nui\nuil\nuitbreiden\nuitbreiding\nuitdrukking\nuitgang\nuitgestorven\nuitlaat\nuitnodigen\nuitnodiging\nuitrusting\nuitvoerder\nuitvoering\nuitzending\nuniek\nuniform\nuniversiteit\nupdate\nurban\nurine\nuur\nvacht\nvacuüm\nvader\nvak\nvakantie\nvakman\nvallei\nvallen\nvaluta\nvan\nvang\nvariant\nvarken\nvat\nvechten\nveeg\nveel\nveer\nveerboot\nvegetatie\nveilig\nveilige\nveiling\nveld\nvenster\nVenus\nver\nverander\nverbaal\nverbeelding\nverbergen\nverbied\nverbinding\nverbrijzelen\nverdachte\nverdedig\nverdeel\nverdieping\nverdomde\nverdrinken\nverdwijnen\nverf\nvergadering\nvergelijk\nvergelijking\nvergif\nvergoeding\nvergroten\nverhouding\nverhuurder\nverjaardag\nverkeer\nverkeerd\nverkenning\nverkiezing\nverkoop\nverkoper\nverkrijg\nverlegen\nverliezen\nvermenigvuldig\nvermogen\nvernietiging\nveroordeelde\nverplaatsen\nverpleegster\nverrassing\nverre\nverschijnen\nverschil\nverschillen\nverschuldigd\nverse\nversie\nverslaafd\nverslaan\nverslaggever\nverspreid\nverticaal\nvertrek\nvervang\nvervanging\nvervoer\nvervuiling\nverwarring\nverzamel\nvestiging\nveteraan\nvezel\nvideo\nviering\nvierkant\nvijand\nvilla\nvind\nvinger\nvis\nvisie\nvisser\nvitamine\nvlag\nvleermuis\nvlees\nvlek\nvleugel\nvlieg\nvlieger\nvliegtuig\nvliegtuigen\nvlinder\nvloeistof\nvloot\nvlucht\nvoedsel\nvoertuig\nvoet\nvoetbal\nvoetgangers\nvogel\nvoltooi\nvolume\nvolwassen\nvoor\nvoorganger\nvoorhoofd\nvoorraad\nvoorspelbare\nvooruit\nvooruitzichten\nvoorzitterschap\nvork\nvorm\nvos\nvouw\nvraag\nvracht\nvrachtwagen\nvragenlijst\nvreedzaam\nvreugde\nvriend\nvriendschap\nvroege\nvrouw\nvuile\nvuilnis\nvuist\nvul\nvulkaan\nvuur\nwaardevolle\nwaarnemer\nwaarschuwing\nwachtrij\nwachtwoord\nwagen\nwakker\nwalvis\nwandeling\nwang\nwapen\nwarm\nwarmte\nwas\nwater\nwaterkoker\nwaterval\nwederzijdse\nwedstrijd\nweduwe\nweefsel\nweek\nweekend\nweer\nweergeven\nweerspiegelen\nweg\nwekelijks\nwenkbrauw\nwereld\nwest\nwetenschap\nwetenschapper\nweven\nwhisky\nwiel\nwiet\nwijn\nwilde\nwildernis\nwillekeurige\nwin\nwind\nwinkel\nwinkelen\nwinkelwagen\nwinnaar\nwinter\nwiskunde\nwiskundig\nwit\nwoede\nwoestijn\nwol\nwolf\nwolk\nwond\nwoord\nwoordenboek\nworm\nworst\nworstelen\nwortel\nwraak\nwrak\nwrap\nx-ray\nyard\nzaad\nzaak\nzachte\nzak\nzakenman\nzaklamp\nzalm\nzanger\nzee\nzeep\nzeg\nzegel\nzegen\nzeil\nzelfmoord\nzelfs\nzelfverzekerd\nzet\nzicht\nziek\nziekenhuis\nziekte\nziel\nzijde\nzilver\nzing\nzinken\nzit\nzoek\nzoete\nzolder\nzomer\nzon\nzone\nzonne\nzonneschijn\nzonsopgang\nzorgen\nzout\nzuid\nzuivel\nzus\nzuur\nzuurstof\nzwaar\nzwaard\nzwaarlijvig\nzwaartekracht\nzwak\nzwakte\nzwanger\nzwart\nzweep\nzweer\nzweet\nzwembad\nzwemmen"
  },
  {
    "path": "internal/game/words/pl",
    "content": "Abraham Lincoln\nabsolutny\nabsolwent\nabstrakcyjny\nac/dc\nadidas\nadministracja\nadministrator\nadopcja\nadoptować\nadres\nAfryka\nagencja\nagent\nagonia\nagresywny\nakademia\nakapit\nakcent\nakceptacja\nakcjonariusz\nakord\nakordeon\naksamit\naktor\naktualizacja\naktywność\naktywny\naktywo\naktywować\nakumulacja\nakwarium\nalarm\nalarm przeciwpożarowy\nalbatros\nalbum\naleja\nalergia\naligator\nalkohol\nAlladyn\nalpaka\naltówka\naluminium\namator\nambasada\nambicja\nambitny\nambulans\nAmeryka\namputować\nAmsterdam\nanakonda\nanaliza\nanalogia\nananas\nandroid\nAnglia\nanimacja\nanime\nanioł\nankieta\nanonimowy\nAntarktyka\nantylopa\nantywirus\nanubis\nanuluj\naparat\naparat fotograficzny\napartament\napatia\napel\napetyt\naplikant\napokalipsa\narbitralny\narcheolog\narcheologiczny\narchitekt\narchitektura\narchiwum\narena\naresztowanie\nArgentyna\nargument\narkusz\narmata\narmia\narogancki\nartykuł\nartysta\nartystyczny\narystokrata\nas\nasertywny\naspekt\nAsterix\nasteroida\nastronauta\nasymetria\natak\nAtlantyda\natmosfera\natom\natomowy\natrakcyjny\naudi\naudytor\naukcja\naureola\nAustralia\nautobus\nautograf\nautomatyczny\nautonomia\nautostopowicz\nautostrada\nawans\nawaria\nawokado\nAzja\nazyl\nbabcia\nbabeczka\nbadacz\nbadania\nbagaż\nbagażnik\nbagietka\nbagnet\nbagno\nbajgiel\nbaklawa\nbakłażan\nbalet\nbaletnica\nbalkon\nbalon\nbalsam\nbambi\nbambus\nbanan\nbandana\nbandaż\nbaner\nbanjo\nbank\nbankier\nbar\nbaran\nbarbarzyńca\nbariera\nbarman\nbaseball\nbasen\nbateria\nbatman\nbawełna\nbazgroły\nbazooka\nbałagan\nbałwan\nbańka\nbeatbox\nbeczka\nBeethoven\nbekon\nbelka\nbeneficjent\nbenzyna\nbezdomny\nbezpieczeństwo\nbezpieczny\nbezpośredni\nbezprzewodowy\nbezradny\nbezrobocie\nbezrobotny\nbezsenność\nbezużyteczny\nbiałko\nbiały\nBiblia\nbiblioteka\nbibliotekarz\nbicz\nbiedny\nbiedronka\nbieg\nbiegacz\nbieżnia\nbieżący\nBig Ben\nbilard\nbilet\nbingo\nbiografia\nbiologia\nbiskup\nbitcoin\nbitwa\nbiuletyn\nbiurko\nbiuro\nbiurokracja\nbiurokratyczny\nbiznes\nbiznesmen\nbić\nblask\nblat stołu\nblizna\nbliźniak\nblokada drogi\nblokować\nblondynka\nbluszcz\nbmw\nbmx\nbobslej\nbochenek\nbocian\nbogactwo\nbogaty\nbohater\nboisko\nbolesny\nbomba\nborsuk\nborówka\nBoże Narodzenie\nbrak\nbrama\nbramkarz\nbransoletka\nbrat\nbratanek\nBrazylia\nbrać\nbroda\nbrodawka\nbrokuły\nbronić\nbrowar\nbrownie\nbroń\nbrudny\nbrunetka\nbrwi\nbryza\nbryła\nbrzoskwinia\nbrzoza\nbrzuch\nbrzydki\nbrzytwa\nbródka\nbrąz\nbrązowy\nbuda\nbudzić się\nbudżet\nbufet\nbum\nbumerang\nbunt\nbuntownik\nburak\nburmistrz\nburrito\nbursztyn\nbury\nburza\nburza piaskowa\nbut\nbutelka\nbuty\nbydło\nbyk\nbzdury\nbóbr\nbóg\nból\nból pleców\nbęben\nbłagać\nbłahy\nbłazen\nbłogosławić\nbłoto\nbłysk\nbłyskawica\nbłąd\ncappuccino\ncałkowity\ncały\ncebula\ncecha\ncegła\ncel\ncelebracja\ncelebryta\ncement\ncena\ncenny\ncentaur\ncentralny\ncentrum\ncentrum handlowe\ncenzura\nceramika\ncerber\nceremonia\ncertyfikat\nchaos\ncharakter\ncharakterystyczny\nCharlie Chaplin\ncharyzmatyczny\nchata\nchcieć\nchciwość\ncheerleaderka\ncheeseburger\nchemia\nchemiczny\nChewbacca\nchihuahua\nchirurg\nchirurgia\nchleb\nchlew\nchmura\nchodnik\ncholera\nchomik\nchoroba\nchoroba morska\nChorwacja\nchory\nchrom\nchronić\nchudy\nchusteczka\nchwast\nchwała\nchwyt\nchętny\nchłop\nchłopak\nchłopiec\nciasny\nciasteczko\nciastko\nciasto\nciało\nciekawy\ncielę\nciemny\ncienki\nciepło\nciepły\ncierpienie\ncierpieć\ncierpliwość\ncień\ncień do powiek\ncios\nciotka\ncisza\nciągnik\nciągnąć\nciągły\nciąża\ncięcie\nciężarówka\nciężki\ncmentarz\ncnota\ncodziennie\ncreeper\ncud\ncudzoziemiec\ncukier\ncurry\ncyborg\ncyfrowy\ncykada\ncykl\ncylinder\ncyrk\ncytat\ncytryna\ncywilizacja\nczajnik\nczapka\nczarna dziura\nczarny\nczarny piątek\nczarodziej\nczas\nczasopismo\nczaszka\nczek\nczekać\nczekolada\nczerwony\nczerwony dywan\nczkawka\nczosnek\nczoło\nczubek\nczuć\nczułka\nczynnik\nczystość\nczysty\nczytać\nczytelnik\ncząsteczka\ncząstka\nczęstotliwość\nczęstość\nczęsty\nczęść\nczłonek\nczłonkostwo\nczłowiek\ncórka\ndach\ndaleki\ndalmatyńczyk\ndaltonista\ndama\ndanie\ndarczyńca\ndarmowy\ndarowizna\ndata\ndawać\ndawka\ndać\ndebata\ndebiut\ndecydować\ndecydujący\ndeficyt\ndefinicja\ndekada\ndeklaracja\ndekoracja\ndekoracyjny\ndelegować\ndelfin\ndelikatny\ndemokracja\ndemon\ndemonstracja\ndemonstrować\ndentysta\ndepozyt\ndepresja\ndeser\ndeska\ndeska surfingowa\ndeskorolka\ndeskorolkarz\ndeszcz\ndetaliczny\ndetalista\ndetektor\ndetektyw\ndetonować\ndezodorant\ndiagnoza\ndialekt\ndialog\ndiament\ndieta\ndinozaur\ndmuchać\ndno\ndobrobyt\ndobroczynność\ndobrowolny\ndobry\ndobrze\ndoceniać\ndochód\ndodatek\ndodawać\ndojrzały\ndokument\ndokładny\ndolar\ndolina\ndom\ndomek\ndomek dla lalek\ndomek na drzewie\ndominacja\ndomino\ndominować\ndominujący\ndomyślny\ndopasowanie\ndopasować\ndopuszczalny\ndoradca\ndorosły\ndoskonały\ndostarczać\ndostawa\ndostać\ndostęp\ndostępny\ndotyk\ndowód\ndowódca\ndozownik\ndoświadczony\ndrabina\ndracula\ndramat\ndramatyczny\ndrapacz chmur\ndrapać\ndrapieżnik\ndrażnić\ndrewno\ndrobiazg\ndroga\ndroga mleczna\ndrogi\ndrugi\ndrukarka\ndrukować\ndrut kolczasty\ndrwal\ndryf\ndrzemka\ndrzewo\ndrzwi\ndrżenie\nduch\ndudy\nduma\ndumny\ndusić\ndusza\nduży\ndwuznaczność\ndwuznaczny\ndwór\ndyktować\ndylemat\ndym\ndynamiczny\ndynamit\ndynia\ndyplom\ndyplomata\ndyplomatyczny\ndyrektor\ndyrygent\ndyscyplina\ndysk\ndyskoteka\ndyskretny\ndyskryminacja\ndyskryminacja utwór\ndyskurs\ndyspozycja\ndystrybuować\ndystrybutor\ndywan\ndywidenda\ndziadek\ndziadek do orzechów\ndziałanie\ndzicz\ndzieciak\ndziecinny\ndzieciństwo\ndziecko\ndziedzic\ndziedziczyć\ndzielić\ndzielnica\ndziennikarz\ndzierżawa\ndziewczyna\ndzień\ndzik\ndziki\ndziobak\ndziura\ndziwny\ndziób\ndzięcioł\ndzięki\ndziękować\ndzwon\ndzwonek\ndół\ndąb\ndług\ndługi\ndługopis\ndługość\ndźgnąć\ndźwięk\ndźwiękowy\ndżem\ndżentelmen\ndżin\ndżinsy\ndżokej\ndżungla\necho\nedukacja\nedukacyjny\nefekt\nefektywny\nEgipt\nego\negzamin\negzotyczny\nEinstein\nekonomia\nekonomiczny\nekonomista\nekran\nekscytujący\nEkskalibur\nekspert\nekspertyza\neksperyment\neksperymentalny\neksplozja\neksport\nekspozycja\nekstremalny\nelastyczny\nelegancki\nelektorat\nelektron\nelektroniczny\nelektronika\nelektryczność\nelektryk\nelement\neliminować\nelitarny\nemerytowany\nemerytura\nemocja\nemocjonalny\nemoji\nempiryczny\nemu\nenergia\nentuzjastyczny\nentuzjazm\nepoka kamienia\nera\nerozja\nesej\nesencja\neskimos\nespresso\nestetyczny\netniczny\netyczny\netyka\netykieta\nEuropa\newolucja\nfabryka\nfabuła\nfacebook\nfajerwerk\nfajka\nfajny\nfaks\nfakt\nfala\nfan\nfanta\nfantazja\nfarba\nfarmaceuta\nfasada\nfascynować\nfasola\nfałszywy\nfederacja\nfederalny\nfeministka\nferrari\nfestiwal\nfigurka\nfikcja\nFilar\nfilm\nfilmowiec\nfilozof\nfilozofia\nfilozoficzny\nfiltr\nfinanse\nfinansowy\nfirma\nfizyczny\nfizyka\nflaga\nflaming\nflet\nFloryda\nflota\nfoka\nfolder\nfolia\nfolklor\nfontanna\nforma\nformacja\nformalny\nformat\nformuła\nformułować\nfort\nfortepian\nforum\nfotel\nfotograf\nfotografia\nfracht\nfragment\nFrancja\nfrustracja\nfrytki\nfryzjer\nfundacja\nfundusz\nfunkcja\nfunkcjonalny\nfunt\nfutro\ngabinet\ngad\ngadatliwy\ngalaktyka\nGandalf\nganek\ngang\ngangster\ngaraż\ngarderoba\ngardło\ngarnek\ngarnitur\ngatunek\ngaz\ngazeta\ngałązka\ngałąź\ngejzer\ngen\ngeneracja\ngenerator\ngenerować\ngenetyczny\ngeniusz\ngeografia\ngeologiczny\ngepard\ngest\ngigant\ngilotyna\ngitara\ngitara elektryczna\ngladiator\ngleba\nglina\nglut\ngniazdo\ngniew\ngnom\ngoblin\ngodność\ngodzina\ngolf\ngolf wózek\ngolić się\nGoogle\ngoryl\ngorzki\ngorąca czekolada\ngorący\ngorączka\ngospoda\ngospodarka\ngospodarstwo\ngospodarz\ngospodyni domowa\ngotowanie\ngotować\ngotowy\ngotówka\ngołąb\ngościnność\ngość\ngra\ngra wideo\ngrabarz\ngrabie\ngracz\ngraffiti\ngramatyka\ngranat\ngranica\ngrant\ngrawitacja\nGrecja\ngrejpfrut\ngrill\ngrobowiec\ngrosz\ngroszek\ngrotołaz\ngruby\ngrupa\ngruszka\ngrymas\ngrypa\ngrzbiet\ngrzebień\ngrzech\ngrzeczność\ngrzeczny\ngrzmot\ngrzyb\ngrób\ngubernator\nguma\nguma balonowa\nguz\ngwarancja\ngwiazda\ngwiazda rocka\ngwiezdne wojny\ngwizdek\ngwóźdź\ngóra lodowa\ngórnik\ngówno\ngąbka\ngąsienica\ngęstość\ngęś\ngładki\ngłodny\ngłos\ngłosić\ngłosowanie\ngłosować\ngłowa\ngłośność\ngłośny\ngłuchy\ngłupek\ngłupi\ngłupiec\ngłód\ngłówny\ngłęboki\nhak\nhaker\nhamak\nhamburger\nhamowanie\nhandel\nharfa\nharmonia\nharmonijka\nharmonogram\nharpun\nhashtag\nhasło\nhawaje\nhałas\nhałaśliwy\nhelikopter\nHello Kitty\nherbata\nHerkules\nheroina\nhibernować\nhiena\nhierarchia\nhieroglif\nhipis\nhipnotyzować\nhipopotam\nhipoteza\nhistoria\nhistoryczny\nhistoryk\nhiszpania\nhobbit\nhokej\nhol\nHolandia\nHollywood\nholownik\nhomar\nhonor\nhonorowy\nhop\nhoroskop\nhorror\nhoryzont\nhot dog\nhotel\nhołd\nhula hop\nhumor\nhuśtawka\nhuśtać się\nhydrant\nhydraulik\nideał\nidentyfikacja\nidentyfikować\nideologia\nignorancja\nignorant\nignorować\nigła\nIkea\nilościowy\nilość\nilustracja\nilustrować\nimadło\nimigracja\nimigrant\nimperialny\nimperium\nimplikacja\nimponować\nimponujący\nimport\nimpreza\nimpuls\nincognito\nincydent\nindeks\nIndie\nindyk\nindywidualny\ninflacja\ninformacja\ninfrastruktura\ninicjatywa\ninnowacja\ninny\ninspektor\ninspiracja\ninspirować\ninstalować\ninstrukcja\ninstrument\ninstynkt\ninstytucja\nintegracja\nintegralność\nintelektualny\ninteligentny\nintencja\nintensyfikować\nintensywny\ninterakcja\ninteraktywny\ninterfejs\ninternet\ninterpretować\ninterwencja\ninwazja\ninwestycja\ninżynier\nipad\niphone\nIrlandia\nirokez\nironia\niskra\niskry\nistotność\nistotny\nizolacja\niść\njabłko\njacht\njagnięcina\njagoda\njaguar\njajko\njak\njakość\njalapeno\njaponia\njaskinia\njaskiniowiec\njaszczurka\njazda\njazz\njednokołowiec\njednomyślny\njednorożec\njednostka\njedność\njedwab\njedzenie\nJeep\njeleń\njelito\njenga\njezioro\njeść\njeździec\njeździć\njeż\njeżozwierz\njeżyna\njo-jo\njogurt\njurysdykcja\njądrowy\njęk\njęzyk\nkabel\nkabina\nkaczka\nKaczor Donald\nkaktus\nkalafior\nkalendarz\nkalmar\nkalorie\nkameleon\nkamerdyner\nkamień\nkampania\nkanapka\nkanał\nkandydat\nkangur\nkanion\nkapać\nkapelusz\nkapitalizm\nkapitan\nkapitał\nkapłan\nkara\nkarabin\nkaraluch\nkaraoke\nkarate\nkarać\nkariera\nkarnawał\nkarta\nkarzeł\nkaseta\nkask\nkasyno\nkaszel\nkasztan\nkatalog\nkatana\nkatapulta\nkatastrofa\nkatedra\nkategoria\nkaucja\nkawa\nkawałek\nkawiarnia\nkawior\nkazoo\nkałuża\nkciuk\nkebab\nkelner\nkemping\nketchup\nkichnąć\nkieliszek do wina\nkierowca\nkierowca autobusu\nkierowca taksówki\nkierunek\nkieszeń\nkiełbasa\nkij\nkij od miotły\nkijanka\nkilof\nKing Kong\nkino\nkiwi\nklamka\nklapnięcie\nklasa\nklasyka\nklasztor\nklatka\nklatka piersiowa\nklatka schodowa\nklaun\nklawiatura\nklej\nklej w sztyfcie\nklejnot\nklepsydra\nklient\nklimat\nklinika\nklopsik\nklub\nklucz\nklęczeć\nknykieć\nkoala\nkoalicja\nkobiecy\nkobieta\nkobra\nkoc\nkod\nkod kreskowy\nkod morsea\nkogut\nkojot\nkokon\nkokos\nkoktajl\nkolano\nkolba\nkolega\nkolej\nkolejka\nkolekcja\nkoliber\nkolonia\nkolor\nkolorowy\nkoloseum\nkolumna\nkomar\nkombinacja\nkomedia\nkomentarz\nkomercyjny\nkometa\nkomfort\nkomik\nkomiks\nkomin\nkominek\nkomitet\nkompaktowy\nkompas\nkompensacja\nkompensować\nkompetencja\nkompetentny\nkompleksowy\nkompletny\nkomplikacja\nkompozytor\nkompromis\nkomputer\nkomunikacja\nkomunizm\nkomórka\nkoncentracja\nkoncepcja\nkoncept\nkoncert\nkoncesja\nkonferencja\nkonflikt\nkonfrontacja\nkongres\nkoniczyna\nkoniec\nkonik morski\nkonik polny\nkonkret\nkonkurencja\nkonkurs\nkonsensus\nkonserwacja\nkonserwatywny\nkonsolidować\nkonspiracja\nkonstelacja\nkonstrukcja\nkonstruktywny\nkonstytucja\nkonstytucyjny\nkonsultacja\nkonsument\nkonsumpcja\nkontakt\nkontekst\nkonto\nkontrakt\nkontrast\nkontrola\nkontroler\nkontrowersyjny\nkontynent\nkontynuacja\nkonwencja\nkonwencjonalny\nkonwertować\nkooperacja\nkooperatywny\nkopalina\nkopalnia\nkoparka\nkopać\nkoperta\nkopiować\nkopnąć\nkopuła\nkopyto\nkora\nkoral\nkorek\nkorek\nkorekta\nkorelacja\nkorespondencja\nkorkociąg\nkorona\nkoronka\nkorporacyjny\nkorupcja\nkorytarz\nkorzeń\nkorzyść\nkosa\nkosiarka do trawy\nkostium\nkostium kąpielowy\nkostka\nkosz\nkosz na śmieci\nkoszmar\nkoszula\nkoszulka\nkoszyk\nkoszykówka\nkot\nkotek\nkotły\nkowadło\nkowal\nkowboj\nkoza\nkoziorożec\nkołdra\nkołnierz\nkoło\nkoń\nkończyna\nkońcówka\nkościół\nkość\nkość słoniowa\nkrab\nkradzież\nkraj\nkrajobraz\nkrajowy\nkrawat\nkrawiec\nkrawędź\nkreda\nkredyt\nkredyt hipoteczny\nkrem\nkrem do golenia\nkreskówka\nkret\nkrew\nkrewetka\nkrok\nkrokodyl\nkropki\nkropla\nkropla deszczu\nkrowa\nkrowa dzwonek\nkrwawić\nkrwawy\nkrwotok z nosa\nkrykiet\nkryształ\nkrytyczny\nkrytyk\nkrytyka\nkryzys\nkrzesło\nkrzew\nkrzyczeć\nkrzyk\nkrzywa\nKrzywa wieża w Pizie\nkrzyż\nkról\nKról Lew\nkrólestwo\nkrólewski\nkrólewskość\nkróliczek\nkrólik\nkrólowa\nkrótki\nkrąg\nkręcić się\nkręgle\nkręgosłup\nkserokopia\nksiążka\nksiążę\nksięgowy\nksiężniczka\nksiężyc\nksylofon\nkształt\nkuba\nkubek\nKubuś Puchatek\nkucanie\nkuchnia\nkucyk\nkucyk\nkukurydza\nkukułka\nkula\nkula ognia\nkultura\nkulturalny\nkung fu\nkupa\nkupidyn\nkupiec\nkura\nkurczak\nkurczyć się\nkurs\nkurtka\nkurz\nkusza\nkuweta\nkuzyn\nkuźnia\nkwadrat\nkwalifikacja\nkwalifikowany\nkwalifikować\nkwas\nkwaśny\nkwiaciarz\nkwiat\nkwota\nkąpiel\nkąsek\nkąt\nkłamać\nkłopot\nkłucie\nlabirynt\nlaboratorium\nlakier do włosów\nlalka\nlama\nlampa\nlaptop\nlas\nlas deszczowy\nlaser\nlasso\nlatarka\nlatarnia\nlatarnia morska\nlatawiec\nlato\nlawa\nlaweta\nleczenie\nleczyć\nlegenda\nlego\nlekarz\nlekcja\nlekkomyślny\nlemoniada\nlemur\nlen\nlenistwo\nleniwy\nlepki\nlew\nlew morski\nlewy\nleśnictwo\nleżeć\nliberalny\nlicencja\nliczba\nlicznik\nlider\nlilia\nlimonka\nlimuzyna\nlina\nlinia\nliniowy\nlis\nlist\nlista\nlistonosz\nliteracki\nliteratura\nlizać\nliść\nlodowiec\nlody\nlodówka\nlogiczny\nlogika\nlogo\nlojalność\nlojalny\nlok\nlokalizacja\nlokator\nLondyn\nlornetka\nlos\nlosowy\nlot\nloteria\nlotnictwo\nlotnisko\nlud\nludzie\nludzkość\nlukier\nlupa\nlustro\nluźny\nlód\nlęk\nmacierz\nmacka\nMadagaskar\nmafia\nmagazyn\nmagia\nmagiczna różdżka\nmagik\nmagma\nmagnes\nmagnetyczny\nmajonez\nmajątek\nmak\nmakaron\nmakijaż\nmalarz\nmalina\nmalutki\nmamut\nmanat\nmandarynka\nmanekin\nmanicure\nmapa\nmarakas\nmaraton\nmarchewka\nmargaryna\nmargines\nmarionetka\nmarka\nmarketing\nmarmolada\nmarmur\nmars\nmarszczenie brwi\nmartwy\nmarynarka wojenna\nmarynarz\nmarzec\nmasa\nmasaż\nmaska\nmaska ​​gazowa\nmaskotka\nmaszt\nmaszyna\nmaszyna do szycia\nmasło\nmatematyczny\nmatematyka\nmaterac\nmateria\nmateriał\nmatka\nmałpa\nmały\nmałżeństwo\nMcDonalds\nmdły\nmeble\nmech\nmechaniczny\nmechanik\nmechanizm\nmeczet\nmedal\nmeduza\nmedycyna\nmegafon\nmelodia\nmelon\nmem\nmemorandum\nmenedżer\nmentalny\nmenu\nMercedes\nmetal\nmeteoryt\nmetoda\nmetodologia\nmetro\nmewa\nmgła\nmiara\nmiasto\nMicrosoft\nmiecz\nmiecz świetlny\nmiecznik\nmiedź\nmiejsce pracy\nmiejscowość\nmiejski\nmiesiąc\nmiesięczny\nmieszanka\nmieszać\nmieszkanie\nmieszkaniec\nmieć\nmigdał\nmigracja\nmikrofalówka\nmikrofon\nmikroskop\nmikser\nmikstura\nMinecraft\nminerał\nminiclip\nminigolf\nminimalizować\nminimum\nminister\nministerstwo\nminivan\nminotaur\nminuta\nmiotacz ognia\nmiotła\nmiska\nmistrz\nmit\nmiód\nmiędzynarodowy\nmięsień\nmięso\nmięsożerca\nmięta\nmiłosierdzie\nmiłość\nmiś pluszowy\nmleczarz\nmleczny\nmleko\nmnich\nmniejszość\nmniszek lekarski\nmobilny\nmoc\nmocny\nmocz\nmoda\nmodel\nmodliszka\nmodlitwa\nmodlić się\nmodny\nmoduł\nmokry\nmolo\nmoment\nMona Lisa\nmonarcha\nmonarchia\nmoneta\nmonopol\nmop\nmorale\nmoralny\nmorderca\nmorderstwo\nmorela\nmors\nmorski\nmorze\nmost\nmotocykl\nmotyl\nmotyw\nmotywacja\nMount Everest\nmowa\nmozaika\nMozart\nmrok\nmrowisko\nmrówka\nmrówkojad\nmucha\nmuffinka\nmultimedia\nmumia\nmundur\nmurarz\nmusical\nmuszkiet\nmuszla\nmusztarda\nmutacja\nmuzeum\nmuzyk\nmuzyka\nmydło\nmyjnia samochodowa\nmysz\nMyszka Miki\nmyć\nmyśl\nmyśleć\nmyśliciel\nmyśliwy\nmówca\nmówić\nmózg\nmądry\nmąka\nmąż\nmężczyzna\nmłody\nmłodzież\nmłotek\nmłyn\nnachos\nnachylenie\nnacisk\nnacjonalizm\nnaczynie\nnadgarstek\nnadmiar\nnadużycie\nnadwaga\nnadzieja\nnadzorca\nnadzwyczajny\nnaftalina\nnagi\nnagietek\nnagrobek\nnagroda\nnagrywanie\nnagrywać\nnagły\nnagłówek\nnajnowszy\nnakaz\nnaleganie\nnalegać\nnaleśnik\nnależeć\nnależny\nnalot\nnamiot\nnamoczyć\nnapad\nnapaść\nnapierśnik\nnapisane\nnapisać\nnapięcie\nnapompować\nnaprawić\nnaprężyć\nnapój\nnarodowość\nnarodowy\nnarty\nnaruszenie\nnarwal\nnarzędzie\nNASA\nnasionko\nnastawienie\nnastolatek\nnastrój\nnastępny\nnatura\nnauczyciel\nnauczyć się\nnauka\nnaukowiec\nnaukowy\nnawyk\nnazwa\nnegatywny\nnegocjacje\nNeptun\nnerka\nnerw\nnerwowy\nneutralny\nniebezpieczeństwo\nniebezpieczny\nniebieski\nniebo\nniedobór\nniedowaga\nniedźwiedź\nniedźwiedź polarny\nnieformalny\nniefortunny\nnieistotne\nniejasny\nnielegalny\nnieletni\nniemcy\nniemożliwy\nnienawidzić\nnienormalny\nnieobecność\nnieobecny\nnieoczekiwany\nniepewność\nniepełnosprawność\nniepełnosprawny\nnieporządek\nniepowodzenie\nnieprawdopodobny\nnieprzyjemny\nniesamowity\nniespodzianka\nniespokojny\nniespójny\nnieunikniony\nniewidzialny\nniewinny\nniewolnik\nniewygodny\nniewystarczający\nniezależny\nniezawodny\nniezbędny\nniezdolny\nniezgoda\nniezręczny\nnieśmiały\nnieświadomy\nnieść\nninja\nniski\nniższy\nnoc\nnoga\nnogi\nnominacja\nnominować\nnorma\nnormalny\nnos\nnosorożec\nnotatka\nnotatnik\nNowa Zelandia\nnowicjusz\nnowoczesny\nnowy\nnozdrza\nnożyczki\nnudny\nnurkowanie\nnurkować\nnuta\nnutella\nnóż\nnędza\nnędzny\nobcas\nobcy\nobecność\nobecny\nobejmować\nObelix\nobfity\nobiad\nobieg\nobiekt\nobiektyw\nobiektywny\nobietnica\nobjaw\nobliczanie\nobliczenia\noblężenie\nobowiązek\nobraz\nobraźliwy\nobrażenie\nobrona\nobrus\nobrót\nobserwacja\nobserwator\nobszar\nobudzić się\nobwiniać\nobywatel\nobóz\nocalały\nocean\nocena\nocet\nochrona\nochroniarz\noczekiwanie\noczekiwać\nodbicie\nodbiór\nodbić się\nodchylenie\nodcień\nodcinek\nodczucie\noddech\noddychać\noddział\noddzielny\nodejść\nodkrycie\nodkryć\nodległość\nodległy\nodlew\nodmiana\nodmowa\nodmrożenie\nodmówić\nodpady\nodporny\nodpowiadać\nodpowiedź\nodpływ\nodrodzenie\nodrzucenie\nodrzucić\nodrzutowiec\nodstraszać\nodwaga\nodważny\nodwrócić\nodłożyć\noferta\nofiara\noficer\noficjalny\nogień\noglądać\nognioodporny\nognisko\nogon\nograniczenie\nograniczony\nograniczony\nograniczyć\nogrodnik\nogrodzenie\nogromny\nogród\nogólny\nogórek\nojciec\nokaz\nokazja\noklaski\nokno\noko\nokoliczność\nokop\nokres\nokreślony\nokropny\nokrągły\nokulary\nokulary przeciwsłoneczne\nokładka\nolej\nomlet\nopactwo\nopakowanie\noparzenie\noparzenie słoneczne\nopaska\nopaska na głowę\nopaska na oczy\nopera\noperacja\nopieka\nopinia\nopona\nopowieść\noprogramowanie\noptymizm\nopuszczony\nopór\nopóźnienie\nopłacać\nopłata\norangutan\norbita\norchidea\norgan\norganizacja\norganizować\norientacja\norigami\norka\norkiestra\norzech\norzech laskowy\norzech ziemny\norzeł\nosa\nosioł\nosiągnięcie\noskarżać\noskarżenie\nosoba\nosobowość\nostateczny\nostatni\nostrożny\nostry\nostry sos\nostryga\nostrze\nostrzegać\nostrzeżenie\noszustwo\nosąd\nosłabiać\notchłań\notoczyć\notwarty\notwieracz do puszek\notyły\nowad\nowalny\nowca\nowinąć\nowoc\nowoce morza\nołtarz\nołówek\noś\nośmiokąt\nośmiornica\nośrodek\noświadczenie\npacha\npachnący\npacjent\npaintball\npająk\npakiet\npal\npalec\npalec u nogi\npaleta\npaliwo\npalma\npamiętać\npamięć\npan młody\npancernik\npanda\npanel\npanika\npanna młoda\npanowanie\npantera\npapaja\npapier\npapieros\npapierowa torba\npapież\npaproć\npapuga\npapużka\npara\nparada\nparadoks\nparalizator\nparasol\npark\nparking\nparlament\npartner\npartnerstwo\npartyzant\nParyż\npas\npasażer\npasek\npasek\npasja\npasta do zębów\npastel\npastwisko\npaszport\npat\npatelnia\npatent\npatio\npatrol\npatrz\npatyk\npauza\npaw\npawian\npaznokieć\npaznokieć u nogi\npałac\npałeczki\npchać\npchnięcie\npchła\npedał\npeleryna\npelikan\npepperoni\npepsi\npercepcja\nperforować\nperfumy\npersonel\nperspektywy\nperuka\nperyskop\npetarda\npewność\npewny\npełnia\npiasek\npiaskownica\nPicasso\npiec\npieczęć\npieg\npiegi\npiekarnia\npiekarnik\npiekło\npieluszka\npielęgniarka\npieniądze\npieprz\npierwszy\npierś\npierścień\npies\npieszy\npijawka\npiknik\npilnik do paznokci\npilność\npilot\npinball\npingwin\npinokio\npionowy\npiramida\npirat\npisarz\npistacja\npistolet\npiwnica\npiwo\npizza\npiórnik\npióro\npiękny\npięść\npiła łańcuchowa\npiłka\npiłka nożna\npiżama\nplac zabaw\nplakat\nplama\nplan\nplaneta\nplaster miodu\nplastik\nplatforma\nplaża\nplecak\nplecy\nplemię\nplik\nplon\nplotka\npluskwa\npluton\npluć\npocałunek\npochodnia\npochwała\npochówek\npocierać\npocisk\npociąg\npoczta\npocztówka\npoczątek\npodatek\npodejrzany\npodekscytowany\npodnieść\npodnoszenie\npodobny\npodpis\npodróż\npodróżnik\npodstawa\npodstawowy\npodsumowanie\npodsłuchiwać\npoduszka\npoduszkowiec\npodwójny\npodwórko\npodział\npodziemny\npodziw\npodziwiać\npodłoga\npoezja\npogarda\npogardzać\npogoda\npogrzeb\npojawiać się\npojazd\npojedynczy\npojedynek\npojemnik\npokaz\npokojówka\npokrewieństwo\npokrywka\npokusa\npokój\npokój\npole\npole bitwy\npole kukurydzy\npolegać\npolicjant\npoliczek\npoliczki\npolityczny\npolityk\npolityka\npolowanie\npolski\npomarańczowy\npomidor\npomnik\npomoc\npomocny\npomocy\npompa\npomysł\nponiedziałek\nponiżej\npopcorn\npopiół\npopołudnie\npoprawa\npoprawiać\npoprawka\npoprzednik\npoprzedzać\npopulacja\npopularny\npopyt\npora snu\nporada\nporażka\nporcja\nport\nportal\nportret\nporuszanie się\nporzucić\nporządek\nporównanie\nporęczny\nPosejdon\nposiłek\npostęp\nposzerzyć\nposłuszny\npot\npotknięcie się\npotomstwo\npotworny\npotwór\npoważny\npowiadomienie\npowiedz\npowiedzieć\npowiernik\npowierzchnia\npowietrze\npowieść\npowitanie\npowiązane\npowiązać\npowiększać\npowolny\npowrót\npowstrzymać\npowtórzenie\npowtórzyć\npowód\npowódź\npowóz\npozaziemski\npoziom\npoziomy\npozostać\npozwolenie\npozwól\npozycja\npozytywny\npołknąć\npołowa\npołudnie\npołysk\npołączenie\npołączyć\npościg\npośladki\npoślizg\npoświęcać\npożyczka\npożyczyć\npożądany\npraca\npracodawca\npracownik\npragnienie\npraktyczny\npraktyka\npralnia\nprawda\nprawdopodobieństwo\nprawdziwy\nprawnik\nprawo\nprecedens\nprecel\nprecyzja\nprecyzyjny\npremia\npresja\nprezent\nprezentacja\nprezydent\npriorytet\nproblem\nproca\nprocedura\nprocent\nproces\nproces sądowy\nproducent\nprodukcja\nprodukować\nprodukt\nprofesjonalny\nprofesor\nprofil\nprognoza\nprogram\nprogramista\nprojekcja\nprojekt\nprojektant\nprojektant mody\nprom\npromieniowanie\nproporcja\npropozycja\nprospekt\nprostokąt\nprostota\nprosty\nproszek\nproszę\nprotest\nprowadzić\nprowokować\nprośba\npryszcz\nprysznic\nprywatność\nprywatny\npryzmat\nprzebranie\nprzebudzony\nprzeciek\nprzeciwnik\nprzeciwny\nprzeciwstawić się\nprzecięcie\nprzeciętny\nprzedmieście\nprzedmiot\nprzedstawiciel\nprzedszkole\nprzedwczesny\nprzedłużony\nprzegląd\nprzegrany\nprzegrać\nprzejście\nprzekaz\nprzekonać\nprzekonywać\nprzekraczać\nprzekształcenie\nprzekątna\nprzemoc\nprzemysł\nprzemyślany\nprzenikać\nprzenośny\nprzeoczyć\nprzepis\nprzepraszam\nprzeprosiny\nprzepustka\nprzerażać\nprzerwa\nprzerwać\nprzestraszyć\nprzestraszyć się\nprzestrzeń\nprzestępca\nprzestępstwo\nprzesunięcie\nprzesuwać\nprzeszkadzać\nprzeszkoda\nprzeszłość\nprzetrwanie\nprzewidywalny\nprzewinąć\nprzewlekły\nprzewoźnik\nprzewrót\nprzewód\nprzezroczysty\nprzełożony\nprzełącznik\nprześcieradło\nprześwit\nprzybij piątkę\nprzychylność\nprzycinać\nprzycisk\nprzyciąganie\nprzyciągnąć\nprzyczepa\nprzyczyna\nprzydatny\nprzydział\nprzygnębiony\nprzygoda\nprzygotowanie\nprzyjaciel\nprzyjazny\nprzyjaźń\nprzyjemność\nprzyjemny\nprzyjąć\nprzyjęcie\nprzykład\nprzynieść\nprzypadek\nprzypisanie\nprzypomnieć\nprzyprawa\nprzypływ\nprzyroda\nprzysięgać\nprzystanek autobusowy\nprzyszłość\nprzytulać\nprzytulać się\nprzytłoczyć\nprzywilej\nprzywiązanie\nprzywrócenie\nprzywództwo\nprzyznać\nprzyłączyć\nprzód\npróba\npróbka\npróg\npróżnia\npróżny\npsycholog\npsychologia\npszczoła\npszenica\nptak\npubliczność\npubliczny\npublikacja\npublikować\npudel\npudełko\npudełko zapałek\npukać\npuma\npunkt\npustelnik\npusty\npustynia\npuszka\npuzon\npułapka\npułapka na myszy\npytanie\npółka\npółkole\npółkula\npółnoc\npółwysep\npóźny\npęcznieć\npęd\npędzel\npęknięcie\npępek\npętla\npłaca\npłacz\npłaski\npłaszcz\npłaszcz przeciwdeszczowy\npłaszczka\npłatek\npłatek śniegu\npłatki kukurydziane\npłatność\npłać\npłuco\npług\npłyn\npłyn\npłyta\npłytka\npłytki\npływać\npłótno\nrabat\nrabować\nrabunek\nrachunek\nracjonalny\nrada\nradar\nradio\nradość\nradykalny\nrafa koralowa\nrafika\nrajd\nrak\nrakieta\nrakieta tenisowa\nramię\nramka\nramka na zdjęcia\nrampa\nrana\nranga\nrano\nraport\nratunek\nrdzeń\nreakcja\nreaktor\nrealistyczny\nrealizm\nrecepcjonista\nrecesja\nrecykling\nredukcja\nreflektor\nreforma\nrefren\nregion\nregionalny\nregulacja\nregularny\nrehabilitacja\nrejestracja\nrejs\nrekin\nreklama\nrelacja\nrelaksacja\nreligia\nreligijny\nremiza strażacka\nrenifer\nrentgenowski\nreporter\nrepublika\nreputacja\nrestauracja\nreszta\nresztki\nretoryka\nrewolucja\nrewolucyjny\nrewolwer\nrezerwa\nrezydent\nrezygnacja\nrobak\nrobin\nRobin Hood\nrobot\nrobotnik\nrocznica\nrocznik\nrodzaj\nrodzic\nrodzice\nrodzina\nrodzynka\nrogalik\nrok\nrola\nrolnictwo\nrolniczy\nrolnik\nromans\nromantyczny\nropucha\nrosa\nRosja\nrosomak\nrotacja\nrower\nrozbić\nrozcieńczyć\nrozciągać\nrozczarowanie\nrozczarować\nrozdymka\nrozdział\nrozdzielić\nrozgwiazda\nrozkwitać\nrozkład\nrozkład jazdy\nrozlewać\nrozmiar\nrozmnażanie\nrozmnożyć\nrozmowa\nrozpacz\nrozpoznanie\nrozpoznać\nrozprzestrzeniać się\nrozpuścić\nrozrzucenie\nrozszerzenie\nrozszerzyć\nrozsądny\nrozum\nrozumienie\nrozumieć\nrozważanie\nrozważać\nrozwijać\nrozwiązanie\nrozwiązać\nrozwód\nrozwój\nroślina\nroślina doniczkowa\nroślinność\nrtęć\nrubin\nruch\nruina\nrumieniec\nrura\nrutyna\nryba\nryba błazenek\nrybak\nrycerz\nryk\nrynek\nrynna\nrysik\nrysować\nrysownik\nrysunek\nrytm\nrytuał\nryś\nryż\nrzadki\nrzeczy\nrzeczywistość\nrzeka\nrzemieślnik\nrzepa\nrzeźba\nrzeźbić\nrzodkiewka\nrzut\nRzym\nrząd\nrzęsy\nróg\nrój\nrównanie\nrównik\nrównoległy\nrównowaga\nrówny\nróża\nróżnica\nróżnić się\nróżowy\nręcznik\nręka\nrękaw\nrękawica\nrękodzieło\nrękopis\nsafari\nsaksofon\nsalon\nsamochód\nsamodzielny\nsamolot\nsamorodek\nsamotny\nsandał\nsanki\nsanktuarium\nsatelita\nSaturn\nsauna\nsałata\nsałatka\nscena\nscena\nscenariusz\nschemat\nschludny\nschronienie\nsekcja\nsekretarz\nsektor\nsekwencja\nseminarium\nsen\nsens\nseparacja\nser\nserce\nseria\nsernik\nserwer\nserwetka\nsesja\nsezon\nSfinks\nSherlock Holmes\nShrek\nsiano\nsiarka\nsiatka\nsiatkówka\nsiać\nsiedlisko\nsiedzenie\nsiedzieć\nsiekać\nsiekiera\nsieć\nsilnik\nsilny\nsilos\nsiniak\nsiodło\nsiostra\nsiła\nsiła woli\nskakanka\nskala\nskarb\nskarbnik\nskarbonka\nskarpetka\nskarpetki\nskała\nskierowanie\nsklep\nsklep zoologiczny\nskok\nskok na bungee\nskok w tył\nskoki ze spadochronem\nskorupa\nskończony\nskromny\nskrypt\nskrzat\nskrzydło\nskrzynia\nskrzynka pocztowa\nskrzynka z narzędziami\nskrzypce\nskrzyżowanie\nskrócić\nskręt\nskunks\nskupić\nskurcz\nskuteczny\nskuter wodny\nskóra\nskładnik\nsmaczny\nsmak\nsmok\nsmoking\nsmutek\nsmutny\nsmycz\nsnajper\nsnowboard\nsojusznik\nsok\nsolidarność\nsolidny\nsombrero\nsondaż\nsopel lodu\nsopran\nsos\nsosna\nsowa\nspacer\nspadek\nspadochron\nspaghetti\nsparaliżowany\nspawacz\nspecjalista\nSpiderman\nspirala\nspisek\nspodnie\nspojrzenie\nspojrzenie\nspokojny\nspokój\nspontaniczny\nsport\nsportowiec\nspostrzeżenie\nsposób\nspotkanie\nspołeczeństwo\nspołeczność\nspragniony\nsprawiedliwość\nsprawność\nspray\nsprzeciw\nsprzeczność\nsprzeczny\nsprzedaj\nsprzedawca\nsprzedaż\nsprzyjający\nsprzęt\nsprężysty\nspychacz\nspódnica\nspójny\nspór\nspłukiwanie\nsrebro\nstabilny\nstacja\nstadion\nstado\nstal\nstandard\nstarszy\nstart\nstary\nstatek kosmiczny\nstatek piracki\nstatua\nStatua Wolności\nstatystyczny\nstatyw\nstaw\nstać\nstały\nstegozaur\nstek\nstereo\nsterowiec\nsteward\nstewardesa\nstodoła\nstoisko\nstojak\nstokrotka\nstolarz\nstonoga\nstop\nstopa\nstopień\nstopniowy\nstos\nstowarzyszenie\nstołek\nstożek\nstrach\nstrach na wróble\nstraszny\nstrata\nstrategiczny\nstrażak\nstrażnik\nstrefa\nstres\nstromy\nstrona\nstrona internetowa\nstruktura\nstrumień\nstruś\nstrych\nstrzał\nstrzałka\nstrzelać\nstrzelba\nstrzyżenie\nstrój\nstudent\nstudia\nstudio\nstuknięcie\nstymulacja\nstypendium\nstół\nsubstancja\nsuchy\nsudoku\nsufit\nsugerować\nsugestia\nsukces\nsukienka\nsuknia\nsum\nsuma\nsumienie\nSuperman\nsupermarket\nsupermoc\nsurowy\nsurykatka\nsushi\nsusza\nsweter\nsyczenie\nsylaba\nsymbol\nsymetria\nsymfonia\nsympatyczny\nsypialnia\nsyrena\nsystem\nszachy\nszacować\nszacunek\nszafka\nszalik\nszampan\nszampon\nszansa\nszantaż\nszarlotka\nszczególny\nszczegół\nszczelina\nszczepionka\nszczoteczka do zębów\nszczotka do włosów\nszczupak\nszczupły\nszczur\nszczyt\nszczyt\nszczęka\nszczęście\nszczęśliwy\nszef kuchni\nszelki\nszept\nszerokość\nsześciokąt\nsześciopak\nszkic\nszkielet\nSzkocja\nszkoda\nszkodliwy\nszkodnik\nszkoła\nszkło\nszlachetny\nszmaragd\nszminka\nsznur\nsznurek\nsznurowadło\nszop\nszopa\nszorstki\nszorty\nszpatułka\nszpieg\nszpilka\nszpinak\nszpital\nszpon\nszpula\nsztuczka\nsztuczka magiczna\nsztuczne zęby\nsztuka\nsztylet\nszufelka\nszukaj\nszyba przednia\nszybki\nszybkość\nszybować\nszyja\nszympans\nszynka\nszynszyla\nszyszka\nszyć\nsól\nsąd\nsądowy\nsąsiad\nsąsiedztwo\nsędzia\nsęp\nsłabnąć\nsłabość\nsłaby\nsława\nsławny\nsłodki\nsłoik\nsłoma\nsłonecznik\nsłoneczny\nsłownik\nsłowo\nsłoń\nsłońce\nsłuchawki\nsłuchawki douszne\nsłuchać\nsługa\nsłup\nsłużyć\nsłyszeć\nt-rex\ntablet\ntabletka\ntaca\ntaczka\ntajny\ntaksówka\ntaksówkarz\ntalerz\ntalia\ntani\ntaniec\ntapeta\ntarantula\ntaras\ntarcza\nTarzan\ntatuaż\ntaśma\ntaśma klejąca\nteatr\ntechniczny\ntechnika\ntechnologia\ntekst\ntekstura\nteksty\ntektura\ntelefon\ntelefon komórkowy\nteleskop\ntelewizja\ntemat\ntemperatura\ntemperówka\ntempo\ntenis\ntenis stołowy\nteoria\nterapeuta\nterapia\nteren\ntermin\ntermometr\nterrorysta\ntest\ntetris\nteza\ntiramisu\ntitanic\ntkanina\ntkać\ntlen\ntoaleta\ntoast\ntoczyć\ntoksyczny\ntona\ntopienie\ntorba\ntornado\ntorpeda\ntoster\ntotem\ntowarzyski\ntowarzyszyć\ntożsamość\ntradycja\ntradycyjny\ntragedia\ntrakt\ntraktat\ntransakcja\ntransfer\ntransmisja\ntransport\ntrasa\ntratwa\ntrawa\ntrawnik\ntrend\ntrener\ntrening\ntreść\ntrofeum\ntrojaczki\ntron\ntropikalny\ntrucizna\ntrudności\ntrudność\ntrudny\ntrujący\ntrumna\ntrup\ntruskawka\ntrzask\ntrzcina\ntrzepaczka\ntrzymanie\ntrzęsienie ziemi\ntrójkołowiec\ntrójkąt\ntrąbka\ntuba\ntubylczy\ntukan\ntunel\nturniej\nturysta\nturystyka\ntuzin\ntwardy\ntwarz\ntwierdza\ntwierdzenie\ntworzenie\ntworzyć\ntydzień\ntygiel\ntygodniowy\ntygrys\ntykać\ntynk\ntyp\ntypowy\ntyrolka\ntytuł\ntył\ntęcza\ntło\ntłok\ntłum\ntłumaczyć\ntłumić\nubezpieczenie\nubezpieczyć\nubieranie się\nubrania\nucho\nuchwyt\nucieczka\nuczciwy\nuczestniczyć\nuczestnik\nuczeń\nuczony\nuczta\nuczucie\nudany\nuderzenie\nudo\nudowodnić\nudział\nufo\nugniatać\nugoda\nugryźć\nujawnić\nukryć\nukulele\nukład\nukład słoneczny\nul\nulepszenie\nulga\nulica\nulotka\nulubiony\nulżyć\numiejętność\numowa\numrzeć\numysł\nunikalny\nunikać\nuniwersalny\nuniwersytet\nunosić się\nupadek\nupadłość\nuparty\nupierać się\nuporczywy\nupoważnić\nuprawnienie\nuprawniony\nuprzedzenie\nuprzywilejowany\nuroczy\nurodziny\nurok\nuruchomienie\nurzekać\nurządzenie\nurzędnik\nUSB\nusprawiedliwić\nusta\nustalenie\nustalić\nustanowiony\nustanowić\nustawodawca\nustawodawczy\nustawodawstwo\nustny\nusunąć\nuszkodzenie\nusługa\nutalentowany\nutopić\nutrzymać\nuwaga\nuwolnić\nuzależnienie\nuzależniony\nuzasadnienie\nuzupełniający\nuzyskać\nułamek\nuścisk dłoni\nuśmiech\nużytkownik\nużywać\nvan\nvoucher\nwada\nwadliwy\nwafel\nwaga\nwagon\nwahadło\nwahać się\nwakacje\nwalizka\nwalka\nwalka na pięści\nwalka na poduszki\nwalka na śnieżki\nwaluta\nwampir\nwanilia\nwanna\nwarga\nwariacja\nwariant\nwarstwa\nwarsztat\nwartość\nwarunek\nwarzywo\nwata cukrowa\nwał\nwałek do włosów\nważka\nważny\nwchodzić\nwchłonąć\nwczesny\nwdowa\nwdzięczny\nweekend\nwegetarianin\nwektor\nwelon\nwentylacja\nwentylator sufitowy\nwerdykt\nwersja\nwesoły\nweteran\nweterynarz\nwewnątrz\nwewnętrzny\nwełna\nwiadomości\nwiadomość\nwiadro\nwiara\nwiarygodność\nwiatr\nwiatrak\nwidelec\nwideo\nwidmo\nwidoczny\nwidok\nwidły\nwieczny\nwieczór\nwiedza\nwiedzieć\nwiedźma\nwiejski\nwiek\nwielbłąd\nwielkanoc\nwielki\nwielkość\nwieloryb\nwieniec\nwierny\nwiersz\nwiertło\nwierzba\nwieszak\nwiewiórka\nwieś\nwieża\nWieża Eiffla\nwilk\nwilkołak\nwilla\nwina\nwinda\nwino\nwinogrona\nwinorośl\nwiolonczela\nwiosna\nwiosło\nwir\nwirus\nwitamina\nwizja\nwizyta\nwiązać\nwiększość\nwięzienie\nwięzień\nwiśnia\nwkład\nwniosek\nwoda\nwodorosty\nwodospad\nwojna\nwojownik\nwojskowy\nwola\nwolność\nwolontariusz\nwosk\nwoskowina\nwołowina\nwoźny\nwpis\nwprowadzenie\nwprowadzić\nwpływ\nwpływać\nwrak\nwrażliwość\nwrażliwy\nwrażliwy\nwrogi\nwrogość\nwrona\nwrzód\nwróg\nwróżka\nwschód słońca\nwsiadać\nwskazówka\nwskaźnik\nwspaniały\nwsparcie\nwspierać\nwspinać się\nwspornik\nwspólny\nwspółczesny\nwspółpracować\nwstawić\nwstrzyknięcie\nwstrzyknąć\nwstrząs\nwstyd\nwstążka\nwszechświat\nwtórny\nwujek\nwulkan\nwybaczyć\nwybielacz\nwybierać\nwyborca\nwybory\nwybredny\nwybrzeże\nwybrzuszenie\nwybuch\nwybór\nwycierać\nwycięcie\nwycofanie\nwycofać\nwycofać się\nwydanie\nwydatek\nwydawać\nwydawać się\nwydawca\nwydawnictwo\nwydra\nwydzielina\nwygląd\nwygnanie\nwygoda\nwygodny\nwygrać\nwyjaśnienie\nwyjaśnić\nwyjątek\nwyjście\nwykałaczka\nwykluczać\nwykop\nwykres\nwykwalifikowany\nwykład\nwylewać\nwylot\nwymaganie\nwymagać\nwymarły\nwymiana\nwymiar\nwymiotować\nwymię\nwymowny\nwynajem\nwynalazek\nwynik\nwyobraźnia\nwypadek\nwyparować\nwypełnij\nwyprawa\nwyprostować\nwyrazić\nwyraźny\nwyrwać\nwyróżnienie\nwysiłek\nwysoki\nwysokie obcasy\nwysokość\nwyspa\nwystawa\nwystęp\nwytrzymywać\nwytyczne\nwywiad\nwyznaczać\nwyznaczenie\nwyznanie\nwyzwalacz\nwyzwanie\nwyłączny\nwyślij\nwyświetlać\nwzajemny\nwzdychanie\nwzględny\nwzgórze\nwzmacniać\nwzmianka\nwzmocnić\nwzrok\nwzrost\nwzruszenie ramion\nwzór\nwódz\nwóz\nwóz strażacki\nwóz z lodami\nwózek\nwózek sklepowy\nwąchać\nwąski\nwąsy\nwątek\nwątpliwość\nwątroba\nwąż\nwędrować\nwędrówka\nwęgiel\nwęgorz\nwęzeł\nwładca\nwładza\nwłamywacz\nwłasność\nwłaz\nwłaściciel\nwłaściwy\nwłochaty\nWłochy\nwłosy\nwłosy w nosie\nwłożyć\nwłócznia\nwłókno\nwściekłość\nYeti\nYoda\nyoutube\nzaakceptować\nzaangażowanie\nzabawa\nzabawka\nzabawny\nzabić\nzabójca\nzachodni\nzachowanie\nzachować\nzachowywać się\nzachwyć\nzachód\nzachęcający\nzachęcać\nzachęta\nzaczynać\nzadanie\nzadowalający\nzadowolenie\nzadowolony\nzadziwiający\nzadzwoń\nzagrozić\nzagrożenie\nzagubiony\nzagłówek\nzainteresowanie\nzajmować\nzajęcie\nzajęty\nzakaz\nzakazać\nzakażenie\nzaklęcie\nzakonnica\nzakończ\nzakres\nzakupy\nzakładać\nzakładka\nzakładnik\nzakłopotanie\nzakłócenie\nzalecenie\nzaleganie\nzalegać\nzaleta\nzależeć\nzależność\nzależny\nzamek\nzamek błyskawiczny\nzamek z piasku\nzamiatać\nzamieszanie\nzamieszki\nzamieć\nzamknięty\nzamknąć\nzamrażanie\nzamrażarka\nzamrożony\nzaniechanie\nzanieczyszczenie\nzaniedbanie\nzanurzyć\nzaopatrywać\nzapach\nzapadnia\nzapalenie płuc\nzapalniczka\nzapas\nzapasowy\nzapasy\nzapałka\nzapaśnik\nzapaść\nzapewniać\nzapewnienie\nzapewnić\nzapisz\nzapobiegać\nzapomnieć\nzapowiedź\nzaprosić\nzaproszenie\nzaprzeczenie\nzaprzeczyć\nzapytać\nzaraza\nzarażać\nzarejestrować\nzarodek\nzarodnik\nzarys\nzarządzanie\nzasada\nzasięg\nzaskakujący\nzaskoczony\nzastąpić\nzastępca\nzastępczy\nzasób\nzasłona\nzasługa\nzasługiwać\nzatoka\nzatrudniać\nzatrudnienie\nzatrzymanie\nzatrzymać\nzatwierdzać\nzatwierdzenie\nzaufanie\nzawierać\nzawiesić\nzawodowy\nzawroty głowy\nzawstydzony\nzawód\nzazdrosny\nzaćmienie\nzałożenie\nzbawienie\nzbieg okoliczności\nzbierać\nzbiornik\nzbroja\nzdalny\nzdanie\nzdarzyć się\nzdefiniować\nzdenerwowany\nzderzak\nzdesperowany\nzdjąć\nzdobyć\nzdolność\nzdolny\nzdradzić\nzdrowie\nzdrowy\nzebra\nzegar\nzejście\nzemsta\nzepsuć\nzespół\nzestaw\nzestaw perkusyjny\nZeus\nzewnętrzny\nzgadnij\nzgiąć\nzgniły\nzgoda\nzgodny\nzgodzić się\nzgromadzenie\nziarno\nzielony\nZiemia\nziemia\nziemniak\nziewnięcie\nzima\nzimno\nzintegrowany\nzioło\nzjawisko\nzlew\nzlokalizować\nzmarszczka\nzmartwienie\nzmiana\nzmienna\nzmniejszenie\nzmęczony\nznaczenie\nznaczny\nznaczący\nznajdź\nznajomość\nznajomy\nznak\nznak stopu\nzniechęcać\nzniekształcać\nzniekształcenie\nznieść\nznikać\nzniszczenie\nzniszczyć\nzombie\nzoo\nzorza polarna\nzostawić\nzraniony\nzranić\nzraszacz\nzrelaksować się\nzrezygnować\nzrozumieć\nzrzut\nzrzędliwy\nzrównoważony\nzróżnicowany\nzręczność\nzszywacz\nzupa\nzwiedzać\nzwierzę\nzwierzę domowe\nzwinny\nzwiązek\nzwlekanie\nzwolnienie\nzwycięstwo\nzwycięzca\nzwykły\nzygzak\nzysk\nzyski\nząb\nzłamane serce\nzłamany\nzłoczyńca\nzłodziej\nzłom\nzłota rybka\nzłote jabłko\nzłote jajko\nzłoto\nzłoty łańcuch\nzłośliwość\nzłośliwy\nzłośnica\nzłożony\nzłożyć\nzłudzenie\nzły\nćma\nćwiartka\nćwiczyć\nłabędź\nładny\nładowanie\nładowarka\nładować\nłagodny\nłamigłówka\nłapa\nłapać\nłasica\nłaska\nłaskotać\nłatka\nłatwy\nławka\nłazienka\nłańcuch\nłobuz\nłodyga\nłodyga fasoli\nłokieć\nłom\nłopata\nłosoś\nłoś\nłucznik\nłuk\nłup\nłuska orzecha\nłyk\nłysy\nłyżeczka do herbaty\nłyżka\nłyżwa\nłyżwy\nłza\nłódź\nłódź podwodna\nłóżko\nłóżko piętrowe\nłąka\nŚwięty Mikołaj\nściana\nścieżka\nścisk\nścisły\nściąć\nślad\nśledzić\nśledztwo\nślepy\nślimak\nślina\nślinić się\nśliski\nślizg\nślizgać się\nślub\nśluz\nśmiały\nśmiech\nśmieci\nśmiertelny\nśmierć\nśmieszny\nśniadanie\nśnieg\nśnieżka\nśpiewak\nśpiewać\nśpiący\nśpiączka\nśredni\nśrednica\nśredniowieczny\nśrodki\nśrodowisko\nśrodowiskowy\nśruba\nświadczyć\nświadek\nświadomość\nświadomy\nświat\nświatło\nświatło dzienne\nświatło słoneczne\nświeca\nświecić\nświecki\nświetlik\nświeży\nświnia\nświstak\nświątynia\nświęto\nświętować\nświęty\nźle\nźródło\nżaba\nżabka\nżagiel\nżaglówka\nżart\nżartowniś\nżarówka\nżałoba\nżałować\nżebro\nżelazo\nżniwo\nżona\nżonaty\nżonglowanie\nżołnierz\nżołądek\nżołądź\nżuk\nżuć\nżwir\nżycie\nżyrafa\nżyrandol\nżywopłot\nżywotny\nżywy\nżyć\nżyła\nżółtko\nżółty\nżółw\nżądło\nżłobek"
  },
  {
    "path": "internal/game/words/ru",
    "content": "абзац\nабонент\nавария\nавиакомпания\nавиация\nавтобус\nавтограф\nавтомат\nавтомашина\nавторитет\nагент\nагентство\nагрегат\nагрессия\nад\nадаптация\nадвокат\nадминистратор\nадмирал\nазарт\nакадемик\nакадемия\nактив\nактивность\nактриса\nакцент\nакционер\nалгоритм\nалкоголь\nаллея\nалмаз\nальбом\nальтернатива\nалюминий\nамбиция\nамериканец\nаналитик\nаналог\nаналогия\nангел\nангличанин\nанекдот\nанкета\nансамбль\nантитело\nаплодисменты\nапостол\nаппаратура\nаппетит\nаптека\nараб\nаргумент\nарена\nаренда\nарест\nарка\nармянин\nаромат\nарсенал\nартиллерия\nартистка\nархив\nархиепископ\nархитектор\nархитектура\nаспект\nассортимент\nассоциация\nасфальт\nатака\nатмосфера\nатом\nатрибут\nаудитория\nаукцион\nафиша\nаэродром\nаэропорт\nбабка\nбабочка\nбагаж\nбагажник\nбазар\nбак\nбал\nбаланс\nбалет\nбалкон\nбалл\nбанда\nбандит\nбанка\nбанкет\nбанкир\nбанкротство\nбаня\nбар\nбарабан\nбарак\nбарон\nбарышня\nбарьер\nбас\nбассейн\nбатальон\nбатарея\nбатюшка\nбашка\nбашня\nбег\nбегство\nбеда\nбедность\nбедро\nбедствие\nбеженец\nбездна\nбезобразие\nбезработица\nбезумие\nбелка\nбелок\nбелье\nбензин\nбереза\nбеременность\nбес\nбесконечность\nбеспокойство\nбеспорядок\nбетон\nбешенство\nбиблиотека\nбиблия\nбизнесмен\nбилет\nбинокль\nбиография\nбиология\nбиржа\nбитва\nблаго\nблагодарность\nблагодать\nблагополучие\nблагословение\nбланк\nблеск\nблизкие\nблизнец\nблизость\nблин\nблок\nблокнот\nблондинка\nблюдо\nбогатство\nбогатырь\nбогослужение\nбоевик\nбоеприпас\nбоец\nбок\nбокал\nбокс\nболельщик\nболото\nбольшевик\nбомба\nбомж\nбор\nборец\nборода\nборт\nбосс\nботинок\nбочка\nбоярин\nбрак\nбратец\nбратство\nбревно\nбред\nбремя\nбригада\nбригадир\nбровь\nбрюки\nбрюхо\nбудка\nбуква\nбукет\nбульвар\nбульон\nбумажка\nбунт\nбуря\nбутерброд\nбуфет\nбухгалтер\nбык\nбыт\nбытие\nбюллетень\nбюро\nвагон\nважность\nваза\nвакцина\nвал\nваленок\nвалюта\nванна\nванная\nваренье\nвахта\nвведение\nввод\nвдова\nвдохновение\nведение\nведомство\nведро\nведущий\nведьма\nвеко\nвектор\nвеличество\nвеличие\nвеличина\nвелосипед\nвена\nверанда\nверблюд\nверевка\nверность\nвероятность\nверсия\nверста\nвертикаль\nвертолет\nверующий\nверх\nверхушка\nвершина\nвес\nвеселье\nвестибюль\nвесть\nвесы\nветвь\nветеран\nветерок\nветка\nвечеринка\nвечность\nвещество\nвзаимодействие\nвзаимоотношения\nвзаимосвязь\nвзвод\nвздох\nвзлет\nвзнос\nвзор\nвзрослый\nвзрыв\nвзыскание\nвзятка\nвидение\nвидимость\nвиза\nвизг\nвизит\nвилка\nвилла\nвина\nвиноград\nвинтовка\nвиски\nвисок\nвитамин\nвитрина\nвице-президент\nвице-премьер\nвклад\nвключение\nвкус\nвлага\nвладелец\nвладение\nвладыка\nвложение\nвмешательство\nвнедрение\nвнесение\nвнешность\nвнук\nвнучка\nводитель\nводоем\nвоеннослужащий\nвоенный\nвождь\nвозбуждение\nвозврат\nвозвращение\nвоздействие\nвозмещение\nвозмущение\nвознаграждение\nвозникновение\nвозражение\nвозрождение\nвоин\nвой\nвокзал\nволк\nволнение\nволокно\nвоображение\nвооружение\nвоплощение\nвопль\nвор\nворобей\nворона\nворот\nворота\nворотник\nвоскресение\nвоскресенье\nвоспитание\nвосприятие\nвоспроизводство\nвосстание\nвосстановление\nвосток\nвосторг\nвосхищение\nвращение\nвред\nвсадник\nвселенная\nвсплеск\nвспышка\nвступление\nвторжение\nвторник\nвуз\nвход\nвыброс\nвывеска\nвыгода\nвыдача\nвыделение\nвыдержка\nвыдумка\nвыезд\nвыживание\nвызов\nвыигрыш\nвыпивка\nвыплата\nвыполнение\nвыпуск\nвыпускник\nвыработка\nвырост\nвыручка\nвысказывание\nвыстрел\nвыступ\nвыступление\nвыходной\nвышка\nвыявление\nгад\nгадость\nгазон\nгалактика\nгалерея\nгалстук\nгамма\nгараж\nгарантия\nгармония\nгастроли\nгвардия\nгвоздь\nгектар\nген\nгений\nгеном\nгенштаб\nгеография\nгепатит\nгероиня\nгибель\nгигант\nгимн\nгимназия\nгимнастерка\nгипотеза\nгитара\nглагол\nглазок\nглина\nглоток\nглупость\nгнев\nгнездо\nго\nгол\nголовка\nголод\nголосование\nголубь\nгонка\nгонорар\nгонщик\nгордость\nгоре\nгоречь\nгоризонт\nгорка\nгорло\nгородок\nгорожанин\nгоршок\nгоспиталь\nгосподь\nгоспожа\nгостиная\nгостиница\nгосударь\nготовность\nград\nградус\nгражданство\nграмм\nграмота\nграната\nгрань\nграф\nграфик\nгребень\nгрек\nгрех\nгриб\nгрипп\nгроб\nгроза\nгром\nгрохот\nгруда\nгруз\nгрузин\nгрузовик\nгрунт\nгруппировка\nгрусть\nгруша\nгрязь\nгубернатор\nгуберния\nгудок\nгул\nгусеница\nгусь\nдавление\nдавность\nдаль\nдальнейшее\nдальность\nдар\nдата\nдверца\nдвигатель\nдворец\nдворник\nдева\nдевица\nдевка\nдевчонка\nдедушка\nдежурный\nдежурство\nдействительность\nдекларация\nдекорация\nделегация\nделение\nдемократ\nдемократия\nдемон\nдемонстрация\nдепартамент\nдепрессия\nдержава\nдерьмо\nдесятилетие\nдесятка\nдеталь\nдетектив\nдефект\nдефицит\nдеяние\nдеятель\nджаз\nджинсы\nджип\nдиагноз\nдиагностика\nдиалог\nдиаметр\nдиапазон\nдиван\nдивизион\nдивизия\nдизайн\nдизайнер\nдилер\nдинамика\nдинамо\nдиплом\nдипломат\nдирекция\nдирижер\nдиск\nдискуссия\nдиссертация\nдистанция\nдисциплина\nдитя\nдлина\nдневник\nдно\nдобавка\nдобро\nдоброта\nдобыча\nдоверие\nдовод\nдогадка\nдоговоренность\nдоза\nдоказательство\nдоклад\nдоктрина\nдокументация\nдолжник\nдолжное\nдолина\nдомик\nдон\nдонос\nдополнение\nдопрос\nдорожка\nдосада\nдоска\nдоставка\nдостижение\nдостоверность\nдостоинство\nдостояние\nдоступ\nдоцент\nдочка\nдрака\nдракон\nдрама\nдраматург\nдревесина\nдревность\nдрова\nдрожь\nдружба\nдружка\nдружок\nдрянь\nдуб\nдуга\nдура\nдурак\nдухи\nдуш\nдым\nдыра\nдырка\nдыхание\nдьявол\nдядька\nевангелие\nевро\nевропеец\nеда\nединица\nединство\nежик\nезда\nелка\nель\nемкость\nепархия\nепископ\nерунда\nжажда\nжалоба\nжалость\nжанр\nжар\nжара\nжелающий\nжелеза\nжелезо\nжелудок\nжених\nжертва\nжест\nжестокость\nживопись\nживот\nжидкость\nжилец\nжилище\nжилье\nжир\nжительство\nжук\nжюри\nзабава\nзаблуждение\nзаболевание\nзабор\nзабота\nзаведение\nзавершение\nзавет\nзавещание\nзависть\nзавтрак\nзагадка\nзаговор\nзаготовка\nзагрязнение\nзад\nзадание\nзадержка\nзадница\nзадолженность\nзаем\nзажигалка\nзаказ\nзаказчик\nзакат\nзаклинание\nзаключение\nзаключенный\nзаконность\nзаконодатель\nзакономерность\nзаконопроект\nзакрытие\nзакупка\nзакуска\nзалив\nзалог\nзаложник\nзалп\nзам\nзамена\nзаметка\nзамечание\nзамок\nзамысел\nзанавес\nзанавеска\nзанятость\nзапас\nзаписка\nзапись\nзаповедь\nзапрет\nзапрос\nзапуск\nзаработок\nзаражение\nзаросль\nзарплата\nзаря\nзаряд\nзаслуга\nзастолье\nзастройка\nзатея\nзатрата\nзатылок\nзахват\nзащитник\nзаявитель\nзаявка\nзаяц\nзвание\nзвездочка\nзвено\nзверь\nзвон\nзвонок\nзвучание\nздравоохранение\nзелень\nземлетрясение\nземляк\nземлянка\nзеркало\nзерно\nзло\nзлоба\nзлость\nзмей\nзмея\nзнакомство\nзнакомый\nзнаменитость\nзнамя\nзнаток\nзначимость\nзначок\nзолото\nзонтик\nзоопарк\nзрелище\nзять\nигла\nигрок\nигрушка\nидеал\nидентификация\nидеология\nидиот\nиерархия\nизба\nизбиратель\nизбыток\nизвестность\nизготовление\nиздание\nиздатель\nиздательство\nизделие\nиздержки\nизложение\nизлучение\nизмена\nизмерение\nизображение\nизобретатель\nизобретение\nизоляция\nизумление\nизучение\nизъятие\nикона\nикра\nил\nиллюзия\nиллюстрация\nимидж\nиммунитет\nимператор\nимперия\nимпорт\nимпульс\nинвалид\nинвестиция\nинвестор\nиндеец\nиндекс\nиндивид\nиндивидуальность\nиндустрия\nинерция\nинженер\nинициатива\nинициатор\nиномарка\nиностранец\nинспектор\nинспекция\nинстанция\nинстинкт\nинструктор\nинструкция\nинструмент\nинтеграция\nинтеллект\nинтеллигент\nинтеллигенция\nинтенсивность\nинтервал\nинтервью\nинтернет\nинтерпретация\nинтерьер\nинтонация\nинтрига\nинтуиция\nинфаркт\nинфекция\nинфляция\nинфраструктура\nинцидент\nирония\nиск\nисключение\nископаемое\nискра\nислам\nисповедь\nисполнитель\nиспуг\nиспытание\nисследователь\nистерика\nистец\nистина\nисток\nисторик\nистребитель\nисход\nисчезновение\nитальянец\nиюль\nкабина\nкаблук\nкавалер\nкадр\nказак\nказарма\nказино\nказнь\nкалендарь\nкалитка\nкамера\nкамин\nкампания\nканал\nкандидат\nкандидатура\nканикулы\nканон\nканцелярия\nкапитал\nкапитализм\nкапля\nкапуста\nкарандаш\nкартинка\nкартофель\nкарточка\nкартошка\nкарьера\nкасса\nкассета\nкастрюля\nкаталог\nкатание\nкатастрофа\nкатегория\nкатер\nкафе\nкафедра\nкаша\nкаюта\nквадрат\nквалификация\nквартал\nквота\nкепка\nкилограмм\nкилометр\nкинематограф\nкинотеатр\nкиоск\nкипяток\nкирпич\nкислород\nкислота\nкисть\nкит\nкитаец\nкишка\nкладбище\nклапан\nклассик\nклассика\nклассификация\nклей\nклимат\nклиника\nкличка\nклок\nклоун\nклочок\nключ\nклятва\nкнижка\nкнопка\nкнягиня\nковер\nкод\nкоза\nкозел\nкойка\nколбаса\nколебание\nколенка\nколесо\nколлегия\nколледж\nколлектив\nколлекция\nколодец\nколокол\nколония\nколонка\nколонна\nколхоз\nколхозник\nкольцо\nколяска\nком\nкомандировка\nкомандование\nкомандующий\nкомар\nкомбайн\nкомбинат\nкомбинация\nкомедия\nкомендант\nкомиссар\nкомментарий\nкоммерсант\nкоммунизм\nкоммуникация\nкоммунист\nкомнатка\nкомпенсация\nкомпетенция\nкомплект\nкомплимент\nкомпозитор\nкомпозиция\nкомпонент\nкомпромисс\nкомпьютер\nкомсомол\nкомсомолец\nкомфорт\nконвейер\nконвенция\nконверт\nконгресс\nконек\nконкурент\nконкурентоспособность\nконкуренция\nконкурс\nконсерватория\nконсервы\nконституция\nконструктор\nконструкция\nконсультант\nконсультация\nконтакт\nконтейнер\nконтекст\nконтинент\nконтора\nконтракт\nконтур\nконференция\nконфета\nконфликт\nконцентрация\nконцепция\nконцерн\nкончик\nкончина\nконь\nконьяк\nконюшня\nкооператив\nкоордината\nкоординация\nкопейка\nкопия\nкопыто\nкора\nкорень\nкорзина\nкорм\nкоробка\nкоробочка\nкорова\nкоролева\nкороль\nкорпорация\nкорпус\nкорреспондент\nкоррупция\nкорточки\nкоса\nкосметика\nкосмонавт\nкосмос\nкостер\nкосточка\nкость\nкот\nкотел\nкотелок\nкотенок\nкотлета\nкофе\nкошелек\nкошка\nкошмар\nкоэффициент\nкрайность\nкран\nкрасавец\nкрасавица\nкраска\nкрах\nкредит\nкредитование\nкредитор\nкрем\nкрепость\nкрест\nкрестьянин\nкривая\nкризис\nкрик\nкристалл\nкритерий\nкритик\nкритика\nкрокодил\nкролик\nкрона\nкрошка\nкружка\nкружок\nкрыло\nкрыльцо\nкрыса\nкрышка\nкрючок\nкубок\nкузов\nкукла\nкулак\nкулиса\nкульт\nкумир\nкупе\nкупец\nкупол\nкупюра\nкурица\nкурорт\nкурсант\nкуртка\nкусок\nкусочек\nкуст\nкустарник\nкуча\nкучка\nлаборатория\nлавка\nлавочка\nлад\nлак\nлампа\nлампочка\nландшафт\nлапа\nлапка\nларек\nласка\nлауреат\nлебедь\nлев\nлегенда\nлегкое\nлегкость\nлед\nледи\nлезвие\nлейтенант\nлекарство\nлекция\nлен\nлента\nлетчик\nлечение\nлига\nлик\nликвидация\nлимон\nлипа\nлиства\nлисток\nлисточек\nлитератор\nлитр\nлитургия\nлифт\nлихорадка\nлицензия\nлишение\nлоб\nловушка\nлогика\nлогистика\nлодка\nложа\nложка\nложь\nлозунг\nлокомотив\nлокоть\nлопасть\nлопата\nлопатка\nлорд\nлуг\nлужа\nлук\nлуна\nлуч\nлыжа\nльгота\nлюбитель\nлюбовник\nлюбовница\nлюбопытство\nлюк\nлягушка\nмаг\nмагия\nмагнитофон\nмадам\nмайка\nмайор\nмаксимум\nмалыш\nмальчишка\nмамаша\nмамочка\nманевр\nманеж\nманера\nмарка\nмарш\nмаршал\nмаршрут\nмаска\nмасло\nмассив\nмастерская\nмастерство\nмасштаб\nмат\nматематик\nматематика\nматерия\nматрица\nматрос\nматушка\nматч\nмашинка\nмгновение\nмебель\nмед\nмедаль\nмедведь\nмедик\nмедицина\nмедсестра\nмедь\nмелодия\nмелочь\nмельница\nмемуары\nменеджер\nменеджмент\nмент\nменьшинство\nменю\nмерка\nмероприятие\nмерседес\nмертвый\nместечко\nместность\nместорождение\nместь\nметалл\nметаллургия\nметафора\nметодика\nметодология\nметро\nмех\nмеханик\nмеханика\nмеч\nмечта\nмешок\nмиг\nмиграция\nмикрофон\nмилиционер\nмиллиард\nмилосердие\nмилость\nмина\nминимум\nминус\nмировоззрение\nмиска\nмиссия\nмистер\nмитинг\nмитрополит\nмиф\nмладенец\nмогила\nмода\nмоделирование\nмодернизация\nмодификация\nмодуль\nмолекула\nмолитва\nмолния\nмолодежь\nмолодец\nмолодость\nмолоко\nмолоток\nмолчание\nмонастырь\nмонах\nмонета\nмониторинг\nмонография\nмонолог\nмонополия\nмонтаж\nмораль\nморда\nмороженое\nмороз\nморщина\nморяк\nмосквич\nмост\nмостик\nмостовая\nмотив\nмотивация\nмотор\nмотоцикл\nмоча\nмощи\nмощность\nмощь\nмрак\nмудрость\nмужество\nмуза\nмузыкант\nмука\nмундир\nмуравей\nмусор\nмусульманин\nмуха\nмыло\nмыслитель\nмышка\nмышление\nмышца\nмышь\nмэр\nмэрия\nмясо\nмяч\nнабережная\nнаблюдатель\nнаблюдение\nнабор\nнавык\nнаграда\nнагрузка\nнадежность\nнадзор\nнадпись\nназначение\nнаименование\nнаказание\nнакопление\nналет\nналогообложение\nналогоплательщик\nналожение\nнамек\nнамерение\nнападение\nнапиток\nнаправленность\nнапряжение\nнапряженность\nнарком\nнаркоман\nнаркотик\nнары\nнаряд\nнасаждение\nнасекомое\nнасилие\nнаслаждение\nнаследие\nнаследник\nнаследство\nнасмешка\nнасос\nнаставник\nнастоящее\nнаступление\nнатура\nнаходка\nнахождение\nнациональность\nнация\nначальство\nневеста\nневозможность\nнегодяй\nнегр\nнедвижимость\nнедоверие\nнедовольство\nнедостаток\nнедоумение\nнедра\nнежность\nнезависимость\nнезнакомец\nненависть\nнеожиданность\nнеопределенность\nнеправда\nнеприязнь\nнеприятность\nнерв\nнесправедливость\nнесчастье\nнетерпение\nнеудача\nнефть\nнехватка\nниз\nнитка\nнить\nниша\nнищета\nнищий\nновинка\nновичок\nновое\nновость\nноготь\nнож\nножка\nноздря\nноль\nнора\nнорматив\nноситель\nносок\nнота\nноябрь\nнрав\nнравственность\nнужда\nнуль\nобаяние\nобвинение\nобвиняемый\nобед\nобезьяна\nобещание\nобзор\nобида\nобилие\nобитатель\nобитель\nобком\nобладатель\nоблако\nоблегчение\nоблигация\nоблик\nобложка\nобломок\nобман\nобмен\nобморок\nобнаружение\nобновление\nобобщение\nобозначение\nобои\nоболочка\nоборона\nоборот\nобоснование\nобочина\nобработка\nобращение\nобрыв\nобрывок\nобряд\nобследование\nобслуживание\nобстановка\nобсуждение\nобувь\nобучение\nобход\nобщее\nобщежитие\nобщение\nобщественность\nобщина\nобщность\nобъединение\nобъявление\nобъяснение\nобъятие\nобыватель\nобыск\nобычай\nобязательство\nовощи\nовраг\nовца\nоговорка\nогонек\nогород\nограда\nограничение\nогурец\nодеяло\nодиночество\nодиночка\nодобрение\nожидание\nозеро\nоказание\nокеан\nоклад\nоко\nокончание\nокоп\nокошко\nокраина\nокраска\nокрестность\nокруг\nокружающее\nокружение\nокурок\nолень\nолигарх\nолимпиада\nопасение\nопасность\nопера\nоператор\nописание\nоплата\nопора\nоппозиция\nоппонент\nоправдание\nопрос\nоптимизация\nоптимизм\nорбита\nорганизатор\nорден\nорел\nорех\nоригинал\nориентация\nориентир\nоркестр\nорудие\nосвещение\nосвобождение\nосвоение\nосколок\nоскорбление\nосмотр\nоснователь\nосновное\nособа\nособняк\nосознание\nостановка\nостаток\nосторожность\nострота\nосужденный\nосуществление\nось\nотбор\nотверстие\nответчик\nотвращение\nотдельность\nотдых\nотель\nотечество\nотзыв\nотказ\nотклик\nотклонение\nоткровение\nоткрытие\nоткрытка\nотмена\nотметка\nотопление\nотпечаток\nотпуск\nотражение\nотрезок\nотрывок\nотряд\nотставка\nотступление\nоттенок\nотходы\nотчаяние\nотчество\nотчет\nотчетность\nотъезд\nофис\nофициант\nоформление\nохота\nохотник\nохранник\nочаг\nочерк\nочертание\nочистка\nочки\nочко\nпавильон\nпадение\nпакет\nпалата\nпалатка\nпалач\nпалка\nпалочка\nпалуба\nпальма\nпальто\nпальчик\nпамятник\nпан\nпанель\nпаника\nпапироса\nпапка\nпар\nпарад\nпарадокс\nпараметр\nпарк\nпарламент\nпаровоз\nпароход\nпарочка\nпарта\nпартизан\nпартнер\nпартнерство\nпарус\nпаспорт\nпассаж\nпассажир\nпасть\nпатриарх\nпатриот\nпатриотизм\nпатрон\nпауза\nпаутина\nпафос\nпацан\nпациент\nпачка\nпевец\nпевица\nпедагог\nпейзаж\nпена\nпение\nпенсионер\nпенсия\nпепел\nпервенство\nпервое\nперевод\nпереводчик\nперевозка\nпереворот\nпереговоры\nперегородка\nпередвижение\nпереезд\nпереживание\nперекресток\nперелом\nперемена\nперемещение\nперенос\nпереписка\nперепись\nпереработка\nперерыв\nпересмотр\nперестройка\nпереулок\nперец\nперечень\nперила\nперо\nперрон\nперсона\nперсонаж\nперсонал\nперспектива\nперчатка\nпес\nпесенка\nпеснь\nпесок\nпетля\nпетух\nпехота\nпечаль\nпечать\nпечень\nпечка\nпечь\nпещера\nпиво\nпиджак\nпик\nпилот\nпионер\nпир\nпирамида\nпират\nпирог\nпирожок\nписание\nпистолет\nпитание\nпища\nплавание\nплакат\nпламя\nпланета\nпланирование\nпласт\nпластинка\nплата\nплатеж\nплаток\nплатформа\nплатье\nплач\nплащ\nплемя\nплемянник\nплен\nпленка\nпленный\nпленум\nплита\nплитка\nплод\nплоскость\nплотность\nплоть\nплощадка\nплюс\nпляж\nпобег\nпобедитель\nпобережье\nповар\nповествование\nповестка\nповесть\nповорот\nповреждение\nповторение\nпогода\nпогон\nпогоня\nподарок\nподача\nподбор\nподбородок\nподвал\nподвеска\nподвиг\nподдержание\nподлец\nподнос\nподобие\nподозрение\nподоконник\nподошва\nподписание\nподпись\nподполковник\nподразделение\nподробность\nподросток\nподруга\nподружка\nподсудимый\nподсчет\nподтверждение\nподушка\nподчинение\nподчиненный\nподъезд\nподъем\nпоединок\nпоездка\nпожар\nпожелание\nпоза\nпоздравление\nпознание\nпозор\nпоказ\nпоказание\nпокаяние\nпоклон\nпоклонник\nпокой\nпокойник\nпокров\nпокрытие\nпокупатель\nпокупка\nпокушение\nполгода\nполдень\nполет\nполигон\nполиклиника\nполитбюро\nполитик\nполицейский\nполиция\nполк\nполка\nполномочие\nполнота\nполночь\nполоса\nполоска\nполость\nполотенце\nполотно\nполчаса\nпольза\nпользование\nпользователь\nполюс\nполяк\nполяна\nпомеха\nпомидор\nпомощник\nпонедельник\nпоп\nпопадание\nпоправка\nпопулярность\nпопуляция\nпоражение\nпорог\nпорода\nпорок\nпоросенок\nпорошок\nпорт\nпортрет\nпортфель\nпоручение\nпоручик\nпорция\nпорыв\nпосадка\nпоселение\nпоселок\nпосетитель\nпосещение\nпослание\nпоследовательность\nпоследствие\nпособие\nпосол\nпосольство\nпосредник\nпоставка\nпоставщик\nпостановка\nпостановление\nпостель\nпострадавший\nпостроение\nпостройка\nпоступление\nпоступок\nпосуда\nпосылка\nпот\nпотенциал\nпотерпевший\nпотеря\nпотолок\nпотомок\nпотребитель\nпотребление\nпотребность\nпотрясение\nпохвала\nпоход\nпоходка\nпохороны\nпоцелуй\nпочва\nпочерк\nпочка\nпочта\nпошлина\nпоэзия\nпоэма\nпояс\nправильность\nправитель\nправление\nправонарушение\nправоотношение\nправославие\nправосудие\nправота\nпрапорщик\nпрах\nпребывание\nпревосходство\nпревращение\nпредание\nпреданность\nпредатель\nпредательство\nпредисловие\nпредлог\nпредок\nпредоставление\nпредположение\nпредпосылка\nпредпочтение\nпредприниматель\nпредпринимательство\nпредставительство\nпредупреждение\nпредчувствие\nпредшественник\nпрезентация\nпрезидиум\nпрезрение\nпреимущество\nпрекращение\nпрелесть\nпремия\nпремьер\nпремьера\nпремьер-министр\nпреобразование\nпреодоление\nпрепарат\nпреподаватель\nпрепятствие\nпреследование\nпресса\nпресс-конференция\nпресс-служба\nпрестол\nпреступник\nпреступность\nпретендент\nпретензия\nприближение\nприбор\nприбыль\nприбытие\nприватизация\nпривет\nприветствие\nпривилегия\nпривлечение\nпривычка\nприглашение\nприговор\nприготовление\nприезд\nприемная\nприемник\nприз\nпризвание\nпризнак\nпризнание\nпризрак\nпризыв\nприказ\nприключение\nприкосновение\nприкрытие\nприлавок\nприложение\nпримета\nпримечание\nпринадлежность\nпринц\nпринцесса\nпринятие\nприобретение\nприоритет\nприрост\nприспособление\nпристань\nпристрастие\nприступ\nприсутствие\nприток\nпритча\nприход\nприхожая\nприческа\nприятель\nпроба\nпробка\nпровал\nпроверка\nпровинция\nпровод\nпроводник\nпровокация\nпроволока\nпрогноз\nпрогресс\nпрогулка\nпродавец\nпродавщица\nпродвижение\nпродолжение\nпродолжительность\nпродюсер\nпроезд\nпроектирование\nпроем\nпроживание\nпроза\nпрозвище\nпроизводитель\nпроизводительность\nпроизвол\nпроисхождение\nпроисшествие\nпрокат\nпрокуратура\nпрокурор\nпромежуток\nпромысел\nпромышленность\nпроникновение\nпропаганда\nпропасть\nпрописка\nпроповедь\nпропуск\nпророк\nпрорыв\nпросвещение\nпросмотр\nпроспект\nпроститутка\nпростор\nпростота\nпростыня\nпросьба\nпротест\nпротиводействие\nпротиворечие\nпротивостояние\nпротокол\nпротяжение\nпрофессионал\nпрофессионализм\nпрофессия\nпрофилактика\nпрофиль\nпрофсоюз\nпроход\nпрохождение\nпрохожий\nпроцедура\nпрочность\nпрощание\nпрощение\nпроявление\nпруд\nпружина\nпрыжок\nпсихика\nпсихолог\nпсихология\nптичка\nпублика\nпубликация\nпуговица\nпузырь\nпулемет\nпульт\nпуля\nпуск\nпустота\nпустыня\nпустяк\nпутевка\nпутешественник\nпутешествие\nпух\nпучок\nпушка\nпчела\nпшеница\nпыль\nпытка\nпьяница\nпьянство\nпятерка\nпятка\nпятница\nпятно\nраб\nработодатель\nрабочий\nравенство\nравновесие\nравнодушие\nрадио\nрадиостанция\nразбирательство\nразбойник\nразбор\nразборка\nразвал\nразвалина\nразведка\nразведчик\nразвлечение\nразвод\nразгар\nраздел\nразделение\nраздражение\nраздумье\nразличие\nразлука\nразмах\nразмещение\nразмышление\nразница\nразновидность\nразногласие\nразнообразие\nразочарование\nразработчик\nразрез\nразрешение\nразрушение\nразрыв\nразряд\nразум\nразъяснение\nрай\nрайком\nрак\nракета\nраковина\nрама\nрана\nранг\nранение\nраненый\nраспад\nрасписание\nрасположение\nраспоряжение\nраспределение\nраспространение\nрассвет\nрасследование\nрассмотрение\nрасстояние\nрасстрел\nрасстройство\nрассуждение\nраствор\nрастерянность\nрасширение\nреальность\nребро\nребятишки\nрев\nревность\nревольвер\nрегистрация\nрегламент\nрегулирование\nредактор\nредкость\nреестр\nрезерв\nрезиденция\nрезолюция\nрейс\nрейтинг\nреклама\nрекомендация\nреконструкция\nрекорд\nректор\nрелигия\nрельс\nремень\nремесло\nремонт\nреорганизация\nрепертуар\nрепетиция\nреплика\nрепрессия\nрепутация\nресница\nреспондент\nресторан\nреферендум\nреформирование\nрецензия\nрецепт\nречка\nрешетка\nриск\nритм\nритуал\nрог\nродные\nродня\nродственник\nрожа\nрождество\nроза\nрозыск\nролик\nроманс\nроскошь\nроссиянин\nрота\nроща\nрояль\nрубаха\nрубашка\nрубеж\nрубка\nрубрика\nруда\nружье\nрукав\nрукопись\nрукоятка\nруль\nрусло\nрусский\nручей\nручка\nрыбак\nрыбка\nрывок\nрыцарь\nрычаг\nрюкзак\nрюмка\nсадик\nсайт\nсалат\nсало\nсалон\nсалфетка\nсамец\nсамка\nсамовар\nсамостоятельность\nсамоубийство\nсамоуправление\nсанаторий\nсани\nсанитар\nсанкция\nсантиметр\nсапог\nсарай\nсахар\nсближение\nсбор\nсборка\nсборная\nсборник\nсбыт\nсвадьба\nсвалка\nсвекровь\nсверстник\nсвеча\nсвидание\nсвидетель\nсвидетельство\nсвинья\nсвист\nсвитер\nсвод\nсволочь\nсвязка\nсвятитель\nсвятой\nсвященник\nсдача\nсдвиг\nсделка\nсеанс\nсебестоимость\nсевер\nсегмент\nседло\nсезон\nсейф\nсекрет\nсекретарша\nсекретарь\nсекс\nсектор\nсекция\nсело\nсемейство\nсеминар\nсемя\nсенатор\nсено\nсенсация\nсервис\nсеребро\nсержант\nсериал\nсерия\nсертификат\nсессия\nсетка\nсигарета\nсигнал\nсиденье\nсилуэт\nсимвол\nсимпатия\nсимптом\nсимфония\nсинтез\nсиняк\nсирота\nсияние\nсказка\nскала\nскамейка\nскамья\nскандал\nскатерть\nскважина\nсквер\nскелет\nскидка\nсклад\nскладка\nсклон\nсклонность\nскорбь\nскот\nскотина\nскрип\nскрипка\nскука\nскула\nскульптор\nскульптура\nслабость\nславянин\nследователь\nследствие\nслияние\nсловарь\nсложность\nслой\nслон\nслуга\nслужащий\nслужение\nслух\nслучайность\nслушатель\nслюна\nсмелость\nсмена\nсмесь\nсмех\nснабжение\nснаряд\nснижение\nснимок\nснятие\nсобачка\nсобеседник\nсоблазн\nсоблюдение\nсобор\nсобственник\nсовершение\nсовершенство\nсовершенствование\nсовесть\nсоветник\nсовещание\nсовокупность\nсовпадение\nсовременник\nсовременность\nсовхоз\nсогласие\nсогласование\nсоглашение\nсодействие\nсодержимое\nсоединение\nсоздатель\nсок\nсокращение\nсокровище\nсолнышко\nсоль\nсоображение\nсообщение\nсообщество\nсооружение\nсоотечественник\nсоотношение\nсоперник\nсопоставление\nсопровождение\nсопротивление\nсоратник\nсоревнование\nсорт\nсоседка\nсоседство\nсосна\nсоставление\nсоставляющая\nсострадание\nсосуд\nсотрудничество\nсоус\nсохранение\nсоциализм\nсоциология\nсочетание\nсочинение\nсочувствие\nсоюзник\nспальня\nспасение\nспасибо\nспаситель\nспектр\nспециальность\nспецифика\nспецслужба\nспинка\nспирт\nспичка\nсплав\nспокойствие\nспонсор\nспор\nспорт\nспортсмен\nсправедливость\nсправка\nсправочник\nспрос\nспуск\nспутник\nсражение\nсредневековье\nсреднее\nссора\nссылка\nстабильность\nставка\nстадион\nстадия\nстадо\nстаж\nстакан\nсталь\nстан\nстандарт\nстановление\nстанок\nстарец\nстарина\nстаричок\nстарость\nстарт\nстаруха\nстарушка\nстарший\nстаршина\nстатистика\nстатус\nстатуя\nстать\nстая\nствол\nстебель\nстенд\nстенка\nстепь\nстереотип\nстимул\nстих\nстихия\nстихотворение\nстойка\nстолб\nстолетие\nстолик\nстолкновение\nстоловая\nстон\nстопа\nстопка\nсторож\nсторонник\nстоянка\nстрадание\nстража\nстрасть\nстратегия\nстрахование\nстраховщик\nстрела\nстрелка\nстрельба\nстремление\nстресс\nстроение\nстроитель\nстрой\nстройка\nстрока\nстрочка\nструна\nструя\nстудентка\nстудия\nстук\nступень\nступенька\nстыд\nсуббота\nсугроб\nсудно\nсудопроизводство\nсуета\nсуждение\nсука\nсумерки\nсумка\nсумочка\nсундук\nсуп\nсупруг\nсупруга\nсустав\nсущность\nсхватка\nсходство\nсценарий\nсъезд\nсъемка\nсыворотка\nсынок\nсыр\nсырье\nсэр\nсюжет\nсюрприз\nтабак\nтаблетка\nтабличка\nтабуретка\nтаз\nтаинство\nтайга\nтакси\nтакт\nтактика\nталант\nталия\nтанец\nтанк\nтаракан\nтарелка\nтариф\nтатарин\nтварь\nтворение\nтворец\nтворчество\nтезис\nтелевидение\nтелевизор\nтелега\nтелеграмма\nтележка\nтематика\nтемнота\nтемп\nтемперамент\nтемпература\nтенденция\nтеннис\nтеоретик\nтепло\nтеракт\nтермин\nтерпение\nтерраса\nтеррор\nтерроризм\nтеррорист\nтест\nтесто\nтетка\nтетрадка\nтетрадь\nтетя\nтеща\nтигр\nтираж\nтитр\nтитул\nтишина\nткань\nтоварищество\nток\nтолк\nтолкование\nтолчок\nтолщина\nтом\nтон\nтонкость\nтонна\nтопливо\nтопор\nторг\nторговец\nторговля\nторжество\nтормоз\nторт\nтоска\nтост\nточность\nтравма\nтрагедия\nтраектория\nтрактовка\nтрактор\nтрамвай\nтранслит\nтранспорт\nтранспортировка\nтрансформация\nтрасса\nтревога\nтренер\nтренировка\nтреск\nтреть\nтреугольник\nтрещина\nтрибуна\nтроица\nтройка\nтроллейбус\nтропа\nтропинка\nтротуар\nтрубопровод\nтрудность\nтрудящийся\nтруп\nтруппа\nтрусы\nтрюк\nтряпка\nтуалет\nтуман\nтумбочка\nтупик\nтур\nтурист\nтурнир\nтурок\nтуфля\nтуча\nтыл\nтысячелетие\nтьма\nтюрьма\nтяга\nтяжесть\nубеждение\nубийство\nубийца\nубитый\nуборка\nуборная\nубыток\nуважение\nувеличение\nуверенность\nувлечение\nувольнение\nуголок\nуголь\nугроза\nудаление\nудача\nудивление\nудобство\nудовлетворение\nудостоверение\nужин\nузел\nузор\nуказ\nуказание\nукол\nукрашение\nукрепление\nулучшение\nумение\nуменьшение\nумница\nунижение\nуничтожение\nупаковка\nуплата\nупоминание\nупор\nупотребление\nуправляющий\nупражнение\nупрек\nуравнение\nурегулирование\nурожай\nурок\nус\nусадьба\nусиление\nускорение\nусмешка\nуста\nустав\nусталость\nустановление\nустойчивость\nустранение\nустройство\nуступка\nутверждение\nутешение\nутка\nуточнение\nутрата\nуход\nучастковый\nучасть\nучащийся\nучеба\nучебник\nучение\nучилище\nучительница\nучреждение\nущелье\nущерб\nфабрика\nфаза\nфакс\nфакультет\nфантазия\nфара\nфасад\nфашизм\nфашист\nфевраль\nфеномен\nферма\nфестиваль\nфигурка\nфизик\nфизика\nфизиономия\nфилиал\nфилософ\nфилософия\nфильтр\nфинал\nфинансирование\nфинансы\nфлаг\nфлот\nфокус\nфон\nфонарь\nфонтан\nформат\nформула\nформулировка\nфорум\nфото\nфотограф\nфрагмент\nфракция\nфранцуз\nфрукт\nфундамент\nфункционирование\nфунт\nфуражка\nфутбол\nфутболист\nфюрер\nхалат\nхаос\nхарактеристика\nхата\nхвост\nхимия\nхирург\nхитрость\nхлопоты\nходатайство\nхозяйка\nхоккей\nхолдинг\nхолл\nхолм\nхолод\nхолодильник\nхор\nхохот\nхранение\nхребет\nхрен\nхристианин\nхристианство\nхроника\nхулиган\nхутор\nцарица\nцарство\nцарь\nцелостность\nцензура\nцепочка\nцепь\nцеремония\nцех\nцивилизация\nцикл\nцилиндр\nцирк\nцитата\nцифра\nцыган\nчайка\nчайник\nчасовой\nчастица\nчастота\nчасы\nчаша\nчашка\nчекист\nчеловечек\nчеловечество\nчелюсть\nчемодан\nчемпион\nчемпионат\nчепуха\nчердак\nчереп\nчернила\nчерта\nчертеж\nчетверг\nчетверть\nчеченец\nчин\nчиновник\nчисленность\nчистка\nчистота\nчтение\nчувствительность\nчудовище\nчулок\nчушь\nшампанское\nшанс\nшапка\nшапочка\nшар\nшарик\nшахматы\nшахта\nшедевр\nшепот\nшерсть\nшеф\nшина\nшинель\nширина\nширота\nшкала\nшкаф\nшкольник\nшкура\nшлем\nшляпа\nшов\nшок\nшоколад\nшорох\nшоссе\nшоу\nшофер\nшпион\nшрам\nштаб\nштамм\nштамп\nштаны\nштат\nштора\nштраф\nштука\nштурм\nштык\nшуба\nшум\nшут\nшутка\nщека\nщель\nщенок\nщит\nэвакуация\nэволюция\nэкзамен\nэкземпляр\nэкипаж\nэкология\nэкономист\nэкономия\nэкран\nэкскурсия\nэкспедиция\nэксперимент\nэксперт\nэкспертиза\nэксплуатация\nэкспозиция\nэкспорт\nэлектричество\nэлектричка\nэлектрон\nэлектроэнергия\nэлита\nэмигрант\nэмиграция\nэмоция\nэнергетика\nэнтузиазм\nэнциклопедия\nэпидемия\nэпизод\nэра\nэстетика\nэстрада\nэтика\nэфир\nэффект\nэффективность\nэхо\nэшелон\nюбилей\nюбка\nюг\nюмор\nюность\nюноша\nюрисдикция\nюрист\nюстиция\nяблоко\nягода\nяд\nядро\nяйцо\nякорь\nяма\nяпонец\nярмарка\nярость\nясность\nять\nячейка\nящик"
  },
  {
    "path": "internal/game/words/ua",
    "content": "абрикос\nавтобус\nавтомобіль\nадвокат\nаеропорт\nактор\nананас\nапельсин\nаптека\nбагаж\nбагажник\nбаклажан\nбалкон\nбанан\nбанк\nбатарейка\nбезлад\nбензин\nблокнот\nблузка\nблюдце\nбоби\nборода\nброву\nбудинок\nбулочка\nбуряк\nбутерброд\nбухгалтер\nбілка\nваза\nванна\nварення\nведмідь\nвелосипед\nвесна\nвесілля\nвечірка\nвзуття\nвибір\nвилка\nвино\nвиноград\nвипадок\nвисота\nвишня\nвовк\nвогонь\nводій\nвождь\nвокзал\nволосся\nвправа\nвулиця\nвуса\nвухо\nвідпустка\nвідро\nвідстань\nвікно\nвітер\nгазета\nгаманець\nгарбуз\nглибина\nгодинник\nгора\nгорло\nгорох\nгоріх\nготель\nгребінець\nгриб\nгрип\nгроші\nгруди\nгруша\nгуби\nгусак\nгість\nдах\nдвері\nдвір\nдерево\nджинси\nдзеркало\nдиван\nдиво\nдиня\nдитина\nдовжина\nдозвіл\nдорога\nдосвід\nдоставка\nдосягнення\nдощ\nдруг\nдріт\nдумка\nдуховка\nдуш\nдуша\nдівчинка\nжаба\nжираф\nжиття\nжурнал\nжурналіст\nжінка\nзавдання\nзавод\nзапис\nзапрошення\nзвичка\nздатність\nздоров’я\nземля\nзима\nзнання\nзнижка\nзошит\nзуб\nзупинка\nзустріч\nіграшка\nінженер\nїжак\nїдальня\nйогурт\nкабачок\nкава\nкавун\nкалендар\nкамінь\nкапелюх\nкапуста\nкапюшон\nкарта\nкартина\nкартопля\nкаструля\nкафе\nкачка\nкаша\nквиток\nквітка\nкермо\nкилим\nклавіатура\nклей\nключ\nкнига\nковбаса\nковдру\nколготки\nколега\nколесо\nколіно\nконверт\nкорабель\nкоридор\nкоробка\nкорова\nкостюм\nкотлета\nкофта\nкраватка\nкран\nкролик\nкросівки\nкрісло\nкукурудза\nкухня\nкіно\nкінотеатр\nкінь\nкістка\nкішка\nлампа\nлимон\nлисиця\nлисток\nлоб\nложка\nлопата\nлюди\nліжко\nлікар\nлікарня\nлікоть\nлінійка\nліс\nлітак\nлітера\nлітература\nліто\nліхтар\nмавпа\nмагазин\nмалина\nмандарин\nмасло\nмасло\nмед\nмедсестра\nмежа\nмило\nмистецтво\nмитниця\nмиша\nмолоко\nмолоток\nморе\nморква\nмотузка\nмузика\nмузикант\nмука\nмікрохвильовка\nміст\nмісто\nмісяць\nм’ясо\nм’яч\nнаука\nнебезпека\nнебо\nнога\nножиці\nносовичок\nносок\nноутбук\nніж\nніс\nобличчя\nовочі\nогірок\nодяг\nозеро\nокеан\nокуляри\nолівець\nострів\nосінь\nофіс\nофіціант\nоцінка\nочей\nпалець\nпалиця\nпальто\nпам’ять\nпапір\nпарк\nпаркан\nпензлик\nперевага\nпереговори\nперехрестя\nперець\nперсик\nпечиво\nпиріжок\nплаття\nплече\nплоща\nпляж\nпляшка\nповедінка\nповітря\nпогода\nподарунок\nподушка\nпокупка\nполе\nполку\nполіція\nпомилка\nпомідор\nпосилка\nпотяг\nпочуття\nпошта\nпоїздка\nпроблема\nпродавець\nпростирадло\nпрянощі\nптах\nпідборіддя\nпіджак\nпісня\nпісок\nрадіо\nрадість\nрахунок\nреклама\nремінь\nресторан\nриба\nринок\nрис\nробочий\nрозетка\nрозмір\nрозповідь\nрослина\nрот\nрукавиця\nручка\nрушник\nрюкзак\nрічка\nсад\nсалат\nсветр\nсвиня\nсвіт\nсело\nсерветка\nсерце\nсила\nсиняк\nсир\nслива\nсловник\nслово\nслон\nсміття\nсніг\nсобака\nсонце\nсорочка\nсоус\nспальня\nспідниця\nстакан\nсторінка\nстрах\nстудент\nстілець\nсумка\nсуп\nсусід\nсік\nсіль\nтарілка\nтварина\nтеатр\nтелевізор\nтемпература\nторт\nтрава\nтрамвай\nтротуар\nтуалет\nтуман\nугода\nудача\nузбережжя\nуніверситет\nурок\nучитель\nфото\nфотоапарат\nфрукт\nхлопець\nхлопчик\nхліб\nхмара\nхолодильник\nхудожник\nцвях\nцерква\nцибуля\nціна\nчай\nчайник\nчайові\nчасник\nчашка\nчемодан\nчеревик\nчоловік\nшапка\nшарф\nшафа\nшвидкість\nшия\nшкола\nшколяр\nшоколад\nшорти\nштани\nщастя\nщур\nяблуко\nягода\nяйце"
  },
  {
    "path": "internal/game/words.go",
    "content": "package game\n\nimport (\n\t\"embed\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"math/rand/v2\"\n\t\"strings\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/text/cases\"\n\t\"golang.org/x/text/language\"\n)\n\ntype LanguageData struct {\n\tLowercaser   func() cases.Caser\n\tLanguageCode string\n\tIsRtl        bool\n}\n\nvar (\n\tErrUnknownWordList = errors.New(\"wordlist unknown\")\n\tWordlistData       = map[string]LanguageData{\n\t\t\"custom\": {\n\t\t\tLanguageCode: \"en_gb\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.BritishEnglish) },\n\t\t},\n\t\t\"english_gb\": {\n\t\t\tLanguageCode: \"en_gb\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.BritishEnglish) },\n\t\t},\n\t\t\"english\": {\n\t\t\tLanguageCode: \"en_us\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.AmericanEnglish) },\n\t\t},\n\t\t\"italian\": {\n\t\t\tLanguageCode: \"it\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.Italian) },\n\t\t},\n\t\t\"german\": {\n\t\t\tLanguageCode: \"de\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.German) },\n\t\t},\n\t\t\"french\": {\n\t\t\tLanguageCode: \"fr\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.French) },\n\t\t},\n\t\t\"dutch\": {\n\t\t\tLanguageCode: \"nl\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.Dutch) },\n\t\t},\n\t\t\"ukrainian\": {\n\t\t\tLanguageCode: \"ua\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.Ukrainian) },\n\t\t},\n\t\t\"russian\": {\n\t\t\tLanguageCode: \"ru\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.Russian) },\n\t\t},\n\t\t\"polish\": {\n\t\t\tLanguageCode: \"pl\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.Polish) },\n\t\t},\n\t\t\"arabic\": {\n\t\t\tIsRtl:        true,\n\t\t\tLanguageCode: \"ar\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.Arabic) },\n\t\t},\n\t\t\"hebrew\": {\n\t\t\tIsRtl:        true,\n\t\t\tLanguageCode: \"he\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.Hebrew) },\n\t\t},\n\t\t\"persian\": {\n\t\t\tIsRtl:        true,\n\t\t\tLanguageCode: \"fa\",\n\t\t\tLowercaser:   func() cases.Caser { return cases.Lower(language.Persian) },\n\t\t},\n\t}\n\n\t//go:embed words/*\n\twordFS embed.FS\n)\n\nfunc getLanguageIdentifier(language string) string {\n\treturn WordlistData[language].LanguageCode\n}\n\n// readWordListInternal exists for testing purposes, it allows passing a custom\n// wordListSupplier, in order to avoid having to write tests aggainst the\n// default language lists.\nfunc readWordListInternal(\n\tlowercaser cases.Caser, chosenLanguage string,\n\twordlistSupplier func(string) (string, error),\n) ([]string, error) {\n\tlanguageIdentifier := getLanguageIdentifier(chosenLanguage)\n\tif languageIdentifier == \"\" {\n\t\treturn nil, ErrUnknownWordList\n\t}\n\n\twordListFile, err := wordlistSupplier(languageIdentifier)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error invoking wordlistSupplier: %w\", err)\n\t}\n\n\t// Wordlists are guaranteed not to contain any carriage returns (\\r).\n\twords := strings.Split(lowercaser.String(wordListFile), \"\\n\")\n\tshuffleWordList(words)\n\treturn words, nil\n}\n\n// readDefaultWordList reads the wordlist for the given language from the filesystem.\n// If found, the list is cached and will be read from the cache upon next\n// request. The returned slice is a safe copy and can be mutated. If the\n// specified has no corresponding wordlist, an error is returned. This has been\n// a panic before, however, this could enable a user to forcefully crash the\n// whole application.\nfunc readDefaultWordList(lowercaser cases.Caser, chosenLanguage string) ([]string, error) {\n\tlog.Printf(\"Loading wordlist '%s'\\n\", chosenLanguage)\n\tdefer log.Printf(\"Wordlist loaded '%s'\\n\", chosenLanguage)\n\treturn readWordListInternal(lowercaser, chosenLanguage, func(key string) (string, error) {\n\t\twordBytes, err := wordFS.ReadFile(\"words/\" + key)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"error reading wordfile: %w\", err)\n\t\t}\n\n\t\treturn strings.ReplaceAll(string(wordBytes), \"\\r\", \"\"), nil\n\t})\n}\n\nfunc reloadLobbyWords(lobby *Lobby) ([]string, error) {\n\treturn readDefaultWordList(lobby.lowercaser, lobby.Wordpack)\n}\n\n// GetRandomWords gets a custom amount of random words for the passed Lobby.\n// The words will be chosen from the custom words and the default\n// dictionary, depending on the settings specified by the lobbies creator.\nfunc GetRandomWords(wordCount int, lobby *Lobby) []string {\n\treturn getRandomWords(wordCount, lobby, reloadLobbyWords)\n}\n\n// getRandomWords exists for test purposes, allowing to define a custom\n// reloader, allowing us to specify custom wordlists in the tests without\n// running into a panic on reload.\nfunc getRandomWords(wordCount int, lobby *Lobby, reloadWords func(lobby *Lobby) ([]string, error)) []string {\n\twords := make([]string, wordCount)\n\n\t// If we have custom words only, we don't want to pop them off the stack.\n\t// We want to keep going in circles, worstcase returning the same word 3 times.\n\tif lobby.Wordpack == \"custom\" && len(lobby.CustomWords) > 0 {\n\t\tfor i := range wordCount {\n\t\t\tif lobby.customWordIndex >= len(lobby.CustomWords) {\n\t\t\t\tlobby.customWordIndex = 0\n\t\t\t}\n\t\t\twords[i] = lobby.CustomWords[lobby.customWordIndex]\n\t\t\tlobby.customWordIndex++\n\t\t}\n\t\treturn words\n\t}\n\n\tfor customWordsLeft, i := lobby.CustomWordsPerTurn, 0; i < wordCount; i++ {\n\t\tif customWordsLeft > 0 && len(lobby.CustomWords) > 0 {\n\t\t\tcustomWordsLeft--\n\t\t\twords[i] = popCustomWord(lobby)\n\t\t} else {\n\t\t\twords[i] = popWordpackWord(lobby, reloadWords)\n\t\t}\n\t}\n\n\treturn words\n}\n\nfunc popCustomWord(lobby *Lobby) string {\n\tlastIndex := len(lobby.CustomWords) - 1\n\tlastWord := lobby.CustomWords[lastIndex]\n\tlobby.CustomWords = lobby.CustomWords[:lastIndex]\n\treturn lastWord\n}\n\n// popWordpackWord gets X words from the wordpack. The major difference to\n// popCustomWords is, that the wordlist gets reset and reshuffeled once every\n// item has been popped.\nfunc popWordpackWord(lobby *Lobby, reloadWords func(lobby *Lobby) ([]string, error)) string {\n\tif len(lobby.words) == 0 {\n\t\tvar err error\n\t\tlobby.words, err = reloadWords(lobby)\n\t\tif err != nil {\n\t\t\t// Since this list should've been successfully read once before, we\n\t\t\t// can \"safely\" panic if this happens, assuming that there's a\n\t\t\t// deeper problem.\n\t\t\tpanic(err)\n\t\t}\n\t}\n\tlastIndex := len(lobby.words) - 1\n\tlastWord := lobby.words[lastIndex]\n\tlobby.words = lobby.words[:lastIndex]\n\treturn lastWord\n}\n\nfunc shuffleWordList(wordlist []string) {\n\trand.Shuffle(len(wordlist), func(a, b int) {\n\t\twordlist[a], wordlist[b] = wordlist[b], wordlist[a]\n\t})\n}\n\nconst (\n\tEqualGuess   = 0\n\tCloseGuess   = 1\n\tDistantGuess = 2\n)\n\n// CheckGuess compares the strings with eachother. Possible results:\n//   - EqualGuess (0)\n//   - CloseGuess (1)\n//   - DistantGuess (2)\n//\n// This works mostly like levensthein distance, but doesn't check further than\n// to a distance of 2 and also handles transpositions where the runes are\n// directly next to eachother.\nfunc CheckGuess(a, b string) int {\n\t// We only want to indicate a close guess if:\n\t//   * 1 additional character is found (abc ~ abcd)\n\t//   * 1 character is missing (abc ~ ab)\n\t//   * 1 character is wrong (abc ~ adc)\n\t//   * 2 characters are swapped (abc ~ acb)\n\n\t// If the longer string can't be on both sides, the follow-up logic can\n\t// be simpler, so we switch them here.\n\tif len(a) < len(b) {\n\t\ta, b = b, a\n\t}\n\n\t// A maximum of 4 bytes is used for one unicode code point. So if there is a definitive character\n\t// count difference of 2 or more characters, we can clearly indicate a distant guess.\\\n\t// This prevents having to count all runes in b.\n\tif len(a)-len(b) >= 8 {\n\t\treturn DistantGuess\n\t}\n\n\tif a == b {\n\t\treturn EqualGuess\n\t}\n\n\tvar distance int\n\taBytes := []byte(a)\n\tbBytes := []byte(b)\n\tfor {\n\t\taRune, aSize := utf8.DecodeRune(aBytes)\n\t\t// If a eaches the end, then so does b, as we make sure a is longer at\n\t\t// the top, therefore we can be sure no additional conflict diff occurs.\n\t\tif aRune == utf8.RuneError {\n\t\t\t// If a is longer in terms of bytes, but contains for example an emoji that takes up 4 bytes, this CAN happen.\n\t\t\tdistance += utf8.RuneCount(bBytes)\n\t\t\tif distance >= 2 {\n\t\t\t\treturn DistantGuess\n\t\t\t}\n\t\t\treturn distance\n\t\t}\n\t\tbRune, bSize := utf8.DecodeRune(bBytes)\n\n\t\t// Either different runes, or b is empty, returning RuneError (65533).\n\t\tif aRune != bRune {\n\t\t\t// Check for transposition (abc ~ acb)\n\t\t\tnextARune, nextASize := utf8.DecodeRune(aBytes[aSize:])\n\t\t\tif nextARune == bRune {\n\t\t\t\tif nextARune != utf8.RuneError {\n\t\t\t\t\tnextBRune, nextBSize := utf8.DecodeRune(bBytes[bSize:])\n\t\t\t\t\tif nextBRune == aRune {\n\t\t\t\t\t\tdistance++\n\t\t\t\t\t\taBytes = aBytes[aSize+nextASize:]\n\t\t\t\t\t\tbBytes = bBytes[bSize+nextBSize:]\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Make sure to not pop from b, so we can compare the rest, in\n\t\t\t\t// case we are only missing one character for cases such as:\n\t\t\t\t//   abc ~ bc\n\t\t\t\t//   abcde ~ abde\n\t\t\t\tbSize = 0\n\t\t\t} else if distance == 1 {\n\t\t\t\t// We'd reach a diff of 2 now. Needs to happen after transposition\n\t\t\t\t// though, as transposition could still prove us wrong.\n\t\t\t\treturn DistantGuess\n\t\t\t}\n\n\t\t\tdistance++\n\t\t}\n\n\t\taBytes = aBytes[aSize:]\n\t\tbBytes = bBytes[bSize:]\n\t}\n}\n"
  },
  {
    "path": "internal/game/words_test.go",
    "content": "package game\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"slices\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"golang.org/x/text/cases\"\n\t\"golang.org/x/text/language\"\n)\n\nfunc Test_wordListsContainNoCarriageReturns(t *testing.T) {\n\tt.Parallel()\n\n\tfor _, entry := range WordlistData {\n\t\tfileName := entry.LanguageCode\n\t\tfileBytes, err := wordFS.ReadFile(\"words/\" + fileName)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"language file '%s' could not be read: %s\", fileName, err)\n\t\t} else if bytes.ContainsRune(fileBytes, '\\r') {\n\t\t\tt.Errorf(\"language file '%s' contains a carriage return\", fileName)\n\t\t}\n\t}\n}\n\nfunc Test_readWordList(t *testing.T) {\n\tt.Parallel()\n\n\tt.Run(\"test invalid language file\", func(t *testing.T) {\n\t\tt.Parallel()\n\n\t\twords, err := readDefaultWordList(cases.Lower(language.English), \"nonexistent\")\n\t\tassert.ErrorIs(t, err, ErrUnknownWordList)\n\t\tassert.Empty(t, words)\n\t})\n\n\tfor language := range WordlistData {\n\t\tt.Run(language, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\ttestWordList(t, language)\n\t\t\ttestWordList(t, language)\n\t\t})\n\t}\n}\n\nfunc testWordList(t *testing.T, chosenLanguage string) {\n\tt.Helper()\n\n\tlowercaser := WordlistData[chosenLanguage].Lowercaser()\n\twords, err := readDefaultWordList(lowercaser, chosenLanguage)\n\tif err != nil {\n\t\tt.Errorf(\"Error reading language %s: %s\", chosenLanguage, err)\n\t}\n\n\tif len(words) == 0 {\n\t\tt.Errorf(\"Wordlist for language %s was empty.\", chosenLanguage)\n\t}\n\n\tfor _, word := range words {\n\t\tif word == \"\" {\n\t\t\t// We can't print the faulty line, since we are shuffling\n\t\t\t// the words in order to avoid predictability.\n\t\t\tt.Errorf(\"Wordlist for language %s contained empty word\", chosenLanguage)\n\t\t}\n\n\t\tif strings.TrimSpace(word) != word {\n\t\t\tt.Errorf(\"Word has surrounding whitespace characters: '%s'\", word)\n\t\t}\n\n\t\tif lowercaser.String(word) != word {\n\t\t\tt.Errorf(\"Word hasn't been lowercased: '%s'\", word)\n\t\t}\n\t}\n}\n\nfunc Test_getRandomWords(t *testing.T) {\n\tt.Parallel()\n\n\tt.Run(\"Test getRandomWords with 3 words in list\", func(t *testing.T) {\n\t\tt.Parallel()\n\n\t\tlobby := &Lobby{\n\t\t\tCurrentWord: \"\",\n\t\t\tEditableLobbySettings: EditableLobbySettings{\n\t\t\t\tCustomWordsPerTurn: 0,\n\t\t\t},\n\t\t\twords: []string{\"a\", \"b\", \"c\"},\n\t\t}\n\n\t\trandomWords := GetRandomWords(3, lobby)\n\t\tfor _, lobbyWord := range lobby.words {\n\t\t\tif !slices.Contains(randomWords, lobbyWord) {\n\t\t\t\tt.Errorf(\"Random words %s, didn't contain lobbyWord %s\", randomWords, lobbyWord)\n\t\t\t}\n\t\t}\n\t})\n\n\tt.Run(\"Test getRandomWords with 3 words in list and 3 more in custom word list, but with 0 chance\", func(t *testing.T) {\n\t\tt.Parallel()\n\n\t\tlobby := &Lobby{\n\t\t\tCurrentWord: \"\",\n\t\t\twords:       []string{\"a\", \"b\", \"c\"},\n\t\t\tEditableLobbySettings: EditableLobbySettings{\n\t\t\t\tCustomWordsPerTurn: 0,\n\t\t\t},\n\n\t\t\tCustomWords: []string{\"d\", \"e\", \"f\"},\n\t\t}\n\n\t\trandomWords := GetRandomWords(3, lobby)\n\t\tfor _, lobbyWord := range lobby.words {\n\t\t\tif !slices.Contains(randomWords, lobbyWord) {\n\t\t\t\tt.Errorf(\"Random words %s, didn't contain lobbyWord %s\", randomWords, lobbyWord)\n\t\t\t}\n\t\t}\n\t})\n\n\tt.Run(\"Test getRandomWords with 3 words in list and 100% custom word chance, but without custom words\", func(t *testing.T) {\n\t\tt.Parallel()\n\n\t\tlobby := &Lobby{\n\t\t\tCurrentWord: \"\",\n\t\t\twords:       []string{\"a\", \"b\", \"c\"},\n\t\t\tEditableLobbySettings: EditableLobbySettings{\n\t\t\t\tCustomWordsPerTurn: 3,\n\t\t\t},\n\t\t\tCustomWords: nil,\n\t\t}\n\n\t\trandomWords := GetRandomWords(3, lobby)\n\t\tfor _, lobbyWord := range lobby.words {\n\t\t\tif !slices.Contains(randomWords, lobbyWord) {\n\t\t\t\tt.Errorf(\"Random words %s, didn't contain lobbyWord %s\", randomWords, lobbyWord)\n\t\t\t}\n\t\t}\n\t})\n\n\tt.Run(\"Test getRandomWords with 3 words in list and 100% custom word chance, with 3 custom words\", func(t *testing.T) {\n\t\tt.Parallel()\n\n\t\tlobby := &Lobby{\n\t\t\tCurrentWord: \"\",\n\t\t\twords:       []string{\"a\", \"b\", \"c\"},\n\t\t\tEditableLobbySettings: EditableLobbySettings{\n\t\t\t\tCustomWordsPerTurn: 3,\n\t\t\t},\n\t\t\tCustomWords: []string{\"d\", \"e\", \"f\"},\n\t\t}\n\n\t\trandomWords := GetRandomWords(3, lobby)\n\t\tfor _, customWord := range lobby.CustomWords {\n\t\t\tif !slices.Contains(randomWords, customWord) {\n\t\t\t\tt.Errorf(\"Random words %s, didn't contain customWord %s\", randomWords, customWord)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc Test_getRandomWordsReloading(t *testing.T) {\n\tt.Parallel()\n\n\tloadWordList := func() []string { return []string{\"a\", \"b\", \"c\"} }\n\treloadWordList := func(_ *Lobby) ([]string, error) { return loadWordList(), nil }\n\twordList := loadWordList()\n\n\tt.Run(\"test reload with 3 words and 0 custom words and 0 chance\", func(t *testing.T) {\n\t\tt.Parallel()\n\n\t\tlobby := &Lobby{\n\t\t\twords: wordList,\n\t\t\tEditableLobbySettings: EditableLobbySettings{\n\t\t\t\tCustomWordsPerTurn: 0,\n\t\t\t},\n\t\t\tCustomWords: nil,\n\t\t}\n\n\t\t// Running this 10 times, expecting it to get 3 words each time, even\n\t\t// though our pool has only got a size of 3.\n\t\tfor range 10 {\n\t\t\twords := getRandomWords(3, lobby, reloadWordList)\n\t\t\tif len(words) != 3 {\n\t\t\t\tt.Errorf(\"Test failed, incorrect wordcount: %d\", len(words))\n\t\t\t}\n\t\t}\n\t})\n\n\tt.Run(\"test reload with 3 words and 0 custom words and 100 chance\", func(t *testing.T) {\n\t\tt.Parallel()\n\n\t\tlobby := &Lobby{\n\t\t\twords: wordList,\n\t\t\tEditableLobbySettings: EditableLobbySettings{\n\t\t\t\tCustomWordsPerTurn: 3,\n\t\t\t},\n\t\t\tCustomWords: nil,\n\t\t}\n\n\t\t// Running this 10 times, expecting it to get 3 words each time, even\n\t\t// though our pool has only got a size of 3.\n\t\tfor range 10 {\n\t\t\twords := getRandomWords(3, lobby, reloadWordList)\n\t\t\tif len(words) != 3 {\n\t\t\t\tt.Errorf(\"Test failed, incorrect wordcount: %d\", len(words))\n\t\t\t}\n\t\t}\n\t})\n\n\tt.Run(\"test reload with 3 words and 1 custom words and 0 chance\", func(t *testing.T) {\n\t\tt.Parallel()\n\n\t\tlobby := &Lobby{\n\t\t\twords: wordList,\n\t\t\tEditableLobbySettings: EditableLobbySettings{\n\t\t\t\tCustomWordsPerTurn: 3,\n\t\t\t},\n\t\t\tCustomWords: []string{\"a\"},\n\t\t}\n\n\t\t// Running this 10 times, expecting it to get 3 words each time, even\n\t\t// though our pool has only got a size of 3.\n\t\tfor range 10 {\n\t\t\twords := getRandomWords(3, lobby, reloadWordList)\n\t\t\tif len(words) != 3 {\n\t\t\t\tt.Errorf(\"Test failed, incorrect wordcount: %d\", len(words))\n\t\t\t}\n\t\t}\n\t})\n}\n\nvar poximityBenchCases = [][]string{\n\t{\"\", \"\"},\n\t{\"a\", \"a\"},\n\t{\"ab\", \"ab\"},\n\t{\"abc\", \"abc\"},\n\t{\"abc\", \"abcde\"},\n\t{\"cde\", \"abcde\"},\n\t{\"a\", \"abcdefghijklmnop\"},\n\t{\"cde\", \"abcde\"},\n\t{\"cheese\", \"wheel\"},\n\t{\"abcdefg\", \"bcdefgh\"},\n}\n\nfunc Benchmark_proximity_custom(b *testing.B) {\n\tfor _, benchCase := range poximityBenchCases {\n\t\tb.Run(fmt.Sprint(benchCase[0], \" \", benchCase[1]), func(b *testing.B) {\n\t\t\tvar sink int\n\t\t\tfor i := 0; i < b.N; i++ {\n\t\t\t\tsink = CheckGuess(benchCase[0], benchCase[1])\n\t\t\t}\n\t\t\t_ = sink\n\t\t})\n\t}\n}\n\n// We've replaced levensthein with the implementation from proximity_custom\n// func Benchmark_proximity_levensthein(b *testing.B) {\n// \tfor _, benchCase := range poximityBenchCases {\n// \t\tb.Run(fmt.Sprint(benchCase[0], \" \", benchCase[1]), func(b *testing.B) {\n// \t\t\tvar sink int\n// \t\t\tfor i := 0; i < b.N; i++ {\n// \t\t\t\tsink = levenshtein.ComputeDistance(benchCase[0], benchCase[1])\n// \t\t\t}\n// \t\t\t_ = sink\n// \t\t})\n// \t}\n// }\n\nfunc Test_CheckGuess_Negative(t *testing.T) {\n\tt.Parallel()\n\n\ttype testCase struct {\n\t\tname string\n\t\ta, b string\n\t}\n\n\tcases := []testCase{\n\t\t{\n\t\t\ta: \"abc\",\n\t\t\tb: \"abcde\",\n\t\t},\n\t\t{\n\t\t\ta: \"abc\",\n\t\t\tb: \"01abc\",\n\t\t},\n\t\t{\n\t\t\ta: \"abc\",\n\t\t\tb: \"a\",\n\t\t},\n\t\t{\n\t\t\ta: \"c\",\n\t\t\tb: \"abc\",\n\t\t},\n\t\t{\n\t\t\ta: \"abc\",\n\t\t\tb: \"c\",\n\t\t},\n\t\t{\n\t\t\ta: \"hallo\",\n\t\t\tb: \"welt\",\n\t\t},\n\t\t{\n\t\t\ta: \"abcd\",\n\t\t\tb: \"badc\",\n\t\t},\n\t\t{\n\t\t\tname: \"emoji_a\",\n\t\t\ta:    \"😲\",\n\t\t\tb:    \"abc\",\n\t\t},\n\t\t{\n\t\t\tname: \"emoji_a_same_byte_count\",\n\t\t\ta:    \"abcda\",\n\t\t\tb:    \"😲\",\n\t\t},\n\t\t{\n\t\t\tname: \"emoji_a_higher_byte_count\",\n\t\t\ta:    \"abcda\",\n\t\t\tb:    \"😲\",\n\t\t},\n\t\t{\n\t\t\tname: \"emoji_b\",\n\t\t\ta:    \"abc\",\n\t\t\tb:    \"😲\",\n\t\t},\n\t\t{\n\t\t\ta: \"cheese\",\n\t\t\tb: \"wheel\",\n\t\t},\n\t\t{\n\t\t\ta: \"a\",\n\t\t\tb: \"bcdefg\",\n\t\t},\n\t}\n\n\tfor _, c := range cases {\n\t\tname := fmt.Sprintf(\"%s ~ %s\", c.a, c.b)\n\t\tif c.name != \"\" {\n\t\t\tname = c.name\n\t\t}\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tassert.Equal(t, 2, CheckGuess(c.a, c.b))\n\t\t})\n\t}\n}\n\nfunc Test_CheckGuess_Positive(t *testing.T) {\n\tt.Parallel()\n\n\ttype testCase struct {\n\t\ta, b string\n\t\tdist int\n\t}\n\n\tcases := []testCase{\n\t\t{\n\t\t\ta:    \"abc\",\n\t\t\tb:    \"abc\",\n\t\t\tdist: EqualGuess,\n\t\t},\n\t\t{\n\t\t\ta:    \"abc\",\n\t\t\tb:    \"abcd\",\n\t\t\tdist: CloseGuess,\n\t\t},\n\t\t{\n\t\t\ta:    \"abc\",\n\t\t\tb:    \"ab\",\n\t\t\tdist: CloseGuess,\n\t\t},\n\t\t{\n\t\t\ta:    \"abc\",\n\t\t\tb:    \"bc\",\n\t\t\tdist: CloseGuess,\n\t\t},\n\t\t{\n\t\t\ta:    \"abcde\",\n\t\t\tb:    \"abde\",\n\t\t\tdist: CloseGuess,\n\t\t},\n\t\t{\n\t\t\ta:    \"abc\",\n\t\t\tb:    \"adc\",\n\t\t\tdist: CloseGuess,\n\t\t},\n\t\t{\n\t\t\ta:    \"abc\",\n\t\t\tb:    \"acb\",\n\t\t\tdist: CloseGuess,\n\t\t},\n\t\t{\n\t\t\ta:    \"abcd\",\n\t\t\tb:    \"acbd\",\n\t\t\tdist: CloseGuess,\n\t\t},\n\t\t{\n\t\t\ta:    \"äbcd\",\n\t\t\tb:    \"abcd\",\n\t\t\tdist: CloseGuess,\n\t\t},\n\t\t{\n\t\t\ta:    \"abcd\",\n\t\t\tb:    \"bacd\",\n\t\t\tdist: CloseGuess,\n\t\t},\n\t}\n\n\tfor _, c := range cases {\n\t\tt.Run(fmt.Sprintf(\"%s ~ %s\", c.a, c.b), func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tassert.Equal(t, c.dist, CheckGuess(c.a, c.b))\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "internal/metrics/metrics.go",
    "content": "package metrics\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/prometheus/client_golang/prometheus\"\n\t\"github.com/prometheus/client_golang/prometheus/promhttp\"\n)\n\nvar (\n\tregistry         *prometheus.Registry\n\tconnectedPlayers prometheus.Gauge\n)\n\nfunc init() {\n\tregistry = prometheus.NewRegistry()\n\tconnectedPlayers = prometheus.NewGauge(prometheus.GaugeOpts{\n\t\tNamespace: \"scribblers\",\n\t\tName:      \"connected_players\",\n\t\tHelp:      \"The amount of connected players (active websocket connections)\",\n\t})\n\n\tregistry.MustRegister(connectedPlayers)\n}\n\nfunc TrackPlayerConnect() {\n\tconnectedPlayers.Inc()\n}\n\nfunc TrackPlayerDisconnect() {\n\tconnectedPlayers.Dec()\n}\n\nfunc SetupRoute(registerFunc func(http.HandlerFunc)) {\n\tregisterFunc(promhttp.HandlerFor(registry, promhttp.HandlerOpts{}).ServeHTTP)\n}\n"
  },
  {
    "path": "internal/sanitize/sanitize.go",
    "content": "// Package sanitize is used for cleaning up text.\npackage sanitize\n\nimport (\n\t\"unicode/utf8\"\n)\n\n// FIXME Improve transliteration set or document why the current state\n// is acceptableb. These transliterations originally come from\n// github.com/kennygrant/sanitize.\nvar transliterations = map[rune]string{\n\t'À': \"A\",\n\t'Á': \"A\",\n\t'Â': \"A\",\n\t'Ã': \"A\",\n\t'Ä': \"A\",\n\t'Å': \"AA\",\n\t'Æ': \"AE\",\n\t'Ç': \"C\",\n\t'È': \"E\",\n\t'É': \"E\",\n\t'Ê': \"E\",\n\t'Ë': \"E\",\n\t'Ì': \"I\",\n\t'Í': \"I\",\n\t'Î': \"I\",\n\t'Ï': \"I\",\n\t'Ð': \"D\",\n\t'Ł': \"L\",\n\t'Ñ': \"N\",\n\t'Ò': \"O\",\n\t'Ó': \"O\",\n\t'Ô': \"O\",\n\t'Õ': \"O\",\n\t'Ö': \"OE\",\n\t'Ø': \"OE\",\n\t'Œ': \"OE\",\n\t'Ù': \"U\",\n\t'Ú': \"U\",\n\t'Ü': \"UE\",\n\t'Û': \"U\",\n\t'Ý': \"Y\",\n\t'Þ': \"TH\",\n\t'ẞ': \"SS\",\n\t'à': \"a\",\n\t'á': \"a\",\n\t'â': \"a\",\n\t'ã': \"a\",\n\t'ä': \"ae\",\n\t'å': \"aa\",\n\t'æ': \"ae\",\n\t'ç': \"c\",\n\t'è': \"e\",\n\t'é': \"e\",\n\t'ê': \"e\",\n\t'ë': \"e\",\n\t'ì': \"i\",\n\t'í': \"i\",\n\t'î': \"i\",\n\t'ï': \"i\",\n\t'ð': \"d\",\n\t'ł': \"l\",\n\t'ñ': \"n\",\n\t'ń': \"n\",\n\t'ò': \"o\",\n\t'ó': \"o\",\n\t'ô': \"o\",\n\t'õ': \"o\",\n\t'ō': \"o\",\n\t'ö': \"oe\",\n\t'ø': \"oe\",\n\t'œ': \"oe\",\n\t'ś': \"s\",\n\t'ù': \"u\",\n\t'ú': \"u\",\n\t'û': \"u\",\n\t'ū': \"u\",\n\t'ü': \"ue\",\n\t'ý': \"y\",\n\t'ÿ': \"y\",\n\t'ż': \"z\",\n\t'þ': \"th\",\n\t'ß': \"ss\",\n}\n\n// CleanText removes all kinds of characters that could disturb the algorithm\n// checking words for similarity.\nfunc CleanText(str string) string {\n\tvar buffer []byte\n\n\t// We try to stack allocate, but also make\n\t// space for the worst case scenario.\n\tif len(str) <= 32 {\n\t\tbuffer = make([]byte, 0, 64)\n\t} else {\n\t\tbuffer = make([]byte, 0, len(str)*2)\n\t}\n\n\tvar changed bool\n\tfor _, character := range str {\n\t\tif character < utf8.RuneSelf {\n\t\t\tswitch character {\n\t\t\tcase ' ', '-', '_':\n\t\t\t\tchanged = true\n\t\t\tdefault:\n\t\t\t\tbuffer = append(buffer, byte(character))\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif val, contains := transliterations[character]; contains {\n\t\t\tbuffer = append(buffer, val...)\n\t\t\tchanged = true\n\t\t} else {\n\t\t\tbuffer = utf8.AppendRune(buffer, character)\n\t\t}\n\t}\n\n\tif !changed {\n\t\treturn str\n\t}\n\treturn string(buffer)\n}\n"
  },
  {
    "path": "internal/state/doc.go",
    "content": "// Package state provides the application state. Currently this is only the\n// open lobbies. However, the lobby state itself is managed in the game\n// package. On top of this, we automatically clean up deserted lobbies\n// in this package, as it is much easier in a centralized places and also\n// protects us from flooding the server with goroutines.\npackage state\n"
  },
  {
    "path": "internal/state/lobbies.go",
    "content": "package state\n\nimport (\n\t\"log\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/scribble-rs/scribble.rs/internal/config\"\n\t\"github.com/scribble-rs/scribble.rs/internal/game\"\n)\n\nvar (\n\tglobalStateMutex = &sync.RWMutex{}\n\tlobbies          []*game.Lobby\n)\n\n// LaunchCleanupRoutine starts a task to clean up empty lobbies. An empty\n// lobby is a lobby where all players have been disconnected for a certain\n// timeframe. This avoids deleting lobbies when the creator of a lobby\n// accidentally reconnects or needs to refresh. Another scenario might be\n// where the server loses it's connection to all players temporarily. While\n// unlikely, we'll be able to preserve lobbies this way.\n// This method shouldn't be called more than once. Initially this was part of\n// this packages init method, however, in order to avoid side effects in\n// tests, this has been moved into a public function that has to be called\n// manually.\nfunc LaunchCleanupRoutine(cfg config.LobbyCleanup) {\n\tlog.Println(\"Lobby Cleanup Routine started.\")\n\tgo func() {\n\t\tlobbyCleanupTicker := time.NewTicker(cfg.Interval)\n\t\tfor {\n\t\t\t<-lobbyCleanupTicker.C\n\t\t\tcleanupRoutineLogic(&cfg)\n\t\t}\n\t}()\n}\n\n// cleanupRoutineLogic is an extra function in order to prevent deadlocks by\n// being able to use defer mutex.Unlock().\nfunc cleanupRoutineLogic(cfg *config.LobbyCleanup) {\n\tglobalStateMutex.Lock()\n\tdefer globalStateMutex.Unlock()\n\n\tinitalLobbyCount := len(lobbies)\n\tfor index := len(lobbies) - 1; index >= 0; index-- {\n\t\tlobby := lobbies[index]\n\t\tif lobby.HasConnectedPlayers() {\n\t\t\tcontinue\n\t\t}\n\n\t\tdisconnectTime := lobby.LastPlayerDisconnectTime\n\t\tif disconnectTime == nil || time.Since(*disconnectTime) >= cfg.PlayerInactivityThreshold {\n\t\t\tremoveLobbyByIndex(index)\n\t\t}\n\t}\n\n\tif lobbiesClosed := initalLobbyCount - len(lobbies); lobbiesClosed > 0 {\n\t\tlog.Printf(\"Closing %d lobbies. Remaining lobbies: %d\\n\", lobbiesClosed, len(lobbies))\n\t}\n}\n\n// AddLobby adds a lobby to the instance, making it visible for GetLobby calls.\nfunc AddLobby(lobby *game.Lobby) {\n\tglobalStateMutex.Lock()\n\tdefer globalStateMutex.Unlock()\n\n\tlobbies = append(lobbies, lobby)\n}\n\n// GetLobby returns a Lobby that has a matching ID or no Lobby if none could\n// be found.\nfunc GetLobby(id string) *game.Lobby {\n\tglobalStateMutex.RLock()\n\tdefer globalStateMutex.RUnlock()\n\n\tfor _, lobby := range lobbies {\n\t\tif lobby.LobbyID == id {\n\t\t\treturn lobby\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// ShutdownLobbiesGracefully shuts down all lobbies and removes them from the\n// state, preventing reconnects to existing lobbies. New lobbies can\n// technically still be added.\nfunc ShutdownLobbiesGracefully() {\n\tglobalStateMutex.Lock()\n\tdefer globalStateMutex.Unlock()\n\tlog.Println(\"Shutdown: Mutex acquired\")\n\n\tfor _, lobby := range lobbies {\n\t\t// Since a reconnect requires a lookup to the state, all attempts to\n\t\t// reconnect will end up running into the global statelock. Therefore,\n\t\t// reconnecting wouldn't be possible.\n\t\tlobby.Shutdown()\n\t}\n\n\t// Instead of removing one by one, we nil the array, since that's faster.\n\tlobbies = nil\n}\n\n// GetActiveLobbyCount indicates how many activate lobby there are. This includes\n// both private and public lobbies and it doesn't matter whether the game is\n// already over, hasn't even started or is still ongoing.\nfunc GetActiveLobbyCount() int {\n\tglobalStateMutex.RLock()\n\tdefer globalStateMutex.RUnlock()\n\n\treturn len(lobbies)\n}\n\n// GetPublicLobbies returns all lobbies with their public flag set to true.\n// This implies that the lobbies can be found in the lobby browser ob the\n// homepage.\nfunc GetPublicLobbies() []*game.Lobby {\n\tglobalStateMutex.RLock()\n\tdefer globalStateMutex.RUnlock()\n\n\tvar publicLobbies []*game.Lobby\n\tfor _, lobby := range lobbies {\n\t\tif lobby.IsPublic() {\n\t\t\tpublicLobbies = append(publicLobbies, lobby)\n\t\t}\n\t}\n\n\treturn publicLobbies\n}\n\n// RemoveLobby deletes a lobby, not allowing anyone to connect to it again.\nfunc RemoveLobby(id string) {\n\tglobalStateMutex.Lock()\n\tdefer globalStateMutex.Unlock()\n\n\tremoveLobby(id)\n}\n\nfunc removeLobby(id string) {\n\tfor index, lobby := range lobbies {\n\t\tif lobby.LobbyID == id {\n\t\t\tremoveLobbyByIndex(index)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc removeLobbyByIndex(index int) {\n\t// We delete the lobby without maintaining order, since the lobby order\n\t// is irrelevant. This holds true as long as there's no paging for\n\t// requesting lobbies via the API.\n\tlobbies[index] = lobbies[len(lobbies)-1]\n\t// Remove reference to moved lobby, as we'd multiple references to\n\t// the same lobby in memory, potentially leaking memory if the\n\t// lobby is removed later on.\n\tlobbies[len(lobbies)-1] = nil\n\tlobbies = lobbies[:len(lobbies)-1]\n}\n\n// PageStats represents dynamic information about the website.\ntype PageStats struct {\n\tActiveLobbyCount        int    `json:\"activeLobbyCount\"`\n\tPlayersCount            uint64 `json:\"playersCount\"`\n\tOccupiedPlayerSlotCount uint64 `json:\"occupiedPlayerSlotCount\"`\n\tConnectedPlayersCount   uint64 `json:\"connectedPlayersCount\"`\n}\n\n// Stats delivers information about the state of the service. Currently this\n// is lobby and player counts.\nfunc Stats() *PageStats {\n\tglobalStateMutex.RLock()\n\tdefer globalStateMutex.RUnlock()\n\n\tvar playerCount, occupiedPlayerSlotCount, connectedPlayerCount uint64\n\t// While one would expect locking the lobby here, it's not very\n\t// important to get 100% consistent results here.\n\tfor _, lobby := range lobbies {\n\t\tplayerCount += uint64(len(lobby.GetPlayers()))\n\t\toccupiedPlayerSlotCount += uint64(lobby.GetOccupiedPlayerSlots())\n\t\tconnectedPlayerCount += uint64(lobby.GetConnectedPlayerCount())\n\t}\n\n\treturn &PageStats{\n\t\tActiveLobbyCount:        len(lobbies),\n\t\tPlayersCount:            playerCount,\n\t\tOccupiedPlayerSlotCount: occupiedPlayerSlotCount,\n\t\tConnectedPlayersCount:   connectedPlayerCount,\n\t}\n}\n"
  },
  {
    "path": "internal/state/lobbies_test.go",
    "content": "package state\n\nimport (\n\t\"testing\"\n\n\t\"github.com/scribble-rs/scribble.rs/internal/config\"\n\t\"github.com/scribble-rs/scribble.rs/internal/game\"\n\t\"github.com/stretchr/testify/require\"\n)\n\n//nolint:paralleltest //this test is very stateful\nfunc TestAddAndRemove(t *testing.T) {\n\trequire.Empty(t, lobbies, \"Lobbies should be empty when test starts\")\n\n\tcreateLobby := func() *game.Lobby {\n\t\tplayer, lobby, err := game.CreateLobby(\"\", \"player\", \"dutch\", &game.EditableLobbySettings{\n\t\t\tPublic:             true,\n\t\t\tDrawingTime:        100,\n\t\t\tRounds:             10,\n\t\t\tMaxPlayers:         10,\n\t\t\tCustomWordsPerTurn: 3,\n\t\t\tClientsPerIPLimit:  1,\n\t\t\tWordsPerTurn:       3,\n\t\t}, nil, game.ChillScoring)\n\t\trequire.NoError(t, err)\n\t\tlobby.OnPlayerDisconnect(player)\n\t\treturn lobby\n\t}\n\tlobbyA := createLobby()\n\tlobbyB := createLobby()\n\tlobbyC := createLobby()\n\n\tAddLobby(lobbyA)\n\tAddLobby(lobbyB)\n\tAddLobby(lobbyC)\n\n\trequire.NotNil(t, GetLobby(lobbyA.LobbyID))\n\trequire.NotNil(t, GetLobby(lobbyB.LobbyID))\n\trequire.NotNil(t, GetLobby(lobbyC.LobbyID))\n\n\tRemoveLobby(lobbyB.LobbyID)\n\trequire.Nil(t, GetLobby(lobbyB.LobbyID), \"Lobby B should have been deleted.\")\n\n\trequire.NotNil(t, GetLobby(lobbyA.LobbyID), \"Lobby A shouldn't have been deleted.\")\n\trequire.NotNil(t, GetLobby(lobbyC.LobbyID), \"Lobby C shouldn't have been deleted.\")\n\trequire.Len(t, lobbies, 2)\n\n\tcleanupRoutineLogic(&config.LobbyCleanup{})\n\trequire.Empty(t, lobbies)\n}\n"
  },
  {
    "path": "internal/translations/ar.go",
    "content": "package translations\n\nfunc initArabicTranslation() *Translation {\n\ttranslation := createTranslation()\n\ttranslation.IsRtl = true\n\n\ttranslation.put(\"requires-js\", \"يحتاج هذا الموقع لصلاحيات جافاسكريبت ليعمل.\")\n\n\ttranslation.put(\"start-the-game\", \"إستعدوا!\")\n\ttranslation.put(\"force-start\", \"البدء الإجباري\")\n\ttranslation.put(\"force-restart\", \"الإعادة الإجبارية\")\n\ttranslation.put(\"game-not-started-title\", \"لم تبدإ اللعبة بعد\")\n\ttranslation.put(\"waiting-for-host-to-start\", \"الرجاء إنتظار المنظم لبدإ اللعبة\")\n\n\ttranslation.put(\"now-spectating-title\", \"أنت الآن متفرج\")\n\ttranslation.put(\"now-spectating-text\", \"يمكنك الخروج من وضع المتفرج بالضغط على زر العين أعلاه\")\n\ttranslation.put(\"now-participating-title\", \"أنت الآن مشارك\")\n\ttranslation.put(\"now-participating-text\", \"يمكنك دخول وضع المتفرج بالضغط على زر العين أعلاه\")\n\n\ttranslation.put(\"spectation-requested-title\", \"تم طلب وضع المتفرج\")\n\ttranslation.put(\"spectation-requested-text\", \"ستكون متفرجا بعد هذه الجولة.\")\n\ttranslation.put(\"participation-requested-title\", \"تم طلب المشاركة\")\n\ttranslation.put(\"participation-requested-text\", \"ستكون مشاركا بعد هذه الجولة.\")\n\n\ttranslation.put(\"spectation-request-cancelled-title\", \"تم إلغاء طلب وضع المتفرج\")\n\ttranslation.put(\"spectation-request-cancelled-text\", \"تم إلغاء وضع المتفرج, ستبقى مشاركا.\")\n\ttranslation.put(\"participation-request-cancelled-title\", \"تم إلغاء طلب المشاركة\")\n\ttranslation.put(\"participation-request-cancelled-text\", \"تم إلغاء طلب المشاركة ستبقى متفرجا.\")\n\n\ttranslation.put(\"round\", \"الجولة\")\n\ttranslation.put(\"toggle-soundeffects\", \"تشغيل/إيقاف مؤثرات الصوتية\")\n\ttranslation.put(\"toggle-pen-pressure\", \"تشغيل/إيقاف ضغط القلم\")\n\ttranslation.put(\"change-your-name\", \"إسم الشهرة\")\n\ttranslation.put(\"randomize\", \"إختيار عشوائي\")\n\ttranslation.put(\"apply\", \"تطبيق\")\n\ttranslation.put(\"save\", \"حفظ\")\n\ttranslation.put(\"toggle-fullscreen\", \"وضع ملء الشاشة\")\n\ttranslation.put(\"toggle-spectate\", \"تشغيل/إيقاف وضع المتفرج\")\n\ttranslation.put(\"show-help\", \"عرض المساعدة\")\n\ttranslation.put(\"votekick-a-player\", \"تصويت لطرد اللاعب\")\n\n\ttranslation.put(\"last-turn\", \"(آخر دور %s)\")\n\n\ttranslation.put(\"drawer-kicked\", \"بما أن اللاعب المطرود كان يرسم, لن يأخذ أي منكم نقاط\")\n\ttranslation.put(\"self-kicked\", \"تم طردك\")\n\ttranslation.put(\"kick-vote\", \"(%s/%s) اللاعبين الذين صوتو لطرد %s.\")\n\ttranslation.put(\"player-kicked\", \"اللاعب تم طرده.\")\n\ttranslation.put(\"owner-change\", \"%s هو الآن مالك الردهة\")\n\n\ttranslation.put(\"change-lobby-settings-tooltip\", \"تغيير إعدادات الردهة\")\n\ttranslation.put(\"change-lobby-settings-title\", \"إعدادات الردهة\")\n\ttranslation.put(\"lobby-settings-changed\", \"تم تغيير إعدادات الردهة\")\n\ttranslation.put(\"advanced-settings\", \"إعدادات متقدمة\")\n\ttranslation.put(\"chill\", \"هادئة\")\n\ttranslation.put(\"competitive\", \"تنافسية\")\n\ttranslation.put(\"chill-alt\", \"مع أن السرعة تكافأ, إلا أنه لا بأس إن كنت أبطأ قليلا.\\nالنقاط الأساسية مرتفعة نسبيا, ركز على الإستمتاع!\")\n\ttranslation.put(\"competitive-alt\", \"كلما كنت أسرع, حصلت على نقاط أكثر.\\nالنقاط الأساسية أقل بكثير, و الإنخفاض أسرع.\")\n\ttranslation.put(\"score-calculation\", \"النقاط\")\n\ttranslation.put(\"word-language\", \"اللغة\")\n\ttranslation.put(\"drawing-time-setting\", \"وقت الرسم\")\n\ttranslation.put(\"rounds-setting\", \"الجولات\")\n\ttranslation.put(\"max-players-setting\", \"الحد الأقصى للاعبين\")\n\ttranslation.put(\"public-lobby-setting\", \"ردهة عامة\")\n\ttranslation.put(\"custom-words\", \"كلمات مخصصة\")\n\ttranslation.put(\"custom-words-info\", \"أضف كلماتك الخاصة, فرق بينها بالفاصلة\")\n\ttranslation.put(\"custom-words-per-turn-setting\", \"كلمات مخصصة لكل دور\")\n\ttranslation.put(\"players-per-ip-limit-setting\", \"حد اللاعبين في كل IP\")\n\ttranslation.put(\"save-settings\", \"Save settings\")\n\ttranslation.put(\"input-contains-invalid-data\", \"مدخلاتك تحتوي على معلومات خاطئة\")\n\ttranslation.put(\"please-fix-invalid-input\", \"صحح المدخل الخاطئ و أعد المحاولة\")\n\ttranslation.put(\"create-lobby\", \"إنشاء ردهة\")\n\ttranslation.put(\"create-public-lobby\", \"إنشاء ردهة عامة\")\n\ttranslation.put(\"create-private-lobby\", \"إنشاء ردهة خاصة\")\n\n\ttranslation.put(\"refresh\", \"إعادة تحميل\")\n\ttranslation.put(\"join-lobby\", \"دخول الردهة\")\n\n\ttranslation.put(\"message-input-placeholder\", \"أدخل تخميناتك و رسائلك هنا!\")\n\n\ttranslation.put(\"word-choice-warning\", \"كلمة إذا لم تختر في الوقت\")\n\ttranslation.put(\"choose-a-word\", \"إختر كلمة\")\n\ttranslation.put(\"waiting-for-word-selection\", \"في إنتظار إختيار كلمة\")\n\t// This one doesn't use %s, since we want to make one part bold.\n\ttranslation.put(\"is-choosing-word\", \"يختار كلمة.\")\n\n\ttranslation.put(\"close-guess\", \"'%s' قريب جدا\")\n\ttranslation.put(\"correct-guess\", \"لقد أصبت في تخمينك للكلمة.\")\n\ttranslation.put(\"correct-guess-other-player\", \"'%s' اصاب في تخمين الكلمة\")\n\ttranslation.put(\"round-over\", \"إنتهى دورك, لم يتم إختيار أي كلمة.\")\n\ttranslation.put(\"round-over-no-word\", \"إنتهى دورك, الكلمة كانت '%s'\")\n\ttranslation.put(\"game-over-win\", \"مبارك, لقد فزت!\")\n\ttranslation.put(\"game-over-tie\", \"إنه تعادل\")\n\ttranslation.put(\"game-over\", \"لقد وضعت %s. برصيد %s نقطة.\")\n\n\ttranslation.put(\"change-active-color\", \"غير لونك الحالي\")\n\ttranslation.put(\"use-pencil\", \"إستخدم القلم\")\n\ttranslation.put(\"use-eraser\", \"إستخدم الممحاة\")\n\ttranslation.put(\"use-fill-bucket\", \"إستعمل الملء بالدلو (يقوم بملء مساحة معينة باللون المعين)\")\n\ttranslation.put(\"change-pencil-size-to\", \"غير حجم القلم/الممحاة %s\")\n\ttranslation.put(\"clear-canvas\", \"مسح مساحة الرسم\")\n\ttranslation.put(\"undo\", \"التراجع عن آخر تغيير قمت به  ( لا تعمل بعد \\\"\"+translation.Get(\"clear-canvas\")+\"\\\")\")\n\n\ttranslation.put(\"connection-lost\", \"فقدت الإشارة\")\n\ttranslation.put(\"connection-lost-text\", \"محاولة الإتصال مجددا\"+\n\t\t\" ...\\n\\nتأكد من إتصالك بالإنترنت\\nإذا \"+\n\t\t\"بقي المشكل على حاله, تواصل مع المالك\")\n\ttranslation.put(\"error-connecting\", \"خطأ في الإتصال بالخادم\")\n\ttranslation.put(\"error-connecting-text\",\n\t\t\"Scribble.rs لا يمكنه الإتصال بالخادم\\n\\nبما أن إتصالك \"+\n\t\t\t\"بالأنترنت يبدو أنه يعمل, فإن\\nالخادم أو الجدار الناري لم  \"+\n\t\t\t\"يتم ضبطه بشكل صحيح\\n\\nلإعادة المحاولة, قم بإعادة تحميل الصفحة.\")\n\n\ttranslation.put(\"message-too-long\", \"رسالتك طويلة جدا!\")\n\n\t// Help dialog\n\ttranslation.put(\"controls\", \"التحكم\")\n\ttranslation.put(\"pencil\", \"القلم\")\n\ttranslation.put(\"eraser\", \"الممحاة\")\n\ttranslation.put(\"fill-bucket\", \"الملء بالدلو\")\n\ttranslation.put(\"switch-tools-intro\", \"يمكنك التحويل بين الأدوات بواسطة الاختصارات\")\n\ttranslation.put(\"switch-pencil-sizes\", \"يمكنك التغيير بين احجام القلم من %s إلى %s.\")\n\n\t// Generic words\n\t// \"close\" as in \"closing the window\"\n\ttranslation.put(\"close\", \"إغلاق\")\n\ttranslation.put(\"no\", \"لا\")\n\ttranslation.put(\"yes\", \"نعم\")\n\ttranslation.put(\"system\", \"النظام\")\n\n\ttranslation.put(\"source-code\", \"مصدر الكود\")\n\ttranslation.put(\"help\", \"المساعدة\")\n\ttranslation.put(\"submit-feedback\", \"الآراء\")\n\ttranslation.put(\"stats\", \"الحالة\")\n\n\tRegisterTranslation(\"ar\", translation)\n\n\treturn translation\n}\n"
  },
  {
    "path": "internal/translations/de_DE.go",
    "content": "package translations\n\nfunc initGermanTranslation() {\n\ttranslation := createTranslation()\n\n\ttranslation.put(\"requires-js\", \"Diese Website benötigt JavaScript um korrekt zu funktionieren.\")\n\n\ttranslation.put(\"start-the-game\", \"Mach dich bereit!\")\n\ttranslation.put(\"force-start\", \"Start erzwingen\")\n\ttranslation.put(\"force-restart\", \"Neustart erzwingen\")\n\ttranslation.put(\"game-not-started-title\", \"Warte auf Spielstart\")\n\ttranslation.put(\"waiting-for-host-to-start\", \"Bitte warte bis der Lobby Besitzer das Spiel startet.\")\n\n\ttranslation.put(\"now-spectating-title\", \"Du schaust nun zu\")\n\ttranslation.put(\"now-spectating-text\", \"Du kannst den Zuschauermodus verlassen, indem du das Auge oben betätigst.\")\n\ttranslation.put(\"now-participating-title\", \"Du nimmst nun teil\")\n\ttranslation.put(\"now-participating-text\", \"Du kannst den Zuschauermodus betreten, indem du das Auge oben betätigst.\")\n\n\ttranslation.put(\"spectation-requested-title\", \"Zuschauermodus angefragt\")\n\ttranslation.put(\"spectation-requested-text\", \"Nach diesem Zug wirst du zum Zuschauer.\")\n\ttranslation.put(\"participation-requested-title\", \"Teilnahme angefragt\")\n\ttranslation.put(\"participation-requested-text\", \"Nach diesem Zug wirst du wieder teilnehmen.\")\n\n\ttranslation.put(\"spectation-request-cancelled-title\", \"Zuschauermodusanfrage zurückgezogen\")\n\ttranslation.put(\"spectation-request-cancelled-text\", \"Deine Zuschauermodusanfrage wurde zurückgezogen, du nimmst weiterhin teil.\")\n\ttranslation.put(\"participation-request-cancelled-title\", \"Teilnahmeanfrage zurückgezogen\")\n\ttranslation.put(\"participation-request-cancelled-text\", \"Deine Teilnahmeanfrage wurde zurückgezogen, du schaust weiterhin zu.\")\n\n\ttranslation.put(\"last-turn\", \"(Letzter Zug: %s)\")\n\n\ttranslation.put(\"round\", \"Runde\")\n\ttranslation.put(\"toggle-soundeffects\", \"Sound ein- / ausschalten\")\n\ttranslation.put(\"toggle-pen-pressure\", \"Tablet-Stiftdruck ein- / ausschalten\")\n\ttranslation.put(\"change-your-name\", \"Anzeigename\")\n\ttranslation.put(\"randomize\", \"Zufälliger Name\")\n\ttranslation.put(\"apply\", \"Anwenden\")\n\ttranslation.put(\"save\", \"Speichern\")\n\ttranslation.put(\"toggle-fullscreen\", \"Vollbild aktivieren / deaktivieren\")\n\ttranslation.put(\"toggle-spectate\", \"Zuschauermodus aktivieren / deaktivieren\")\n\ttranslation.put(\"show-help\", \"Hilfe anzeigen\")\n\ttranslation.put(\"votekick-a-player\", \"Stimme dafür ab, einen Spieler rauszuwerfen\")\n\n\ttranslation.put(\"change-lobby-settings-tooltip\", \"Lobby-Einstellungen ändern\")\n\ttranslation.put(\"change-lobby-settings-title\", \"Lobby-Einstellungen\")\n\ttranslation.put(\"lobby-settings-changed\", \"Lobby-Einstelungen verändert\")\n\ttranslation.put(\"advanced-settings\", \"Erweiterte Einstellungen\")\n\ttranslation.put(\"chill\", \"Gemütlich\")\n\ttranslation.put(\"competitive\", \"Wettkampf\")\n\ttranslation.put(\"chill-alt\", \"Zwar wird schnell sein belohnt, aber der Fokus liegt hier eher auf Spaß.\")\n\ttranslation.put(\"competitive-alt\", \"Je schneller du bist, desto mehr Punkte bekommst du. Schnell sein lohnt sich also!\")\n\ttranslation.put(\"score-calculation\", \"Punktsystem\")\n\ttranslation.put(\"word-language\", \"Sprache\")\n\ttranslation.put(\"drawing-time-setting\", \"Zeichenzeit\")\n\ttranslation.put(\"rounds-setting\", \"Runden\")\n\ttranslation.put(\"max-players-setting\", \"Maximale Spieler\")\n\ttranslation.put(\"public-lobby-setting\", \"Öffentliche Lobby\")\n\ttranslation.put(\"custom-words\", \"Extrawörter\")\n\ttranslation.put(\"custom-words-info\", \"Gib hier deine Extrawörter ein und trenne einzelne Wörter mit einem Komma\")\n\ttranslation.put(\"custom-words-per-turn-setting\", \"Extrawörter pro Zug\")\n\ttranslation.put(\"players-per-ip-limit-setting\", \"Maximale Spieler pro IP\")\n\ttranslation.put(\"save-settings\", \"Einstellungen Speichern\")\n\ttranslation.put(\"input-contains-invalid-data\", \"Deine Eingaben enthalten invalide Daten:\")\n\ttranslation.put(\"please-fix-invalid-input\", \"Bitte korrigiere deine Eingaben und versuche es erneut.\")\n\ttranslation.put(\"create-lobby\", \"Lobby erstellen\")\n\ttranslation.put(\"create-public-lobby\", \"Public Lobby erstellen\")\n\ttranslation.put(\"create-private-lobby\", \"Private Lobby erstellen\")\n\n\ttranslation.put(\"refresh\", \"Aktualisieren\")\n\ttranslation.put(\"join-lobby\", \"Lobby beitreten\")\n\n\ttranslation.put(\"message-input-placeholder\", \"Antworten und Nachrichten hier eingeben\")\n\n\ttranslation.put(\"word-choice-warning\", \"Wort, wenn du nicht zeitig wählst\")\n\ttranslation.put(\"choose-a-word\", \"Wähle ein Wort\")\n\ttranslation.put(\"waiting-for-word-selection\", \"Warte auf Wort-Auswahl\")\n\t// This one doesn't use %s, since we want to make one part bold.\n\ttranslation.put(\"is-choosing-word\", \"wählt gerade ein Wort.\")\n\n\ttranslation.put(\"close-guess\", \"'%s' ist nah dran.\")\n\ttranslation.put(\"correct-guess\", \"Du hast das Wort korrekt erraten.\")\n\ttranslation.put(\"correct-guess-other-player\", \"'%s' hat das Wort korrekt erraten.\")\n\ttranslation.put(\"round-over\", \"Zug vorbei, es wurde kein Wort gewählt.\")\n\ttranslation.put(\"round-over-no-word\", \"Zug vorbei, das gewählte Wort war '%s'.\")\n\ttranslation.put(\"game-over-win\", \"Glückwunsch, du hast gewonnen!\")\n\ttranslation.put(\"game-over-tie\", \"Unentschieden!\")\n\ttranslation.put(\"game-over\", \"Du bist %s. mit %s Punkten\")\n\n\ttranslation.put(\"change-active-color\", \"Ändere die aktive Farbe\")\n\ttranslation.put(\"use-pencil\", \"Stift bentuzen\")\n\ttranslation.put(\"use-eraser\", \"Radiergummi benutzen\")\n\ttranslation.put(\"use-fill-bucket\", \"Fülleimer benutzen (Füllt den Zielbereich mit der gewählten Farbe)\")\n\ttranslation.put(\"change-pencil-size-to\", \"Ändere die Stift / Radiergummi Größe auf %s\")\n\ttranslation.put(\"clear-canvas\", \"Leere die Zeichenfläche\")\n\ttranslation.put(\"undo\", \"Mache deine letzte Änderung ungeschehen (Funktioniert nicht nach \\\"\"+translation.Get(\"clear-canvas\")+\"\\\")\")\n\n\ttranslation.put(\"connection-lost\", \"Verbindung verloren!\")\n\ttranslation.put(\"connection-lost-text\", \"Versuche Verbindung wiederherzustellen\"+\n\t\t\" ...\\n\\nStelle sicher, dass deine Internetverbindung funktioniert.\\nFalls das \"+\n\t\t\"Problem weiterhin besteht, kontaktiere den Webmaster.\")\n\ttranslation.put(\"error-connecting\", \"Fehler beim Verbindungsaufbau\")\n\ttranslation.put(\"error-connecting-text\",\n\t\t\"Scribble.rs war nicht in der Lage eine Socket-Verbindung aufzubauen.\\n\\nZwar scheint dein \"+\n\t\t\t\"Internet zu funktionieren, aber entweder wurden der Server oder \\ndeine Firewall falsch konfiguriert.\\n\\n\"+\n\t\t\t\"Versuche die Seite neu zu laden.\")\n\n\ttranslation.put(\"message-too-long\", \"Deine Nachricht ist zu lang.\")\n\n\t// Help dialog\n\ttranslation.put(\"controls\", \"Steuerung\")\n\ttranslation.put(\"pencil\", \"Stift\")\n\ttranslation.put(\"eraser\", \"Radiergummi\")\n\ttranslation.put(\"fill-bucket\", \"Fülleimer\")\n\ttranslation.put(\"switch-tools-intro\", \"Zwischen den Werkzeugen kannst du mit Tastaturkürzel wechseln\")\n\ttranslation.put(\"switch-pencil-sizes\", \"Die Stiftgröße kannst du mit den Tasten %s bis %s verändern.\")\n\n\t// Generic words\n\t// \"close\" as in \"closing the window\"\n\ttranslation.put(\"close\", \"Schließen\")\n\ttranslation.put(\"no\", \"Nein\")\n\ttranslation.put(\"yes\", \"Ja\")\n\ttranslation.put(\"system\", \"System\")\n\n\t// Footer\n\ttranslation.put(\"source-code\", \"Source Code\")\n\ttranslation.put(\"help\", \"Hilfe\")\n\ttranslation.put(\"submit-feedback\", \"Feedback\")\n\ttranslation.put(\"stats\", \"Status\")\n\n\tRegisterTranslation(\"de\", translation)\n}\n"
  },
  {
    "path": "internal/translations/doc.go",
    "content": "/*\nPackage translations introduces a simple localization layer that can be\nused by a templating engine.\n\nUpon retrieving a localization package, values can be retrieved in both Go\ncode and the .html files via Get(key string). If a given key hasn't been\ntranslated, the default localization pack will be accessed.\n\nIf the templating engine accesses non existent values, the server will panic.\nThis makes sure that we can't oversee the use of non-existent values.\n\nValues must be plain text and not contain any HTML or CSS.\nIf values are to be inserted dynamically, placeholders can be placed with \"%s\".\n*/\npackage translations\n"
  },
  {
    "path": "internal/translations/en_us.go",
    "content": "package translations\n\nfunc initEnglishTranslation() *Translation {\n\ttranslation := createTranslation()\n\n\ttranslation.put(\"requires-js\", \"This website requires JavaScript to run properly.\")\n\n\ttranslation.put(\"start-the-game\", \"Ready up!\")\n\ttranslation.put(\"force-start\", \"Force Start\")\n\ttranslation.put(\"force-restart\", \"Force Restart\")\n\ttranslation.put(\"game-not-started-title\", \"Game hasn't started\")\n\ttranslation.put(\"waiting-for-host-to-start\", \"Please wait for your lobby host to start the game.\")\n\ttranslation.put(\"click-to-homepage\", \"Click here to get back to the Homepage\")\n\n\ttranslation.put(\"now-spectating-title\", \"You are now spectating\")\n\ttranslation.put(\"now-spectating-text\", \"You can leave the spectator mode by pressing the eye button at the top.\")\n\ttranslation.put(\"now-participating-title\", \"You are now participating\")\n\ttranslation.put(\"now-participating-text\", \"You can enter the spectator mode by pressing the eye button at the top.\")\n\n\ttranslation.put(\"spectation-requested-title\", \"Spectator mode requested\")\n\ttranslation.put(\"spectation-requested-text\", \"You'll be a spectator after this turn.\")\n\ttranslation.put(\"participation-requested-title\", \"Participation requested\")\n\ttranslation.put(\"participation-requested-text\", \"You'll be participating after this turn.\")\n\n\ttranslation.put(\"spectation-request-cancelled-title\", \"Spectator mode requested cancelled\")\n\ttranslation.put(\"spectation-request-cancelled-text\", \"Your spectation request has been cancelled, you will keep participating.\")\n\ttranslation.put(\"participation-request-cancelled-title\", \"Participation requested cancelled\")\n\ttranslation.put(\"participation-request-cancelled-text\", \"Your partiticpation request has been cancelled, you will keep spectating.\")\n\n\ttranslation.put(\"round\", \"Round\")\n\ttranslation.put(\"toggle-soundeffects\", \"Toggle soundeffects\")\n\ttranslation.put(\"toggle-pen-pressure\", \"Toggle pen pressure\")\n\ttranslation.put(\"change-your-name\", \"Nickname\")\n\ttranslation.put(\"randomize\", \"Randomize\")\n\ttranslation.put(\"apply\", \"Apply\")\n\ttranslation.put(\"save\", \"Save\")\n\ttranslation.put(\"toggle-fullscreen\", \"Toggle fullscreen\")\n\ttranslation.put(\"toggle-spectate\", \"Toggle spectator mode\")\n\ttranslation.put(\"show-help\", \"Show help\")\n\ttranslation.put(\"votekick-a-player\", \"Vote to kick a player\")\n\n\ttranslation.put(\"last-turn\", \"(Last turn: %s)\")\n\n\ttranslation.put(\"drawer-kicked\", \"Since the kicked player has been drawing, none of you will get any points this round.\")\n\ttranslation.put(\"self-kicked\", \"You have been kicked\")\n\ttranslation.put(\"kick-vote\", \"(%s/%s) players voted to kick %s.\")\n\ttranslation.put(\"player-kicked\", \"Player has been kicked.\")\n\ttranslation.put(\"owner-change\", \"%s is the new lobby owner.\")\n\n\ttranslation.put(\"change-lobby-settings-tooltip\", \"Change the lobby settings\")\n\ttranslation.put(\"change-lobby-settings-title\", \"Lobby settings\")\n\ttranslation.put(\"lobby-settings-changed\", \"Lobby settings changed\")\n\ttranslation.put(\"advanced-settings\", \"Advanced Settings\")\n\ttranslation.put(\"chill\", \"Chill\")\n\ttranslation.put(\"competitive\", \"Competitive\")\n\ttranslation.put(\"chill-alt\", \"While being fast is rewarded, it's not too bad if you are little slower.\\nThe base score is rather high, focus on having fun!\")\n\ttranslation.put(\"competitive-alt\", \"The faster you are, the more points you will get.\\nThe base score is a lot lower and the decline is faster.\")\n\ttranslation.put(\"score-calculation\", \"Scoring\")\n\ttranslation.put(\"word-language\", \"Language\")\n\ttranslation.put(\"drawing-time-setting\", \"Drawing Time\")\n\ttranslation.put(\"rounds-setting\", \"Rounds\")\n\ttranslation.put(\"max-players-setting\", \"Maximum Players\")\n\ttranslation.put(\"public-lobby-setting\", \"Public Lobby\")\n\ttranslation.put(\"custom-words\", \"Custom Words\")\n\ttranslation.put(\"custom-words-info\", \"Enter your additional words, separating them by commas\")\n\ttranslation.put(\"custom-words-placeholder\", \"Comma, separated, word, list, here\")\n\ttranslation.put(\"custom-words-per-turn-setting\", \"Custom Words Per Turn\")\n\ttranslation.put(\"players-per-ip-limit-setting\", \"Players per IP Limit\")\n\ttranslation.put(\"words-per-turn-setting\", \"Words Per Turn\")\n\ttranslation.put(\"save-settings\", \"Save settings\")\n\ttranslation.put(\"input-contains-invalid-data\", \"Your input contains invalid data:\")\n\ttranslation.put(\"please-fix-invalid-input\", \"Correct the invalid input and try again.\")\n\ttranslation.put(\"create-lobby\", \"Create Lobby\")\n\ttranslation.put(\"create-public-lobby\", \"Create Public Lobby\")\n\ttranslation.put(\"create-private-lobby\", \"Create Private Lobby\")\n\ttranslation.put(\"no-lobbies-yet\", \"There are no lobbies yet.\")\n\ttranslation.put(\"lobby-full\", \"Sorry, but the lobby is full.\")\n\ttranslation.put(\"lobby-ip-limit-excceeded\", \"Sorry, but you have exceeded the maximum number of clients per IP.\")\n\ttranslation.put(\"lobby-open-tab-exists\", \"It appears you already have an open tab for this lobby.\")\n\ttranslation.put(\"lobby-doesnt-exist\", \"The requested lobby doesn't exist\")\n\n\ttranslation.put(\"refresh\", \"Refresh\")\n\ttranslation.put(\"join-lobby\", \"Join Lobby\")\n\n\ttranslation.put(\"message-input-placeholder\", \"Type your guesses and messages here\")\n\n\ttranslation.put(\"word-choice-warning\", \"Word if you don't choose in time\")\n\ttranslation.put(\"choose-a-word\", \"Choose a word\")\n\ttranslation.put(\"waiting-for-word-selection\", \"Waiting for word selection\")\n\t// This one doesn't use %s, since we want to make one part bold.\n\ttranslation.put(\"is-choosing-word\", \"is choosing a word.\")\n\n\ttranslation.put(\"close-guess\", \"'%s' is very close.\")\n\ttranslation.put(\"correct-guess\", \"You have correctly guessed the word.\")\n\ttranslation.put(\"correct-guess-other-player\", \"'%s' correctly guessed the word.\")\n\ttranslation.put(\"round-over\", \"Turn over, no word was chosen.\")\n\ttranslation.put(\"round-over-no-word\", \"Turn over, the word was '%s'.\")\n\ttranslation.put(\"game-over-win\", \"Congratulations, you've won!\")\n\ttranslation.put(\"game-over-tie\", \"It's a tie!\")\n\ttranslation.put(\"game-over\", \"You placed %s. with %s points\")\n\ttranslation.put(\"drawer-disconnected\", \"Turn ended early, drawer disconnected.\")\n\ttranslation.put(\"guessers-disconnected\", \"Turn ended early, guessers disconnected.\")\n\ttranslation.put(\"word-hint-revealed\", \"A word hint was revealed!\")\n\n\ttranslation.put(\"change-active-color\", \"Change your active color\")\n\ttranslation.put(\"use-pencil\", \"Use pencil\")\n\ttranslation.put(\"use-eraser\", \"Use eraser\")\n\ttranslation.put(\"use-fill-bucket\", \"Use fill bucket (Fills the target area with the selected color)\")\n\ttranslation.put(\"change-pencil-size-to\", \"Change the pencil / eraser size to %s\")\n\ttranslation.put(\"clear-canvas\", \"Clear the canvas\")\n\ttranslation.put(\"undo\", \"Revert the last change you made (Doesn't work after \\\"\"+translation.Get(\"clear-canvas\")+\"\\\")\")\n\n\ttranslation.put(\"connection-lost\", \"Connection lost!\")\n\ttranslation.put(\"connection-lost-text\", \"Attempting to reconnect\"+\n\t\t\" ...\\n\\nMake sure your internet connection works.\\nIf the \"+\n\t\t\"problem persists, contact the webmaster.\")\n\ttranslation.put(\"error-connecting\", \"Error connecting to server\")\n\ttranslation.put(\"error-connecting-text\",\n\t\t\"Scribble.rs couldn't establish a socket connection.\\n\\nWhile your internet \"+\n\t\t\t\"connection seems to be working, either the\\nserver or your firewall hasn't \"+\n\t\t\t\"been configured correctly.\\n\\nTo retry, reload the page.\")\n\ttranslation.put(\"message-too-long\", \"Your message is too long.\")\n\ttranslation.put(\"server-shutting-down-title\", \"Server shutting down\")\n\ttranslation.put(\"server-shutting-down-text\", \"Sorry, but the server is about to shut down. Please come back at a later time.\")\n\n\t// Help dialog\n\ttranslation.put(\"controls\", \"Controls\")\n\ttranslation.put(\"pencil\", \"Pencil\")\n\ttranslation.put(\"eraser\", \"Eraser\")\n\ttranslation.put(\"fill-bucket\", \"Fill bucket\")\n\ttranslation.put(\"switch-tools-intro\", \"You can switch between tools using shortcuts\")\n\ttranslation.put(\"switch-pencil-sizes\", \"You can also switch between pencil sizes using keys %s to %s.\")\n\n\t// Generic words\n\t// \"close\" as in \"closing the window\"\n\ttranslation.put(\"close\", \"Close\")\n\ttranslation.put(\"no\", \"No\")\n\ttranslation.put(\"yes\", \"Yes\")\n\ttranslation.put(\"system\", \"System\")\n\ttranslation.put(\"confirm\", \"Okay\")\n\ttranslation.put(\"ready\", \"Ready\")\n\ttranslation.put(\"join\", \"Join\")\n\ttranslation.put(\"ongoing\", \"Ongoing\")\n\ttranslation.put(\"game-over-lobby\", \"Game Over\")\n\n\ttranslation.put(\"source-code\", \"Source Code\")\n\ttranslation.put(\"help\", \"Help\")\n\ttranslation.put(\"submit-feedback\", \"Feedback\")\n\ttranslation.put(\"stats\", \"Status\")\n\n\ttranslation.put(\"forbidden\", \"Forbidden\")\n\n\tRegisterTranslation(\"en\", translation)\n\n\treturn translation\n}\n"
  },
  {
    "path": "internal/translations/es_ES.go",
    "content": "package translations\n\nfunc initSpainTranslation() {\n\ttranslation := createTranslation()\n\n\ttranslation.put(\"requires-js\", \"Este sitio web requiere JavaScript para funcionar correctamente..\")\n\n\ttranslation.put(\"start-the-game\", \"Prepárate!\")\n\ttranslation.put(\"force-start\", \"Inicio forzado\")\n\ttranslation.put(\"force-restart\", \"Force RestartReinicio forzado\")\n\ttranslation.put(\"game-not-started-title\", \"El juego no ha comenzado\")\n\ttranslation.put(\"waiting-for-host-to-start\", \"Por favor, espere a que el anfitrión de su lobby inicie el juego..\")\n\n\ttranslation.put(\"now-spectating-title\", \"Ahora estás observando\")\n\ttranslation.put(\"now-spectating-text\", \"Puedes salir del modo espectador presionando el botón del ojo en la parte superior.\")\n\ttranslation.put(\"now-participating-title\", \"Ahora estás participando\")\n\ttranslation.put(\"now-participating-text\", \"Puedes ingresar al modo espectador presionando el botón del ojo en la parte superior.\")\n\n\ttranslation.put(\"spectation-requested-title\", \"Se solicita modo espectador\")\n\ttranslation.put(\"spectation-requested-text\", \"Serás espectador después de este turno.\")\n\ttranslation.put(\"participation-requested-title\", \"Se solicita participación\")\n\ttranslation.put(\"participation-requested-text\", \"Participarás después de este turno..\")\n\n\ttranslation.put(\"spectation-request-cancelled-title\", \"Se solicitó el modo espectador cancelado\")\n\ttranslation.put(\"spectation-request-cancelled-text\", \"Tu solicitud de espectación ha sido cancelada, seguirás participando..\")\n\ttranslation.put(\"participation-request-cancelled-title\", \"Participación solicitada cancelada\")\n\ttranslation.put(\"participation-request-cancelled-text\", \"Tu solicitud de participación ha sido cancelada, continuarás viendo..\")\n\n\ttranslation.put(\"round\", \"Redondo\")\n\ttranslation.put(\"toggle-soundeffects\", \"Activar o desactivar efectos de sonido\")\n\ttranslation.put(\"toggle-pen-pressure\", \"Alternar la presión del lápiz\")\n\ttranslation.put(\"change-your-name\", \"Apodo\")\n\ttranslation.put(\"randomize\", \"Aleatorizar\")\n\ttranslation.put(\"apply\", \"Aplicar\")\n\ttranslation.put(\"save\", \"Ahorrar\")\n\ttranslation.put(\"toggle-fullscreen\", \"Cambiar a pantalla completa\")\n\ttranslation.put(\"toggle-spectate\", \"Activar o desactivar el modo espectador\")\n\ttranslation.put(\"show-help\", \"Mostrar ayuda\")\n\ttranslation.put(\"votekick-a-player\", \"Votar para patear a un jugador\")\n\n\ttranslation.put(\"last-turn\", \"(Último turno: %s)\")\n\n\ttranslation.put(\"drawer-kicked\", \"Dado que el jugador expulsado ha estado robando, ninguno de ustedes obtendrá puntos en esta ronda.\")\n\ttranslation.put(\"self-kicked\", \"Te han pateado\")\n\ttranslation.put(\"kick-vote\", \"(%s/%s) Los jugadores votaron para patear %s.\")\n\ttranslation.put(\"player-kicked\", \"El jugador ha sido expulsado.\")\n\ttranslation.put(\"owner-change\", \"%s es el nuevo dueño del lobby.\")\n\n\ttranslation.put(\"change-lobby-settings-tooltip\", \"Cambiar la configuración del lobby\")\n\ttranslation.put(\"change-lobby-settings-title\", \"Configuración del lobby\")\n\ttranslation.put(\"lobby-settings-changed\", \"Se cambiaron las configuraciones del lobby\")\n\ttranslation.put(\"advanced-settings\", \"Configuración avanzada\")\n\ttranslation.put(\"chill\", \"Enfriar\")\n\ttranslation.put(\"competitive\", \"Competitivo\")\n\ttranslation.put(\"chill-alt\", \"Aunque ser rápido tiene recompensa, no es tan malo si eres un poco más lento..\\nLa puntuación base es bastante alta, concéntrate en divertirte.!\")\n\ttranslation.put(\"competitive-alt\", \"Cuanto más rápido seas, más puntos obtendrás..\\nLa puntuación base es mucho más baja y el descenso es más rápido..\")\n\ttranslation.put(\"score-calculation\", \"Tanteo\")\n\ttranslation.put(\"word-language\", \"Idioma\")\n\ttranslation.put(\"drawing-time-setting\", \"Tiempo de dibujo\")\n\ttranslation.put(\"rounds-setting\", \"Rondas\")\n\ttranslation.put(\"max-players-setting\", \"Máximo de jugadores\")\n\ttranslation.put(\"public-lobby-setting\", \"Vestíbulo público\")\n\ttranslation.put(\"custom-words\", \"Palabras personalizadas\")\n\ttranslation.put(\"custom-words-info\", \"Ingrese sus palabras adicionales, separándolas por comas\")\n\ttranslation.put(\"custom-words-per-turn-setting\", \"Palabras personalizadas por turno\")\n\ttranslation.put(\"players-per-ip-limit-setting\", \"Jugadores por límite de IP\")\n\ttranslation.put(\"save-settings\", \"Guardar configuración\")\n\ttranslation.put(\"input-contains-invalid-data\", \"Su entrada contiene datos no válidos:\")\n\ttranslation.put(\"please-fix-invalid-input\", \"Corrija la entrada no válida y vuelva a intentarlo.\")\n\ttranslation.put(\"create-lobby\", \"Crear lobby\")\n\ttranslation.put(\"create-public-lobby\", \"Crear un lobby público\")\n\ttranslation.put(\"create-private-lobby\", \"Crear un lobby privado\")\n\n\ttranslation.put(\"refresh\", \"Refrescar\")\n\ttranslation.put(\"join-lobby\", \"Únase al lobby\")\n\n\ttranslation.put(\"message-input-placeholder\", \"Escribe tus conjeturas y mensajes aquí\")\n\n\ttranslation.put(\"word-choice-warning\", \"Palabra si no eliges a tiempo\")\n\ttranslation.put(\"choose-a-word\", \"Elige una palabra\")\n\ttranslation.put(\"waiting-for-word-selection\", \"Esperando la selección de palabras\")\n\t// This one doesn't use %s, since we want to make one part bold.\n\ttranslation.put(\"is-choosing-word\", \"está eligiendo una palabra.\")\n\n\ttranslation.put(\"close-guess\", \"'%s' está muy cerca.\")\n\ttranslation.put(\"correct-guess\", \"Has adivinado correctamente la palabra..\")\n\ttranslation.put(\"correct-guess-other-player\", \"'%s' adivinó correctamente la palabra.\")\n\ttranslation.put(\"round-over\", \"Dé la vuelta, no se eligió ninguna palabra.\")\n\ttranslation.put(\"round-over-no-word\", \"Al dar la vuelta, la palabra era '%s'.\")\n\ttranslation.put(\"game-over-win\", \"¡Enhorabuena, has ganado!\")\n\ttranslation.put(\"game-over-tie\", \"Es un empate!\")\n\ttranslation.put(\"game-over\", \"Quedaste en %s lugar. Con %s puntos\")\n\n\ttranslation.put(\"change-active-color\", \"Cambia tu color activo\")\n\ttranslation.put(\"use-pencil\", \"Usa lápiz\")\n\ttranslation.put(\"use-eraser\", \"Usar borrador\")\n\ttranslation.put(\"use-fill-bucket\", \"UUtilice el cubo de llenado (Rellena el área objetivo con el color seleccionado)\")\n\ttranslation.put(\"change-pencil-size-to\", \"Cambia el lápiz / tamaño del borrador a %s\")\n\ttranslation.put(\"clear-canvas\", \"Limpiar el lienzo\")\n\ttranslation.put(\"undo\", \"Revertir el último cambio realizado (No funciona después \\\"\"+translation.Get(\"clear-canvas\")+\"\\\")\")\n\n\ttranslation.put(\"connection-lost\", \"Conexión perdida!\")\n\ttranslation.put(\"connection-lost-text\", \"Intentando reconectarse\"+\n\t\t\" ...\\n\\nAsegúrese de que su conexión a Internet funcione.\\n\"+\n\t\t\"Si el problema persiste, contacte con el webmaster..\")\n\ttranslation.put(\"error-connecting\", \"Error al conectar con el servidor\")\n\ttranslation.put(\"error-connecting-text\",\n\t\t\"Scribble.rs no se pudo establecer una conexión de socket.\\n\\nAunque su conexión \"+\n\t\t\t\"a Internet parece funcionar, es posible que el servidor\\no su firewall no se hayan \"+\n\t\t\t\"configurado correctamente.\\n\\nPara volver a intentarlo, recarga la página.\")\n\n\ttranslation.put(\"message-too-long\", \"Tu mensaje es demasiado largo.\")\n\n\t// Help dialog\n\ttranslation.put(\"controls\", \"Controles\")\n\ttranslation.put(\"pencil\", \"Lápiz\")\n\ttranslation.put(\"eraser\", \"Borrador\")\n\ttranslation.put(\"fill-bucket\", \"Llenar el cubo\")\n\ttranslation.put(\"switch-tools-intro\", \"Puede cambiar entre herramientas mediante atajos\")\n\ttranslation.put(\"switch-pencil-sizes\", \"También puedes cambiar entre tamaños de lápiz usando teclas %s para %s.\")\n\n\t// Generic words\n\t// \"close\" as in \"closing the window\"\n\ttranslation.put(\"close\", \"Cerca\")\n\ttranslation.put(\"no\", \"No\")\n\ttranslation.put(\"yes\", \"Sí\")\n\ttranslation.put(\"system\", \"Sistema\")\n\n\ttranslation.put(\"source-code\", \"Código fuente\")\n\ttranslation.put(\"help\", \"Ayuda\")\n\ttranslation.put(\"submit-feedback\", \"Comentario\")\n\ttranslation.put(\"stats\", \"Estado\")\n\n\tRegisterTranslation(\"es\", translation)\n}\n"
  },
  {
    "path": "internal/translations/fa.go",
    "content": "package translations\n\nfunc initPersianTranslation() *Translation {\n\ttranslation := createTranslation()\n\ttranslation.IsRtl = true\n\n\ttranslation.put(\"requires-js\", \"این وبسایت برای درست اجرا شدن نیاز به جاوااسکریپت داره.\")\n\n\ttranslation.put(\"start-the-game\", \"بزن بریم!\")\n\ttranslation.put(\"force-start\", \"شروع فوری\")\n\ttranslation.put(\"force-restart\", \"راه‌اندازی دوباره فوری\")\n\ttranslation.put(\"game-not-started-title\", \"بازی هنوز شروع نشده\")\n\ttranslation.put(\"waiting-for-host-to-start\", \"لطفا منتظر میزبان لابی باشید تا بازی رو شروع کنه.\")\n\ttranslation.put(\"click-to-homepage\", \"برای بازگشت به خونه اینجا رو کلیک کنید\")\n\n\ttranslation.put(\"now-spectating-title\", \"الان شما تماشاچی هستید\")\n\ttranslation.put(\"now-spectating-text\", \"برای خروج از حالت تماشاچی می‌تونید روی دکمه چشم بالای صفحه بزنید.\")\n\ttranslation.put(\"now-participating-title\", \"الان شما شرکت‌کننده هستید\")\n\ttranslation.put(\"now-participating-text\", \"برای ورود به حالت تماشاچی روی دکمه چشم بالای صفحه بزنید.\")\n\n\ttranslation.put(\"spectation-requested-title\", \"حالت تماشاچی درخواست شد\")\n\ttranslation.put(\"spectation-requested-text\", \"بعد از این دور بازی شما تماشاچی می‌شید.\")\n\ttranslation.put(\"participation-requested-title\", \"درخواست شرکت تو بازی داده شد\")\n\ttranslation.put(\"participation-requested-text\", \"بعد از این دور بازی شما هم می‌تونید بازی کنید.\")\n\n\ttranslation.put(\"spectation-request-cancelled-title\", \"درخواست حالت تماشاچی لغو شد\")\n\ttranslation.put(\"spectation-request-cancelled-text\", \"درخواست حالت تماشاچی لغو شد، می‌تونید به بازی ادامه بدید.\")\n\ttranslation.put(\"participation-request-cancelled-title\", \"درخواست شرکت تو بازی لغو شد\")\n\ttranslation.put(\"participation-request-cancelled-text\", \"درخواست شرکت تو بازی لغو شد، می‌تونید به تماشای بازی ادامه بدید.\")\n\n\ttranslation.put(\"round\", \"دور\")\n\ttranslation.put(\"toggle-soundeffects\", \"روشن/خاموش کردن افکت‌های صدا\")\n\ttranslation.put(\"toggle-pen-pressure\", \"روشن/خاموش کردن فشار قلم\")\n\ttranslation.put(\"change-your-name\", \"لقب\")\n\ttranslation.put(\"randomize\", \"انتخاب تصادفی\")\n\ttranslation.put(\"apply\", \"ثبت\")\n\ttranslation.put(\"save\", \"ذخیره\")\n\ttranslation.put(\"toggle-fullscreen\", \"روشن/خاموش کردن حالت تمام صفحه\")\n\ttranslation.put(\"toggle-spectate\", \"روشن/خاموش کردن حالت تماشاچی\")\n\ttranslation.put(\"show-help\", \"نمایش راهنما\")\n\ttranslation.put(\"votekick-a-player\", \"رای به بیرون انداختن یه بازیکن\")\n\n\ttranslation.put(\"last-turn\", \"(دور آخر: %s)\")\n\n\ttranslation.put(\"drawer-kicked\", \"چون کسی که بیرون انداخته شد نقاش بود، هیچ کدوم از شما این دست امتیازی نمی‌گیرید.\")\n\ttranslation.put(\"self-kicked\", \"شما بیرون انداخته شدید\")\n\ttranslation.put(\"kick-vote\", \"(%s/%s) بازیکن رای به بیرون انداختن %s دادن.\")\n\ttranslation.put(\"player-kicked\", \"بازیکن بیرون انداخته شد.\")\n\ttranslation.put(\"owner-change\", \"%s میزبان جدید لابیه.\")\n\n\ttranslation.put(\"change-lobby-settings-tooltip\", \"تغییر تنظیمات لابی\")\n\ttranslation.put(\"change-lobby-settings-title\", \"تنظیمات لابی\")\n\ttranslation.put(\"lobby-settings-changed\", \"تنظیمات لابی تغییر کرد\")\n\ttranslation.put(\"advanced-settings\", \"تنظیمات پیشرفته\")\n\ttranslation.put(\"chill\", \"دوستانه\")\n\ttranslation.put(\"competitive\", \"رقابتی\")\n\ttranslation.put(\"chill-alt\", \"درسته که سریع بودن جایزه داره، اما حالا یه کم یواش‌ترم باشی خیلی بد نیست.\\nامتیاز پایه نسبتا بالاتره، روی عشق و حال تمرکز کن!\")\n\ttranslation.put(\"competitive-alt\", \"هر چی سریع‌تر باشی، امتیاز بیشتری می‌گیری.\\nامتیاز پایه خیلی پایین‌تره و سقوط سریع‌تره.\")\n\ttranslation.put(\"score-calculation\", \"امتیازدهی\")\n\ttranslation.put(\"word-language\", \"زبان واژه‌ها\")\n\ttranslation.put(\"drawing-time-setting\", \"زمان نقاشی\")\n\ttranslation.put(\"rounds-setting\", \"دورها\")\n\ttranslation.put(\"max-players-setting\", \"بیشترین تعداد بازیکنان\")\n\ttranslation.put(\"public-lobby-setting\", \"لابی همگانی\")\n\ttranslation.put(\"custom-words\", \"واژه‌های سفارشی\")\n\ttranslation.put(\"custom-words-info\", \"واژه‌های اضافی‌تونو وارد کنید،با کاما از هم جداشون کنید\")\n\ttranslation.put(\"custom-words-placeholder\", \"فهرست, واژه‌های, جدا, شده, با, کاما\")\n\ttranslation.put(\"custom-words-per-turn-setting\", \"واژه‌های سفارشی در هر نوبت\")\n\ttranslation.put(\"players-per-ip-limit-setting\", \"حداکثر تعداد بازیکنن با یک IP\")\n\ttranslation.put(\"save-settings\", \"ذخیره تنظیمات\")\n\ttranslation.put(\"input-contains-invalid-data\", \"ورودی شامل داده اشتباهه:\")\n\ttranslation.put(\"please-fix-invalid-input\", \"ورودی اشتباهو درست کنید و دوباره امتحان کنید.\")\n\ttranslation.put(\"create-lobby\", \"ساخت لابی\")\n\ttranslation.put(\"create-public-lobby\", \"ساخت لابی همگانی\")\n\ttranslation.put(\"create-private-lobby\", \"ساخت لابی خصوصی\")\n\ttranslation.put(\"no-lobbies-yet\", \"هنوز لابی همگانی نداریم.\")\n\ttranslation.put(\"lobby-full\", \"ببخشید، ولی لابی پره.\")\n\ttranslation.put(\"lobby-ip-limit-excceeded\", \"ببخشید، ولی شما تعداد دستگاه‌های مجاز با همین IP رو رد کردید.\")\n\ttranslation.put(\"lobby-open-tab-exists\", \"به نظر میاد یه تب باز دیگه برای این لابی دارید.\")\n\ttranslation.put(\"lobby-doesnt-exist\", \"لابی درخواستی وجود نداره\")\n\n\ttranslation.put(\"refresh\", \"تازه کردن\")\n\ttranslation.put(\"join-lobby\", \"ورود به لابی\")\n\n\ttranslation.put(\"message-input-placeholder\", \"حدس‌ها و پیاماتو اینجا تایپ کن\")\n\n\ttranslation.put(\"word-choice-warning\", \"اگه به موقع انتخاب نکنی این واژه انتخاب میشه\")\n\ttranslation.put(\"choose-a-word\", \"یه واژه انتخاب کن\")\n\ttranslation.put(\"waiting-for-word-selection\", \"در انتظار انتخاب واژه\")\n\t// This one doesn't use %s, since we want to make one part bold.\n\ttranslation.put(\"is-choosing-word\", \"داره واژه انتخاب می‌کنه.\")\n\n\ttranslation.put(\"close-guess\", \"'%s' خیلی نزدیکه\")\n\ttranslation.put(\"correct-guess\", \"شما واژه رو درست حدس زدید.\")\n\ttranslation.put(\"correct-guess-other-player\", \"'%s' واژه رو درست حدس زد.\")\n\ttranslation.put(\"round-over\", \"نوبت تموم شد، واژه‌ای انتخاب نشد.\")\n\ttranslation.put(\"round-over-no-word\", \"نوبت تموم شد، واژه '%s' بود.\")\n\ttranslation.put(\"game-over-win\", \"آفرین، تو بردی!\")\n\ttranslation.put(\"game-over-tie\", \"بازی مساوی شد!\")\n\ttranslation.put(\"game-over\", \"رتبه شما %s. با %s امتیاز\")\n\ttranslation.put(\"drawer-disconnected\", \"دست زود‌تر تموم شد، ارتباط نقاش قطع شد.\")\n\ttranslation.put(\"guessers-disconnected\", \"دست زودتر تموم شد، ارتباط بازیکنا قطع شد.\")\n\n\ttranslation.put(\"change-active-color\", \"تغییر رنگ\")\n\ttranslation.put(\"use-pencil\", \"استفاده از قلم\")\n\ttranslation.put(\"use-eraser\", \"استفاده از پاک‌کن\")\n\ttranslation.put(\"use-fill-bucket\", \"استفاده از سطل رنگ (ناحیه هدف رو با رنگ انتخاب شده رنگ می‌کنه)\")\n\ttranslation.put(\"change-pencil-size-to\", \"تغییر اندازه قلم / پاک‌کن به %s\")\n\ttranslation.put(\"clear-canvas\", \"پاک کردن بوم نقاشی\")\n\ttranslation.put(\"undo\", \"برگردوندن آخرین تغییری که دادید (بعد از \\\"\"+translation.Get(\"clear-canvas\")+\"\\\" کار نمی‌کنه)\")\n\n\ttranslation.put(\"connection-lost\", \"ارتباط قطع شد!\")\n\ttranslation.put(\"connection-lost-text\", \"در تلاش برای برقراری ارتباط\"+\n\t\t\" ...\\n\\nمطمئن شید که اینترنتتون وصله.\\nاگر \"+\n\t\t\"مشکل برقرار بود، با ادمین تماس بگیرید\")\n\ttranslation.put(\"error-connecting\", \"خطا در برقراری ارتباط با سرور\")\n\ttranslation.put(\"error-connecting-text\",\n\t\t\"Scribble.rs نتونست ارتباط رو برقرار کنه\\n\\nدر حالی که اینترنتتون \"+\n\t\t\t\"به نظر میاد که کار می‌کنه، یا شاید\\nسرور یا دیواره‌آتشتون  \"+\n\t\t\t\"درست تنظیم نشده.\\n\\nبرای تلاش دوباره، صفحه رو دوباره باز کنید.\")\n\ttranslation.put(\"message-too-long\", \"پیام خیلی طولانیه.\")\n\ttranslation.put(\"server-shutting-down-title\", \"سرور در حال خاموش شدنه\")\n\ttranslation.put(\"server-shutting-down-text\", \"ببخشید، اما سرور در حال خاموش شدنه. لطفا چند لحظه دیگه برگردید.\")\n\n\t// Help dialog\n\ttranslation.put(\"controls\", \"کلیدا\")\n\ttranslation.put(\"pencil\", \"قلم\")\n\ttranslation.put(\"eraser\", \"پاک‌کن\")\n\ttranslation.put(\"fill-bucket\", \"سطل رنگ\")\n\ttranslation.put(\"switch-tools-intro\", \"شما می‌تونید ابزارها رو با استفاده از کلیدای میانبر عوض کنید\")\n\ttranslation.put(\"switch-pencil-sizes\", \"همچنین می‌تونید اندازه قلم رو با کلیدای %s تا %s عوض کنید.\")\n\n\t// Generic words\n\t// \"close\" as in \"closing the window\"\n\ttranslation.put(\"close\", \"بستن\")\n\ttranslation.put(\"no\", \"نه\")\n\ttranslation.put(\"yes\", \"بله\")\n\ttranslation.put(\"system\", \"سامانه\")\n\ttranslation.put(\"confirm\", \"باشه\")\n\ttranslation.put(\"ready\", \"آماده\")\n\ttranslation.put(\"join\", \"ورود\")\n\ttranslation.put(\"ongoing\", \"در حال برگزاری\")\n\ttranslation.put(\"game-over-lobby\", \"بازی تموم شده\")\n\n\ttranslation.put(\"source-code\", \"کد منبع\")\n\ttranslation.put(\"help\", \"راهنمایی\")\n\ttranslation.put(\"submit-feedback\", \"بازخورد\")\n\ttranslation.put(\"stats\", \"وضعیت\")\n\n\ttranslation.put(\"forbidden\", \"ممنوع\")\n\n\tRegisterTranslation(\"fa\", translation)\n\n\treturn translation\n}\n"
  },
  {
    "path": "internal/translations/fr_FR.go",
    "content": "package translations\n\nfunc initFrenchTranslation() *Translation {\n\ttranslation := createTranslation()\n\n\ttranslation.put(\"requires-js\", \"Ce site nécessite JavaScript pour fonctionner correctement.\")\n\n\ttranslation.put(\"start-the-game\", \"Prêt !\")\n\ttranslation.put(\"force-start\", \"Forcer le démarrage\")\n\ttranslation.put(\"force-restart\", \"Forcer le redémarrage\")\n\ttranslation.put(\"game-not-started-title\", \"La partie n'a pas commencé\")\n\ttranslation.put(\"waiting-for-host-to-start\", \"Veuillez attendre que l'hôte du salon démarre la partie.\")\n\ttranslation.put(\"click-to-homepage\", \"Cliquez ici pour revenir à la page d'accueil\")\n\n\ttranslation.put(\"now-spectating-title\", \"Vous êtes maintenant spectateur\")\n\ttranslation.put(\"now-spectating-text\", \"Vous pouvez quitter le mode spectateur en appuyant sur le bouton œil en haut.\")\n\ttranslation.put(\"now-participating-title\", \"Vous participez maintenant\")\n\ttranslation.put(\"now-participating-text\", \"Vous pouvez activer le mode spectateur en appuyant sur le bouton œil en haut.\")\n\n\ttranslation.put(\"spectation-requested-title\", \"Mode spectateur demandé\")\n\ttranslation.put(\"spectation-requested-text\", \"Vous serez spectateur après ce tour.\")\n\ttranslation.put(\"participation-requested-title\", \"Participation demandée\")\n\ttranslation.put(\"participation-requested-text\", \"Vous participerez après ce tour.\")\n\n\ttranslation.put(\"spectation-request-cancelled-title\", \"Demande de mode spectateur annulée\")\n\ttranslation.put(\"spectation-request-cancelled-text\", \"Votre demande de spectateur a été annulée, vous resterez participant.\")\n\ttranslation.put(\"participation-request-cancelled-title\", \"Demande de participation annulée\")\n\ttranslation.put(\"participation-request-cancelled-text\", \"Votre demande de participation a été annulée, vous resterez spectateur.\")\n\n\ttranslation.put(\"round\", \"Manche\")\n\ttranslation.put(\"toggle-soundeffects\", \"Activer/désactiver les effets sonores\")\n\ttranslation.put(\"toggle-pen-pressure\", \"Activer/désactiver la pression du stylet\")\n\ttranslation.put(\"change-your-name\", \"Pseudo\")\n\ttranslation.put(\"randomize\", \"Aléatoire\")\n\ttranslation.put(\"apply\", \"Appliquer\")\n\ttranslation.put(\"save\", \"Enregistrer\")\n\ttranslation.put(\"toggle-fullscreen\", \"Activer/désactiver le plein écran\")\n\ttranslation.put(\"toggle-spectate\", \"Activer/désactiver le mode spectateur\")\n\ttranslation.put(\"show-help\", \"Afficher l'aide\")\n\ttranslation.put(\"votekick-a-player\", \"Voter pour expulser un joueur\")\n\n\ttranslation.put(\"last-turn\", \"(Dernier tour : %s)\")\n\n\ttranslation.put(\"drawer-kicked\", \"Comme le joueur expulsé dessinait, personne ne gagnera de points ce tour.\")\n\ttranslation.put(\"self-kicked\", \"Vous avez été expulsé\")\n\ttranslation.put(\"kick-vote\", \"(%s/%s) joueurs ont voté pour expulser %s.\")\n\ttranslation.put(\"player-kicked\", \"Le joueur a été expulsé.\")\n\ttranslation.put(\"owner-change\", \"%s est le nouveau propriétaire du salon.\")\n\n\ttranslation.put(\"change-lobby-settings-tooltip\", \"Modifier les paramètres du salon\")\n\ttranslation.put(\"change-lobby-settings-title\", \"Paramètres du salon\")\n\ttranslation.put(\"lobby-settings-changed\", \"Paramètres du salon modifiés\")\n\ttranslation.put(\"advanced-settings\", \"Paramètres avancés\")\n\ttranslation.put(\"chill\", \"Détente\")\n\ttranslation.put(\"competitive\", \"Compétitif\")\n\ttranslation.put(\"chill-alt\", \"La rapidité est récompensée, mais ce n'est pas grave si vous êtes un peu plus lent.\\nLe score de base est assez élevé, l'essentiel est de s'amuser !\")\n\ttranslation.put(\"competitive-alt\", \"Plus vous êtes rapide, plus vous gagnerez de points.\\nLe score de base est bien plus bas et la baisse est plus rapide.\")\n\ttranslation.put(\"score-calculation\", \"Score\")\n\ttranslation.put(\"word-language\", \"Langue\")\n\ttranslation.put(\"drawing-time-setting\", \"Temps de dessin\")\n\ttranslation.put(\"rounds-setting\", \"Manches\")\n\ttranslation.put(\"max-players-setting\", \"Joueurs maximum\")\n\ttranslation.put(\"public-lobby-setting\", \"Salon public\")\n\ttranslation.put(\"custom-words\", \"Mots personnalisés\")\n\ttranslation.put(\"custom-words-info\", \"Saisissez vos mots supplémentaires en les séparant par des virgules\")\n\ttranslation.put(\"custom-words-placeholder\", \"Liste, de, mots, séparés, par, des, virgules\")\n\ttranslation.put(\"custom-words-per-turn-setting\", \"Mots personnalisés par tour\")\n\ttranslation.put(\"players-per-ip-limit-setting\", \"Limite de joueurs par IP\")\n\ttranslation.put(\"words-per-turn-setting\", \"Mots par tour\")\n\ttranslation.put(\"save-settings\", \"Enregistrer les paramètres\")\n\ttranslation.put(\"input-contains-invalid-data\", \"Votre saisie contient des données invalides :\")\n\ttranslation.put(\"please-fix-invalid-input\", \"Corrigez la saisie invalide et réessayez.\")\n\ttranslation.put(\"create-lobby\", \"Créer un salon\")\n\ttranslation.put(\"create-public-lobby\", \"Créer un salon public\")\n\ttranslation.put(\"create-private-lobby\", \"Créer un salon privé\")\n\ttranslation.put(\"no-lobbies-yet\", \"Il n'y a encore aucun salon.\")\n\ttranslation.put(\"lobby-full\", \"Désolé, le salon est complet.\")\n\ttranslation.put(\"lobby-ip-limit-excceeded\", \"Désolé, vous avez dépassé le nombre maximal de clients par IP.\")\n\ttranslation.put(\"lobby-open-tab-exists\", \"Il semble qu'un onglet pour ce salon soit déjà ouvert.\")\n\ttranslation.put(\"lobby-doesnt-exist\", \"Le salon demandé n'existe pas\")\n\n\ttranslation.put(\"refresh\", \"Actualiser\")\n\ttranslation.put(\"join-lobby\", \"Rejoindre le salon\")\n\n\ttranslation.put(\"message-input-placeholder\", \"Tapez ici vos propositions et messages\")\n\n\ttranslation.put(\"word-choice-warning\", \"Mot choisi si vous ne décidez pas à temps\")\n\ttranslation.put(\"choose-a-word\", \"Choisissez un mot\")\n\ttranslation.put(\"waiting-for-word-selection\", \"En attente du choix du mot\")\n\t// This one doesn't use %s, since we want to make one part bold.\n\ttranslation.put(\"is-choosing-word\", \"choisit un mot.\")\n\n\ttranslation.put(\"close-guess\", \"'%s' est très proche.\")\n\ttranslation.put(\"correct-guess\", \"Vous avez correctement deviné le mot.\")\n\ttranslation.put(\"correct-guess-other-player\", \"'%s' a correctement deviné le mot.\")\n\ttranslation.put(\"round-over\", \"Tour terminé, aucun mot n'a été choisi.\")\n\ttranslation.put(\"round-over-no-word\", \"Tour terminé, le mot était '%s'.\")\n\ttranslation.put(\"game-over-win\", \"Félicitations, vous avez gagné !\")\n\ttranslation.put(\"game-over-tie\", \"Égalité !\")\n\ttranslation.put(\"game-over\", \"Vous avez terminé %s. avec %s points\")\n\ttranslation.put(\"drawer-disconnected\", \"Tour terminé prématurément, le dessinateur s'est déconnecté.\")\n\ttranslation.put(\"guessers-disconnected\", \"Tour terminé prématurément, les devineurs se sont déconnectés.\")\n\ttranslation.put(\"word-hint-revealed\", \"Un indice du mot a été révélé !\")\n\n\ttranslation.put(\"change-active-color\", \"Changer votre couleur active\")\n\ttranslation.put(\"use-pencil\", \"Utiliser le crayon\")\n\ttranslation.put(\"use-eraser\", \"Utiliser la gomme\")\n\ttranslation.put(\"use-fill-bucket\", \"Utiliser le pot de peinture (Remplit la zone ciblée avec la couleur sélectionnée)\")\n\ttranslation.put(\"change-pencil-size-to\", \"Changer la taille du crayon / de la gomme à %s\")\n\ttranslation.put(\"clear-canvas\", \"Effacer le canevas\")\n\ttranslation.put(\"undo\", \"Annuler la dernière modification effectuée (Ne fonctionne pas après \\\"\"+translation.Get(\"clear-canvas\")+\"\\\")\")\n\n\ttranslation.put(\"connection-lost\", \"Connexion perdue !\")\n\ttranslation.put(\"connection-lost-text\", \"Tentative de reconnexion\"+\n\t\t\" ...\\n\\nAssurez-vous que votre connexion internet fonctionne.\\nSi le \"+\n\t\t\"problème persiste, contactez le webmaster.\")\n\ttranslation.put(\"error-connecting\", \"Erreur de connexion au serveur\")\n\ttranslation.put(\"error-connecting-text\",\n\t\t\"Scribble.rs n'a pas pu établir une connexion socket.\\n\\nBien que votre connexion internet \"+\n\t\t\t\"semble fonctionner, soit le\\nserveur, soit votre pare-feu n'a pas \"+\n\t\t\t\"été configuré correctement.\\n\\nPour réessayer, rechargez la page.\")\n\ttranslation.put(\"message-too-long\", \"Votre message est trop long.\")\n\ttranslation.put(\"server-shutting-down-title\", \"Arrêt du serveur\")\n\ttranslation.put(\"server-shutting-down-text\", \"Désolé, le serveur va s'arrêter. Merci de revenir plus tard.\")\n\n\t// Help dialog\n\ttranslation.put(\"controls\", \"Contrôles\")\n\ttranslation.put(\"pencil\", \"Crayon\")\n\ttranslation.put(\"eraser\", \"Gomme\")\n\ttranslation.put(\"fill-bucket\", \"Pot de peinture\")\n\ttranslation.put(\"switch-tools-intro\", \"Vous pouvez changer d'outil à l'aide des raccourcis\")\n\ttranslation.put(\"switch-pencil-sizes\", \"Vous pouvez aussi changer la taille du crayon avec les touches %s à %s.\")\n\n\t// Generic words\n\t// \"close\" as in \"closing the window\"\n\ttranslation.put(\"close\", \"Fermer\")\n\ttranslation.put(\"no\", \"Non\")\n\ttranslation.put(\"yes\", \"Oui\")\n\ttranslation.put(\"system\", \"Système\")\n\ttranslation.put(\"confirm\", \"OK\")\n\ttranslation.put(\"ready\", \"Prêt\")\n\ttranslation.put(\"join\", \"Rejoindre\")\n\ttranslation.put(\"ongoing\", \"En cours\")\n\ttranslation.put(\"game-over-lobby\", \"Partie terminée\")\n\n\ttranslation.put(\"source-code\", \"Code source\")\n\ttranslation.put(\"help\", \"Aide\")\n\ttranslation.put(\"submit-feedback\", \"Retour\")\n\ttranslation.put(\"stats\", \"Statut\")\n\n\ttranslation.put(\"forbidden\", \"Interdit\")\n\n\tRegisterTranslation(\"fr\", translation)\n\n\treturn translation\n}\n"
  },
  {
    "path": "internal/translations/he.go",
    "content": "package translations\n\nfunc initHebrewTranslation() {\n\ttranslation := createTranslation()\n\ttranslation.IsRtl = true\n\n\ttranslation.put(\"requires-js\", \"אתר זה דורש JavaScript על מנת לעבוד בצורה תקינה\")\n\n\ttranslation.put(\"start-the-game\", \"התכונן!\")\n\ttranslation.put(\"force-start\", \"התחל בלי לחכות לכל השחקנים\")\n\ttranslation.put(\"force-restart\", \"התחל מחדש\")\n\ttranslation.put(\"game-not-started-title\", \"המשחק לא התחיל עדיין\")\n\ttranslation.put(\"waiting-for-host-to-start\", \"המתן להתחלת המשחק על-ידי המארח\")\n\ttranslation.put(\"click-to-homepage\", \"חזור לדף הבית\")\n\n\ttranslation.put(\"now-spectating-title\", \"הינך במצב צפייה\")\n\ttranslation.put(\"now-spectating-text\", \"ניתן לעזוב את מצב הצפייה על-ידי לחיצה על כפתור העין למעלה\")\n\ttranslation.put(\"now-participating-title\", \"הינך משתתף במשחק\")\n\ttranslation.put(\"now-participating-text\", \"ניתן לעבור למצב צפייה על-ידי לחיצה על כפתור העין למעלה\")\n\n\ttranslation.put(\"spectation-requested-title\", \"ביקשת לעבור למצב צפייה\")\n\ttranslation.put(\"spectation-requested-text\", \"תעבור למצב צפייה לאחר תור זה\")\n\ttranslation.put(\"participation-requested-title\", \"ביקשת להשתתף במשחק\")\n\ttranslation.put(\"participation-requested-text\", \"תצורף למשחק לאחר תור זה\")\n\n\ttranslation.put(\"spectation-request-cancelled-title\", \"בקשת מצב צפייה בוטלה\")\n\ttranslation.put(\"spectation-request-cancelled-text\", \"בקשתך לעבור למצב צפייה בוטלה, תמשיך להיות משתתף במשחק\")\n\ttranslation.put(\"participation-request-cancelled-title\", \"בקשת השתתפות במשחק בוטלה\")\n\ttranslation.put(\"participation-request-cancelled-text\", \"בקשתך להשתתף במשחק בוטלה, תמשיך להיות צופה במשחק\")\n\n\ttranslation.put(\"round\", \"סיבוב\")\n\ttranslation.put(\"toggle-soundeffects\", \"הפעלת/כיבוי סאונד\")\n\ttranslation.put(\"toggle-pen-pressure\", \"הפעלת/כיבוי שליטה בלחץ העט\")\n\ttranslation.put(\"change-your-name\", \"כינוי\")\n\ttranslation.put(\"randomize\", \"אקראי\")\n\ttranslation.put(\"apply\", \"החל\")\n\ttranslation.put(\"save\", \"שמור\")\n\ttranslation.put(\"toggle-fullscreen\", \"מסך מלא\")\n\ttranslation.put(\"toggle-spectate\", \"הפעלת/כיבוי מצב צפייה\")\n\ttranslation.put(\"show-help\", \"הצג עזרה\")\n\ttranslation.put(\"votekick-a-player\", \"הצבע להרחקת שחקן\")\n\n\ttranslation.put(\"last-turn\", \"(תור אחרון: %s)\")\n\n\ttranslation.put(\"drawer-kicked\", \"השחקן שהורחק צייר, לכן אף שחקן לא ייקבל ניקוד בסיבוב זה\")\n\ttranslation.put(\"self-kicked\", \"הורחקת מהמשחק\")\n\ttranslation.put(\"kick-vote\", \"שחקנים הצביעו להרחיק את %s (%s/%s)\")\n\ttranslation.put(\"player-kicked\", \"שחקן הורחק מהמשחק\")\n\ttranslation.put(\"owner-change\", \"הוא המנהל החדש של הלובי %s\")\n\n\ttranslation.put(\"change-lobby-settings-tooltip\", \"שינוי הגדרות לובי\")\n\ttranslation.put(\"change-lobby-settings-title\", \"הגדרות לובי\")\n\ttranslation.put(\"lobby-settings-changed\", \"הגדרות לובי שונו\")\n\ttranslation.put(\"advanced-settings\", \"הגדרות מתקדמות\")\n\ttranslation.put(\"chill\", \"רגוע\")\n\ttranslation.put(\"competitive\", \"תחרותי\")\n\ttranslation.put(\"chill-alt\", \"למרות שמהירות מתוגמלת בניקוד גבוה יותר, זה לא נורא אם אתם קצת יותר איטיים.\\nהציון הבסיסי גבוה יחסית, אז התמקדו בליהנות!\")\n\ttranslation.put(\"competitive-alt\", \"ככל שתהיו מהירים יותר, כך תקבלו יותר נקודות.\\nהציון הבסיסי נמוך\")\n\ttranslation.put(\"score-calculation\", \"שיטת ניקוד\")\n\ttranslation.put(\"word-language\", \"שפה\")\n\ttranslation.put(\"drawing-time-setting\", \"זמן ציור\")\n\ttranslation.put(\"rounds-setting\", \"סיבובים\")\n\ttranslation.put(\"max-players-setting\", \"מספר שחקנים מקסימלי\")\n\ttranslation.put(\"public-lobby-setting\", \"לובי ציבורי\")\n\ttranslation.put(\"custom-words\", \"מילים נוספות\")\n\ttranslation.put(\"custom-words-info\", \"מילים נוספות מופרדות בפסיק\")\n\ttranslation.put(\"custom-words-placeholder\", \"מילים, מופרדות, בפסיק, כאן\")\n\ttranslation.put(\"custom-words-per-turn-setting\", \"מילים נוספות בכל תור\")\n\ttranslation.put(\"players-per-ip-limit-setting\", \"הגבלת שחקנים לכתובת IP\")\n\ttranslation.put(\"words-per-turn-setting\", \"מילים בכל תור\")\n\ttranslation.put(\"save-settings\", \"שמור הגדרות\")\n\ttranslation.put(\"input-contains-invalid-data\", \"הזנת תוכן לא חוקי\")\n\ttranslation.put(\"please-fix-invalid-input\", \"תקן את התוכן ונסה שנית\")\n\ttranslation.put(\"create-lobby\", \"יצירת לובי\")\n\ttranslation.put(\"create-public-lobby\", \"לובי ציבורי\")\n\ttranslation.put(\"create-private-lobby\", \"לובי פרטי\")\n\ttranslation.put(\"no-lobbies-yet\", \"אין לובים\")\n\ttranslation.put(\"lobby-full\", \"הלובי מלא\")\n\ttranslation.put(\"lobby-ip-limit-excceeded\", \"עברת את מקבלת החיבורים עבור כתובת IP\")\n\ttranslation.put(\"lobby-open-tab-exists\", \"נראה שכבר פתחת את לובי זה בלשונית אחרת\")\n\ttranslation.put(\"lobby-doesnt-exist\", \"הלובי המבוקש אינו קיים\")\n\n\ttranslation.put(\"refresh\", \"רענון\")\n\ttranslation.put(\"join-lobby\", \"הצטרף ללובי\")\n\n\ttranslation.put(\"message-input-placeholder\", \"כתוב כאן את הניחוש שלך\")\n\n\ttranslation.put(\"word-choice-warning\", \"המילה אם לא תבחר בזמן\")\n\ttranslation.put(\"choose-a-word\", \"בחר מילה\")\n\ttranslation.put(\"waiting-for-word-selection\", \"המתן לבחירת מילה\")\n\t// This one doesn't use %s, since we want to make one part bold.\n\ttranslation.put(\"is-choosing-word\", \"בוחר מילה\")\n\n\ttranslation.put(\"close-guess\", \"הניחוש '%s' קרוב לתשובה!\")\n\ttranslation.put(\"correct-guess\", \"ניחשת נכון\")\n\ttranslation.put(\"correct-guess-other-player\", \"'%s' ניחש נכון\")\n\ttranslation.put(\"round-over\", \"התור נגמר, לא נבחרה מילה\")\n\ttranslation.put(\"round-over-no-word\", \"התור נגמר. המילה הייתה '%s'\")\n\ttranslation.put(\"game-over-win\", \"כל הכבוד, ניצחת!\")\n\ttranslation.put(\"game-over-tie\", \"תיקו!\")\n\ttranslation.put(\"game-over\", \"סיימת במקום ה %s עם %s נקודות\")\n\ttranslation.put(\"drawer-disconnected\", \"התור הסתיים, השחקן שצייר התנתק\")\n\ttranslation.put(\"guessers-disconnected\", \"התור הסתיים, כל השחקנים המנחשים התנתקו\")\n\ttranslation.put(\"word-hint-revealed\", \"נחשף רמז\")\n\n\ttranslation.put(\"change-active-color\", \"שינוי צבע\")\n\ttranslation.put(\"use-pencil\", \"עיפרון\")\n\ttranslation.put(\"use-eraser\", \"מחק\")\n\ttranslation.put(\"use-fill-bucket\", \"דלי\")\n\ttranslation.put(\"change-pencil-size-to\", \"שינוי גודל העיפרון/מחק ל %s\")\n\ttranslation.put(\"clear-canvas\", \"ניקוי קאנבס\")\n\ttranslation.put(\"undo\", \"ביטול שינוי אחרון (לא ניתן לבטל \\\"\"+translation.Get(\"clear-canvas\")+\"\\\")\")\n\n\ttranslation.put(\"connection-lost\", \"החיבור עם השרת התנתק\")\n\ttranslation.put(\"connection-lost-text\", \"מנסה להתחבר מחדש\"+\n\t\t\" ...\\n\\nוודא שהחיבור לאינטרנט תקין\")\n\ttranslation.put(\"error-connecting\", \"שגיאה בהתחברות לשרת\")\n\ttranslation.put(\"error-connecting-text\",\n\t\t\"Scribble.rs לא הצליח ליצור חיבור Socket.\\n\\nלמרות שנראה שחיבור האינטרנט שלך עובד, או שה\\nהשרת או חומת האש שלך לא הוגדרו כראוי.\\n\\nכדי לנסות שוב, טען מחדש את הדף.\")\n\n\ttranslation.put(\"message-too-long\", \"ההודעה ארוכה מידי\")\n\ttranslation.put(\"server-shutting-down-title\", \"השרת בתהליך כיבוי\")\n\ttranslation.put(\"server-shutting-down-text\", \"מתנצלים אך השרת בתהליך כיבוי. נסו שוב מאוחר יותר\")\n\n\t// Help dialog\n\ttranslation.put(\"controls\", \"כלים\")\n\ttranslation.put(\"pencil\", \"עיפרון\")\n\ttranslation.put(\"eraser\", \"מחק\")\n\ttranslation.put(\"fill-bucket\", \"דלי\")\n\ttranslation.put(\"switch-tools-intro\", \"ניתן להחליך בין הכלים השונים על-ידי שימוש בקיצורים\")\n\ttranslation.put(\"switch-pencil-sizes\", \"ניתן לעבור בין גדלי העיפרון/מחק השונים על-ידי שימוש בכפתורים %s עד %s\")\n\n\t// Generic words\n\t// \"close\" as in \"closing the window\"\n\ttranslation.put(\"close\", \"סגור\")\n\ttranslation.put(\"no\", \"לא\")\n\ttranslation.put(\"yes\", \"כן\")\n\ttranslation.put(\"system\", \"מערכת\")\n\ttranslation.put(\"confirm\", \"אישור\")\n\ttranslation.put(\"ready\", \"מוכן\")\n\ttranslation.put(\"join\", \"הצטרף\")\n\ttranslation.put(\"ongoing\", \"פעיל\")\n\ttranslation.put(\"game-over-lobby\", \"נגמר\")\n\n\ttranslation.put(\"source-code\", \"קוד מקור\")\n\ttranslation.put(\"help\", \"עזרה\")\n\ttranslation.put(\"submit-feedback\", \"משוב\")\n\ttranslation.put(\"stats\", \"סטטוס\")\n\n\ttranslation.put(\"forbidden\", \"לא ניתן להציג דף זה\")\n\n\tRegisterTranslation(\"he\", translation)\n}\n"
  },
  {
    "path": "internal/translations/pl.go",
    "content": "package translations\n\nfunc initPolishTranslation() {\n\ttranslation := createTranslation()\n\n\ttranslation.put(\"requires-js\", \"Ta strona wymaga włączonej obsługi JavaScript aby działć poprawnie.\")\n\n\ttranslation.put(\"start-the-game\", \"Gotowi!\")\n\ttranslation.put(\"force-start\", \"Wymuś Start\")\n\ttranslation.put(\"force-restart\", \"Wymuś Restart\")\n\ttranslation.put(\"game-not-started-title\", \"Gra się nie zaczęła\")\n\ttranslation.put(\"waiting-for-host-to-start\", \"Poczekaj aż gospodarz rozpocznie grę.\")\n\n\ttranslation.put(\"now-spectating-title\", \"Jesteś teraz widzem\")\n\ttranslation.put(\"now-spectating-text\", \"Możesz wyjść z trybu widza naciskając przycisk oka u góry ekranu.\")\n\ttranslation.put(\"now-participating-title\", \"Jesteś teraz uczestnikiem\")\n\ttranslation.put(\"now-participating-text\", \"Możesz wejść w tryb widza naciskając przycisk oka u góry ekranu.\")\n\n\ttranslation.put(\"spectation-requested-title\", \"Zażądany tryb widza\")\n\ttranslation.put(\"spectation-requested-text\", \"Staniesz się widzem po tej turze.\")\n\ttranslation.put(\"participation-requested-title\", \"Zażądano uczestnictwa\")\n\ttranslation.put(\"participation-requested-text\", \"Staniesz się uczestnikiem po tej turze.\")\n\n\ttranslation.put(\"spectation-request-cancelled-title\", \"Anulowano żądanie trybu widza\")\n\ttranslation.put(\"spectation-request-cancelled-text\", \"Anulowano twoje żądanie trybu widza, będziesz dalej uczestnikiem.\")\n\ttranslation.put(\"participation-request-cancelled-title\", \"Anulowano żądanie uczestnictwa\")\n\ttranslation.put(\"participation-request-cancelled-text\", \"Anulowano twoje żądanie uczestnictwa, będziesz dalej widzem.\")\n\n\ttranslation.put(\"round\", \"Runda\")\n\ttranslation.put(\"toggle-soundeffects\", \"Przełącz dźwięki\")\n\ttranslation.put(\"change-your-name\", \"Ksywka\")\n\ttranslation.put(\"randomize\", \"Losowo\")\n\ttranslation.put(\"apply\", \"Zastosuj\")\n\ttranslation.put(\"save\", \"Zapisz\")\n\ttranslation.put(\"toggle-fullscreen\", \"Przełącz pełny ekran\")\n\ttranslation.put(\"toggle-spectate\", \"Przełącz tryb widza\")\n\ttranslation.put(\"show-help\", \"Pokaż pomoc\")\n\ttranslation.put(\"votekick-a-player\", \"Głosuj za wykopaniem gracza\")\n\n\ttranslation.put(\"last-turn\", \"(Ostatnia tura: %s)\")\n\n\ttranslation.put(\"drawer-kicked\", \"Ponieważ wykopany gracz rysował, nikt z was nie dostanie punktów w tej rundzie.\")\n\ttranslation.put(\"self-kicked\", \"Zostałeś wykopany\")\n\ttranslation.put(\"kick-vote\", \"(%s/%s) gracze zagłosowali za wykopaniem %s.\")\n\ttranslation.put(\"player-kicked\", \"Gracz został wykopany.\")\n\ttranslation.put(\"owner-change\", \"%s jest nowym gospodarzem.\")\n\n\ttranslation.put(\"change-lobby-settings-tooltip\", \"Zmień ustawienia lobby\")\n\ttranslation.put(\"change-lobby-settings-title\", \"Ustawienia lobby\")\n\ttranslation.put(\"lobby-settings-changed\", \"Ustawienia lobby zostały zmienione\")\n\ttranslation.put(\"advanced-settings\", \"Ustawienia zaawansowane\")\n\ttranslation.put(\"word-language\", \"Język\")\n\ttranslation.put(\"drawing-time-setting\", \"Czas rysowania\")\n\ttranslation.put(\"rounds-setting\", \"Rundy\")\n\ttranslation.put(\"max-players-setting\", \"Maksymalna ilośc graczy\")\n\ttranslation.put(\"public-lobby-setting\", \"Publiczne Lobby\")\n\ttranslation.put(\"custom-words\", \"Własne słowa\")\n\ttranslation.put(\"custom-words-info\", \"Wporowadź swoje dodatkowe słowa, rozdzielone przecinkami.\")\n\ttranslation.put(\"custom-words-per-turn-setting\", \"Własne słowa na turę\")\n\ttranslation.put(\"players-per-ip-limit-setting\", \"Limit graczy na adres IP\")\n\ttranslation.put(\"save-settings\", \"Zapisz ustawienia\")\n\ttranslation.put(\"input-contains-invalid-data\", \"Twoje wprowadzone dane są nieprawidłowe:\")\n\ttranslation.put(\"please-fix-invalid-input\", \"Popraw błędy i sprobuj ponownie.\")\n\ttranslation.put(\"create-lobby\", \"Stwórz Lobby\")\n\ttranslation.put(\"create-public-lobby\", \"Stwórz Publiczne Lobby\")\n\ttranslation.put(\"create-private-lobby\", \"Stwórz Prywatne Lobby\")\n\n\ttranslation.put(\"refresh\", \"Odśwież\")\n\ttranslation.put(\"join-lobby\", \"Wejdź do Lobby\")\n\n\ttranslation.put(\"message-input-placeholder\", \"Tutaj wpisz swoje odpowiedzi i wiadomości\")\n\n\ttranslation.put(\"choose-a-word\", \"Wybierz słowo\")\n\ttranslation.put(\"waiting-for-word-selection\", \"Czekamy na wybranie słowa\")\n\t// This one doesn't use %s, since we want to make one part bold.\n\ttranslation.put(\"is-choosing-word\", \"wybiera słowo.\")\n\n\ttranslation.put(\"close-guess\", \"'%s' jest bardzo blisko.\")\n\ttranslation.put(\"correct-guess\", \"Poprawnie zgadłeś(-aś) słowo.\")\n\ttranslation.put(\"correct-guess-other-player\", \"'%s' poprawnie zgadł(a) słowo.\")\n\ttranslation.put(\"round-over\", \"Koniec tury, nie wybrano żadnego słowa.\")\n\ttranslation.put(\"round-over-no-word\", \"Koniec tury, słowo to '%s'.\")\n\ttranslation.put(\"game-over-win\", \"Gratulacje, wygrałeś(-aś)!\")\n\ttranslation.put(\"game-over-tie\", \"Remis!\")\n\ttranslation.put(\"game-over\", \"Zająłeś %s. miejsce z %s punktami\")\n\n\ttranslation.put(\"change-active-color\", \"Zmień swój aktywny kolor\")\n\ttranslation.put(\"use-pencil\", \"Użyj ołówka\")\n\ttranslation.put(\"use-eraser\", \"Użyj gumki\")\n\ttranslation.put(\"use-fill-bucket\", \"Użyj wiadra (wypełnia obszar zaznaczonym kolorem)\")\n\ttranslation.put(\"change-pencil-size-to\", \"Zmień rozmiar ołówka / gumki na %s\")\n\ttranslation.put(\"clear-canvas\", \"Wyczyść kanwę\")\n\ttranslation.put(\"undo\", \"Cofnij ostatnią zmianę (Nie działa po \\\"\"+translation.Get(\"clear-canvas\")+\"\\\")\")\n\n\ttranslation.put(\"connection-lost\", \"Utracono połączenie!\")\n\ttranslation.put(\"connection-lost-text\", \"Próbuję pnownie połączyć\"+\n\t\t\" ...\\n\\nUpewnij się, że twoje połączenie internetowe działa.\\nJeśli \"+\n\t\t\"problem się utrzymuje, skontaktuj się z administratorem.\")\n\ttranslation.put(\"error-connecting\", \"Błąd połączenia z serwerem\")\n\ttranslation.put(\"error-connecting-text\",\n\t\t\"Scribble.rs nie może połączyć się z socketem.\\n\\nTwoje połączenie z internetem \"+\n\t\t\t\"wydaje się działać, ale \\nserver lub twoja zapora sieciowa nie \"+\n\t\t\t\"zostały poprawnie skonfigurowane.\\n\\nOdśwież stronę aby spróbować ponownie.\")\n\n\ttranslation.put(\"message-too-long\", \"Twoja wiadomość jest za długa.\")\n\n\t// Help dialog\n\ttranslation.put(\"controls\", \"Sterowanie\")\n\ttranslation.put(\"pencil\", \"Ołówek\")\n\ttranslation.put(\"eraser\", \"Gumka\")\n\ttranslation.put(\"fill-bucket\", \"Wiadro\")\n\ttranslation.put(\"switch-tools-intro\", \"Możesz przełączać się pomiędzy narzędziami za pomocą skrótów\")\n\ttranslation.put(\"switch-pencil-sizes\", \"Możesz też zmieniać rozmiary ołówka używają klawiszy %s do %s.\")\n\n\t// Generic words\n\t// \"close\" as in \"closing the window\"\n\ttranslation.put(\"close\", \"Zamknij\")\n\ttranslation.put(\"no\", \"Nie\")\n\ttranslation.put(\"yes\", \"Tak\")\n\ttranslation.put(\"system\", \"System\")\n\n\ttranslation.put(\"source-code\", \"Kod Żródłowy\")\n\ttranslation.put(\"help\", \"Pomoc\")\n\ttranslation.put(\"submit-feedback\", \"Opinia\")\n\ttranslation.put(\"stats\", \"Stan\")\n\n\tRegisterTranslation(\"pl\", translation)\n}\n"
  },
  {
    "path": "internal/translations/translations.go",
    "content": "package translations\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"golang.org/x/text/language\"\n)\n\n// init initializes all localization packs. Each new package has to be added\n// to this function.\nfunc init() {\n\t// We are making sure to add english first, since it's the default.\n\tDefaultTranslation = initEnglishTranslation()\n\tinitGermanTranslation()\n\tinitPolishTranslation()\n\tinitSpainTranslation()\n\tinitArabicTranslation()\n\tinitHebrewTranslation()\n\tinitPersianTranslation()\n\tinitFrenchTranslation()\n}\n\nvar translationRegistry = make(map[string]*Translation)\n\n// DefaultTranslation is the fallback translation for cases where the users\n// preferred language can't be found. This value is never returned by Get, but\n// has to be retrieved manually if desired. Currently, this is en-US.\nvar DefaultTranslation *Translation\n\n// Translation represents key - value pairs of translated user interface\n// strings.\ntype Translation struct {\n\tDictionary map[string]string\n\tIsRtl      bool\n}\n\n// Get retrieves a translated string or the default string if none could\n// be found.\nfunc (translation Translation) Get(key string) string {\n\tvalue, avail := translation.Dictionary[key]\n\tif avail {\n\t\treturn value\n\t}\n\n\tfallbackValue, fallbackAvail := DefaultTranslation.Dictionary[key]\n\tif fallbackAvail {\n\t\treturn fallbackValue\n\t}\n\n\tpanic(fmt.Sprintf(\"no translation value available for key '%s'\", key))\n}\n\n// put adds a new key to the translation. If the key already exists, the\n// server panics. This happens on startup, therefore it's safe.\nfunc (translation Translation) put(key, value string) {\n\t_, avail := translation.Dictionary[key]\n\tif avail {\n\t\tpanic(fmt.Sprintf(\"Duplicate key '%s'\", key))\n\t}\n\n\tif len(strings.TrimSpace(key)) != len(key) {\n\t\tpanic(fmt.Sprintf(\"Language key '%s' contains leading or trailing whitespace\", key))\n\t}\n\n\tif len(strings.TrimSpace(value)) != len(value) {\n\t\tpanic(fmt.Sprintf(\"Language key '%s' value contains leading or trailing whitespace\", value))\n\t}\n\n\ttranslation.Dictionary[key] = value\n}\n\n// GetLanguage retrieves a translation pack or nil if the desired package\n// couldn't be found.\nfunc GetLanguage(locale string) *Translation {\n\treturn translationRegistry[locale]\n}\n\n// RegisterTranslation makes adds a language to the registry and makes\n// it available via Get. If the language is already registered, the server\n// panics. This happens on startup, therefore it's safe.\nfunc RegisterTranslation(locale string, translation *Translation) {\n\t// Make sure the locale is valid.\n\tlanguage.MustParse(locale)\n\n\tlocaleLowercased := strings.ToLower(locale)\n\n\t_, avail := translationRegistry[localeLowercased]\n\tif avail {\n\t\tpanic(fmt.Sprintf(\"Language '%s' has been registered multiple times\", locale))\n\t}\n\n\tif DefaultTranslation != nil {\n\t\tfor key := range translation.Dictionary {\n\t\t\t_, fallbackValueAvail := DefaultTranslation.Dictionary[key]\n\t\t\tif !fallbackValueAvail {\n\t\t\t\tpanic(fmt.Sprintf(\"Language key '%s' in language '%s' has no default translation value in 'en_US'\", key, locale))\n\t\t\t}\n\t\t}\n\t}\n\n\ttranslationRegistry[localeLowercased] = translation\n}\n\nfunc createTranslation() *Translation {\n\treturn &Translation{\n\t\tDictionary: make(map[string]string),\n\t}\n}\n"
  },
  {
    "path": "internal/translations/translations_test.go",
    "content": "package translations\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc Test_noObsoleteKeys(t *testing.T) {\n\tfor language, translationMap := range translationRegistry {\n\t\tt.Run(fmt.Sprintf(\"obsolete_keys_check_%s\", language), func(t *testing.T) {\n\t\t\tfor key := range translationMap.Dictionary {\n\t\t\t\t_, englishContainsKey := DefaultTranslation.Dictionary[key]\n\t\t\t\tassert.True(t, englishContainsKey, \"key %s is obsolete\", key)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "internal/version/version.go",
    "content": "// version holds the git that this version was built from. In development\n// scearios, it will default to \"dev\".\npackage version\n\nimport (\n\t\"regexp\"\n)\n\n// Version of the application.\nvar (\n\tVersion = \"dev\"\n\tCommit  = \"\"\n)\n\nfunc init() {\n\t// We expect to get a \"dirt git tag\" when deploying a test version that\n\t// we did not yet finalize. We'll take it apart to allow the frontend\n\t// to put the correct link to the repository.\n\n\tif Version != \"dev\" {\n\t\t// version-commit_count_after_version-hash\n\t\thashRegex := regexp.MustCompile(`v.+?(?:-\\d+?-g(.+?)(?:$|-))`)\n\t\tmatch := hashRegex.FindStringSubmatch(Version)\n\t\tif len(match) == 2 {\n\t\t\tCommit = match[1]\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "linux.Dockerfile",
    "content": "#\n# Builder for Golang\n#\n# We explicitly use a certain major version of go, to make sure we don't build\n# with a newer verison than we are using for CI tests, as we don't directly\n# test the produced binary but from source code directly.\nFROM docker.io/golang:1.25.5 AS builder\n\nWORKDIR /app\n\n# This causes caching of the downloaded go modules and makes repeated local\n# builds much faster. We must not copy the code first though, as a change in\n# the code causes a redownload.\nCOPY go.mod go.sum ./\nRUN go mod download -x\n\n# Import that this comes after mod download, as it breaks caching.\nARG VERSION=\"dev\"\n\n# Copy actual codebase, since we only have the go.mod and go.sum so far.\nCOPY . /app/\nENV CGO_ENABLED=0\nRUN go build -trimpath -ldflags \"-w -s -X 'github.com/scribble-rs/scribble.rs/internal/version.Version=${VERSION}'\" -tags timetzdata -o ./scribblers ./cmd/scribblers\n\n#\n# Runner\n#\nFROM scratch\n\nCOPY --from=builder /app/scribblers /scribblers\n# The scratch image doesn't contain any certificates, therefore we use\n# the builders certificate, so that we can send HTTP requests.\nCOPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/\n\nENTRYPOINT [\"/scribblers\"]\n# Random uid to avoid having root privileges. Linux doesn't care that there's no user for it.\nUSER 248:248\n"
  },
  {
    "path": "tools/compare_en_words.sh",
    "content": "#!/usr/bin/env bash\n\nUS_DICT=\"../game/words/en_us\"\n\n# For example on install british dict\n# apt-get install wbritish-large\n\nSYSTEM_GB_DICT='/usr/share/dict/british-english-large'\nOUTPUT_GB_DICT=\"../game/words/en_gb\"\nFIXLIST=\"./fixlist\"\n\nrm -f ${FIXLIST} ${OUTPUT_GB_DICT}\n\nwhile IFS= read -r line\ndo \n  grep -x ${line} ${SYSTEM_GB_DICT} # Check it exists in GB list\n  if [[ $? == 0 ]];\n    then\n      echo ${line} >> ${OUTPUT_GB_DICT} # Write to en_gb\n    else\n      echo ${line} >> ${FIXLIST} # Finally write to fixlist if no matches\n  fi\ndone < \"${US_DICT}\"\n"
  },
  {
    "path": "tools/sanitizer/README.md",
    "content": "# Sanitizer\n\nThis tool lowercases, deduplicates, sorts and cleans the word lists.\n\nFirst argument is expected to be the wordlist and second argument the language shortcut, for example `en` for english.\n\nDon't pipe into the same file that you are reading from ;)\n"
  },
  {
    "path": "tools/sanitizer/main.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"golang.org/x/text/cases\"\n\t\"golang.org/x/text/language\"\n)\n\nfunc main() {\n\tlanguageFile, err := os.Open(os.Args[len(os.Args)-2])\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tlowercaser := cases.Lower(language.Make(os.Args[len(os.Args)-1]))\n\treader := bufio.NewReader(languageFile)\n\tvar words []string\n\tfor {\n\t\tline, _, err := reader.ReadLine()\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tpanic(err)\n\t\t}\n\t\tlineAsString := string(line)\n\n\t\t// Remove previously edited difficulty indicators, we don't really need it anymore.\n\t\tdifficultyIndicatorIndex := strings.IndexRune(lineAsString, '#')\n\t\tif difficultyIndicatorIndex != -1 {\n\t\t\tlineAsString = lineAsString[:difficultyIndicatorIndex]\n\t\t}\n\n\t\t// Lowercase and trim, to make sure we can compare them without errors\n\t\twords = append(words, strings.TrimSpace(lowercaser.String(lineAsString)))\n\t}\n\n\tvar filteredWords []string\nWORDS:\n\tfor _, word := range words {\n\t\tfor _, filteredWord := range filteredWords {\n\t\t\tif filteredWord == word {\n\t\t\t\tcontinue WORDS\n\t\t\t}\n\t\t}\n\n\t\tfilteredWords = append(filteredWords, word)\n\t}\n\n\t// Filter for niceness\n\tsort.Strings(filteredWords)\n\n\tfor _, word := range filteredWords {\n\t\tfmt.Println(word)\n\t}\n}\n"
  },
  {
    "path": "tools/simulate/main.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"math/rand/v2\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/gofrs/uuid/v5\"\n\t\"github.com/lxzan/gws\"\n\t\"github.com/scribble-rs/scribble.rs/internal/api\"\n)\n\ntype body struct {\n\tcontentType string\n\tdata        io.Reader\n}\n\nfunc request(method, url string, body *body, queryParameters map[string]any) (*http.Response, error) {\n\tvar data io.Reader\n\tif body != nil {\n\t\tdata = body.data\n\t}\n\trequest, err := http.NewRequest(method, url, data)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error perparing request: %w\", err)\n\t}\n\tif body != nil {\n\t\trequest.Header.Set(\"Content-Type\", body.contentType)\n\t}\n\tquery := request.URL.Query()\n\tfor k, v := range queryParameters {\n\t\tquery.Set(k, fmt.Sprint(v))\n\t}\n\trequest.URL.RawQuery = query.Encode()\n\n\tresponse, err := http.DefaultClient.Do(request)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error during http call: %w\", err)\n\t}\n\n\treturn response, nil\n}\n\nfunc PostLobby() (*api.LobbyData, error) {\n\tresponse, err := request(http.MethodPost, \"http://localhost:8080/v1/lobby\", nil, map[string]any{\n\t\t\"language\":              \"english\",\n\t\t\"drawing_time\":          120,\n\t\t\"rounds\":                4,\n\t\t\"max_players\":           12,\n\t\t\"clients_per_ip_limit\":  12,\n\t\t\"custom_words_per_turn\": 3,\n\t\t\"public\":                true,\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error sending request: %w\", err)\n\t}\n\n\tif response.StatusCode != http.StatusOK {\n\t\tbytes, err := io.ReadAll(response.Body)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tfmt.Println(string(bytes))\n\t}\n\tvar lobby api.LobbyData\n\tif err := json.NewDecoder(response.Body).Decode(&lobby); err != nil {\n\t\treturn nil, fmt.Errorf(\"error decoding response: %w\", err)\n\t}\n\n\treturn &lobby, err\n}\n\ntype SimPlayer struct {\n\tId          string\n\tName        string\n\tUsersession string\n\tws          *gws.Conn\n}\n\nfunc (s *SimPlayer) WriteJSON(value any) error {\n\tbytes, err := json.Marshal(value)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn s.ws.WriteMessage(gws.OpcodeText, bytes)\n}\n\nfunc (s *SimPlayer) SendRandomStroke() {\n\tif err := s.WriteJSON(map[string]any{\n\t\t\"fromX\": rand.Float64(),\n\t\t\"fromY\": rand.Float64(),\n\t\t\"toX\":   rand.Float64(),\n\t\t\"toY\":   rand.Float64(),\n\t\t\"color\": map[string]any{\n\t\t\t\"r\": rand.Int32N(255),\n\t\t\t\"g\": rand.Int32N(255),\n\t\t\t\"b\": rand.Int32N(255),\n\t\t},\n\t\t\"lineWidth\": 5,\n\t}); err != nil {\n\t\tlog.Println(\"error writing:\", err)\n\t}\n}\n\nfunc (s *SimPlayer) SendRandomMessage() {\n\tif err := s.WriteJSON(map[string]any{\n\t\t\"type\": \"message\",\n\t\t\"data\": uuid.Must(uuid.NewV4()).String(),\n\t}); err != nil {\n\t\tlog.Println(\"error writing:\", err)\n\t}\n}\n\nfunc JoinPlayer(lobbyId string) (*SimPlayer, error) {\n\tlobbyUrl := \"localhost:8080/v1/lobby/\" + lobbyId\n\tresponse, err := request(http.MethodPost, \"http://\"+lobbyUrl+\"/player\", nil, map[string]any{\n\t\t\"username\": uuid.Must(uuid.NewV4()).String(),\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error sending request: %w\", err)\n\t}\n\n\tif response.StatusCode != http.StatusOK {\n\t\tbytes, err := io.ReadAll(response.Body)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn nil, errors.New(string(bytes))\n\t}\n\n\tvar session string\n\tfor _, cookie := range response.Cookies() {\n\t\tif strings.EqualFold(cookie.Name, \"Usersession\") {\n\t\t\tsession = cookie.Value\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif session == \"\" {\n\t\treturn nil, errors.New(\"no usersession\")\n\t}\n\n\theaders := make(http.Header)\n\theaders.Set(\"usersession\", session)\n\twsConnection, response, err := gws.NewClient(gws.BuiltinEventHandler{}, &gws.ClientOption{\n\t\tAddr:          \"ws://\" + lobbyUrl + \"/ws\",\n\t\tRequestHeader: headers,\n\t})\n\tif response != nil && response.StatusCode != http.StatusSwitchingProtocols {\n\t\tbytes, err := io.ReadAll(response.Body)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn nil, errors.New(string(bytes))\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error establishing websocket connection: %w\", err)\n\t}\n\n\treturn &SimPlayer{\n\t\tUsersession: session,\n\t\tws:          wsConnection,\n\t}, nil\n}\n\nfunc main() {\n\t// lobby, err := PostLobby()\n\t// if err != nil {\n\t// \tpanic(err)\n\t// }\n\t// log.Println(\"Lobby:\", lobby.LobbyID)\n\n\tplayer, err := JoinPlayer(\"4cf284ff-8e18-4dc7-86a9-d2c2ed14227f\")\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tstart := time.Now()\n\tfor range 1_000_000 {\n\t\tplayer.SendRandomStroke()\n\t\tplayer.SendRandomMessage()\n\t}\n\n\tlog.Println(time.Since(start).Seconds())\n}\n"
  },
  {
    "path": "tools/skribbliohintsconverter/README.md",
    "content": "# Skribblio Hints Converter\n\nConverts lists from https://github.com/skribbliohints/skribbliohints.github.io into plain newline separated list.\n\nThe list has to be passed as first argument.\n"
  },
  {
    "path": "tools/skribbliohintsconverter/english.json",
    "content": "{\"bear\":{\"count\":227,\"lastSeenTime\":1577025649999,\"publicGameCount\":5,\"difficulty\":0.4492753623188406,\"difficultyWeight\":138},\"archaeologist\":{\"count\":203,\"lastSeenTime\":1577035850371,\"publicGameCount\":3,\"difficulty\":0.7619047619047619,\"difficultyWeight\":21},\"sunflower\":{\"count\":417,\"lastSeenTime\":1577034315724,\"publicGameCount\":59,\"difficulty\":0.44967880085653106,\"difficultyWeight\":467},\"hair\":{\"count\":454,\"lastSeenTime\":1577025391428,\"publicGameCount\":30,\"difficulty\":0.42729970326409494,\"difficultyWeight\":337},\"Vin Diesel\":{\"count\":488,\"lastSeenTime\":1577037483079,\"publicGameCount\":13,\"difficulty\":0.7547169811320755,\"difficultyWeight\":106},\"Daffy Duck\":{\"count\":432,\"lastSeenTime\":1577032873667,\"publicGameCount\":20,\"difficulty\":0.7432432432432432,\"difficultyWeight\":148},\"broomstick\":{\"count\":215,\"lastSeenTime\":1577032648652,\"difficulty\":0.7317073170731707,\"difficultyWeight\":123,\"publicGameCount\":12},\"unibrow\":{\"count\":473,\"lastSeenTime\":1577035664302,\"publicGameCount\":45,\"difficulty\":0.6717171717171717,\"difficultyWeight\":396},\"accident\":{\"count\":237,\"lastSeenTime\":1577004853990,\"publicGameCount\":7,\"difficulty\":0.5849056603773585,\"difficultyWeight\":53},\"saliva\":{\"count\":429,\"lastSeenTime\":1576994904212,\"publicGameCount\":27,\"difficulty\":0.6136363636363636,\"difficultyWeight\":220},\"Batman\":{\"count\":430,\"lastSeenTime\":1577025104122,\"difficulty\":0.5263157894736845,\"difficultyWeight\":323,\"publicGameCount\":35},\"radiation\":{\"count\":240,\"lastSeenTime\":1577032236778,\"publicGameCount\":13,\"difficulty\":0.6545454545454545,\"difficultyWeight\":110},\"boots\":{\"count\":229,\"lastSeenTime\":1576967221649,\"difficulty\":0.581081081081081,\"difficultyWeight\":222,\"publicGameCount\":6},\"tornado\":{\"count\":436,\"lastSeenTime\":1577011796049,\"publicGameCount\":67,\"difficulty\":0.4551971326164874,\"difficultyWeight\":558},\"skyscraper\":{\"count\":434,\"lastSeenTime\":1577035483877,\"publicGameCount\":25,\"difficulty\":0.622549019607843,\"difficultyWeight\":204},\"knife\":{\"count\":421,\"lastSeenTime\":1577025391428,\"publicGameCount\":45,\"difficulty\":0.45208333333333334,\"difficultyWeight\":480},\"witch\":{\"count\":225,\"lastSeenTime\":1577024344558,\"difficulty\":0.5061728395061729,\"difficultyWeight\":162,\"publicGameCount\":17},\"glass\":{\"count\":422,\"lastSeenTime\":1577033178896,\"publicGameCount\":21,\"difficulty\":0.5797665369649806,\"difficultyWeight\":257},\"Patrick\":{\"count\":421,\"lastSeenTime\":1577037341722,\"publicGameCount\":61,\"difficulty\":0.44587155963302755,\"difficultyWeight\":545},\"tank\":{\"count\":425,\"lastSeenTime\":1577032857353,\"difficulty\":0.4811320754716981,\"difficultyWeight\":318,\"publicGameCount\":22},\"type\":{\"count\":226,\"lastSeenTime\":1577010004276,\"publicGameCount\":10,\"difficulty\":0.5,\"difficultyWeight\":78},\"shampoo\":{\"count\":223,\"lastSeenTime\":1577012059559,\"publicGameCount\":9,\"difficulty\":0.7380952380952381,\"difficultyWeight\":126},\"emerald\":{\"count\":233,\"lastSeenTime\":1577013669125,\"publicGameCount\":14,\"difficulty\":0.6546391752577319,\"difficultyWeight\":194},\"factory\":{\"count\":437,\"lastSeenTime\":1577035607642,\"difficulty\":0.602803738317757,\"difficultyWeight\":214,\"publicGameCount\":24},\"apartment\":{\"count\":434,\"lastSeenTime\":1577033358892,\"publicGameCount\":23,\"difficulty\":0.691860465116279,\"difficultyWeight\":172},\"Darwin\":{\"count\":209,\"lastSeenTime\":1576988845736,\"difficulty\":0.7307692307692307,\"difficultyWeight\":52,\"publicGameCount\":4},\"pig\":{\"count\":201,\"lastSeenTime\":1576984695357,\"difficulty\":0.43322475570032576,\"difficultyWeight\":307,\"publicGameCount\":4},\"underweight\":{\"count\":334,\"lastSeenTime\":1577025726927,\"publicGameCount\":20,\"difficulty\":0.7985611510791367,\"difficultyWeight\":139},\"grandmother\":{\"count\":224,\"lastSeenTime\":1577032873667,\"publicGameCount\":19,\"difficulty\":0.6344827586206897,\"difficultyWeight\":145},\"bar\":{\"count\":604,\"lastSeenTime\":1577037678090,\"publicGameCount\":48,\"difficulty\":0.719387755102041,\"difficultyWeight\":392},\"short\":{\"count\":435,\"lastSeenTime\":1577015139924,\"publicGameCount\":47,\"difficulty\":0.5896805896805896,\"difficultyWeight\":407},\"iron\":{\"count\":475,\"lastSeenTime\":1577035761130,\"publicGameCount\":33,\"difficulty\":0.602996254681648,\"difficultyWeight\":267},\"cloth\":{\"count\":240,\"lastSeenTime\":1577021075120,\"publicGameCount\":7,\"difficulty\":0.5148514851485149,\"difficultyWeight\":101},\"William Wallace\":{\"count\":414,\"lastSeenTime\":1577030272907,\"publicGameCount\":10,\"difficulty\":0.8208955223880597,\"difficultyWeight\":67},\"skydiving\":{\"count\":240,\"lastSeenTime\":1577024430436,\"difficulty\":0.5238095238095238,\"difficultyWeight\":84,\"publicGameCount\":11},\"chopsticks\":{\"count\":215,\"lastSeenTime\":1577024485059,\"publicGameCount\":14,\"difficulty\":0.6528925619834711,\"difficultyWeight\":121},\"cord\":{\"count\":235,\"lastSeenTime\":1577033383363,\"difficulty\":0.6417910447761194,\"difficultyWeight\":134,\"publicGameCount\":8},\"rug\":{\"count\":240,\"lastSeenTime\":1577031521720,\"publicGameCount\":4,\"difficulty\":0.6238532110091743,\"difficultyWeight\":109},\"spaceship\":{\"count\":239,\"lastSeenTime\":1577029674779,\"publicGameCount\":26,\"difficulty\":0.5866666666666667,\"difficultyWeight\":225},\"moss\":{\"count\":419,\"lastSeenTime\":1577037627992,\"publicGameCount\":13,\"difficulty\":0.5952380952380952,\"difficultyWeight\":168},\"ponytail\":{\"count\":219,\"lastSeenTime\":1577037472968,\"publicGameCount\":13,\"difficulty\":0.6524822695035462,\"difficultyWeight\":141},\"elbow\":{\"count\":435,\"lastSeenTime\":1577024181667,\"publicGameCount\":45,\"difficulty\":0.4511494252873563,\"difficultyWeight\":348},\"path\":{\"count\":426,\"lastSeenTime\":1577035263186,\"difficulty\":0.6653225806451614,\"difficultyWeight\":248,\"publicGameCount\":21},\"Barack Obama\":{\"count\":433,\"lastSeenTime\":1577036907083,\"difficulty\":0.7366666666666666,\"difficultyWeight\":300,\"publicGameCount\":39},\"centaur\":{\"count\":228,\"lastSeenTime\":1577007798107,\"publicGameCount\":9,\"difficulty\":0.7142857142857143,\"difficultyWeight\":91},\"wave\":{\"count\":435,\"lastSeenTime\":1577016460052,\"difficulty\":0.49999999999999983,\"difficultyWeight\":384,\"publicGameCount\":26},\"cello\":{\"count\":446,\"lastSeenTime\":1577025115050,\"publicGameCount\":20,\"difficulty\":0.6234567901234568,\"difficultyWeight\":162},\"Mark Zuckerberg\":{\"count\":452,\"lastSeenTime\":1577024267715,\"publicGameCount\":34,\"difficulty\":0.7542372881355932,\"difficultyWeight\":236},\"sailboat\":{\"count\":225,\"lastSeenTime\":1576995804799,\"difficulty\":0.6610878661087868,\"difficultyWeight\":239,\"publicGameCount\":20},\"JayZ\":{\"count\":428,\"lastSeenTime\":1577031444488,\"publicGameCount\":12,\"difficulty\":0.6782608695652174,\"difficultyWeight\":115},\"cheeks\":{\"count\":447,\"lastSeenTime\":1577034290492,\"publicGameCount\":35,\"difficulty\":0.6128048780487805,\"difficultyWeight\":328},\"Dora\":{\"count\":420,\"lastSeenTime\":1577031245121,\"publicGameCount\":33,\"difficulty\":0.6272727272727272,\"difficultyWeight\":330},\"Ferrari\":{\"count\":207,\"lastSeenTime\":1577030712255,\"publicGameCount\":11,\"difficulty\":0.6120689655172413,\"difficultyWeight\":116},\"meatloaf\":{\"count\":231,\"lastSeenTime\":1577011596369,\"publicGameCount\":9,\"difficulty\":0.6101694915254238,\"difficultyWeight\":59},\"burglar\":{\"count\":232,\"lastSeenTime\":1577033983037,\"publicGameCount\":15,\"difficulty\":0.7652173913043478,\"difficultyWeight\":115},\"dog\":{\"count\":216,\"lastSeenTime\":1577035914736,\"difficulty\":0.39880952380952384,\"difficultyWeight\":168},\"double\":{\"count\":245,\"lastSeenTime\":1576991022450,\"difficulty\":0.5909090909090909,\"difficultyWeight\":88,\"publicGameCount\":5},\"sneeze\":{\"count\":231,\"lastSeenTime\":1576981150242,\"publicGameCount\":10,\"difficulty\":0.6595744680851063,\"difficultyWeight\":141},\"Tweety\":{\"count\":422,\"lastSeenTime\":1577029664662,\"publicGameCount\":16,\"difficulty\":0.7423312883435583,\"difficultyWeight\":163},\"Donald Duck\":{\"count\":428,\"lastSeenTime\":1577015070109,\"publicGameCount\":38,\"difficulty\":0.6825396825396827,\"difficultyWeight\":252},\"Pumba\":{\"count\":403,\"lastSeenTime\":1577036549571,\"publicGameCount\":13,\"difficulty\":0.6952380952380952,\"difficultyWeight\":105},\"messy\":{\"count\":389,\"lastSeenTime\":1577037483079,\"publicGameCount\":21,\"difficulty\":0.6275510204081632,\"difficultyWeight\":196},\"melt\":{\"count\":229,\"lastSeenTime\":1577008913721,\"publicGameCount\":8,\"difficulty\":0.5607476635514019,\"difficultyWeight\":107},\"graduation\":{\"count\":224,\"lastSeenTime\":1577034742470,\"publicGameCount\":14,\"difficulty\":0.5789473684210527,\"difficultyWeight\":95},\"wart\":{\"count\":413,\"lastSeenTime\":1577020612196,\"publicGameCount\":11,\"difficulty\":0.5588235294117646,\"difficultyWeight\":102},\"moose\":{\"count\":231,\"lastSeenTime\":1577009754970,\"difficulty\":0.5,\"difficultyWeight\":86,\"publicGameCount\":2},\"Zeus\":{\"count\":464,\"lastSeenTime\":1577017445912,\"publicGameCount\":33,\"difficulty\":0.631578947368421,\"difficultyWeight\":266},\"school\":{\"count\":473,\"lastSeenTime\":1577033920831,\"publicGameCount\":49,\"difficulty\":0.6448598130841121,\"difficultyWeight\":428},\"kiss\":{\"count\":257,\"lastSeenTime\":1577011710244,\"difficulty\":0.6141304347826086,\"difficultyWeight\":184,\"publicGameCount\":11},\"dream\":{\"count\":427,\"lastSeenTime\":1577031013002,\"publicGameCount\":33,\"difficulty\":0.5730994152046782,\"difficultyWeight\":342},\"Shrek\":{\"count\":465,\"lastSeenTime\":1577016219244,\"publicGameCount\":46,\"difficulty\":0.536340852130326,\"difficultyWeight\":399},\"snow\":{\"count\":413,\"lastSeenTime\":1577029910813,\"publicGameCount\":41,\"difficulty\":0.5456919060052219,\"difficultyWeight\":383},\"Steve Jobs\":{\"count\":444,\"lastSeenTime\":1577003773529,\"publicGameCount\":11,\"difficulty\":0.8076923076923077,\"difficultyWeight\":78},\"Hollywood\":{\"count\":436,\"lastSeenTime\":1577033383363,\"publicGameCount\":24,\"difficulty\":0.5144230769230769,\"difficultyWeight\":208},\"eclipse\":{\"count\":209,\"lastSeenTime\":1577020326031,\"difficulty\":0.6145833333333333,\"difficultyWeight\":96,\"publicGameCount\":10},\"record\":{\"count\":624,\"lastSeenTime\":1577012339365,\"difficulty\":0.7423312883435582,\"difficultyWeight\":326,\"publicGameCount\":37},\"sale\":{\"count\":236,\"lastSeenTime\":1577032786045,\"difficulty\":0.5862068965517241,\"difficultyWeight\":116,\"publicGameCount\":5},\"lottery\":{\"count\":205,\"lastSeenTime\":1577030712255,\"publicGameCount\":13,\"difficulty\":0.6770186335403726,\"difficultyWeight\":161},\"field\":{\"count\":427,\"lastSeenTime\":1577031982423,\"publicGameCount\":22,\"difficulty\":0.6294117647058822,\"difficultyWeight\":170},\"ring\":{\"count\":208,\"lastSeenTime\":1577035607642,\"difficulty\":0.5165289256198347,\"difficultyWeight\":242,\"publicGameCount\":3},\"pet shop\":{\"count\":459,\"lastSeenTime\":1577031910884,\"publicGameCount\":36,\"difficulty\":0.6964285714285714,\"difficultyWeight\":280},\"symphony\":{\"count\":424,\"lastSeenTime\":1577025451893,\"publicGameCount\":5,\"difficulty\":0.5526315789473685,\"difficultyWeight\":38},\"portal\":{\"count\":229,\"lastSeenTime\":1577017407009,\"difficulty\":0.6845238095238095,\"difficultyWeight\":168,\"publicGameCount\":12},\"ear\":{\"count\":407,\"lastSeenTime\":1577037557962,\"difficulty\":0.46116504854368934,\"difficultyWeight\":412,\"publicGameCount\":13},\"Elsa\":{\"count\":426,\"lastSeenTime\":1577021143400,\"publicGameCount\":30,\"difficulty\":0.5142857142857139,\"difficultyWeight\":315},\"basement\":{\"count\":209,\"lastSeenTime\":1577034632349,\"publicGameCount\":7,\"difficulty\":0.7131782945736435,\"difficultyWeight\":129},\"emoji\":{\"count\":214,\"lastSeenTime\":1577010223357,\"publicGameCount\":27,\"difficulty\":0.5732217573221757,\"difficultyWeight\":239},\"Elon Musk\":{\"count\":429,\"lastSeenTime\":1577031296608,\"publicGameCount\":22,\"difficulty\":0.7659574468085106,\"difficultyWeight\":188},\"Robbie Rotten\":{\"count\":423,\"lastSeenTime\":1577035455493,\"publicGameCount\":12,\"difficulty\":0.8,\"difficultyWeight\":90},\"security\":{\"count\":224,\"lastSeenTime\":1577019859074,\"publicGameCount\":8,\"difficulty\":0.6666666666666666,\"difficultyWeight\":108},\"Flash\":{\"count\":441,\"lastSeenTime\":1577033129254,\"publicGameCount\":26,\"difficulty\":0.5311203319502076,\"difficultyWeight\":241},\"Grinch\":{\"count\":430,\"lastSeenTime\":1577036846155,\"publicGameCount\":40,\"difficulty\":0.5558823529411763,\"difficultyWeight\":340},\"spy\":{\"count\":217,\"lastSeenTime\":1577025952720,\"publicGameCount\":13,\"difficulty\":0.6666666666666666,\"difficultyWeight\":138},\"finger\":{\"count\":434,\"lastSeenTime\":1577025863283,\"publicGameCount\":37,\"difficulty\":0.4628099173553719,\"difficultyWeight\":363},\"Ikea\":{\"count\":422,\"lastSeenTime\":1577036211618,\"difficulty\":0.5130434782608696,\"difficultyWeight\":230,\"publicGameCount\":23},\"loot\":{\"count\":234,\"lastSeenTime\":1577036588307,\"publicGameCount\":9,\"difficulty\":0.6090909090909091,\"difficultyWeight\":110},\"seahorse\":{\"count\":216,\"lastSeenTime\":1577001950046,\"publicGameCount\":13,\"difficulty\":0.5197368421052632,\"difficultyWeight\":152},\"bird bath\":{\"count\":218,\"lastSeenTime\":1576994786459,\"publicGameCount\":13,\"difficulty\":0.7171717171717171,\"difficultyWeight\":99},\"fabulous\":{\"count\":437,\"lastSeenTime\":1577017839436,\"publicGameCount\":11,\"difficulty\":0.7176470588235294,\"difficultyWeight\":85},\"Donald Trump\":{\"count\":437,\"lastSeenTime\":1577025426672,\"publicGameCount\":62,\"difficulty\":0.6716738197424893,\"difficultyWeight\":466},\"library\":{\"count\":441,\"lastSeenTime\":1577021253681,\"difficulty\":0.576666666666667,\"difficultyWeight\":300,\"publicGameCount\":36},\"panther\":{\"count\":211,\"lastSeenTime\":1577037345324,\"difficulty\":0.675,\"difficultyWeight\":80,\"publicGameCount\":5},\"birthday\":{\"count\":247,\"lastSeenTime\":1577035568579,\"publicGameCount\":13,\"difficulty\":0.5416666666666665,\"difficultyWeight\":144},\"nachos\":{\"count\":232,\"lastSeenTime\":1577029749666,\"difficulty\":0.6206896551724138,\"difficultyWeight\":145,\"publicGameCount\":5},\"dough\":{\"count\":205,\"lastSeenTime\":1577035216186,\"publicGameCount\":7,\"difficulty\":0.574468085106383,\"difficultyWeight\":47},\"Terminator\":{\"count\":478,\"lastSeenTime\":1576995845059,\"publicGameCount\":17,\"difficulty\":0.7890625,\"difficultyWeight\":128},\"Sydney Opera House\":{\"count\":448,\"lastSeenTime\":1577037402133,\"publicGameCount\":15,\"difficulty\":0.7981651376146789,\"difficultyWeight\":109},\"anthill\":{\"count\":235,\"lastSeenTime\":1577035263186,\"publicGameCount\":6,\"difficulty\":0.6212121212121212,\"difficultyWeight\":66},\"scar\":{\"count\":454,\"lastSeenTime\":1577015610581,\"publicGameCount\":24,\"difficulty\":0.6103896103896104,\"difficultyWeight\":231},\"quokka\":{\"count\":222,\"lastSeenTime\":1576995830173,\"publicGameCount\":3,\"difficulty\":0.875,\"difficultyWeight\":40},\"Angry Birds\":{\"count\":443,\"lastSeenTime\":1577020626476,\"publicGameCount\":53,\"difficulty\":0.6882494004796164,\"difficultyWeight\":417},\"happy\":{\"count\":222,\"lastSeenTime\":1577036882731,\"difficulty\":0.5364238410596026,\"difficultyWeight\":151,\"publicGameCount\":10},\"BMW\":{\"count\":420,\"lastSeenTime\":1577017466404,\"publicGameCount\":20,\"difficulty\":0.5211267605633803,\"difficultyWeight\":213},\"luggage\":{\"count\":232,\"lastSeenTime\":1577034340467,\"publicGameCount\":9,\"difficulty\":0.7924528301886793,\"difficultyWeight\":106},\"bacon\":{\"count\":257,\"lastSeenTime\":1577037263306,\"difficulty\":0.5359477124183005,\"difficultyWeight\":153,\"publicGameCount\":14},\"maze\":{\"count\":217,\"lastSeenTime\":1577035554960,\"difficulty\":0.5670731707317073,\"difficultyWeight\":164,\"publicGameCount\":8},\"brush\":{\"count\":426,\"lastSeenTime\":1577013899075,\"difficulty\":0.5657492354740062,\"difficultyWeight\":327,\"publicGameCount\":37},\"sand castle\":{\"count\":243,\"lastSeenTime\":1577035338348,\"publicGameCount\":21,\"difficulty\":0.6226415094339622,\"difficultyWeight\":159},\"tiny\":{\"count\":434,\"lastSeenTime\":1577034376972,\"publicGameCount\":27,\"difficulty\":0.654761904761905,\"difficultyWeight\":252},\"Minion\":{\"count\":411,\"lastSeenTime\":1577035508304,\"publicGameCount\":49,\"difficulty\":0.49330357142857145,\"difficultyWeight\":448},\"James Bond\":{\"count\":443,\"lastSeenTime\":1577018880730,\"publicGameCount\":22,\"difficulty\":0.7696969696969697,\"difficultyWeight\":165},\"beach\":{\"count\":449,\"lastSeenTime\":1577034081969,\"publicGameCount\":47,\"difficulty\":0.5065616797900262,\"difficultyWeight\":381},\"fork\":{\"count\":435,\"lastSeenTime\":1577035656351,\"publicGameCount\":36,\"difficulty\":0.4231578947368421,\"difficultyWeight\":475},\"sandwich\":{\"count\":216,\"lastSeenTime\":1577006998548,\"difficulty\":0.6496815286624205,\"difficultyWeight\":157,\"publicGameCount\":13},\"Australia\":{\"count\":447,\"lastSeenTime\":1577034713991,\"difficulty\":0.6589861751152074,\"difficultyWeight\":217,\"publicGameCount\":25},\"casino\":{\"count\":424,\"lastSeenTime\":1577013957831,\"difficulty\":0.676056338028169,\"difficultyWeight\":142,\"publicGameCount\":13},\"stoned\":{\"count\":420,\"lastSeenTime\":1577032849365,\"difficulty\":0.7444444444444445,\"difficultyWeight\":180,\"publicGameCount\":19},\"Antarctica\":{\"count\":481,\"lastSeenTime\":1577037031237,\"difficulty\":0.7928994082840237,\"difficultyWeight\":169,\"publicGameCount\":23},\"AC/DC\":{\"count\":430,\"lastSeenTime\":1577024663216,\"difficulty\":0.7034482758620689,\"difficultyWeight\":145,\"publicGameCount\":8},\"Jackie Chan\":{\"count\":423,\"lastSeenTime\":1577037331094,\"publicGameCount\":25,\"difficulty\":0.6931818181818182,\"difficultyWeight\":176},\"reeds\":{\"count\":412,\"lastSeenTime\":1577037236956,\"publicGameCount\":4,\"difficulty\":0.8125,\"difficultyWeight\":32},\"oval\":{\"count\":217,\"lastSeenTime\":1577024968702,\"publicGameCount\":17,\"difficulty\":0.4642857142857143,\"difficultyWeight\":168},\"scoop\":{\"count\":246,\"lastSeenTime\":1577007933571,\"difficulty\":0.5913978494623657,\"difficultyWeight\":93,\"publicGameCount\":9},\"gnome\":{\"count\":197,\"lastSeenTime\":1577034340467,\"difficulty\":0.509090909090909,\"difficultyWeight\":110,\"publicGameCount\":5},\"taser\":{\"count\":230,\"lastSeenTime\":1576995770863,\"publicGameCount\":15,\"difficulty\":0.675,\"difficultyWeight\":160},\"bingo\":{\"count\":218,\"lastSeenTime\":1577025852952,\"difficulty\":0.5909090909090909,\"difficultyWeight\":110,\"publicGameCount\":8},\"arrow\":{\"count\":412,\"lastSeenTime\":1577024485059,\"publicGameCount\":49,\"difficulty\":0.3867403314917127,\"difficultyWeight\":543},\"blender\":{\"count\":207,\"lastSeenTime\":1577036121146,\"publicGameCount\":8,\"difficulty\":0.6,\"difficultyWeight\":70},\"America\":{\"count\":456,\"lastSeenTime\":1577033393491,\"publicGameCount\":53,\"difficulty\":0.5124378109452735,\"difficultyWeight\":402},\"bakery\":{\"count\":439,\"lastSeenTime\":1577019302199,\"publicGameCount\":17,\"difficulty\":0.6375,\"difficultyWeight\":160},\"point\":{\"count\":447,\"lastSeenTime\":1577016293273,\"publicGameCount\":28,\"difficulty\":0.5714285714285714,\"difficultyWeight\":294},\"fly swatter\":{\"count\":249,\"lastSeenTime\":1577034329984,\"publicGameCount\":18,\"difficulty\":0.6615384615384615,\"difficultyWeight\":130},\"ski\":{\"count\":255,\"lastSeenTime\":1577016713300,\"difficulty\":0.45454545454545453,\"difficultyWeight\":110,\"publicGameCount\":6},\"condiment\":{\"count\":247,\"lastSeenTime\":1577032752804,\"publicGameCount\":4,\"difficulty\":0.7678571428571429,\"difficultyWeight\":56},\"knee\":{\"count\":445,\"lastSeenTime\":1577032051558,\"publicGameCount\":39,\"difficulty\":0.44984802431610943,\"difficultyWeight\":329},\"dandruff\":{\"count\":454,\"lastSeenTime\":1577037638341,\"publicGameCount\":16,\"difficulty\":0.7711864406779662,\"difficultyWeight\":118},\"yearbook\":{\"count\":240,\"lastSeenTime\":1577032444866,\"difficulty\":0.6309523809523809,\"difficultyWeight\":84,\"publicGameCount\":8},\"mouth\":{\"count\":463,\"lastSeenTime\":1577035287582,\"difficulty\":0.5626740947075206,\"difficultyWeight\":359,\"publicGameCount\":42},\"cabinet\":{\"count\":224,\"lastSeenTime\":1577036588307,\"difficulty\":0.7222222222222222,\"difficultyWeight\":54,\"publicGameCount\":5},\"cold\":{\"count\":428,\"lastSeenTime\":1577037131444,\"publicGameCount\":40,\"difficulty\":0.5800604229607251,\"difficultyWeight\":331},\"Mercury\":{\"count\":227,\"lastSeenTime\":1577021133236,\"publicGameCount\":12,\"difficulty\":0.7567567567567568,\"difficultyWeight\":148},\"ice\":{\"count\":434,\"lastSeenTime\":1577036791454,\"publicGameCount\":42,\"difficulty\":0.5347721822541969,\"difficultyWeight\":417},\"skull\":{\"count\":466,\"lastSeenTime\":1577034440167,\"publicGameCount\":53,\"difficulty\":0.48739495798319316,\"difficultyWeight\":476},\"tire\":{\"count\":199,\"lastSeenTime\":1577019660052,\"publicGameCount\":5,\"difficulty\":0.6164383561643836,\"difficultyWeight\":146},\"barbecue\":{\"count\":223,\"lastSeenTime\":1577037688224,\"publicGameCount\":18,\"difficulty\":0.7928994082840237,\"difficultyWeight\":169},\"Mercedes\":{\"count\":456,\"lastSeenTime\":1577030922860,\"publicGameCount\":33,\"difficulty\":0.6395348837209303,\"difficultyWeight\":258},\"icicle\":{\"count\":424,\"lastSeenTime\":1577035469679,\"publicGameCount\":27,\"difficulty\":0.676,\"difficultyWeight\":250},\"muscle\":{\"count\":432,\"lastSeenTime\":1577012030780,\"difficulty\":0.5077881619937695,\"difficultyWeight\":321,\"publicGameCount\":42},\"wedding\":{\"count\":218,\"lastSeenTime\":1577033841722,\"difficulty\":0.6538461538461539,\"difficultyWeight\":130,\"publicGameCount\":14},\"librarian\":{\"count\":210,\"lastSeenTime\":1577020860567,\"publicGameCount\":5,\"difficulty\":0.7954545454545454,\"difficultyWeight\":44},\"Amsterdam\":{\"count\":436,\"lastSeenTime\":1577030033309,\"publicGameCount\":13,\"difficulty\":0.6065573770491803,\"difficultyWeight\":122},\"hotel\":{\"count\":411,\"lastSeenTime\":1577015814834,\"publicGameCount\":21,\"difficulty\":0.5327868852459018,\"difficultyWeight\":244},\"plow\":{\"count\":441,\"lastSeenTime\":1577015335750,\"publicGameCount\":11,\"difficulty\":0.6274509803921567,\"difficultyWeight\":102},\"weak\":{\"count\":437,\"lastSeenTime\":1577017556724,\"publicGameCount\":17,\"difficulty\":0.6052631578947368,\"difficultyWeight\":152},\"nail\":{\"count\":627,\"lastSeenTime\":1577034214987,\"difficulty\":0.5587349397590361,\"difficultyWeight\":664,\"publicGameCount\":80},\"Peppa Pig\":{\"count\":443,\"lastSeenTime\":1577029699092,\"difficulty\":0.631578947368421,\"difficultyWeight\":475,\"publicGameCount\":58},\"target\":{\"count\":230,\"lastSeenTime\":1577020058754,\"publicGameCount\":6,\"difficulty\":0.5586854460093895,\"difficultyWeight\":213},\"bagpipes\":{\"count\":467,\"lastSeenTime\":1577020250301,\"difficulty\":0.883495145631068,\"difficultyWeight\":103,\"publicGameCount\":9},\"carnival\":{\"count\":242,\"lastSeenTime\":1577000681812,\"difficulty\":0.7582417582417582,\"difficultyWeight\":91,\"publicGameCount\":10},\"storm\":{\"count\":456,\"lastSeenTime\":1577035961642,\"publicGameCount\":43,\"difficulty\":0.4766355140186916,\"difficultyWeight\":321},\"cookie jar\":{\"count\":241,\"lastSeenTime\":1576981874066,\"publicGameCount\":18,\"difficulty\":0.6824324324324323,\"difficultyWeight\":148},\"florist\":{\"count\":244,\"lastSeenTime\":1577033102907,\"publicGameCount\":6,\"difficulty\":0.7540983606557377,\"difficultyWeight\":61},\"hop\":{\"count\":218,\"lastSeenTime\":1576980767661,\"publicGameCount\":10,\"difficulty\":0.6976744186046512,\"difficultyWeight\":129},\"keg\":{\"count\":224,\"lastSeenTime\":1577001275584,\"publicGameCount\":5,\"difficulty\":0.7101449275362319,\"difficultyWeight\":69},\"spaghetti\":{\"count\":252,\"lastSeenTime\":1577033670196,\"publicGameCount\":34,\"difficulty\":0.6130268199233716,\"difficultyWeight\":261},\"hive\":{\"count\":216,\"lastSeenTime\":1576998831960,\"publicGameCount\":7,\"difficulty\":0.48,\"difficultyWeight\":75},\"compass\":{\"count\":427,\"lastSeenTime\":1577035947488,\"publicGameCount\":51,\"difficulty\":0.4618834080717489,\"difficultyWeight\":446},\"air conditioner\":{\"count\":211,\"lastSeenTime\":1577033129254,\"publicGameCount\":7,\"difficulty\":0.7619047619047619,\"difficultyWeight\":42},\"golf cart\":{\"count\":228,\"lastSeenTime\":1577007159755,\"publicGameCount\":15,\"difficulty\":0.6910569105691057,\"difficultyWeight\":123},\"bus stop\":{\"count\":476,\"lastSeenTime\":1577036377269,\"publicGameCount\":36,\"difficulty\":0.6796536796536796,\"difficultyWeight\":231},\"pants\":{\"count\":233,\"lastSeenTime\":1577004312386,\"publicGameCount\":5,\"difficulty\":0.46195652173913043,\"difficultyWeight\":184},\"forehead\":{\"count\":483,\"lastSeenTime\":1577035358654,\"publicGameCount\":33,\"difficulty\":0.5758620689655174,\"difficultyWeight\":290},\"basket\":{\"count\":229,\"lastSeenTime\":1577004751157,\"difficulty\":0.5579710144927537,\"difficultyWeight\":138,\"publicGameCount\":11},\"mechanic\":{\"count\":233,\"lastSeenTime\":1576986317705,\"publicGameCount\":6,\"difficulty\":0.6382978723404256,\"difficultyWeight\":47},\"zoo\":{\"count\":440,\"lastSeenTime\":1577034546199,\"publicGameCount\":31,\"difficulty\":0.5714285714285716,\"difficultyWeight\":287},\"ladybug\":{\"count\":207,\"lastSeenTime\":1577004792479,\"publicGameCount\":18,\"difficulty\":0.45754716981132076,\"difficultyWeight\":212},\"mothball\":{\"count\":255,\"lastSeenTime\":1577037092671,\"publicGameCount\":4,\"difficulty\":0.8857142857142857,\"difficultyWeight\":35},\"Nemo\":{\"count\":426,\"lastSeenTime\":1577024576475,\"publicGameCount\":39,\"difficulty\":0.4492753623188406,\"difficultyWeight\":345},\"cute\":{\"count\":455,\"lastSeenTime\":1577020425587,\"publicGameCount\":35,\"difficulty\":0.660377358490566,\"difficultyWeight\":265},\"printer\":{\"count\":217,\"lastSeenTime\":1577018843554,\"difficulty\":0.75,\"difficultyWeight\":68,\"publicGameCount\":2},\"palette\":{\"count\":230,\"lastSeenTime\":1577016110707,\"publicGameCount\":8,\"difficulty\":0.7192982456140351,\"difficultyWeight\":57},\"royal\":{\"count\":473,\"lastSeenTime\":1577035975818,\"publicGameCount\":32,\"difficulty\":0.6964285714285714,\"difficultyWeight\":280},\"border\":{\"count\":425,\"lastSeenTime\":1577032076358,\"publicGameCount\":23,\"difficulty\":0.59375,\"difficultyWeight\":224},\"London Eye\":{\"count\":447,\"lastSeenTime\":1577019695028,\"publicGameCount\":19,\"difficulty\":0.8059701492537313,\"difficultyWeight\":134},\"picnic\":{\"count\":217,\"lastSeenTime\":1577031433614,\"publicGameCount\":5,\"difficulty\":0.66,\"difficultyWeight\":50},\"Christmas\":{\"count\":231,\"lastSeenTime\":1577014939690,\"publicGameCount\":18,\"difficulty\":0.5155279503105592,\"difficultyWeight\":161},\"nurse\":{\"count\":213,\"lastSeenTime\":1577015139924,\"publicGameCount\":6,\"difficulty\":0.4896551724137931,\"difficultyWeight\":145},\"dwarf\":{\"count\":200,\"lastSeenTime\":1577033494000,\"difficulty\":0.6932515337423313,\"difficultyWeight\":163,\"publicGameCount\":17},\"alpaca\":{\"count\":206,\"lastSeenTime\":1577036070954,\"publicGameCount\":4,\"difficulty\":0.6551724137931034,\"difficultyWeight\":58},\"hopscotch\":{\"count\":200,\"lastSeenTime\":1577024805982,\"difficulty\":0.59375,\"difficultyWeight\":128,\"publicGameCount\":10},\"garage\":{\"count\":214,\"lastSeenTime\":1576989156663,\"difficulty\":0.5746268656716418,\"difficultyWeight\":134,\"publicGameCount\":9},\"eggplant\":{\"count\":216,\"lastSeenTime\":1577032066062,\"publicGameCount\":12,\"difficulty\":0.5437788018433181,\"difficultyWeight\":217},\"strong\":{\"count\":450,\"lastSeenTime\":1577029593108,\"publicGameCount\":27,\"difficulty\":0.5201793721973095,\"difficultyWeight\":223},\"rocket\":{\"count\":243,\"lastSeenTime\":1576985426678,\"publicGameCount\":15,\"difficulty\":0.5061224489795918,\"difficultyWeight\":245},\"scientist\":{\"count\":206,\"lastSeenTime\":1577013370658,\"publicGameCount\":8,\"difficulty\":0.49999999999999994,\"difficultyWeight\":100},\"bow\":{\"count\":644,\"lastSeenTime\":1577035579255,\"publicGameCount\":89,\"difficulty\":0.5365126676602088,\"difficultyWeight\":671},\"landscape\":{\"count\":430,\"lastSeenTime\":1577002755949,\"publicGameCount\":29,\"difficulty\":0.7449392712550608,\"difficultyWeight\":247},\"fingernail\":{\"count\":451,\"lastSeenTime\":1577008836893,\"publicGameCount\":46,\"difficulty\":0.6307692307692305,\"difficultyWeight\":325},\"pound\":{\"count\":450,\"lastSeenTime\":1577032516007,\"publicGameCount\":17,\"difficulty\":0.5352941176470588,\"difficultyWeight\":170},\"pumpkin\":{\"count\":248,\"lastSeenTime\":1577035813853,\"difficulty\":0.5115207373271888,\"difficultyWeight\":217,\"publicGameCount\":22},\"bait\":{\"count\":236,\"lastSeenTime\":1576978397196,\"publicGameCount\":4,\"difficulty\":0.6438356164383562,\"difficultyWeight\":73},\"lyrics\":{\"count\":443,\"lastSeenTime\":1577020474773,\"publicGameCount\":15,\"difficulty\":0.7837837837837838,\"difficultyWeight\":148},\"wrinkle\":{\"count\":443,\"lastSeenTime\":1577009521220,\"publicGameCount\":19,\"difficulty\":0.6408450704225352,\"difficultyWeight\":142},\"palm tree\":{\"count\":450,\"lastSeenTime\":1577032701751,\"publicGameCount\":53,\"difficulty\":0.5245901639344265,\"difficultyWeight\":427},\"Ireland\":{\"count\":434,\"lastSeenTime\":1577037678090,\"difficulty\":0.6615384615384615,\"difficultyWeight\":130,\"publicGameCount\":16},\"sombrero\":{\"count\":215,\"lastSeenTime\":1577018482673,\"publicGameCount\":11,\"difficulty\":0.6821705426356589,\"difficultyWeight\":129},\"stapler\":{\"count\":223,\"lastSeenTime\":1576991677127,\"publicGameCount\":11,\"difficulty\":0.54014598540146,\"difficultyWeight\":137},\"Apple\":{\"count\":435,\"lastSeenTime\":1577037070414,\"publicGameCount\":85,\"difficulty\":0.3912248628884826,\"difficultyWeight\":547},\"Israel\":{\"count\":445,\"lastSeenTime\":1577025104883,\"publicGameCount\":19,\"difficulty\":0.676923076923077,\"difficultyWeight\":130},\"birch\":{\"count\":457,\"lastSeenTime\":1577020225357,\"publicGameCount\":11,\"difficulty\":0.6909090909090909,\"difficultyWeight\":110},\"western\":{\"count\":421,\"lastSeenTime\":1577032763018,\"publicGameCount\":18,\"difficulty\":0.776536312849162,\"difficultyWeight\":179},\"Hulk\":{\"count\":410,\"lastSeenTime\":1577033369181,\"publicGameCount\":40,\"difficulty\":0.5592286501377411,\"difficultyWeight\":363},\"helmet\":{\"count\":239,\"lastSeenTime\":1577024499507,\"difficulty\":0.5886524822695034,\"difficultyWeight\":141,\"publicGameCount\":13},\"Africa\":{\"count\":447,\"lastSeenTime\":1577024296338,\"publicGameCount\":30,\"difficulty\":0.64,\"difficultyWeight\":250},\"vlogger\":{\"count\":222,\"lastSeenTime\":1577036183989,\"publicGameCount\":7,\"difficulty\":0.6440677966101694,\"difficultyWeight\":59},\"Kermit\":{\"count\":442,\"lastSeenTime\":1576981253418,\"publicGameCount\":23,\"difficulty\":0.6391752577319587,\"difficultyWeight\":194},\"clean\":{\"count\":647,\"lastSeenTime\":1577035855162,\"difficulty\":0.6486486486486487,\"difficultyWeight\":259,\"publicGameCount\":30},\"patio\":{\"count\":218,\"lastSeenTime\":1576949627341,\"difficulty\":0.8,\"difficultyWeight\":25,\"publicGameCount\":1},\"windmill\":{\"count\":434,\"lastSeenTime\":1577032716307,\"publicGameCount\":43,\"difficulty\":0.43042071197411,\"difficultyWeight\":309},\"skeleton\":{\"count\":425,\"lastSeenTime\":1577035664302,\"publicGameCount\":50,\"difficulty\":0.48756218905472637,\"difficultyWeight\":402},\"backbone\":{\"count\":461,\"lastSeenTime\":1577036791454,\"publicGameCount\":13,\"difficulty\":0.6759259259259259,\"difficultyWeight\":108},\"feather\":{\"count\":212,\"lastSeenTime\":1577036598485,\"difficulty\":0.710691823899371,\"difficultyWeight\":159,\"publicGameCount\":10},\"submarine\":{\"count\":227,\"lastSeenTime\":1577034613528,\"difficulty\":0.5486111111111112,\"difficultyWeight\":144,\"publicGameCount\":13},\"beef\":{\"count\":204,\"lastSeenTime\":1577035775298,\"publicGameCount\":12,\"difficulty\":0.6294117647058824,\"difficultyWeight\":170},\"rib\":{\"count\":458,\"lastSeenTime\":1577037016878,\"publicGameCount\":25,\"difficulty\":0.6130653266331657,\"difficultyWeight\":199},\"day\":{\"count\":228,\"lastSeenTime\":1577024514106,\"publicGameCount\":3,\"difficulty\":0.72,\"difficultyWeight\":75},\"quill\":{\"count\":201,\"lastSeenTime\":1576964925367,\"publicGameCount\":9,\"difficulty\":0.7155172413793104,\"difficultyWeight\":116},\"spore\":{\"count\":420,\"lastSeenTime\":1577024282018,\"publicGameCount\":6,\"difficulty\":0.7413793103448276,\"difficultyWeight\":58},\"skribbl.io\":{\"count\":214,\"lastSeenTime\":1577004022286,\"difficulty\":0.7004608294930875,\"difficultyWeight\":217,\"publicGameCount\":5},\"yellow\":{\"count\":425,\"lastSeenTime\":1577013370658,\"difficulty\":0.44611528822055135,\"difficultyWeight\":399,\"publicGameCount\":44},\"legs\":{\"count\":427,\"lastSeenTime\":1577031113164,\"publicGameCount\":42,\"difficulty\":0.43781094527363185,\"difficultyWeight\":402},\"black\":{\"count\":454,\"lastSeenTime\":1576991548923,\"publicGameCount\":45,\"difficulty\":0.4342105263157895,\"difficultyWeight\":380},\"nightclub\":{\"count\":410,\"lastSeenTime\":1577034135613,\"publicGameCount\":15,\"difficulty\":0.7163120567375887,\"difficultyWeight\":141},\"Italy\":{\"count\":460,\"lastSeenTime\":1577012120756,\"publicGameCount\":37,\"difficulty\":0.6181318681318682,\"difficultyWeight\":364},\"anchor\":{\"count\":233,\"lastSeenTime\":1577025889721,\"publicGameCount\":8,\"difficulty\":0.5126050420168068,\"difficultyWeight\":119},\"mask\":{\"count\":245,\"lastSeenTime\":1576978131498,\"publicGameCount\":12,\"difficulty\":0.4866666666666667,\"difficultyWeight\":150},\"fabric\":{\"count\":240,\"lastSeenTime\":1577019533344,\"publicGameCount\":3,\"difficulty\":0.8108108108108109,\"difficultyWeight\":37},\"kindergarten\":{\"count\":412,\"lastSeenTime\":1577031943447,\"publicGameCount\":20,\"difficulty\":0.7377049180327869,\"difficultyWeight\":122},\"diss track\":{\"count\":455,\"lastSeenTime\":1577033007248,\"publicGameCount\":9,\"difficulty\":0.8378378378378378,\"difficultyWeight\":74},\"pencil\":{\"count\":215,\"lastSeenTime\":1577008446028,\"publicGameCount\":10,\"difficulty\":0.48258706467661694,\"difficultyWeight\":201},\"spit\":{\"count\":221,\"lastSeenTime\":1577033454373,\"publicGameCount\":6,\"difficulty\":0.5048543689320388,\"difficultyWeight\":103},\"Medusa\":{\"count\":461,\"lastSeenTime\":1577034253534,\"difficulty\":0.6017316017316018,\"difficultyWeight\":231,\"publicGameCount\":24},\"glue stick\":{\"count\":229,\"lastSeenTime\":1576997743182,\"publicGameCount\":26,\"difficulty\":0.6481481481481481,\"difficultyWeight\":216},\"Suez Canal\":{\"count\":420,\"lastSeenTime\":1577020200660,\"publicGameCount\":11,\"difficulty\":0.8020833333333334,\"difficultyWeight\":96},\"tooth\":{\"count\":449,\"lastSeenTime\":1577029925040,\"difficulty\":0.5183150183150184,\"difficultyWeight\":546,\"publicGameCount\":59},\"stop sign\":{\"count\":451,\"lastSeenTime\":1577029554508,\"publicGameCount\":60,\"difficulty\":0.5022123893805309,\"difficultyWeight\":452},\"prawn\":{\"count\":424,\"lastSeenTime\":1577035937353,\"publicGameCount\":17,\"difficulty\":0.6808510638297873,\"difficultyWeight\":141},\"peas\":{\"count\":215,\"lastSeenTime\":1576971627380,\"publicGameCount\":4,\"difficulty\":0.574468085106383,\"difficultyWeight\":188},\"clownfish\":{\"count\":220,\"lastSeenTime\":1576964515718,\"publicGameCount\":10,\"difficulty\":0.5528455284552846,\"difficultyWeight\":123},\"Frankenstein\":{\"count\":416,\"lastSeenTime\":1577037002742,\"publicGameCount\":29,\"difficulty\":0.6794258373205742,\"difficultyWeight\":209},\"viola\":{\"count\":435,\"lastSeenTime\":1577016549321,\"publicGameCount\":11,\"difficulty\":0.625,\"difficultyWeight\":112},\"Fanta\":{\"count\":449,\"lastSeenTime\":1577035277440,\"publicGameCount\":42,\"difficulty\":0.530791788856305,\"difficultyWeight\":341},\"jungle\":{\"count\":400,\"lastSeenTime\":1577032662789,\"publicGameCount\":23,\"difficulty\":0.5978835978835979,\"difficultyWeight\":189},\"pistol\":{\"count\":217,\"lastSeenTime\":1577035813853,\"difficulty\":0.5869565217391305,\"difficultyWeight\":230,\"publicGameCount\":1},\"claw\":{\"count\":215,\"lastSeenTime\":1576974780290,\"publicGameCount\":8,\"difficulty\":0.5686274509803921,\"difficultyWeight\":153},\"priest\":{\"count\":221,\"lastSeenTime\":1577035607642,\"difficulty\":0.6165413533834586,\"difficultyWeight\":133,\"publicGameCount\":10},\"vuvuzela\":{\"count\":448,\"lastSeenTime\":1577010808769,\"publicGameCount\":14,\"difficulty\":0.7567567567567568,\"difficultyWeight\":111},\"alley\":{\"count\":448,\"lastSeenTime\":1577037392013,\"publicGameCount\":22,\"difficulty\":0.6173469387755103,\"difficultyWeight\":196},\"lighthouse\":{\"count\":448,\"lastSeenTime\":1577035387934,\"publicGameCount\":49,\"difficulty\":0.6531165311653118,\"difficultyWeight\":369},\"diva\":{\"count\":233,\"lastSeenTime\":1577035252998,\"difficulty\":0.7407407407407407,\"difficultyWeight\":27,\"publicGameCount\":1},\"meal\":{\"count\":238,\"lastSeenTime\":1577019494384,\"publicGameCount\":5,\"difficulty\":0.7333333333333333,\"difficultyWeight\":105},\"Tails\":{\"count\":447,\"lastSeenTime\":1577035161889,\"publicGameCount\":25,\"difficulty\":0.5666666666666665,\"difficultyWeight\":210},\"cola\":{\"count\":208,\"lastSeenTime\":1577032997046,\"publicGameCount\":15,\"difficulty\":0.48201438848920863,\"difficultyWeight\":278},\"catapult\":{\"count\":221,\"lastSeenTime\":1577025326713,\"difficulty\":0.6410256410256411,\"difficultyWeight\":78,\"publicGameCount\":10},\"tourist\":{\"count\":226,\"lastSeenTime\":1577000472369,\"difficulty\":0.6976744186046512,\"difficultyWeight\":43,\"publicGameCount\":1},\"intersection\":{\"count\":403,\"lastSeenTime\":1577031754107,\"publicGameCount\":15,\"difficulty\":0.7476635514018691,\"difficultyWeight\":107},\"stingray\":{\"count\":233,\"lastSeenTime\":1577019550440,\"publicGameCount\":11,\"difficulty\":0.6,\"difficultyWeight\":90},\"base\":{\"count\":441,\"lastSeenTime\":1577021204269,\"difficulty\":0.6064516129032258,\"difficultyWeight\":155,\"publicGameCount\":16},\"copy\":{\"count\":438,\"lastSeenTime\":1577029982333,\"publicGameCount\":26,\"difficulty\":0.5681818181818182,\"difficultyWeight\":220},\"groom\":{\"count\":434,\"lastSeenTime\":1577025753070,\"publicGameCount\":10,\"difficulty\":0.625,\"difficultyWeight\":88},\"orbit\":{\"count\":233,\"lastSeenTime\":1577001324409,\"publicGameCount\":8,\"difficulty\":0.71875,\"difficultyWeight\":96},\"Morgan Freeman\":{\"count\":462,\"lastSeenTime\":1577024220453,\"publicGameCount\":21,\"difficulty\":0.7590361445783133,\"difficultyWeight\":166},\"spoiler\":{\"count\":234,\"lastSeenTime\":1577033444243,\"publicGameCount\":4,\"difficulty\":0.7560975609756098,\"difficultyWeight\":41},\"juggle\":{\"count\":223,\"lastSeenTime\":1577025287762,\"publicGameCount\":5,\"difficulty\":0.7906976744186046,\"difficultyWeight\":86},\"Iron Man\":{\"count\":429,\"lastSeenTime\":1577014278060,\"publicGameCount\":49,\"difficulty\":0.6646884272997033,\"difficultyWeight\":337},\"Discord\":{\"count\":437,\"lastSeenTime\":1577018696562,\"difficulty\":0.6245733788395904,\"difficultyWeight\":293,\"publicGameCount\":33},\"patriot\":{\"count\":223,\"lastSeenTime\":1577016460052,\"publicGameCount\":3,\"difficulty\":0.8409090909090909,\"difficultyWeight\":44},\"harmonica\":{\"count\":408,\"lastSeenTime\":1577025478336,\"publicGameCount\":18,\"difficulty\":0.728,\"difficultyWeight\":125},\"Cookie Monster\":{\"count\":455,\"lastSeenTime\":1577035238778,\"publicGameCount\":49,\"difficulty\":0.749271137026239,\"difficultyWeight\":343},\"popcorn\":{\"count\":219,\"lastSeenTime\":1577019117926,\"publicGameCount\":15,\"difficulty\":0.5103448275862068,\"difficultyWeight\":290},\"hunger\":{\"count\":457,\"lastSeenTime\":1577036441110,\"publicGameCount\":18,\"difficulty\":0.7189542483660131,\"difficultyWeight\":153},\"invasion\":{\"count\":239,\"lastSeenTime\":1577020597928,\"publicGameCount\":7,\"difficulty\":0.7611940298507462,\"difficultyWeight\":67},\"salt\":{\"count\":227,\"lastSeenTime\":1577036730175,\"publicGameCount\":10,\"difficulty\":0.5148148148148151,\"difficultyWeight\":270},\"snake\":{\"count\":242,\"lastSeenTime\":1576984207434,\"difficulty\":0.44723618090452255,\"difficultyWeight\":199,\"publicGameCount\":10},\"avocado\":{\"count\":245,\"lastSeenTime\":1577011492557,\"publicGameCount\":24,\"difficulty\":0.5203252032520326,\"difficultyWeight\":246},\"opera\":{\"count\":422,\"lastSeenTime\":1577019921307,\"publicGameCount\":18,\"difficulty\":0.7044025157232705,\"difficultyWeight\":159},\"pimple\":{\"count\":436,\"lastSeenTime\":1577036463485,\"publicGameCount\":51,\"difficulty\":0.5472636815920395,\"difficultyWeight\":402},\"socks\":{\"count\":218,\"lastSeenTime\":1577032398028,\"publicGameCount\":11,\"difficulty\":0.4810126582278481,\"difficultyWeight\":158},\"spray paint\":{\"count\":221,\"lastSeenTime\":1577032738629,\"publicGameCount\":23,\"difficulty\":0.6369426751592357,\"difficultyWeight\":157},\"Happy Meal\":{\"count\":225,\"lastSeenTime\":1576996528089,\"publicGameCount\":18,\"difficulty\":0.5902777777777778,\"difficultyWeight\":144},\"Rick\":{\"count\":415,\"lastSeenTime\":1577036121146,\"publicGameCount\":19,\"difficulty\":0.5999999999999999,\"difficultyWeight\":180},\"seasick\":{\"count\":211,\"lastSeenTime\":1577032420483,\"publicGameCount\":6,\"difficulty\":0.6470588235294118,\"difficultyWeight\":68},\"curry\":{\"count\":219,\"lastSeenTime\":1577021290587,\"publicGameCount\":6,\"difficulty\":0.7647058823529411,\"difficultyWeight\":51},\"uniform\":{\"count\":219,\"lastSeenTime\":1577008148913,\"difficulty\":0.6704545454545455,\"difficultyWeight\":88,\"publicGameCount\":9},\"deer\":{\"count\":244,\"lastSeenTime\":1577004115371,\"difficulty\":0.5735294117647058,\"difficultyWeight\":136,\"publicGameCount\":10},\"tuna\":{\"count\":438,\"lastSeenTime\":1577007159755,\"publicGameCount\":28,\"difficulty\":0.5045454545454547,\"difficultyWeight\":220},\"soap\":{\"count\":225,\"lastSeenTime\":1577034268153,\"difficulty\":0.5318181818181819,\"difficultyWeight\":220,\"publicGameCount\":11},\"thin\":{\"count\":411,\"lastSeenTime\":1577034603831,\"publicGameCount\":34,\"difficulty\":0.5559701492537313,\"difficultyWeight\":268},\"Tooth Fairy\":{\"count\":436,\"lastSeenTime\":1577034425936,\"publicGameCount\":36,\"difficulty\":0.7051792828685259,\"difficultyWeight\":251},\"Popsicle\":{\"count\":191,\"lastSeenTime\":1576993893742,\"publicGameCount\":8,\"difficulty\":0.6613756613756613,\"difficultyWeight\":189},\"rain\":{\"count\":430,\"lastSeenTime\":1577035324132,\"publicGameCount\":35,\"difficulty\":0.389413988657845,\"difficultyWeight\":529},\"mayonnaise\":{\"count\":203,\"lastSeenTime\":1576985476162,\"publicGameCount\":20,\"difficulty\":0.7142857142857143,\"difficultyWeight\":147},\"hobbit\":{\"count\":223,\"lastSeenTime\":1577032648652,\"publicGameCount\":8,\"difficulty\":0.7164179104477612,\"difficultyWeight\":67},\"laser\":{\"count\":226,\"lastSeenTime\":1577010883037,\"difficulty\":0.5521739130434783,\"difficultyWeight\":230,\"publicGameCount\":19},\"Bill Gates\":{\"count\":420,\"lastSeenTime\":1577036715889,\"publicGameCount\":26,\"difficulty\":0.7272727272727273,\"difficultyWeight\":198},\"swing\":{\"count\":410,\"lastSeenTime\":1577019031436,\"publicGameCount\":28,\"difficulty\":0.5179640718562875,\"difficultyWeight\":334},\"pepperoni\":{\"count\":229,\"lastSeenTime\":1576972958215,\"publicGameCount\":12,\"difficulty\":0.6202531645569621,\"difficultyWeight\":158},\"Scooby Doo\":{\"count\":457,\"lastSeenTime\":1577006987948,\"publicGameCount\":27,\"difficulty\":0.7391304347826086,\"difficultyWeight\":184},\"elder\":{\"count\":236,\"lastSeenTime\":1577003867547,\"publicGameCount\":11,\"difficulty\":0.7070707070707071,\"difficultyWeight\":99},\"socket\":{\"count\":223,\"lastSeenTime\":1577033794297,\"publicGameCount\":4,\"difficulty\":0.5737704918032787,\"difficultyWeight\":61},\"lips\":{\"count\":428,\"lastSeenTime\":1577035177226,\"publicGameCount\":51,\"difficulty\":0.43951612903225806,\"difficultyWeight\":496},\"jeans\":{\"count\":231,\"lastSeenTime\":1577031885678,\"difficulty\":0.5909090909090909,\"difficultyWeight\":154,\"publicGameCount\":9},\"Aladdin\":{\"count\":449,\"lastSeenTime\":1577019945970,\"publicGameCount\":30,\"difficulty\":0.6622222222222223,\"difficultyWeight\":225},\"love\":{\"count\":260,\"lastSeenTime\":1577037365574,\"difficulty\":0.4507042253521127,\"difficultyWeight\":213,\"publicGameCount\":14},\"disaster\":{\"count\":249,\"lastSeenTime\":1576992981171,\"difficulty\":0.7129629629629629,\"difficultyWeight\":108,\"publicGameCount\":13},\"sushi\":{\"count\":204,\"lastSeenTime\":1577031781371,\"publicGameCount\":17,\"difficulty\":0.5099337748344371,\"difficultyWeight\":151},\"table\":{\"count\":229,\"lastSeenTime\":1577036811707,\"publicGameCount\":14,\"difficulty\":0.46226415094339623,\"difficultyWeight\":212},\"toothpick\":{\"count\":208,\"lastSeenTime\":1577032544510,\"difficulty\":0.641860465116279,\"difficultyWeight\":215,\"publicGameCount\":20},\"good\":{\"count\":440,\"lastSeenTime\":1577019660052,\"publicGameCount\":22,\"difficulty\":0.5248618784530387,\"difficultyWeight\":181},\"dots\":{\"count\":215,\"lastSeenTime\":1576971290931,\"difficulty\":0.5446808510638299,\"difficultyWeight\":235,\"publicGameCount\":13},\"gentle\":{\"count\":419,\"lastSeenTime\":1577037535729,\"difficulty\":0.5888888888888889,\"difficultyWeight\":90,\"publicGameCount\":11},\"Facebook\":{\"count\":416,\"lastSeenTime\":1577030691919,\"publicGameCount\":58,\"difficulty\":0.3927893738140417,\"difficultyWeight\":527},\"flamingo\":{\"count\":207,\"lastSeenTime\":1577019910867,\"difficulty\":0.5857988165680472,\"difficultyWeight\":169,\"publicGameCount\":11},\"mud\":{\"count\":409,\"lastSeenTime\":1577033336640,\"publicGameCount\":20,\"difficulty\":0.6137931034482759,\"difficultyWeight\":290},\"cell phone\":{\"count\":231,\"lastSeenTime\":1577014924115,\"publicGameCount\":25,\"difficulty\":0.6278026905829597,\"difficultyWeight\":223},\"nut\":{\"count\":222,\"lastSeenTime\":1577037472968,\"difficulty\":0.5324675324675324,\"difficultyWeight\":154,\"publicGameCount\":3},\"wingnut\":{\"count\":230,\"lastSeenTime\":1577009049641,\"publicGameCount\":5,\"difficulty\":0.7090909090909091,\"difficultyWeight\":55},\"Dexter\":{\"count\":439,\"lastSeenTime\":1577036258761,\"publicGameCount\":21,\"difficulty\":0.7127659574468084,\"difficultyWeight\":188},\"dalmatian\":{\"count\":228,\"lastSeenTime\":1577033946337,\"publicGameCount\":4,\"difficulty\":0.6851851851851852,\"difficultyWeight\":54},\"poke\":{\"count\":218,\"lastSeenTime\":1577037355436,\"publicGameCount\":8,\"difficulty\":0.5487804878048781,\"difficultyWeight\":82},\"Bambi\":{\"count\":469,\"lastSeenTime\":1577033946337,\"publicGameCount\":16,\"difficulty\":0.7954545454545454,\"difficultyWeight\":132},\"plate\":{\"count\":233,\"lastSeenTime\":1577032420483,\"publicGameCount\":7,\"difficulty\":0.6541353383458647,\"difficultyWeight\":133},\"shovel\":{\"count\":235,\"lastSeenTime\":1577029886480,\"publicGameCount\":23,\"difficulty\":0.5075187969924813,\"difficultyWeight\":266},\"roll\":{\"count\":241,\"lastSeenTime\":1576999530628,\"difficulty\":0.6020408163265306,\"difficultyWeight\":98,\"publicGameCount\":6},\"ambulance\":{\"count\":221,\"lastSeenTime\":1576972446223,\"publicGameCount\":18,\"difficulty\":0.4659090909090909,\"difficultyWeight\":176},\"voodoo\":{\"count\":220,\"lastSeenTime\":1577019921307,\"publicGameCount\":14,\"difficulty\":0.6698113207547168,\"difficultyWeight\":106},\"wax\":{\"count\":274,\"lastSeenTime\":1576993408685,\"difficulty\":0.5671641791044776,\"difficultyWeight\":67,\"publicGameCount\":5},\"sit\":{\"count\":257,\"lastSeenTime\":1576995855674,\"difficulty\":0.566137566137566,\"difficultyWeight\":189,\"publicGameCount\":9},\"navy\":{\"count\":223,\"lastSeenTime\":1577036303309,\"publicGameCount\":8,\"difficulty\":0.5842696629213483,\"difficultyWeight\":89},\"Xbox\":{\"count\":211,\"lastSeenTime\":1576999174479,\"difficulty\":0.5,\"difficultyWeight\":264,\"publicGameCount\":27},\"observatory\":{\"count\":448,\"lastSeenTime\":1577004605706,\"publicGameCount\":15,\"difficulty\":0.6590909090909091,\"difficultyWeight\":88},\"Pokemon\":{\"count\":240,\"lastSeenTime\":1577006876607,\"publicGameCount\":24,\"difficulty\":0.5223214285714283,\"difficultyWeight\":224},\"white\":{\"count\":460,\"lastSeenTime\":1577018507060,\"publicGameCount\":32,\"difficulty\":0.48494983277591974,\"difficultyWeight\":299},\"manatee\":{\"count\":208,\"lastSeenTime\":1577036377269,\"publicGameCount\":5,\"difficulty\":0.7435897435897436,\"difficultyWeight\":39},\"Skype\":{\"count\":428,\"lastSeenTime\":1577032373261,\"publicGameCount\":29,\"difficulty\":0.5524193548387096,\"difficultyWeight\":248},\"Google\":{\"count\":415,\"lastSeenTime\":1577037402133,\"publicGameCount\":45,\"difficulty\":0.45436507936507936,\"difficultyWeight\":504},\"filter\":{\"count\":214,\"lastSeenTime\":1577025781863,\"publicGameCount\":4,\"difficulty\":0.6379310344827587,\"difficultyWeight\":58},\"bark\":{\"count\":451,\"lastSeenTime\":1577032801953,\"publicGameCount\":18,\"difficulty\":0.5365853658536585,\"difficultyWeight\":164},\"bathroom\":{\"count\":217,\"lastSeenTime\":1576971715224,\"difficulty\":0.5877862595419848,\"difficultyWeight\":131,\"publicGameCount\":9},\"blood\":{\"count\":434,\"lastSeenTime\":1577030301299,\"publicGameCount\":48,\"difficulty\":0.4859154929577464,\"difficultyWeight\":426},\"fortress\":{\"count\":408,\"lastSeenTime\":1577017825119,\"publicGameCount\":14,\"difficulty\":0.7244094488188977,\"difficultyWeight\":127},\"twig\":{\"count\":439,\"lastSeenTime\":1577037216675,\"publicGameCount\":34,\"difficulty\":0.5762711864406778,\"difficultyWeight\":236},\"head\":{\"count\":393,\"lastSeenTime\":1577036825894,\"publicGameCount\":30,\"difficulty\":0.5481171548117157,\"difficultyWeight\":478},\"fisherman\":{\"count\":235,\"lastSeenTime\":1577037056234,\"publicGameCount\":18,\"difficulty\":0.5714285714285715,\"difficultyWeight\":182},\"notification\":{\"count\":221,\"lastSeenTime\":1577024196032,\"publicGameCount\":17,\"difficulty\":0.7165354330708661,\"difficultyWeight\":127},\"wake up\":{\"count\":228,\"lastSeenTime\":1577014002026,\"publicGameCount\":10,\"difficulty\":0.6623376623376623,\"difficultyWeight\":77},\"Germany\":{\"count\":443,\"lastSeenTime\":1577013359587,\"publicGameCount\":44,\"difficulty\":0.5652173913043478,\"difficultyWeight\":391},\"island\":{\"count\":439,\"lastSeenTime\":1577019695028,\"publicGameCount\":59,\"difficulty\":0.460352422907489,\"difficultyWeight\":454},\"drum\":{\"count\":425,\"lastSeenTime\":1577036765048,\"difficulty\":0.5430463576158941,\"difficultyWeight\":302,\"publicGameCount\":32},\"lamp\":{\"count\":186,\"lastSeenTime\":1577037042051,\"difficulty\":0.5,\"difficultyWeight\":174,\"publicGameCount\":6},\"apricot\":{\"count\":189,\"lastSeenTime\":1577011310637,\"difficulty\":0.7391304347826086,\"difficultyWeight\":23,\"publicGameCount\":1},\"penguin\":{\"count\":203,\"lastSeenTime\":1576995550228,\"difficulty\":0.5635593220338985,\"difficultyWeight\":236,\"publicGameCount\":7},\"face\":{\"count\":429,\"lastSeenTime\":1577024267715,\"publicGameCount\":35,\"difficulty\":0.48509485094850946,\"difficultyWeight\":369},\"Garfield\":{\"count\":435,\"lastSeenTime\":1577009133675,\"publicGameCount\":26,\"difficulty\":0.6226415094339621,\"difficultyWeight\":212},\"alcohol\":{\"count\":211,\"lastSeenTime\":1577014187810,\"difficulty\":0.655367231638418,\"difficultyWeight\":177,\"publicGameCount\":17},\"lilypad\":{\"count\":449,\"lastSeenTime\":1577037483079,\"publicGameCount\":37,\"difficulty\":0.6151515151515151,\"difficultyWeight\":330},\"New Zealand\":{\"count\":439,\"lastSeenTime\":1577037306624,\"publicGameCount\":18,\"difficulty\":0.7258064516129032,\"difficultyWeight\":124},\"Twitter\":{\"count\":465,\"lastSeenTime\":1577033216553,\"publicGameCount\":55,\"difficulty\":0.4934210526315789,\"difficultyWeight\":456},\"speaker\":{\"count\":428,\"lastSeenTime\":1577015484814,\"publicGameCount\":35,\"difficulty\":0.5503144654088049,\"difficultyWeight\":318},\"orca\":{\"count\":206,\"lastSeenTime\":1577025251101,\"publicGameCount\":7,\"difficulty\":0.76,\"difficultyWeight\":100},\"tablecloth\":{\"count\":237,\"lastSeenTime\":1577033583113,\"publicGameCount\":9,\"difficulty\":0.6470588235294118,\"difficultyWeight\":68},\"Great Wall\":{\"count\":439,\"lastSeenTime\":1577036917213,\"publicGameCount\":31,\"difficulty\":0.7542372881355932,\"difficultyWeight\":236},\"restaurant\":{\"count\":416,\"lastSeenTime\":1577032137321,\"publicGameCount\":26,\"difficulty\":0.7285067873303167,\"difficultyWeight\":221},\"bleach\":{\"count\":232,\"lastSeenTime\":1577037151662,\"publicGameCount\":16,\"difficulty\":0.5555555555555555,\"difficultyWeight\":144},\"lion\":{\"count\":251,\"lastSeenTime\":1576975875210,\"difficulty\":0.4564102564102564,\"difficultyWeight\":195,\"publicGameCount\":13},\"price tag\":{\"count\":246,\"lastSeenTime\":1577035644067,\"publicGameCount\":36,\"difficulty\":0.6431372549019606,\"difficultyWeight\":255},\"pike\":{\"count\":396,\"lastSeenTime\":1576996771285,\"publicGameCount\":10,\"difficulty\":0.5588235294117648,\"difficultyWeight\":102},\"eyelash\":{\"count\":437,\"lastSeenTime\":1577031469464,\"difficulty\":0.5037406483790523,\"difficultyWeight\":401,\"publicGameCount\":46},\"battery\":{\"count\":219,\"lastSeenTime\":1577013947672,\"publicGameCount\":17,\"difficulty\":0.5684647302904564,\"difficultyWeight\":241},\"forest fire\":{\"count\":227,\"lastSeenTime\":1577012247604,\"publicGameCount\":21,\"difficulty\":0.6792452830188679,\"difficultyWeight\":159},\"hedgehog\":{\"count\":218,\"lastSeenTime\":1577018853704,\"publicGameCount\":18,\"difficulty\":0.593939393939394,\"difficultyWeight\":165},\"Kirby\":{\"count\":415,\"lastSeenTime\":1577015274772,\"publicGameCount\":37,\"difficulty\":0.5608108108108109,\"difficultyWeight\":296},\"drum kit\":{\"count\":426,\"lastSeenTime\":1577024698445,\"publicGameCount\":36,\"difficulty\":0.7584905660377359,\"difficultyWeight\":265},\"earthquake\":{\"count\":442,\"lastSeenTime\":1577034044177,\"publicGameCount\":33,\"difficulty\":0.7392857142857143,\"difficultyWeight\":280},\"hexagon\":{\"count\":220,\"lastSeenTime\":1577037002742,\"publicGameCount\":11,\"difficulty\":0.6324786324786325,\"difficultyWeight\":117},\"Easter Bunny\":{\"count\":447,\"lastSeenTime\":1577036872583,\"publicGameCount\":51,\"difficulty\":0.7135678391959799,\"difficultyWeight\":398},\"abstract\":{\"count\":458,\"lastSeenTime\":1577036645866,\"difficulty\":0.8130081300813008,\"difficultyWeight\":123,\"publicGameCount\":13},\"oxygen\":{\"count\":233,\"lastSeenTime\":1577017517304,\"publicGameCount\":14,\"difficulty\":0.5620437956204379,\"difficultyWeight\":137},\"tropical\":{\"count\":395,\"lastSeenTime\":1577032246891,\"publicGameCount\":23,\"difficulty\":0.7192118226600985,\"difficultyWeight\":203},\"skinny\":{\"count\":444,\"lastSeenTime\":1577035202003,\"publicGameCount\":35,\"difficulty\":0.5780141843971628,\"difficultyWeight\":282},\"accordion\":{\"count\":426,\"lastSeenTime\":1577024931941,\"publicGameCount\":8,\"difficulty\":0.7567567567567568,\"difficultyWeight\":74},\"cookie\":{\"count\":246,\"lastSeenTime\":1577032123143,\"difficulty\":0.5941558441558442,\"difficultyWeight\":308,\"publicGameCount\":17},\"Nutella\":{\"count\":429,\"lastSeenTime\":1577032676999,\"publicGameCount\":40,\"difficulty\":0.5402985074626866,\"difficultyWeight\":335},\"seagull\":{\"count\":248,\"lastSeenTime\":1577030226184,\"publicGameCount\":14,\"difficulty\":0.689922480620155,\"difficultyWeight\":129},\"revolver\":{\"count\":236,\"lastSeenTime\":1577015335750,\"difficulty\":0.6691176470588235,\"difficultyWeight\":136,\"publicGameCount\":12},\"vision\":{\"count\":236,\"lastSeenTime\":1577015710329,\"difficulty\":0.5686274509803921,\"difficultyWeight\":51,\"publicGameCount\":5},\"knuckle\":{\"count\":426,\"lastSeenTime\":1577024897004,\"publicGameCount\":24,\"difficulty\":0.572972972972973,\"difficultyWeight\":185},\"Superman\":{\"count\":416,\"lastSeenTime\":1577020636784,\"publicGameCount\":59,\"difficulty\":0.4416058394160583,\"difficultyWeight\":548},\"fencing\":{\"count\":233,\"lastSeenTime\":1577019408573,\"publicGameCount\":7,\"difficulty\":0.5671641791044776,\"difficultyWeight\":67},\"coral reef\":{\"count\":474,\"lastSeenTime\":1577034200815,\"publicGameCount\":27,\"difficulty\":0.7587939698492462,\"difficultyWeight\":199},\"stamp\":{\"count\":445,\"lastSeenTime\":1577035947488,\"publicGameCount\":30,\"difficulty\":0.5179282868525894,\"difficultyWeight\":251},\"leader\":{\"count\":221,\"lastSeenTime\":1577014187810,\"difficulty\":0.7314814814814815,\"difficultyWeight\":108,\"publicGameCount\":8},\"cone\":{\"count\":222,\"lastSeenTime\":1577036110764,\"difficulty\":0.4692737430167598,\"difficultyWeight\":179,\"publicGameCount\":1},\"palace\":{\"count\":398,\"lastSeenTime\":1577035544830,\"publicGameCount\":15,\"difficulty\":0.588785046728972,\"difficultyWeight\":107},\"dead\":{\"count\":433,\"lastSeenTime\":1577035554960,\"difficulty\":0.42827868852459017,\"difficultyWeight\":488,\"publicGameCount\":45},\"Yoda\":{\"count\":450,\"lastSeenTime\":1577032958355,\"publicGameCount\":30,\"difficulty\":0.5253731343283581,\"difficultyWeight\":335},\"infinite\":{\"count\":224,\"lastSeenTime\":1576999428424,\"publicGameCount\":20,\"difficulty\":0.6011235955056179,\"difficultyWeight\":178},\"bill\":{\"count\":239,\"lastSeenTime\":1576991232857,\"difficulty\":0.6260869565217392,\"difficultyWeight\":115,\"publicGameCount\":6},\"receptionist\":{\"count\":240,\"lastSeenTime\":1576934377323,\"publicGameCount\":4,\"difficulty\":0.8387096774193549,\"difficultyWeight\":31},\"guinea pig\":{\"count\":231,\"lastSeenTime\":1577024212837,\"publicGameCount\":10,\"difficulty\":0.7727272727272727,\"difficultyWeight\":66},\"potato\":{\"count\":227,\"lastSeenTime\":1577032459097,\"difficulty\":0.5584415584415585,\"difficultyWeight\":154,\"publicGameCount\":6},\"fluid\":{\"count\":233,\"lastSeenTime\":1577001273789,\"publicGameCount\":9,\"difficulty\":0.6,\"difficultyWeight\":85},\"cheeseburger\":{\"count\":216,\"lastSeenTime\":1577006913223,\"publicGameCount\":23,\"difficulty\":0.6235955056179775,\"difficultyWeight\":178},\"punk\":{\"count\":208,\"lastSeenTime\":1577016914668,\"publicGameCount\":3,\"difficulty\":0.7777777777777778,\"difficultyWeight\":54},\"prune\":{\"count\":233,\"lastSeenTime\":1577032066062,\"publicGameCount\":2,\"difficulty\":0.8636363636363636,\"difficultyWeight\":22},\"crate\":{\"count\":211,\"lastSeenTime\":1577001496952,\"publicGameCount\":9,\"difficulty\":0.5,\"difficultyWeight\":118},\"west\":{\"count\":446,\"lastSeenTime\":1577019122862,\"publicGameCount\":31,\"difficulty\":0.5,\"difficultyWeight\":286},\"Zelda\":{\"count\":252,\"lastSeenTime\":1577036387422,\"difficulty\":0.6666666666666666,\"difficultyWeight\":57,\"publicGameCount\":4},\"India\":{\"count\":464,\"lastSeenTime\":1577014609359,\"publicGameCount\":19,\"difficulty\":0.5818181818181818,\"difficultyWeight\":165},\"Scotland\":{\"count\":523,\"lastSeenTime\":1577034300607,\"publicGameCount\":16,\"difficulty\":0.7327586206896551,\"difficultyWeight\":116},\"Zuma\":{\"count\":240,\"lastSeenTime\":1577025899880,\"publicGameCount\":3,\"difficulty\":0.84,\"difficultyWeight\":25},\"forest\":{\"count\":440,\"lastSeenTime\":1577036917213,\"publicGameCount\":38,\"difficulty\":0.5382165605095539,\"difficultyWeight\":314},\"defense\":{\"count\":211,\"lastSeenTime\":1577031496440,\"difficulty\":0.6296296296296297,\"difficultyWeight\":54,\"publicGameCount\":7},\"iPad\":{\"count\":227,\"lastSeenTime\":1577030626411,\"publicGameCount\":29,\"difficulty\":0.5206896551724138,\"difficultyWeight\":290},\"cave\":{\"count\":444,\"lastSeenTime\":1577030888377,\"publicGameCount\":28,\"difficulty\":0.6072727272727274,\"difficultyWeight\":275},\"thermometer\":{\"count\":200,\"lastSeenTime\":1577004049189,\"publicGameCount\":15,\"difficulty\":0.608,\"difficultyWeight\":125},\"Popeye\":{\"count\":448,\"lastSeenTime\":1577035656351,\"difficulty\":0.6792452830188679,\"difficultyWeight\":159,\"publicGameCount\":19},\"pensioner\":{\"count\":217,\"lastSeenTime\":1577031023734,\"difficulty\":0.9166666666666666,\"difficultyWeight\":36,\"publicGameCount\":2},\"postcard\":{\"count\":225,\"lastSeenTime\":1577017319731,\"difficulty\":0.5573770491803278,\"difficultyWeight\":122,\"publicGameCount\":15},\"desert\":{\"count\":475,\"lastSeenTime\":1577036846155,\"difficulty\":0.6461538461538461,\"difficultyWeight\":260,\"publicGameCount\":28},\"remote\":{\"count\":219,\"lastSeenTime\":1577025190112,\"publicGameCount\":9,\"difficulty\":0.6708860759493671,\"difficultyWeight\":158},\"sculpture\":{\"count\":208,\"lastSeenTime\":1576979673605,\"publicGameCount\":5,\"difficulty\":0.8181818181818182,\"difficultyWeight\":66},\"cream\":{\"count\":233,\"lastSeenTime\":1577000966420,\"difficulty\":0.7131782945736435,\"difficultyWeight\":129,\"publicGameCount\":11},\"Xerox\":{\"count\":383,\"lastSeenTime\":1577036836029,\"publicGameCount\":7,\"difficulty\":0.5319148936170213,\"difficultyWeight\":47},\"cardboard\":{\"count\":221,\"lastSeenTime\":1577015910800,\"difficulty\":0.6231884057971014,\"difficultyWeight\":69,\"publicGameCount\":6},\"flashlight\":{\"count\":197,\"lastSeenTime\":1577018276584,\"publicGameCount\":27,\"difficulty\":0.46987951807228917,\"difficultyWeight\":249},\"butcher\":{\"count\":222,\"lastSeenTime\":1576983612198,\"publicGameCount\":8,\"difficulty\":0.7386363636363636,\"difficultyWeight\":88},\"McDonalds\":{\"count\":456,\"lastSeenTime\":1577005058058,\"publicGameCount\":62,\"difficulty\":0.46296296296296297,\"difficultyWeight\":486},\"rest\":{\"count\":263,\"lastSeenTime\":1577011349311,\"publicGameCount\":6,\"difficulty\":0.6282051282051282,\"difficultyWeight\":78},\"Eminem\":{\"count\":434,\"lastSeenTime\":1577037392013,\"publicGameCount\":25,\"difficulty\":0.6443298969072165,\"difficultyWeight\":194},\"bathtub\":{\"count\":248,\"lastSeenTime\":1577036608773,\"publicGameCount\":25,\"difficulty\":0.5530973451327434,\"difficultyWeight\":226},\"beatbox\":{\"count\":437,\"lastSeenTime\":1577035409514,\"publicGameCount\":14,\"difficulty\":0.6413043478260869,\"difficultyWeight\":92},\"hot\":{\"count\":439,\"lastSeenTime\":1577025852952,\"publicGameCount\":39,\"difficulty\":0.5833333333333331,\"difficultyWeight\":384},\"clown\":{\"count\":223,\"lastSeenTime\":1577019595041,\"difficulty\":0.5720338983050848,\"difficultyWeight\":236,\"publicGameCount\":16},\"apocalypse\":{\"count\":219,\"lastSeenTime\":1576990388712,\"publicGameCount\":10,\"difficulty\":0.7777777777777778,\"difficultyWeight\":90},\"antivirus\":{\"count\":221,\"lastSeenTime\":1577011071361,\"publicGameCount\":8,\"difficulty\":0.7777777777777778,\"difficultyWeight\":72},\"unicycle\":{\"count\":232,\"lastSeenTime\":1577014443779,\"publicGameCount\":11,\"difficulty\":0.5923076923076923,\"difficultyWeight\":130},\"frame\":{\"count\":242,\"lastSeenTime\":1577037355436,\"difficulty\":0.553030303030303,\"difficultyWeight\":132,\"publicGameCount\":11},\"taxi\":{\"count\":239,\"lastSeenTime\":1577035803681,\"publicGameCount\":11,\"difficulty\":0.41843971631205673,\"difficultyWeight\":141},\"tip\":{\"count\":238,\"lastSeenTime\":1577014053725,\"publicGameCount\":6,\"difficulty\":0.6231884057971014,\"difficultyWeight\":69},\"chinchilla\":{\"count\":224,\"lastSeenTime\":1577033694684,\"publicGameCount\":3,\"difficulty\":0.8636363636363636,\"difficultyWeight\":22},\"hard\":{\"count\":426,\"lastSeenTime\":1577020128841,\"difficulty\":0.6172839506172839,\"difficultyWeight\":162,\"publicGameCount\":11},\"saltwater\":{\"count\":421,\"lastSeenTime\":1577032344586,\"publicGameCount\":23,\"difficulty\":0.5576923076923077,\"difficultyWeight\":156},\"detective\":{\"count\":235,\"lastSeenTime\":1577036158826,\"publicGameCount\":13,\"difficulty\":0.6910569105691057,\"difficultyWeight\":123},\"open\":{\"count\":424,\"lastSeenTime\":1577037216675,\"publicGameCount\":25,\"difficulty\":0.581081081081081,\"difficultyWeight\":222},\"armpit\":{\"count\":392,\"lastSeenTime\":1577036137207,\"difficulty\":0.48220064724919093,\"difficultyWeight\":309,\"publicGameCount\":34},\"darts\":{\"count\":225,\"lastSeenTime\":1577035469679,\"publicGameCount\":9,\"difficulty\":0.7189542483660128,\"difficultyWeight\":153},\"thumb\":{\"count\":450,\"lastSeenTime\":1577036283076,\"publicGameCount\":47,\"difficulty\":0.49489795918367346,\"difficultyWeight\":392},\"canary\":{\"count\":217,\"lastSeenTime\":1577032554634,\"difficulty\":0.8055555555555556,\"difficultyWeight\":72,\"publicGameCount\":6},\"action\":{\"count\":208,\"lastSeenTime\":1576994505129,\"publicGameCount\":8,\"difficulty\":0.6031746031746031,\"difficultyWeight\":63},\"plug\":{\"count\":221,\"lastSeenTime\":1577024368956,\"publicGameCount\":11,\"difficulty\":0.4056603773584906,\"difficultyWeight\":106},\"purity\":{\"count\":238,\"lastSeenTime\":1576999487961,\"publicGameCount\":2,\"difficulty\":0.9333333333333333,\"difficultyWeight\":30},\"switch\":{\"count\":225,\"lastSeenTime\":1577024344558,\"publicGameCount\":11,\"difficulty\":0.49714285714285716,\"difficultyWeight\":175},\"globe\":{\"count\":437,\"lastSeenTime\":1577014443779,\"difficulty\":0.5,\"difficultyWeight\":294,\"publicGameCount\":31},\"Wonder Woman\":{\"count\":441,\"lastSeenTime\":1577036645866,\"publicGameCount\":34,\"difficulty\":0.6546184738955824,\"difficultyWeight\":249},\"pajamas\":{\"count\":237,\"lastSeenTime\":1577011157534,\"publicGameCount\":10,\"difficulty\":0.6597938144329895,\"difficultyWeight\":97},\"tea\":{\"count\":193,\"lastSeenTime\":1577025899880,\"difficulty\":0.5287958115183246,\"difficultyWeight\":191,\"publicGameCount\":5},\"mouse\":{\"count\":246,\"lastSeenTime\":1577018362555,\"difficulty\":0.5351351351351353,\"difficultyWeight\":185,\"publicGameCount\":3},\"butter\":{\"count\":219,\"lastSeenTime\":1577026025625,\"difficulty\":0.583756345177665,\"difficultyWeight\":197,\"publicGameCount\":9},\"turkey\":{\"count\":454,\"lastSeenTime\":1577035985945,\"publicGameCount\":30,\"difficulty\":0.6236162361623615,\"difficultyWeight\":271},\"The Beatles\":{\"count\":412,\"lastSeenTime\":1577021339910,\"publicGameCount\":22,\"difficulty\":0.8,\"difficultyWeight\":165},\"armor\":{\"count\":257,\"lastSeenTime\":1577037557962,\"publicGameCount\":14,\"difficulty\":0.6347305389221555,\"difficultyWeight\":167},\"chimney\":{\"count\":216,\"lastSeenTime\":1577034679025,\"publicGameCount\":13,\"difficulty\":0.5819672131147541,\"difficultyWeight\":122},\"fish\":{\"count\":450,\"lastSeenTime\":1577037521580,\"publicGameCount\":55,\"difficulty\":0.3680851063829787,\"difficultyWeight\":470},\"William Shakespeare\":{\"count\":434,\"lastSeenTime\":1577016407755,\"publicGameCount\":21,\"difficulty\":0.7692307692307693,\"difficultyWeight\":156},\"Dumbo\":{\"count\":430,\"lastSeenTime\":1577037178254,\"publicGameCount\":24,\"difficulty\":0.5953488372093022,\"difficultyWeight\":215},\"king\":{\"count\":243,\"lastSeenTime\":1577029763817,\"publicGameCount\":5,\"difficulty\":0.49214659685863876,\"difficultyWeight\":191},\"radio\":{\"count\":251,\"lastSeenTime\":1577017671934,\"publicGameCount\":10,\"difficulty\":0.5672514619883041,\"difficultyWeight\":171},\"volcano\":{\"count\":420,\"lastSeenTime\":1577034290492,\"publicGameCount\":49,\"difficulty\":0.4449244060475162,\"difficultyWeight\":463},\"fairy\":{\"count\":240,\"lastSeenTime\":1577037632002,\"difficulty\":0.5481927710843374,\"difficultyWeight\":166,\"publicGameCount\":4},\"ruler\":{\"count\":407,\"lastSeenTime\":1577015824965,\"publicGameCount\":43,\"difficulty\":0.49453551912568305,\"difficultyWeight\":366},\"towel\":{\"count\":222,\"lastSeenTime\":1577018710756,\"difficulty\":0.5268817204301075,\"difficultyWeight\":93,\"publicGameCount\":8},\"ticket\":{\"count\":251,\"lastSeenTime\":1576990850601,\"difficulty\":0.4943181818181818,\"difficultyWeight\":176,\"publicGameCount\":19},\"pan\":{\"count\":471,\"lastSeenTime\":1577003097778,\"publicGameCount\":55,\"difficulty\":0.6223776223776225,\"difficultyWeight\":429},\"snail\":{\"count\":245,\"lastSeenTime\":1577012059559,\"difficulty\":0.4820512820512821,\"difficultyWeight\":195,\"publicGameCount\":12},\"tortoise\":{\"count\":227,\"lastSeenTime\":1576922942486,\"difficulty\":0.7345132743362832,\"difficultyWeight\":113,\"publicGameCount\":6},\"panda\":{\"count\":229,\"lastSeenTime\":1577013825828,\"publicGameCount\":23,\"difficulty\":0.5071090047393365,\"difficultyWeight\":211},\"sphinx\":{\"count\":224,\"lastSeenTime\":1577004504580,\"difficulty\":0.8208955223880597,\"difficultyWeight\":67,\"publicGameCount\":7},\"festival\":{\"count\":238,\"lastSeenTime\":1577035947488,\"publicGameCount\":3,\"difficulty\":0.6851851851851852,\"difficultyWeight\":54},\"injection\":{\"count\":218,\"lastSeenTime\":1577025893054,\"publicGameCount\":15,\"difficulty\":0.6453900709219859,\"difficultyWeight\":141},\"airbag\":{\"count\":230,\"lastSeenTime\":1577034391339,\"publicGameCount\":9,\"difficulty\":0.6000000000000001,\"difficultyWeight\":60},\"jazz\":{\"count\":414,\"lastSeenTime\":1577037497263,\"publicGameCount\":18,\"difficulty\":0.5301204819277109,\"difficultyWeight\":166},\"Playstation\":{\"count\":212,\"lastSeenTime\":1577032505816,\"publicGameCount\":22,\"difficulty\":0.6195652173913043,\"difficultyWeight\":184},\"Photoshop\":{\"count\":471,\"lastSeenTime\":1577034728271,\"publicGameCount\":20,\"difficulty\":0.7314285714285714,\"difficultyWeight\":175},\"shy\":{\"count\":208,\"lastSeenTime\":1577036765048,\"difficulty\":0.5571428571428572,\"difficultyWeight\":70,\"publicGameCount\":3},\"pavement\":{\"count\":427,\"lastSeenTime\":1577008811101,\"difficulty\":0.7156862745098039,\"difficultyWeight\":102,\"publicGameCount\":11},\"Bitcoin\":{\"count\":439,\"lastSeenTime\":1577002076413,\"difficulty\":0.5582329317269076,\"difficultyWeight\":249,\"publicGameCount\":32},\"Star Wars\":{\"count\":212,\"lastSeenTime\":1577017097804,\"publicGameCount\":21,\"difficulty\":0.5906040268456377,\"difficultyWeight\":149},\"punishment\":{\"count\":240,\"lastSeenTime\":1577037002742,\"publicGameCount\":14,\"difficulty\":0.6990291262135923,\"difficultyWeight\":103},\"flute\":{\"count\":444,\"lastSeenTime\":1577035238778,\"difficulty\":0.5426356589147286,\"difficultyWeight\":258,\"publicGameCount\":25},\"ringtone\":{\"count\":242,\"lastSeenTime\":1577024168827,\"difficulty\":0.6688741721854303,\"difficultyWeight\":151,\"publicGameCount\":15},\"thunder\":{\"count\":437,\"lastSeenTime\":1577020011949,\"publicGameCount\":37,\"difficulty\":0.48125,\"difficultyWeight\":320},\"vitamin\":{\"count\":218,\"lastSeenTime\":1577030567444,\"publicGameCount\":10,\"difficulty\":0.6111111111111112,\"difficultyWeight\":90},\"cocktail\":{\"count\":215,\"lastSeenTime\":1576985193733,\"publicGameCount\":19,\"difficulty\":0.6144578313253012,\"difficultyWeight\":166},\"levitate\":{\"count\":229,\"lastSeenTime\":1577024791794,\"publicGameCount\":15,\"difficulty\":0.7133333333333334,\"difficultyWeight\":150},\"lightning\":{\"count\":447,\"lastSeenTime\":1577029603248,\"publicGameCount\":64,\"difficulty\":0.5078740157480314,\"difficultyWeight\":508},\"homeless\":{\"count\":437,\"lastSeenTime\":1577035803681,\"publicGameCount\":42,\"difficulty\":0.6513761467889908,\"difficultyWeight\":327},\"dishrag\":{\"count\":234,\"lastSeenTime\":1577014128670,\"difficulty\":0.6904761904761905,\"difficultyWeight\":42,\"publicGameCount\":5},\"glitter\":{\"count\":225,\"lastSeenTime\":1577030813017,\"difficulty\":0.7307692307692307,\"difficultyWeight\":104,\"publicGameCount\":6},\"Rome\":{\"count\":449,\"lastSeenTime\":1577025200410,\"publicGameCount\":14,\"difficulty\":0.6530612244897959,\"difficultyWeight\":98},\"failure\":{\"count\":234,\"lastSeenTime\":1577024317066,\"publicGameCount\":9,\"difficulty\":0.6170212765957447,\"difficultyWeight\":94},\"Morse code\":{\"count\":222,\"lastSeenTime\":1577037331094,\"publicGameCount\":12,\"difficulty\":0.5256410256410257,\"difficultyWeight\":78},\"lap\":{\"count\":415,\"lastSeenTime\":1577037627992,\"publicGameCount\":15,\"difficulty\":0.5968992248062015,\"difficultyWeight\":129},\"wiggle\":{\"count\":238,\"lastSeenTime\":1577030392582,\"publicGameCount\":6,\"difficulty\":0.5544554455445545,\"difficultyWeight\":101},\"shaving cream\":{\"count\":243,\"lastSeenTime\":1577036608773,\"publicGameCount\":19,\"difficulty\":0.8309859154929577,\"difficultyWeight\":142},\"keyboard\":{\"count\":404,\"lastSeenTime\":1577018894925,\"publicGameCount\":59,\"difficulty\":0.5943600867678959,\"difficultyWeight\":461},\"Nike\":{\"count\":413,\"lastSeenTime\":1577014994472,\"publicGameCount\":46,\"difficulty\":0.47692307692307695,\"difficultyWeight\":520},\"eskimo\":{\"count\":219,\"lastSeenTime\":1577000783813,\"publicGameCount\":4,\"difficulty\":0.7692307692307693,\"difficultyWeight\":39},\"newspaper\":{\"count\":242,\"lastSeenTime\":1577009484512,\"publicGameCount\":20,\"difficulty\":0.5031847133757962,\"difficultyWeight\":157},\"barbarian\":{\"count\":222,\"lastSeenTime\":1577033190137,\"difficulty\":0.9333333333333333,\"difficultyWeight\":15,\"publicGameCount\":1},\"vault\":{\"count\":220,\"lastSeenTime\":1577019621093,\"difficulty\":0.6371681415929203,\"difficultyWeight\":113,\"publicGameCount\":11},\"wall\":{\"count\":214,\"lastSeenTime\":1577017203993,\"publicGameCount\":12,\"difficulty\":0.5,\"difficultyWeight\":148},\"virus\":{\"count\":218,\"lastSeenTime\":1577033699738,\"publicGameCount\":12,\"difficulty\":0.5809523809523809,\"difficultyWeight\":105},\"lobster\":{\"count\":437,\"lastSeenTime\":1577033153784,\"publicGameCount\":31,\"difficulty\":0.6090225563909776,\"difficultyWeight\":266},\"fire hydrant\":{\"count\":425,\"lastSeenTime\":1577019435052,\"publicGameCount\":37,\"difficulty\":0.7711267605633803,\"difficultyWeight\":284},\"circus\":{\"count\":245,\"lastSeenTime\":1577017380155,\"publicGameCount\":12,\"difficulty\":0.5785714285714286,\"difficultyWeight\":140},\"Sherlock Holmes\":{\"count\":456,\"lastSeenTime\":1577025028815,\"publicGameCount\":13,\"difficulty\":0.7021276595744681,\"difficultyWeight\":94},\"Egypt\":{\"count\":425,\"lastSeenTime\":1577035409514,\"publicGameCount\":41,\"difficulty\":0.5552050473186119,\"difficultyWeight\":317},\"can\":{\"count\":213,\"lastSeenTime\":1577016914668,\"difficulty\":0.5325443786982249,\"difficultyWeight\":169,\"publicGameCount\":4},\"Singapore\":{\"count\":458,\"lastSeenTime\":1577035900512,\"difficulty\":0.7310924369747899,\"difficultyWeight\":119,\"publicGameCount\":13},\"ramp\":{\"count\":427,\"lastSeenTime\":1577035692632,\"publicGameCount\":21,\"difficulty\":0.5707964601769911,\"difficultyWeight\":226},\"thug\":{\"count\":187,\"lastSeenTime\":1577011310637,\"publicGameCount\":11,\"difficulty\":0.6666666666666666,\"difficultyWeight\":87},\"ice cream\":{\"count\":243,\"lastSeenTime\":1577035886295,\"publicGameCount\":46,\"difficulty\":0.44299674267100975,\"difficultyWeight\":307},\"bottle flip\":{\"count\":220,\"lastSeenTime\":1577008687049,\"publicGameCount\":32,\"difficulty\":0.7818181818181819,\"difficultyWeight\":220},\"cash\":{\"count\":223,\"lastSeenTime\":1577020788547,\"publicGameCount\":9,\"difficulty\":0.5568862275449104,\"difficultyWeight\":167},\"raccoon\":{\"count\":222,\"lastSeenTime\":1577005002910,\"publicGameCount\":14,\"difficulty\":0.7025316455696202,\"difficultyWeight\":158},\"Gru\":{\"count\":443,\"lastSeenTime\":1577003426912,\"publicGameCount\":26,\"difficulty\":0.777292576419214,\"difficultyWeight\":229},\"Bart Simpson\":{\"count\":452,\"lastSeenTime\":1577034107033,\"publicGameCount\":44,\"difficulty\":0.6993670886075949,\"difficultyWeight\":316},\"pharmacist\":{\"count\":232,\"lastSeenTime\":1577034764802,\"publicGameCount\":7,\"difficulty\":0.75,\"difficultyWeight\":48},\"thunderstorm\":{\"count\":424,\"lastSeenTime\":1577025008306,\"difficulty\":0.648293963254593,\"difficultyWeight\":381,\"publicGameCount\":54},\"cork\":{\"count\":226,\"lastSeenTime\":1577015499271,\"difficulty\":0.6370967741935484,\"difficultyWeight\":124,\"publicGameCount\":7},\"rock\":{\"count\":454,\"lastSeenTime\":1577019177354,\"publicGameCount\":32,\"difficulty\":0.5164473684210527,\"difficultyWeight\":304},\"Gumball\":{\"count\":440,\"lastSeenTime\":1577024549622,\"publicGameCount\":48,\"difficulty\":0.65814696485623,\"difficultyWeight\":313},\"lasso\":{\"count\":196,\"lastSeenTime\":1577010360204,\"publicGameCount\":14,\"difficulty\":0.6503496503496502,\"difficultyWeight\":143},\"son\":{\"count\":241,\"lastSeenTime\":1577025627579,\"difficulty\":0.6883116883116883,\"difficultyWeight\":154,\"publicGameCount\":12},\"acorn\":{\"count\":230,\"lastSeenTime\":1577003071375,\"publicGameCount\":7,\"difficulty\":0.6037735849056604,\"difficultyWeight\":106},\"Pinocchio\":{\"count\":404,\"lastSeenTime\":1577037446644,\"publicGameCount\":42,\"difficulty\":0.6156351791530945,\"difficultyWeight\":307},\"airport\":{\"count\":419,\"lastSeenTime\":1577024968702,\"publicGameCount\":28,\"difficulty\":0.6270491803278688,\"difficultyWeight\":244},\"caterpillar\":{\"count\":211,\"lastSeenTime\":1577017369949,\"publicGameCount\":27,\"difficulty\":0.5412371134020618,\"difficultyWeight\":194},\"diagram\":{\"count\":236,\"lastSeenTime\":1577034689603,\"publicGameCount\":7,\"difficulty\":0.7846153846153846,\"difficultyWeight\":65},\"biology\":{\"count\":215,\"lastSeenTime\":1576993475178,\"difficulty\":0.7058823529411765,\"difficultyWeight\":68,\"publicGameCount\":5},\"slam\":{\"count\":186,\"lastSeenTime\":1577024615879,\"difficulty\":0.7272727272727273,\"difficultyWeight\":44,\"publicGameCount\":4},\"iceberg\":{\"count\":418,\"lastSeenTime\":1577029739555,\"publicGameCount\":46,\"difficulty\":0.5688073394495412,\"difficultyWeight\":327},\"Netherlands\":{\"count\":416,\"lastSeenTime\":1577019041654,\"publicGameCount\":22,\"difficulty\":0.6797385620915033,\"difficultyWeight\":153},\"vacuum\":{\"count\":218,\"lastSeenTime\":1577036225894,\"publicGameCount\":14,\"difficulty\":0.6,\"difficultyWeight\":120},\"bandana\":{\"count\":242,\"lastSeenTime\":1577000870046,\"publicGameCount\":24,\"difficulty\":0.6820083682008367,\"difficultyWeight\":239},\"Picasso\":{\"count\":456,\"lastSeenTime\":1577016640495,\"publicGameCount\":9,\"difficulty\":0.639344262295082,\"difficultyWeight\":61},\"pause\":{\"count\":231,\"lastSeenTime\":1577035985945,\"difficulty\":0.5628140703517587,\"difficultyWeight\":199,\"publicGameCount\":6},\"grasshopper\":{\"count\":218,\"lastSeenTime\":1577035975818,\"publicGameCount\":13,\"difficulty\":0.5514018691588785,\"difficultyWeight\":107},\"pickaxe\":{\"count\":286,\"lastSeenTime\":1577036559751,\"difficulty\":0.5,\"difficultyWeight\":248,\"publicGameCount\":26},\"cup\":{\"count\":212,\"lastSeenTime\":1576951270268,\"difficulty\":0.4854368932038835,\"difficultyWeight\":206,\"publicGameCount\":2},\"litter box\":{\"count\":241,\"lastSeenTime\":1577001584251,\"publicGameCount\":10,\"difficulty\":0.7209302325581395,\"difficultyWeight\":86},\"Microsoft\":{\"count\":431,\"lastSeenTime\":1577037192421,\"publicGameCount\":38,\"difficulty\":0.5568862275449101,\"difficultyWeight\":334},\"burp\":{\"count\":212,\"lastSeenTime\":1576996543336,\"difficulty\":0.5813953488372093,\"difficultyWeight\":86,\"publicGameCount\":7},\"loaf\":{\"count\":240,\"lastSeenTime\":1577035876160,\"difficulty\":0.5728155339805825,\"difficultyWeight\":103,\"publicGameCount\":9},\"poor\":{\"count\":458,\"lastSeenTime\":1577019287813,\"publicGameCount\":30,\"difficulty\":0.6166007905138341,\"difficultyWeight\":253},\"smell\":{\"count\":412,\"lastSeenTime\":1577017800715,\"publicGameCount\":28,\"difficulty\":0.5636363636363637,\"difficultyWeight\":275},\"science\":{\"count\":230,\"lastSeenTime\":1577026054361,\"publicGameCount\":10,\"difficulty\":0.6320754716981132,\"difficultyWeight\":106},\"meteorite\":{\"count\":222,\"lastSeenTime\":1577004853990,\"difficulty\":0.752,\"difficultyWeight\":125,\"publicGameCount\":5},\"pastry\":{\"count\":221,\"lastSeenTime\":1577024917709,\"difficulty\":0.78,\"difficultyWeight\":50,\"publicGameCount\":6},\"bear trap\":{\"count\":198,\"lastSeenTime\":1576990904851,\"publicGameCount\":17,\"difficulty\":0.5909090909090909,\"difficultyWeight\":110},\"fast food\":{\"count\":243,\"lastSeenTime\":1577018145182,\"publicGameCount\":26,\"difficulty\":0.6331658291457286,\"difficultyWeight\":199},\"octopus\":{\"count\":404,\"lastSeenTime\":1577014594710,\"publicGameCount\":57,\"difficulty\":0.41721854304635764,\"difficultyWeight\":453},\"butterfly\":{\"count\":240,\"lastSeenTime\":1577008698019,\"difficulty\":0.37710437710437716,\"difficultyWeight\":297,\"publicGameCount\":23},\"geyser\":{\"count\":487,\"lastSeenTime\":1577015860357,\"publicGameCount\":13,\"difficulty\":0.8113207547169812,\"difficultyWeight\":106},\"spring\":{\"count\":438,\"lastSeenTime\":1577034268153,\"difficulty\":0.5047619047619049,\"difficultyWeight\":210,\"publicGameCount\":27},\"yardstick\":{\"count\":225,\"lastSeenTime\":1577015732671,\"difficulty\":0.859375,\"difficultyWeight\":64,\"publicGameCount\":5},\"sniper\":{\"count\":234,\"lastSeenTime\":1577034253534,\"publicGameCount\":5,\"difficulty\":0.6068376068376068,\"difficultyWeight\":117},\"tissue box\":{\"count\":231,\"lastSeenTime\":1577011396963,\"publicGameCount\":30,\"difficulty\":0.6936936936936937,\"difficultyWeight\":222},\"calendar\":{\"count\":232,\"lastSeenTime\":1577009484512,\"publicGameCount\":7,\"difficulty\":0.6363636363636364,\"difficultyWeight\":110},\"scissors\":{\"count\":249,\"lastSeenTime\":1577036549571,\"publicGameCount\":27,\"difficulty\":0.5690376569037656,\"difficultyWeight\":239},\"Creeper\":{\"count\":403,\"lastSeenTime\":1577032261139,\"publicGameCount\":57,\"difficulty\":0.520408163265306,\"difficultyWeight\":490},\"sledgehammer\":{\"count\":226,\"lastSeenTime\":1577017628796,\"publicGameCount\":17,\"difficulty\":0.6486486486486487,\"difficultyWeight\":111},\"cheerleader\":{\"count\":223,\"lastSeenTime\":1577031166738,\"publicGameCount\":11,\"difficulty\":0.6547619047619048,\"difficultyWeight\":84},\"red\":{\"count\":451,\"lastSeenTime\":1577034411762,\"publicGameCount\":33,\"difficulty\":0.41350210970464135,\"difficultyWeight\":474},\"Samsung\":{\"count\":443,\"lastSeenTime\":1577036248643,\"difficulty\":0.556497175141243,\"difficultyWeight\":354,\"publicGameCount\":38},\"graveyard\":{\"count\":501,\"lastSeenTime\":1577008564587,\"publicGameCount\":45,\"difficulty\":0.5867768595041323,\"difficultyWeight\":363},\"bell pepper\":{\"count\":204,\"lastSeenTime\":1577025914163,\"publicGameCount\":15,\"difficulty\":0.768595041322314,\"difficultyWeight\":121},\"interview\":{\"count\":189,\"lastSeenTime\":1576996882509,\"publicGameCount\":5,\"difficulty\":0.8181818181818182,\"difficultyWeight\":44},\"Las Vegas\":{\"count\":448,\"lastSeenTime\":1577012374204,\"publicGameCount\":24,\"difficulty\":0.7267441860465116,\"difficultyWeight\":172},\"wife\":{\"count\":225,\"lastSeenTime\":1577018492804,\"difficulty\":0.5316455696202531,\"difficultyWeight\":158,\"publicGameCount\":13},\"clay\":{\"count\":234,\"lastSeenTime\":1576991873714,\"publicGameCount\":8,\"difficulty\":0.7333333333333333,\"difficultyWeight\":90},\"score\":{\"count\":212,\"lastSeenTime\":1577019809349,\"publicGameCount\":11,\"difficulty\":0.5970149253731343,\"difficultyWeight\":134},\"mermaid\":{\"count\":224,\"lastSeenTime\":1576973838261,\"publicGameCount\":7,\"difficulty\":0.5375,\"difficultyWeight\":80},\"full moon\":{\"count\":211,\"lastSeenTime\":1577036135826,\"publicGameCount\":38,\"difficulty\":0.6227758007117437,\"difficultyWeight\":281},\"charger\":{\"count\":243,\"lastSeenTime\":1577006689556,\"publicGameCount\":15,\"difficulty\":0.5454545454545454,\"difficultyWeight\":176},\"provoke\":{\"count\":237,\"lastSeenTime\":1577016935320,\"publicGameCount\":3,\"difficulty\":0.8,\"difficultyWeight\":35},\"link\":{\"count\":224,\"lastSeenTime\":1577010578881,\"difficulty\":0.6666666666666666,\"difficultyWeight\":120,\"publicGameCount\":4},\"snowball\":{\"count\":218,\"lastSeenTime\":1577031033935,\"publicGameCount\":14,\"difficulty\":0.5133333333333333,\"difficultyWeight\":150},\"surface\":{\"count\":204,\"lastSeenTime\":1577037345324,\"publicGameCount\":10,\"difficulty\":0.7171717171717171,\"difficultyWeight\":99},\"rainforest\":{\"count\":446,\"lastSeenTime\":1577033694684,\"publicGameCount\":40,\"difficulty\":0.6588628762541806,\"difficultyWeight\":299},\"incognito\":{\"count\":485,\"lastSeenTime\":1577009000428,\"publicGameCount\":28,\"difficulty\":0.825,\"difficultyWeight\":240},\"read\":{\"count\":234,\"lastSeenTime\":1577033454373,\"difficulty\":0.6571428571428571,\"difficultyWeight\":105,\"publicGameCount\":2},\"Leonardo DiCaprio\":{\"count\":421,\"lastSeenTime\":1577035593475,\"publicGameCount\":13,\"difficulty\":0.87,\"difficultyWeight\":100},\"heat\":{\"count\":202,\"lastSeenTime\":1576993155866,\"publicGameCount\":7,\"difficulty\":0.5714285714285714,\"difficultyWeight\":112},\"puppet\":{\"count\":252,\"lastSeenTime\":1577011633265,\"difficulty\":0.6524822695035462,\"difficultyWeight\":141,\"publicGameCount\":15},\"torpedo\":{\"count\":207,\"lastSeenTime\":1577001920799,\"difficulty\":0.7884615384615384,\"difficultyWeight\":52,\"publicGameCount\":4},\"chameleon\":{\"count\":217,\"lastSeenTime\":1576991519260,\"publicGameCount\":8,\"difficulty\":0.696969696969697,\"difficultyWeight\":66},\"chime\":{\"count\":444,\"lastSeenTime\":1577036426489,\"publicGameCount\":10,\"difficulty\":0.7623762376237624,\"difficultyWeight\":101},\"electricity\":{\"count\":213,\"lastSeenTime\":1577031556468,\"publicGameCount\":16,\"difficulty\":0.6444444444444445,\"difficultyWeight\":135},\"prism\":{\"count\":229,\"lastSeenTime\":1577030902569,\"difficulty\":0.6956521739130435,\"difficultyWeight\":92,\"publicGameCount\":7},\"Mount Rushmore\":{\"count\":447,\"lastSeenTime\":1577036329616,\"publicGameCount\":29,\"difficulty\":0.7692307692307693,\"difficultyWeight\":195},\"insomnia\":{\"count\":243,\"lastSeenTime\":1577016136003,\"publicGameCount\":9,\"difficulty\":0.7719298245614035,\"difficultyWeight\":57},\"Mickey Mouse\":{\"count\":442,\"lastSeenTime\":1577036211618,\"publicGameCount\":66,\"difficulty\":0.6284501061571125,\"difficultyWeight\":471},\"Homer Simpson\":{\"count\":466,\"lastSeenTime\":1577014491023,\"publicGameCount\":44,\"difficulty\":0.6909090909090909,\"difficultyWeight\":330},\"anteater\":{\"count\":213,\"lastSeenTime\":1577030738545,\"difficulty\":0.7297297297297297,\"difficultyWeight\":37,\"publicGameCount\":2},\"warm\":{\"count\":450,\"lastSeenTime\":1577032076358,\"publicGameCount\":29,\"difficulty\":0.7083333333333334,\"difficultyWeight\":264},\"tiramisu\":{\"count\":215,\"lastSeenTime\":1577017976509,\"publicGameCount\":4,\"difficulty\":0.875,\"difficultyWeight\":40},\"orchestra\":{\"count\":460,\"lastSeenTime\":1577019386006,\"publicGameCount\":10,\"difficulty\":0.7954545454545454,\"difficultyWeight\":88},\"die\":{\"count\":224,\"lastSeenTime\":1577015139924,\"publicGameCount\":6,\"difficulty\":0.6303317535545023,\"difficultyWeight\":211},\"silo\":{\"count\":443,\"lastSeenTime\":1577032334398,\"difficulty\":0.7161290322580646,\"difficultyWeight\":155,\"publicGameCount\":19},\"shape\":{\"count\":205,\"lastSeenTime\":1577036110764,\"publicGameCount\":5,\"difficulty\":0.5963302752293579,\"difficultyWeight\":109},\"baboon\":{\"count\":214,\"lastSeenTime\":1577020099794,\"publicGameCount\":6,\"difficulty\":0.6896551724137931,\"difficultyWeight\":87},\"Abraham Lincoln\":{\"count\":438,\"lastSeenTime\":1577021339910,\"publicGameCount\":25,\"difficulty\":0.7542857142857143,\"difficultyWeight\":175},\"palm\":{\"count\":438,\"lastSeenTime\":1577035775298,\"publicGameCount\":22,\"difficulty\":0.48214285714285715,\"difficultyWeight\":224},\"invisible\":{\"count\":449,\"lastSeenTime\":1577036754761,\"publicGameCount\":28,\"difficulty\":0.6222222222222222,\"difficultyWeight\":225},\"gentleman\":{\"count\":242,\"lastSeenTime\":1577024306506,\"difficulty\":0.7446808510638298,\"difficultyWeight\":47,\"publicGameCount\":7},\"museum\":{\"count\":448,\"lastSeenTime\":1577030272907,\"publicGameCount\":19,\"difficulty\":0.6845637583892618,\"difficultyWeight\":149},\"spine\":{\"count\":452,\"lastSeenTime\":1577018048472,\"publicGameCount\":25,\"difficulty\":0.6096491228070176,\"difficultyWeight\":228},\"stage\":{\"count\":258,\"lastSeenTime\":1577013531039,\"difficulty\":0.6384615384615384,\"difficultyWeight\":130,\"publicGameCount\":11},\"emu\":{\"count\":217,\"lastSeenTime\":1577033804412,\"publicGameCount\":4,\"difficulty\":0.6727272727272727,\"difficultyWeight\":55},\"bullet\":{\"count\":201,\"lastSeenTime\":1577032982788,\"difficulty\":0.5021097046413503,\"difficultyWeight\":237,\"publicGameCount\":5},\"toothbrush\":{\"count\":240,\"lastSeenTime\":1577012388447,\"publicGameCount\":32,\"difficulty\":0.6820276497695853,\"difficultyWeight\":217},\"sand\":{\"count\":440,\"lastSeenTime\":1577031322805,\"publicGameCount\":31,\"difficulty\":0.5208333333333333,\"difficultyWeight\":288},\"mafia\":{\"count\":214,\"lastSeenTime\":1576989412887,\"difficulty\":0.7560975609756098,\"difficultyWeight\":82,\"publicGameCount\":7},\"starfruit\":{\"count\":229,\"lastSeenTime\":1577029763817,\"publicGameCount\":11,\"difficulty\":0.753968253968254,\"difficultyWeight\":126},\"honeycomb\":{\"count\":235,\"lastSeenTime\":1577032997046,\"difficulty\":0.5700934579439253,\"difficultyWeight\":107,\"publicGameCount\":12},\"warehouse\":{\"count\":451,\"lastSeenTime\":1577034618043,\"publicGameCount\":18,\"difficulty\":0.6833333333333333,\"difficultyWeight\":120},\"oar\":{\"count\":227,\"lastSeenTime\":1577037192421,\"difficulty\":0.7413793103448276,\"difficultyWeight\":58,\"publicGameCount\":5},\"zipline\":{\"count\":215,\"lastSeenTime\":1577020215138,\"difficulty\":0.5743243243243243,\"difficultyWeight\":148,\"publicGameCount\":12},\"apple pie\":{\"count\":206,\"lastSeenTime\":1577034728271,\"publicGameCount\":18,\"difficulty\":0.5491803278688523,\"difficultyWeight\":122},\"barbed wire\":{\"count\":428,\"lastSeenTime\":1577030912743,\"publicGameCount\":26,\"difficulty\":0.7525252525252525,\"difficultyWeight\":198},\"ace\":{\"count\":205,\"lastSeenTime\":1577025008306,\"difficulty\":0.6593406593406593,\"difficultyWeight\":91,\"publicGameCount\":3},\"coaster\":{\"count\":209,\"lastSeenTime\":1577037436536,\"publicGameCount\":4,\"difficulty\":0.609375,\"difficultyWeight\":64},\"adorable\":{\"count\":437,\"lastSeenTime\":1577030738545,\"publicGameCount\":19,\"difficulty\":0.7482993197278911,\"difficultyWeight\":147},\"gasoline\":{\"count\":222,\"lastSeenTime\":1577019859074,\"publicGameCount\":7,\"difficulty\":0.7341772151898734,\"difficultyWeight\":79},\"lock\":{\"count\":210,\"lastSeenTime\":1577036377269,\"difficulty\":0.4912280701754387,\"difficultyWeight\":171,\"publicGameCount\":1},\"car wash\":{\"count\":417,\"lastSeenTime\":1577031510950,\"publicGameCount\":41,\"difficulty\":0.6698113207547169,\"difficultyWeight\":318},\"tailor\":{\"count\":242,\"lastSeenTime\":1577003420489,\"difficulty\":0.8275862068965517,\"difficultyWeight\":29,\"publicGameCount\":2},\"traffic light\":{\"count\":421,\"lastSeenTime\":1577032824600,\"publicGameCount\":64,\"difficulty\":0.6388308977035491,\"difficultyWeight\":479},\"village\":{\"count\":468,\"lastSeenTime\":1577009942735,\"publicGameCount\":26,\"difficulty\":0.7283950617283951,\"difficultyWeight\":243},\"pelican\":{\"count\":212,\"lastSeenTime\":1577031910884,\"publicGameCount\":5,\"difficulty\":0.6615384615384615,\"difficultyWeight\":65},\"tape\":{\"count\":229,\"lastSeenTime\":1577026078796,\"publicGameCount\":10,\"difficulty\":0.6666666666666666,\"difficultyWeight\":108},\"lightsaber\":{\"count\":253,\"lastSeenTime\":1577020933771,\"publicGameCount\":26,\"difficulty\":0.5842105263157895,\"difficultyWeight\":190},\"fox\":{\"count\":211,\"lastSeenTime\":1576998052312,\"difficulty\":0.5338983050847458,\"difficultyWeight\":118,\"publicGameCount\":4},\"laptop\":{\"count\":224,\"lastSeenTime\":1577033358892,\"difficulty\":0.5245098039215687,\"difficultyWeight\":204,\"publicGameCount\":9},\"organ\":{\"count\":627,\"lastSeenTime\":1577020363890,\"difficulty\":0.7638888888888888,\"difficultyWeight\":216,\"publicGameCount\":29},\"Hello Kitty\":{\"count\":459,\"lastSeenTime\":1577019066716,\"difficulty\":0.6830065359477123,\"difficultyWeight\":306,\"publicGameCount\":41},\"community\":{\"count\":207,\"lastSeenTime\":1576988578637,\"publicGameCount\":6,\"difficulty\":0.4909090909090909,\"difficultyWeight\":55},\"insect\":{\"count\":230,\"lastSeenTime\":1576905419869,\"difficulty\":0.5128205128205128,\"difficultyWeight\":156,\"publicGameCount\":18},\"belly\":{\"count\":457,\"lastSeenTime\":1577020760004,\"publicGameCount\":35,\"difficulty\":0.569811320754717,\"difficultyWeight\":265},\"ant\":{\"count\":254,\"lastSeenTime\":1577016233883,\"difficulty\":0.4857142857142858,\"difficultyWeight\":175,\"publicGameCount\":1},\"massage\":{\"count\":235,\"lastSeenTime\":1577033593279,\"publicGameCount\":15,\"difficulty\":0.751937984496124,\"difficultyWeight\":129},\"Wolverine\":{\"count\":417,\"lastSeenTime\":1577030433295,\"publicGameCount\":31,\"difficulty\":0.6064814814814815,\"difficultyWeight\":216},\"Minecraft\":{\"count\":232,\"lastSeenTime\":1577034391339,\"publicGameCount\":18,\"difficulty\":0.59,\"difficultyWeight\":200},\"dent\":{\"count\":251,\"lastSeenTime\":1576997406919,\"publicGameCount\":6,\"difficulty\":0.631578947368421,\"difficultyWeight\":76},\"Romania\":{\"count\":449,\"lastSeenTime\":1577033129254,\"publicGameCount\":11,\"difficulty\":0.6530612244897959,\"difficultyWeight\":98},\"goblin\":{\"count\":215,\"lastSeenTime\":1577035348501,\"publicGameCount\":6,\"difficulty\":0.6842105263157894,\"difficultyWeight\":76},\"pink\":{\"count\":410,\"lastSeenTime\":1577035937353,\"publicGameCount\":36,\"difficulty\":0.40497737556561086,\"difficultyWeight\":442},\"broom\":{\"count\":207,\"lastSeenTime\":1576998352706,\"difficulty\":0.5963636363636363,\"difficultyWeight\":275,\"publicGameCount\":8},\"cowbell\":{\"count\":470,\"lastSeenTime\":1577036135826,\"publicGameCount\":25,\"difficulty\":0.729064039408867,\"difficultyWeight\":203},\"brick\":{\"count\":212,\"lastSeenTime\":1577018145182,\"difficulty\":0.5930232558139537,\"difficultyWeight\":258,\"publicGameCount\":9},\"Gandhi\":{\"count\":448,\"lastSeenTime\":1577019580143,\"difficulty\":0.6698113207547169,\"difficultyWeight\":106,\"publicGameCount\":8},\"barrel\":{\"count\":214,\"lastSeenTime\":1577017306336,\"publicGameCount\":2,\"difficulty\":0.725925925925926,\"difficultyWeight\":135},\"Cerberus\":{\"count\":198,\"lastSeenTime\":1577017825119,\"difficulty\":0.71,\"difficultyWeight\":100,\"publicGameCount\":10},\"drain\":{\"count\":443,\"lastSeenTime\":1577034440167,\"publicGameCount\":27,\"difficulty\":0.5495049504950494,\"difficultyWeight\":202},\"hat\":{\"count\":228,\"lastSeenTime\":1576971026140,\"difficulty\":0.4770992366412214,\"difficultyWeight\":262,\"publicGameCount\":2},\"fence\":{\"count\":221,\"lastSeenTime\":1576986723653,\"difficulty\":0.5786802030456853,\"difficultyWeight\":197,\"publicGameCount\":8},\"display\":{\"count\":236,\"lastSeenTime\":1577020565262,\"publicGameCount\":3,\"difficulty\":0.9117647058823529,\"difficultyWeight\":34},\"carnivore\":{\"count\":203,\"lastSeenTime\":1577015681933,\"publicGameCount\":5,\"difficulty\":0.6607142857142857,\"difficultyWeight\":56},\"electrician\":{\"count\":230,\"lastSeenTime\":1577013975511,\"publicGameCount\":8,\"difficulty\":0.7857142857142857,\"difficultyWeight\":56},\"excavator\":{\"count\":227,\"lastSeenTime\":1577032676999,\"publicGameCount\":5,\"difficulty\":0.7647058823529411,\"difficultyWeight\":34},\"lightbulb\":{\"count\":224,\"lastSeenTime\":1576997976651,\"difficulty\":0.5223880597014927,\"difficultyWeight\":201,\"publicGameCount\":23},\"wasp\":{\"count\":235,\"lastSeenTime\":1577018027793,\"publicGameCount\":7,\"difficulty\":0.43243243243243246,\"difficultyWeight\":111},\"pineapple\":{\"count\":230,\"lastSeenTime\":1577017071398,\"difficulty\":0.4645669291338583,\"difficultyWeight\":254,\"publicGameCount\":14},\"razor\":{\"count\":224,\"lastSeenTime\":1577025889721,\"publicGameCount\":7,\"difficulty\":0.7291666666666666,\"difficultyWeight\":96},\"Angelina Jolie\":{\"count\":431,\"lastSeenTime\":1577017203993,\"publicGameCount\":12,\"difficulty\":0.8117647058823529,\"difficultyWeight\":85},\"orchid\":{\"count\":432,\"lastSeenTime\":1577030581728,\"publicGameCount\":4,\"difficulty\":0.7727272727272727,\"difficultyWeight\":44},\"shirt\":{\"count\":229,\"lastSeenTime\":1577019177354,\"difficulty\":0.5094339622641508,\"difficultyWeight\":212,\"publicGameCount\":5},\"werewolf\":{\"count\":241,\"lastSeenTime\":1577020909312,\"publicGameCount\":13,\"difficulty\":0.6421052631578947,\"difficultyWeight\":95},\"taco\":{\"count\":240,\"lastSeenTime\":1577029617419,\"difficulty\":0.5663265306122449,\"difficultyWeight\":196,\"publicGameCount\":17},\"dentist\":{\"count\":228,\"lastSeenTime\":1577025277614,\"difficulty\":0.578125,\"difficultyWeight\":64,\"publicGameCount\":6},\"talent show\":{\"count\":214,\"lastSeenTime\":1576963674203,\"publicGameCount\":9,\"difficulty\":0.7804878048780488,\"difficultyWeight\":82},\"panpipes\":{\"count\":406,\"lastSeenTime\":1577031807616,\"publicGameCount\":10,\"difficulty\":0.797979797979798,\"difficultyWeight\":99},\"sunglasses\":{\"count\":243,\"lastSeenTime\":1577035961642,\"publicGameCount\":23,\"difficulty\":0.5,\"difficultyWeight\":160},\"shoelace\":{\"count\":221,\"lastSeenTime\":1576992062315,\"publicGameCount\":9,\"difficulty\":0.514018691588785,\"difficultyWeight\":107},\"Hawaii\":{\"count\":455,\"lastSeenTime\":1577032544510,\"publicGameCount\":22,\"difficulty\":0.6574585635359116,\"difficultyWeight\":181},\"noodle\":{\"count\":213,\"lastSeenTime\":1576992913448,\"difficulty\":0.5747126436781609,\"difficultyWeight\":174,\"publicGameCount\":9},\"horn\":{\"count\":221,\"lastSeenTime\":1577035664302,\"difficulty\":0.5047619047619049,\"difficultyWeight\":105,\"publicGameCount\":4},\"boar\":{\"count\":224,\"lastSeenTime\":1577002663157,\"difficulty\":0.5777777777777778,\"difficultyWeight\":90,\"publicGameCount\":8},\"addiction\":{\"count\":205,\"lastSeenTime\":1576839994978,\"publicGameCount\":8,\"difficulty\":0.717391304347826,\"difficultyWeight\":92},\"addition\":{\"count\":229,\"lastSeenTime\":1577036811707,\"difficulty\":0.5164835164835165,\"difficultyWeight\":91,\"publicGameCount\":6},\"afro\":{\"count\":230,\"lastSeenTime\":1577037412232,\"publicGameCount\":15,\"difficulty\":0.47468354430379744,\"difficultyWeight\":158},\"airplane\":{\"count\":233,\"lastSeenTime\":1577030663428,\"difficulty\":0.5048076923076923,\"difficultyWeight\":208,\"publicGameCount\":6},\"alarm\":{\"count\":222,\"lastSeenTime\":1577024525038,\"publicGameCount\":11,\"difficulty\":0.5267489711934156,\"difficultyWeight\":243},\"alien\":{\"count\":225,\"lastSeenTime\":1577033680486,\"difficulty\":0.5228426395939086,\"difficultyWeight\":197,\"publicGameCount\":4},\"almond\":{\"count\":239,\"lastSeenTime\":1577035522572,\"difficulty\":0.6219512195121951,\"difficultyWeight\":82,\"publicGameCount\":7},\"anaconda\":{\"count\":271,\"lastSeenTime\":1577018291021,\"publicGameCount\":7,\"difficulty\":0.6176470588235294,\"difficultyWeight\":68},\"angel\":{\"count\":219,\"lastSeenTime\":1577001760080,\"publicGameCount\":8,\"difficulty\":0.48148148148148145,\"difficultyWeight\":162},\"anglerfish\":{\"count\":225,\"lastSeenTime\":1576976694803,\"publicGameCount\":13,\"difficulty\":0.7265625,\"difficultyWeight\":128},\"angry\":{\"count\":230,\"lastSeenTime\":1577019480194,\"difficulty\":0.4517766497461929,\"difficultyWeight\":197,\"publicGameCount\":17},\"animation\":{\"count\":242,\"lastSeenTime\":1577015031203,\"publicGameCount\":6,\"difficulty\":0.7936507936507936,\"difficultyWeight\":63},\"anime\":{\"count\":234,\"lastSeenTime\":1577032777377,\"publicGameCount\":6,\"difficulty\":0.532258064516129,\"difficultyWeight\":62},\"apple\":{\"count\":228,\"lastSeenTime\":1577013426420,\"difficulty\":0.33687943262411346,\"difficultyWeight\":282,\"publicGameCount\":2},\"apple seed\":{\"count\":381,\"lastSeenTime\":1577017228395,\"publicGameCount\":38,\"difficulty\":0.6317829457364341,\"difficultyWeight\":258},\"aquarium\":{\"count\":466,\"lastSeenTime\":1577032246891,\"publicGameCount\":32,\"difficulty\":0.5879999999999999,\"difficultyWeight\":250},\"architect\":{\"count\":209,\"lastSeenTime\":1577037056234,\"publicGameCount\":4,\"difficulty\":0.6206896551724138,\"difficultyWeight\":29},\"ash\":{\"count\":197,\"lastSeenTime\":1577015885827,\"publicGameCount\":8,\"difficulty\":0.5846153846153846,\"difficultyWeight\":130},\"assassin\":{\"count\":238,\"lastSeenTime\":1577010282547,\"publicGameCount\":13,\"difficulty\":0.7272727272727273,\"difficultyWeight\":110},\"assault\":{\"count\":190,\"lastSeenTime\":1576973403404,\"publicGameCount\":4,\"difficulty\":0.7692307692307693,\"difficultyWeight\":39},\"asteroid\":{\"count\":219,\"lastSeenTime\":1577011181933,\"publicGameCount\":10,\"difficulty\":0.7052631578947368,\"difficultyWeight\":95},\"astronaut\":{\"count\":249,\"lastSeenTime\":1577017417153,\"difficulty\":0.68125,\"difficultyWeight\":160,\"publicGameCount\":21},\"athlete\":{\"count\":220,\"lastSeenTime\":1577010076784,\"publicGameCount\":3,\"difficulty\":0.8536585365853658,\"difficultyWeight\":41},\"atom\":{\"count\":219,\"lastSeenTime\":1577033421787,\"publicGameCount\":14,\"difficulty\":0.5658914728682171,\"difficultyWeight\":129},\"audience\":{\"count\":255,\"lastSeenTime\":1576993372131,\"publicGameCount\":11,\"difficulty\":0.7402597402597403,\"difficultyWeight\":77},\"axe\":{\"count\":238,\"lastSeenTime\":1577019277416,\"difficulty\":0.49603174603174605,\"difficultyWeight\":252,\"publicGameCount\":4},\"baby\":{\"count\":232,\"lastSeenTime\":1577030998362,\"difficulty\":0.5183486238532109,\"difficultyWeight\":218,\"publicGameCount\":15},\"bad\":{\"count\":450,\"lastSeenTime\":1577033468984,\"publicGameCount\":31,\"difficulty\":0.6406926406926406,\"difficultyWeight\":231},\"bag\":{\"count\":233,\"lastSeenTime\":1577014454540,\"difficulty\":0.536082474226804,\"difficultyWeight\":194,\"publicGameCount\":9},\"bagel\":{\"count\":231,\"lastSeenTime\":1577024601158,\"difficulty\":0.5652173913043478,\"difficultyWeight\":115,\"publicGameCount\":7},\"baguette\":{\"count\":231,\"lastSeenTime\":1577032483552,\"publicGameCount\":13,\"difficulty\":0.698529411764706,\"difficultyWeight\":136},\"balance\":{\"count\":244,\"lastSeenTime\":1577016763081,\"publicGameCount\":11,\"difficulty\":0.717948717948718,\"difficultyWeight\":117},\"balcony\":{\"count\":227,\"lastSeenTime\":1577015211742,\"difficulty\":0.5802469135802469,\"difficultyWeight\":81,\"publicGameCount\":4},\"bald\":{\"count\":419,\"lastSeenTime\":1577017157118,\"publicGameCount\":34,\"difficulty\":0.5065616797900262,\"difficultyWeight\":381},\"ball\":{\"count\":212,\"lastSeenTime\":1577036872583,\"difficulty\":0.5294117647058824,\"difficultyWeight\":187,\"publicGameCount\":3},\"ballerina\":{\"count\":233,\"lastSeenTime\":1577033421787,\"publicGameCount\":10,\"difficulty\":0.6893203883495146,\"difficultyWeight\":103},\"balloon\":{\"count\":218,\"lastSeenTime\":1577031943447,\"publicGameCount\":10,\"difficulty\":0.5748502994011976,\"difficultyWeight\":167},\"banana\":{\"count\":218,\"lastSeenTime\":1577018781997,\"difficulty\":0.4641509433962264,\"difficultyWeight\":265,\"publicGameCount\":4},\"bandage\":{\"count\":213,\"lastSeenTime\":1577016293273,\"publicGameCount\":14,\"difficulty\":0.631578947368421,\"difficultyWeight\":133},\"banjo\":{\"count\":434,\"lastSeenTime\":1577033841722,\"publicGameCount\":22,\"difficulty\":0.5707317073170731,\"difficultyWeight\":205},\"bank\":{\"count\":426,\"lastSeenTime\":1577031234774,\"difficulty\":0.4463768115942029,\"difficultyWeight\":345,\"publicGameCount\":35},\"barber\":{\"count\":208,\"lastSeenTime\":1577031593360,\"difficulty\":0.6589147286821705,\"difficultyWeight\":129,\"publicGameCount\":2},\"barn\":{\"count\":462,\"lastSeenTime\":1577029603248,\"publicGameCount\":25,\"difficulty\":0.574585635359116,\"difficultyWeight\":181},\"basketball\":{\"count\":246,\"lastSeenTime\":1577018377436,\"publicGameCount\":27,\"difficulty\":0.39908256880733944,\"difficultyWeight\":218},\"bat\":{\"count\":429,\"lastSeenTime\":1577024539413,\"publicGameCount\":37,\"difficulty\":0.46534653465346537,\"difficultyWeight\":404},\"battle\":{\"count\":237,\"lastSeenTime\":1577008650446,\"publicGameCount\":11,\"difficulty\":0.71875,\"difficultyWeight\":128},\"battleship\":{\"count\":213,\"lastSeenTime\":1577031885678,\"publicGameCount\":13,\"difficulty\":0.6632653061224489,\"difficultyWeight\":98},\"bayonet\":{\"count\":236,\"lastSeenTime\":1577034401652,\"difficulty\":0.6739130434782609,\"difficultyWeight\":46,\"publicGameCount\":4},\"bazooka\":{\"count\":218,\"lastSeenTime\":1577017359795,\"publicGameCount\":17,\"difficulty\":0.635036496350365,\"difficultyWeight\":137},\"beak\":{\"count\":236,\"lastSeenTime\":1577019799055,\"difficulty\":0.5136986301369864,\"difficultyWeight\":146,\"publicGameCount\":4},\"bean\":{\"count\":213,\"lastSeenTime\":1577018262363,\"publicGameCount\":7,\"difficulty\":0.6736111111111112,\"difficultyWeight\":144},\"beanie\":{\"count\":240,\"lastSeenTime\":1577012030780,\"publicGameCount\":7,\"difficulty\":0.6551724137931034,\"difficultyWeight\":87},\"beanstalk\":{\"count\":227,\"lastSeenTime\":1577002854632,\"difficulty\":0.8225806451612904,\"difficultyWeight\":62,\"publicGameCount\":6},\"beaver\":{\"count\":228,\"lastSeenTime\":1577019859074,\"publicGameCount\":7,\"difficulty\":0.6666666666666666,\"difficultyWeight\":84},\"bed\":{\"count\":201,\"lastSeenTime\":1577007477517,\"publicGameCount\":8,\"difficulty\":0.5495049504950497,\"difficultyWeight\":202},\"bedtime\":{\"count\":235,\"lastSeenTime\":1577018058770,\"publicGameCount\":17,\"difficulty\":0.6923076923076923,\"difficultyWeight\":169},\"bee\":{\"count\":195,\"lastSeenTime\":1577032910599,\"publicGameCount\":3,\"difficulty\":0.5,\"difficultyWeight\":196},\"beer\":{\"count\":209,\"lastSeenTime\":1577018235828,\"difficulty\":0.5354838709677419,\"difficultyWeight\":155,\"publicGameCount\":5},\"bell\":{\"count\":226,\"lastSeenTime\":1577031409078,\"difficulty\":0.5120000000000002,\"difficultyWeight\":250,\"publicGameCount\":3},\"belly button\":{\"count\":397,\"lastSeenTime\":1577009158040,\"publicGameCount\":41,\"difficulty\":0.6363636363636364,\"difficultyWeight\":319},\"below\":{\"count\":224,\"lastSeenTime\":1577033699738,\"publicGameCount\":8,\"difficulty\":0.6421052631578947,\"difficultyWeight\":95},\"belt\":{\"count\":240,\"lastSeenTime\":1577018445128,\"publicGameCount\":7,\"difficulty\":0.5294117647058825,\"difficultyWeight\":204},\"bench\":{\"count\":425,\"lastSeenTime\":1577015610581,\"publicGameCount\":32,\"difficulty\":0.5870307167235495,\"difficultyWeight\":293},\"bicycle\":{\"count\":225,\"lastSeenTime\":1577006837634,\"difficulty\":0.5546875000000001,\"difficultyWeight\":256,\"publicGameCount\":14},\"billiards\":{\"count\":215,\"lastSeenTime\":1577002745783,\"publicGameCount\":8,\"difficulty\":0.8333333333333334,\"difficultyWeight\":72},\"bird\":{\"count\":229,\"lastSeenTime\":1577036070954,\"difficulty\":0.48314606741573035,\"difficultyWeight\":178,\"publicGameCount\":5},\"biscuit\":{\"count\":207,\"lastSeenTime\":1577019635326,\"difficulty\":0.7152317880794702,\"difficultyWeight\":151,\"publicGameCount\":16},\"bite\":{\"count\":235,\"lastSeenTime\":1577024882700,\"difficulty\":0.5460526315789473,\"difficultyWeight\":152,\"publicGameCount\":10},\"black hole\":{\"count\":211,\"lastSeenTime\":1577036487959,\"publicGameCount\":21,\"difficulty\":0.5272727272727272,\"difficultyWeight\":165},\"blackberry\":{\"count\":234,\"lastSeenTime\":1577030057610,\"publicGameCount\":20,\"difficulty\":0.6794871794871795,\"difficultyWeight\":156},\"blacksmith\":{\"count\":242,\"lastSeenTime\":1577034107033,\"publicGameCount\":7,\"difficulty\":0.6567164179104478,\"difficultyWeight\":67},\"blimp\":{\"count\":245,\"lastSeenTime\":1577011942293,\"difficulty\":0.7279411764705882,\"difficultyWeight\":136,\"publicGameCount\":7},\"blind\":{\"count\":239,\"lastSeenTime\":1577033407643,\"publicGameCount\":6,\"difficulty\":0.5483870967741935,\"difficultyWeight\":93},\"blindfold\":{\"count\":226,\"lastSeenTime\":1577014939690,\"publicGameCount\":28,\"difficulty\":0.669683257918552,\"difficultyWeight\":221},\"blizzard\":{\"count\":445,\"lastSeenTime\":1577035678469,\"publicGameCount\":26,\"difficulty\":0.6747572815533981,\"difficultyWeight\":206},\"blowfish\":{\"count\":234,\"lastSeenTime\":1577024663216,\"publicGameCount\":17,\"difficulty\":0.4857142857142857,\"difficultyWeight\":140},\"blue\":{\"count\":420,\"lastSeenTime\":1577036882731,\"difficulty\":0.4179431072210066,\"difficultyWeight\":457,\"publicGameCount\":39},\"blueberry\":{\"count\":206,\"lastSeenTime\":1577020870978,\"publicGameCount\":18,\"difficulty\":0.54,\"difficultyWeight\":150},\"board\":{\"count\":230,\"lastSeenTime\":1577002644652,\"publicGameCount\":6,\"difficulty\":0.671875,\"difficultyWeight\":128},\"bodyguard\":{\"count\":234,\"lastSeenTime\":1577024978893,\"difficulty\":0.6666666666666666,\"difficultyWeight\":111,\"publicGameCount\":13},\"bomb\":{\"count\":240,\"lastSeenTime\":1577025426672,\"difficulty\":0.44015444015444016,\"difficultyWeight\":259,\"publicGameCount\":20},\"booger\":{\"count\":424,\"lastSeenTime\":1577025391428,\"publicGameCount\":29,\"difficulty\":0.6085271317829457,\"difficultyWeight\":258},\"book\":{\"count\":238,\"lastSeenTime\":1577036765048,\"difficulty\":0.4896265560165975,\"difficultyWeight\":241,\"publicGameCount\":10},\"boomerang\":{\"count\":219,\"lastSeenTime\":1577037236956,\"publicGameCount\":10,\"difficulty\":0.6153846153846154,\"difficultyWeight\":130},\"bottle\":{\"count\":232,\"lastSeenTime\":1577033670196,\"difficulty\":0.5472972972972973,\"difficultyWeight\":148,\"publicGameCount\":8},\"bounce\":{\"count\":253,\"lastSeenTime\":1577029982333,\"publicGameCount\":11,\"difficulty\":0.6333333333333333,\"difficultyWeight\":120},\"bowl\":{\"count\":239,\"lastSeenTime\":1577035692632,\"difficulty\":0.5092592592592594,\"difficultyWeight\":216,\"publicGameCount\":16},\"bowling\":{\"count\":224,\"lastSeenTime\":1577010511117,\"difficulty\":0.6266666666666667,\"difficultyWeight\":150,\"publicGameCount\":11},\"box\":{\"count\":235,\"lastSeenTime\":1577034613528,\"difficulty\":0.5421686746987956,\"difficultyWeight\":249,\"publicGameCount\":2},\"boy\":{\"count\":234,\"lastSeenTime\":1577013899075,\"difficulty\":0.6115384615384616,\"difficultyWeight\":260,\"publicGameCount\":10},\"bracelet\":{\"count\":204,\"lastSeenTime\":1576947376959,\"publicGameCount\":7,\"difficulty\":0.7086614173228346,\"difficultyWeight\":127},\"brain\":{\"count\":432,\"lastSeenTime\":1577032037095,\"publicGameCount\":46,\"difficulty\":0.49865229110512127,\"difficultyWeight\":371},\"branch\":{\"count\":410,\"lastSeenTime\":1577034642507,\"publicGameCount\":24,\"difficulty\":0.6053811659192825,\"difficultyWeight\":223},\"brand\":{\"count\":235,\"lastSeenTime\":1577000571830,\"publicGameCount\":10,\"difficulty\":0.6021505376344086,\"difficultyWeight\":93},\"bread\":{\"count\":238,\"lastSeenTime\":1577030702095,\"difficulty\":0.50990099009901,\"difficultyWeight\":202,\"publicGameCount\":12},\"breakfast\":{\"count\":221,\"lastSeenTime\":1577031023734,\"difficulty\":0.6549295774647887,\"difficultyWeight\":142,\"publicGameCount\":14},\"breath\":{\"count\":430,\"lastSeenTime\":1577004292006,\"publicGameCount\":25,\"difficulty\":0.6171171171171174,\"difficultyWeight\":222},\"bride\":{\"count\":219,\"lastSeenTime\":1577032444866,\"publicGameCount\":8,\"difficulty\":0.5394736842105263,\"difficultyWeight\":76},\"bridge\":{\"count\":461,\"lastSeenTime\":1577017763955,\"publicGameCount\":47,\"difficulty\":0.607142857142857,\"difficultyWeight\":420},\"broadcast\":{\"count\":223,\"lastSeenTime\":1577029603248,\"difficulty\":0.7096774193548387,\"difficultyWeight\":62,\"publicGameCount\":5},\"broccoli\":{\"count\":214,\"lastSeenTime\":1577019041654,\"publicGameCount\":14,\"difficulty\":0.5820895522388059,\"difficultyWeight\":201},\"broken heart\":{\"count\":208,\"lastSeenTime\":1577015710329,\"publicGameCount\":34,\"difficulty\":0.5,\"difficultyWeight\":256},\"bronze\":{\"count\":228,\"lastSeenTime\":1576998388543,\"publicGameCount\":6,\"difficulty\":0.7283950617283951,\"difficultyWeight\":81},\"brownie\":{\"count\":217,\"lastSeenTime\":1577020516206,\"publicGameCount\":10,\"difficulty\":0.6904761904761905,\"difficultyWeight\":84},\"bruise\":{\"count\":232,\"lastSeenTime\":1577000981163,\"publicGameCount\":8,\"difficulty\":0.6395348837209303,\"difficultyWeight\":86},\"bubble\":{\"count\":203,\"lastSeenTime\":1577006766360,\"publicGameCount\":17,\"difficulty\":0.5795918367346938,\"difficultyWeight\":245},\"bubble gum\":{\"count\":203,\"lastSeenTime\":1577032530295,\"publicGameCount\":35,\"difficulty\":0.5719844357976653,\"difficultyWeight\":257},\"bucket\":{\"count\":236,\"lastSeenTime\":1576983054666,\"difficulty\":0.5703124999999998,\"difficultyWeight\":256,\"publicGameCount\":7},\"bulge\":{\"count\":201,\"lastSeenTime\":1577033719031,\"difficulty\":0.7605633802816901,\"difficultyWeight\":71,\"publicGameCount\":7},\"bull\":{\"count\":236,\"lastSeenTime\":1577036882731,\"difficulty\":0.5592105263157894,\"difficultyWeight\":152,\"publicGameCount\":14},\"bulldozer\":{\"count\":255,\"lastSeenTime\":1577011734748,\"publicGameCount\":10,\"difficulty\":0.6944444444444444,\"difficultyWeight\":72},\"bungee jumping\":{\"count\":222,\"lastSeenTime\":1577033780065,\"publicGameCount\":20,\"difficulty\":0.6929133858267716,\"difficultyWeight\":127},\"bunny\":{\"count\":228,\"lastSeenTime\":1577020774303,\"difficulty\":0.4864864864864865,\"difficultyWeight\":148,\"publicGameCount\":2},\"bus driver\":{\"count\":240,\"lastSeenTime\":1577033708898,\"publicGameCount\":20,\"difficulty\":0.6524390243902439,\"difficultyWeight\":164},\"butler\":{\"count\":256,\"lastSeenTime\":1577014769336,\"publicGameCount\":15,\"difficulty\":0.5964912280701754,\"difficultyWeight\":114},\"button\":{\"count\":221,\"lastSeenTime\":1577029763817,\"publicGameCount\":11,\"difficulty\":0.6467661691542289,\"difficultyWeight\":201},\"cab driver\":{\"count\":247,\"lastSeenTime\":1577019664821,\"publicGameCount\":12,\"difficulty\":0.8181818181818182,\"difficultyWeight\":88},\"cabin\":{\"count\":432,\"lastSeenTime\":1577013545590,\"publicGameCount\":16,\"difficulty\":0.5030674846625767,\"difficultyWeight\":163},\"cactus\":{\"count\":429,\"lastSeenTime\":1577032147462,\"publicGameCount\":47,\"difficulty\":0.4064665127020785,\"difficultyWeight\":433},\"cage\":{\"count\":229,\"lastSeenTime\":1576947664758,\"publicGameCount\":9,\"difficulty\":0.6037735849056604,\"difficultyWeight\":106},\"cake\":{\"count\":236,\"lastSeenTime\":1577036096380,\"difficulty\":0.49056603773584906,\"difficultyWeight\":265,\"publicGameCount\":15},\"camel\":{\"count\":233,\"lastSeenTime\":1576996756331,\"difficulty\":0.49693251533742333,\"difficultyWeight\":163,\"publicGameCount\":4},\"campfire\":{\"count\":256,\"lastSeenTime\":1577034121420,\"difficulty\":0.5394736842105263,\"difficultyWeight\":228,\"publicGameCount\":22},\"can opener\":{\"count\":218,\"lastSeenTime\":1577034603831,\"publicGameCount\":11,\"difficulty\":0.7444444444444445,\"difficultyWeight\":90},\"cannon\":{\"count\":213,\"lastSeenTime\":1577015776309,\"difficulty\":0.6,\"difficultyWeight\":60,\"publicGameCount\":4},\"canyon\":{\"count\":468,\"lastSeenTime\":1577036645866,\"publicGameCount\":18,\"difficulty\":0.7006802721088435,\"difficultyWeight\":147},\"cape\":{\"count\":231,\"lastSeenTime\":1577035644067,\"publicGameCount\":15,\"difficulty\":0.5518867924528303,\"difficultyWeight\":212},\"cappuccino\":{\"count\":227,\"lastSeenTime\":1577009296414,\"publicGameCount\":11,\"difficulty\":0.8235294117647058,\"difficultyWeight\":85},\"captain\":{\"count\":210,\"lastSeenTime\":1576990355848,\"publicGameCount\":9,\"difficulty\":0.7477477477477478,\"difficultyWeight\":111},\"carpenter\":{\"count\":212,\"lastSeenTime\":1577019945970,\"publicGameCount\":3,\"difficulty\":0.7407407407407407,\"difficultyWeight\":27},\"carpet\":{\"count\":266,\"lastSeenTime\":1577031546307,\"difficulty\":0.608433734939759,\"difficultyWeight\":166,\"publicGameCount\":15},\"carrot\":{\"count\":228,\"lastSeenTime\":1577020735420,\"difficulty\":0.46503496503496505,\"difficultyWeight\":286,\"publicGameCount\":6},\"cast\":{\"count\":208,\"lastSeenTime\":1577018733113,\"publicGameCount\":7,\"difficulty\":0.5844155844155844,\"difficultyWeight\":77},\"cathedral\":{\"count\":458,\"lastSeenTime\":1577029554508,\"publicGameCount\":13,\"difficulty\":0.7553191489361702,\"difficultyWeight\":94},\"cauldron\":{\"count\":251,\"lastSeenTime\":1577014754709,\"publicGameCount\":11,\"difficulty\":0.6375,\"difficultyWeight\":80},\"cauliflower\":{\"count\":219,\"lastSeenTime\":1577016651044,\"difficulty\":0.676056338028169,\"difficultyWeight\":71,\"publicGameCount\":8},\"caveman\":{\"count\":234,\"lastSeenTime\":1577037263306,\"publicGameCount\":14,\"difficulty\":0.5746268656716418,\"difficultyWeight\":134},\"ceiling fan\":{\"count\":246,\"lastSeenTime\":1577032701751,\"publicGameCount\":25,\"difficulty\":0.7244897959183672,\"difficultyWeight\":196},\"celebrate\":{\"count\":218,\"lastSeenTime\":1577016031951,\"publicGameCount\":6,\"difficulty\":0.776595744680851,\"difficultyWeight\":94},\"cell\":{\"count\":231,\"lastSeenTime\":1576982895854,\"publicGameCount\":10,\"difficulty\":0.7757009345794392,\"difficultyWeight\":107},\"centipede\":{\"count\":241,\"lastSeenTime\":1577005234169,\"publicGameCount\":13,\"difficulty\":0.6888888888888889,\"difficultyWeight\":135},\"chain\":{\"count\":213,\"lastSeenTime\":1577012145150,\"difficulty\":0.5384615384615385,\"difficultyWeight\":234,\"publicGameCount\":10},\"chair\":{\"count\":213,\"lastSeenTime\":1577019921307,\"difficulty\":0.5070422535211269,\"difficultyWeight\":213,\"publicGameCount\":3},\"chalk\":{\"count\":240,\"lastSeenTime\":1577037306624,\"publicGameCount\":11,\"difficulty\":0.6829268292682927,\"difficultyWeight\":123},\"champagne\":{\"count\":230,\"lastSeenTime\":1577033508319,\"publicGameCount\":11,\"difficulty\":0.6907216494845361,\"difficultyWeight\":97},\"champion\":{\"count\":226,\"lastSeenTime\":1577034556334,\"publicGameCount\":12,\"difficulty\":0.6148148148148149,\"difficultyWeight\":135},\"chandelier\":{\"count\":217,\"lastSeenTime\":1577029650059,\"publicGameCount\":15,\"difficulty\":0.6865671641791045,\"difficultyWeight\":134},\"cheek\":{\"count\":406,\"lastSeenTime\":1576986114754,\"publicGameCount\":25,\"difficulty\":0.5564853556485355,\"difficultyWeight\":239},\"cheese\":{\"count\":235,\"lastSeenTime\":1577037568133,\"publicGameCount\":16,\"difficulty\":0.38076923076923075,\"difficultyWeight\":260},\"cheesecake\":{\"count\":206,\"lastSeenTime\":1577015110298,\"publicGameCount\":12,\"difficulty\":0.5867768595041323,\"difficultyWeight\":121},\"cheetah\":{\"count\":267,\"lastSeenTime\":1577001547359,\"publicGameCount\":12,\"difficulty\":0.5047619047619047,\"difficultyWeight\":105},\"chef\":{\"count\":214,\"lastSeenTime\":1577024929912,\"publicGameCount\":15,\"difficulty\":0.5555555555555558,\"difficultyWeight\":180},\"cherry\":{\"count\":213,\"lastSeenTime\":1577034656692,\"difficulty\":0.5040983606557375,\"difficultyWeight\":244,\"publicGameCount\":6},\"chess\":{\"count\":247,\"lastSeenTime\":1577018073317,\"publicGameCount\":8,\"difficulty\":0.49382716049382713,\"difficultyWeight\":162},\"chest\":{\"count\":606,\"lastSeenTime\":1577037202536,\"publicGameCount\":82,\"difficulty\":0.6106983655274891,\"difficultyWeight\":673},\"chest hair\":{\"count\":438,\"lastSeenTime\":1577018733113,\"publicGameCount\":48,\"difficulty\":0.6304347826086958,\"difficultyWeight\":322},\"chestplate\":{\"count\":212,\"lastSeenTime\":1576976966651,\"difficulty\":0.746031746031746,\"difficultyWeight\":63,\"publicGameCount\":6},\"chicken\":{\"count\":441,\"lastSeenTime\":1577037497263,\"publicGameCount\":50,\"difficulty\":0.5815450643776826,\"difficultyWeight\":466},\"chihuahua\":{\"count\":221,\"lastSeenTime\":1576993284545,\"difficulty\":0.7333333333333333,\"difficultyWeight\":105,\"publicGameCount\":11},\"child\":{\"count\":222,\"lastSeenTime\":1577033593279,\"difficulty\":0.591160220994475,\"difficultyWeight\":181,\"publicGameCount\":6},\"chin\":{\"count\":472,\"lastSeenTime\":1577033699738,\"publicGameCount\":28,\"difficulty\":0.5660377358490566,\"difficultyWeight\":265},\"chocolate\":{\"count\":232,\"lastSeenTime\":1577007615650,\"publicGameCount\":18,\"difficulty\":0.5509259259259259,\"difficultyWeight\":216},\"church\":{\"count\":446,\"lastSeenTime\":1577032591482,\"publicGameCount\":57,\"difficulty\":0.4467120181405896,\"difficultyWeight\":441},\"cigarette\":{\"count\":218,\"lastSeenTime\":1577031155319,\"publicGameCount\":21,\"difficulty\":0.5323383084577114,\"difficultyWeight\":201},\"cinema\":{\"count\":438,\"lastSeenTime\":1577021253681,\"difficulty\":0.6470588235294118,\"difficultyWeight\":255,\"publicGameCount\":30},\"circle\":{\"count\":213,\"lastSeenTime\":1577025451893,\"difficulty\":0.6349206349206348,\"difficultyWeight\":252,\"publicGameCount\":14},\"clap\":{\"count\":232,\"lastSeenTime\":1577036401976,\"publicGameCount\":6,\"difficulty\":0.5242718446601943,\"difficultyWeight\":103},\"clickbait\":{\"count\":246,\"lastSeenTime\":1577015885827,\"publicGameCount\":12,\"difficulty\":0.631578947368421,\"difficultyWeight\":76},\"cliff\":{\"count\":390,\"lastSeenTime\":1577017714611,\"difficulty\":0.5888888888888889,\"difficultyWeight\":270,\"publicGameCount\":22},\"climb\":{\"count\":228,\"lastSeenTime\":1577016728346,\"difficulty\":0.5169491525423728,\"difficultyWeight\":118,\"publicGameCount\":6},\"cloak\":{\"count\":223,\"lastSeenTime\":1577000608344,\"publicGameCount\":6,\"difficulty\":0.6621621621621622,\"difficultyWeight\":74},\"clock\":{\"count\":231,\"lastSeenTime\":1577024586841,\"difficulty\":0.5,\"difficultyWeight\":288,\"publicGameCount\":6},\"clothes hanger\":{\"count\":224,\"lastSeenTime\":1577025028815,\"publicGameCount\":21,\"difficulty\":0.6917808219178082,\"difficultyWeight\":146},\"cloud\":{\"count\":443,\"lastSeenTime\":1577035383092,\"publicGameCount\":51,\"difficulty\":0.41735537190082644,\"difficultyWeight\":484},\"clover\":{\"count\":430,\"lastSeenTime\":1577018434581,\"publicGameCount\":34,\"difficulty\":0.5225225225225223,\"difficultyWeight\":333},\"coach\":{\"count\":220,\"lastSeenTime\":1577011865165,\"publicGameCount\":9,\"difficulty\":0.7070707070707071,\"difficultyWeight\":99},\"coal\":{\"count\":264,\"lastSeenTime\":1577033444243,\"publicGameCount\":10,\"difficulty\":0.5612244897959183,\"difficultyWeight\":98},\"coast guard\":{\"count\":218,\"lastSeenTime\":1577019435052,\"publicGameCount\":12,\"difficulty\":0.7865168539325843,\"difficultyWeight\":89},\"coat\":{\"count\":221,\"lastSeenTime\":1576998860918,\"difficulty\":0.5957446808510638,\"difficultyWeight\":47,\"publicGameCount\":1},\"cockroach\":{\"count\":230,\"lastSeenTime\":1577006776589,\"publicGameCount\":15,\"difficulty\":0.5695364238410596,\"difficultyWeight\":151},\"coconut\":{\"count\":215,\"lastSeenTime\":1577018038260,\"publicGameCount\":20,\"difficulty\":0.5756457564575643,\"difficultyWeight\":271},\"cocoon\":{\"count\":196,\"lastSeenTime\":1577036303309,\"publicGameCount\":8,\"difficulty\":0.7702702702702703,\"difficultyWeight\":74},\"coffee\":{\"count\":243,\"lastSeenTime\":1577010447702,\"difficulty\":0.4763779527559055,\"difficultyWeight\":254,\"publicGameCount\":18},\"coffee shop\":{\"count\":438,\"lastSeenTime\":1577035569138,\"publicGameCount\":43,\"difficulty\":0.7444794952681388,\"difficultyWeight\":317},\"coffin\":{\"count\":214,\"lastSeenTime\":1576996730066,\"publicGameCount\":13,\"difficulty\":0.5182926829268294,\"difficultyWeight\":164},\"coin\":{\"count\":240,\"lastSeenTime\":1577030372247,\"publicGameCount\":9,\"difficulty\":0.5096153846153848,\"difficultyWeight\":208},\"collar\":{\"count\":228,\"lastSeenTime\":1577030861848,\"difficulty\":0.5897435897435898,\"difficultyWeight\":117,\"publicGameCount\":8},\"color-blind\":{\"count\":244,\"lastSeenTime\":1577018410162,\"publicGameCount\":12,\"difficulty\":0.8695652173913043,\"difficultyWeight\":92},\"comb\":{\"count\":241,\"lastSeenTime\":1577035202003,\"difficulty\":0.5183486238532111,\"difficultyWeight\":218,\"publicGameCount\":14},\"comedian\":{\"count\":240,\"lastSeenTime\":1576988478150,\"difficulty\":0.6666666666666666,\"difficultyWeight\":60,\"publicGameCount\":5},\"comic book\":{\"count\":223,\"lastSeenTime\":1577024181667,\"publicGameCount\":16,\"difficulty\":0.6929824561403509,\"difficultyWeight\":114},\"commercial\":{\"count\":241,\"lastSeenTime\":1576994067476,\"publicGameCount\":7,\"difficulty\":0.8392857142857143,\"difficultyWeight\":56},\"communism\":{\"count\":244,\"lastSeenTime\":1576986940805,\"publicGameCount\":14,\"difficulty\":0.6444444444444445,\"difficultyWeight\":90},\"complete\":{\"count\":414,\"lastSeenTime\":1577031607937,\"publicGameCount\":17,\"difficulty\":0.6891891891891891,\"difficultyWeight\":148},\"computer\":{\"count\":241,\"lastSeenTime\":1577033983037,\"publicGameCount\":12,\"difficulty\":0.478494623655914,\"difficultyWeight\":186},\"concert\":{\"count\":261,\"lastSeenTime\":1577032883820,\"publicGameCount\":10,\"difficulty\":0.7066666666666667,\"difficultyWeight\":75},\"confused\":{\"count\":216,\"lastSeenTime\":1577035654185,\"publicGameCount\":8,\"difficulty\":0.5595238095238095,\"difficultyWeight\":84},\"console\":{\"count\":183,\"lastSeenTime\":1576986189390,\"publicGameCount\":6,\"difficulty\":0.675,\"difficultyWeight\":120},\"corkscrew\":{\"count\":217,\"lastSeenTime\":1577012020436,\"publicGameCount\":8,\"difficulty\":0.626865671641791,\"difficultyWeight\":67},\"corn\":{\"count\":231,\"lastSeenTime\":1577018661849,\"difficulty\":0.47058823529411764,\"difficultyWeight\":170,\"publicGameCount\":4},\"corn dog\":{\"count\":223,\"lastSeenTime\":1577036846155,\"publicGameCount\":22,\"difficulty\":0.574585635359116,\"difficultyWeight\":181},\"corpse\":{\"count\":234,\"lastSeenTime\":1577025711695,\"difficulty\":0.7214285714285714,\"difficultyWeight\":140,\"publicGameCount\":13},\"cotton\":{\"count\":256,\"lastSeenTime\":1576996517140,\"publicGameCount\":6,\"difficulty\":0.6527777777777778,\"difficultyWeight\":72},\"cotton candy\":{\"count\":214,\"lastSeenTime\":1577000929474,\"publicGameCount\":39,\"difficulty\":0.5841584158415841,\"difficultyWeight\":303},\"crab\":{\"count\":434,\"lastSeenTime\":1577036110764,\"difficulty\":0.4235294117647059,\"difficultyWeight\":340,\"publicGameCount\":39},\"crack\":{\"count\":276,\"lastSeenTime\":1577037568133,\"difficulty\":0.6436781609195402,\"difficultyWeight\":174,\"publicGameCount\":15},\"crayon\":{\"count\":229,\"lastSeenTime\":1577010680782,\"difficulty\":0.6181818181818183,\"difficultyWeight\":165,\"publicGameCount\":11},\"credit\":{\"count\":231,\"lastSeenTime\":1577029674779,\"publicGameCount\":7,\"difficulty\":0.6612903225806451,\"difficultyWeight\":62},\"credit card\":{\"count\":247,\"lastSeenTime\":1577034329984,\"publicGameCount\":31,\"difficulty\":0.6403508771929823,\"difficultyWeight\":228},\"cricket\":{\"count\":219,\"lastSeenTime\":1577032910599,\"difficulty\":0.6376811594202898,\"difficultyWeight\":138,\"publicGameCount\":5},\"crocodile\":{\"count\":217,\"lastSeenTime\":1577031583222,\"difficulty\":0.5662650602409639,\"difficultyWeight\":166,\"publicGameCount\":12},\"crossbow\":{\"count\":247,\"lastSeenTime\":1577016590802,\"difficulty\":0.5925925925925926,\"difficultyWeight\":189,\"publicGameCount\":22},\"crow\":{\"count\":211,\"lastSeenTime\":1577032222590,\"publicGameCount\":8,\"difficulty\":0.5217391304347826,\"difficultyWeight\":92},\"cruise\":{\"count\":212,\"lastSeenTime\":1577030372247,\"publicGameCount\":2,\"difficulty\":0.75,\"difficultyWeight\":48},\"crust\":{\"count\":210,\"lastSeenTime\":1576983512728,\"difficulty\":0.6644295302013422,\"difficultyWeight\":149,\"publicGameCount\":7},\"crystal\":{\"count\":225,\"lastSeenTime\":1577033920831,\"publicGameCount\":11,\"difficulty\":0.6794871794871795,\"difficultyWeight\":156},\"cube\":{\"count\":220,\"lastSeenTime\":1577032198145,\"publicGameCount\":14,\"difficulty\":0.5458715596330276,\"difficultyWeight\":218},\"cuckoo\":{\"count\":213,\"lastSeenTime\":1577017097804,\"publicGameCount\":4,\"difficulty\":0.65,\"difficultyWeight\":40},\"cucumber\":{\"count\":235,\"lastSeenTime\":1577036070954,\"publicGameCount\":18,\"difficulty\":0.5824175824175825,\"difficultyWeight\":182},\"cupboard\":{\"count\":238,\"lastSeenTime\":1577037446644,\"publicGameCount\":9,\"difficulty\":0.8309859154929577,\"difficultyWeight\":142},\"cupcake\":{\"count\":211,\"lastSeenTime\":1577033997203,\"difficulty\":0.5052631578947369,\"difficultyWeight\":190,\"publicGameCount\":13},\"curtain\":{\"count\":191,\"lastSeenTime\":1576977126292,\"difficulty\":0.5855263157894738,\"difficultyWeight\":152,\"publicGameCount\":5},\"cut\":{\"count\":216,\"lastSeenTime\":1577012130912,\"publicGameCount\":8,\"difficulty\":0.5955882352941176,\"difficultyWeight\":136},\"cyborg\":{\"count\":218,\"lastSeenTime\":1577015080639,\"difficulty\":0.5818181818181818,\"difficultyWeight\":55,\"publicGameCount\":7},\"cylinder\":{\"count\":237,\"lastSeenTime\":1577031248949,\"publicGameCount\":16,\"difficulty\":0.5982142857142859,\"difficultyWeight\":112},\"dagger\":{\"count\":198,\"lastSeenTime\":1576979491238,\"difficulty\":0.7465753424657534,\"difficultyWeight\":146,\"publicGameCount\":9},\"daisy\":{\"count\":435,\"lastSeenTime\":1577030311398,\"difficulty\":0.5906250000000002,\"difficultyWeight\":320,\"publicGameCount\":33},\"dance\":{\"count\":250,\"lastSeenTime\":1576966284603,\"difficulty\":0.6470588235294116,\"difficultyWeight\":170,\"publicGameCount\":16},\"dandelion\":{\"count\":471,\"lastSeenTime\":1577037103049,\"publicGameCount\":21,\"difficulty\":0.7294685990338164,\"difficultyWeight\":207},\"deaf\":{\"count\":211,\"lastSeenTime\":1577033619352,\"publicGameCount\":5,\"difficulty\":0.5833333333333334,\"difficultyWeight\":132},\"demon\":{\"count\":217,\"lastSeenTime\":1577024636673,\"publicGameCount\":8,\"difficulty\":0.6435643564356436,\"difficultyWeight\":202},\"demonstration\":{\"count\":207,\"lastSeenTime\":1577009779663,\"publicGameCount\":7,\"difficulty\":0.72,\"difficultyWeight\":50},\"deodorant\":{\"count\":222,\"lastSeenTime\":1577033017430,\"publicGameCount\":13,\"difficulty\":0.6418918918918919,\"difficultyWeight\":148},\"depressed\":{\"count\":237,\"lastSeenTime\":1576965662459,\"publicGameCount\":16,\"difficulty\":0.578125,\"difficultyWeight\":128},\"derp\":{\"count\":211,\"lastSeenTime\":1577014619671,\"publicGameCount\":8,\"difficulty\":0.5983606557377049,\"difficultyWeight\":122},\"desk\":{\"count\":239,\"lastSeenTime\":1577031102670,\"difficulty\":0.6745562130177515,\"difficultyWeight\":169,\"publicGameCount\":7},\"dessert\":{\"count\":232,\"lastSeenTime\":1577037412232,\"publicGameCount\":15,\"difficulty\":0.6566265060240963,\"difficultyWeight\":166},\"detonate\":{\"count\":220,\"lastSeenTime\":1576975314574,\"publicGameCount\":6,\"difficulty\":0.8493150684931506,\"difficultyWeight\":73},\"diagonal\":{\"count\":209,\"lastSeenTime\":1577036574064,\"publicGameCount\":10,\"difficulty\":0.794392523364486,\"difficultyWeight\":107},\"diamond\":{\"count\":237,\"lastSeenTime\":1577020464611,\"difficulty\":0.4671814671814672,\"difficultyWeight\":259,\"publicGameCount\":18},\"diaper\":{\"count\":252,\"lastSeenTime\":1577014779545,\"publicGameCount\":10,\"difficulty\":0.6176470588235294,\"difficultyWeight\":136},\"dictionary\":{\"count\":265,\"lastSeenTime\":1577033906184,\"publicGameCount\":20,\"difficulty\":0.6079545454545454,\"difficultyWeight\":176},\"diet\":{\"count\":243,\"lastSeenTime\":1577030057610,\"publicGameCount\":8,\"difficulty\":0.6521739130434784,\"difficultyWeight\":92},\"dinosaur\":{\"count\":230,\"lastSeenTime\":1577030567444,\"publicGameCount\":16,\"difficulty\":0.5608465608465608,\"difficultyWeight\":189},\"dirty\":{\"count\":428,\"lastSeenTime\":1577018625054,\"difficulty\":0.6593406593406592,\"difficultyWeight\":182,\"publicGameCount\":26},\"dispenser\":{\"count\":227,\"lastSeenTime\":1577017724852,\"publicGameCount\":4,\"difficulty\":0.8387096774193549,\"difficultyWeight\":31},\"distance\":{\"count\":224,\"lastSeenTime\":1576994305172,\"difficulty\":0.8064516129032258,\"difficultyWeight\":93,\"publicGameCount\":7},\"divorce\":{\"count\":216,\"lastSeenTime\":1577031943447,\"publicGameCount\":14,\"difficulty\":0.652542372881356,\"difficultyWeight\":118},\"dizzy\":{\"count\":418,\"lastSeenTime\":1577032910599,\"publicGameCount\":26,\"difficulty\":0.6170212765957447,\"difficultyWeight\":235},\"doghouse\":{\"count\":408,\"lastSeenTime\":1577010309027,\"publicGameCount\":39,\"difficulty\":0.5927051671732522,\"difficultyWeight\":329},\"dollar\":{\"count\":218,\"lastSeenTime\":1577032026722,\"difficulty\":0.46666666666666673,\"difficultyWeight\":255,\"publicGameCount\":10},\"dollhouse\":{\"count\":211,\"lastSeenTime\":1576973874742,\"publicGameCount\":7,\"difficulty\":0.5851063829787234,\"difficultyWeight\":94},\"dolphin\":{\"count\":211,\"lastSeenTime\":1577035900512,\"difficulty\":0.5603448275862067,\"difficultyWeight\":232,\"publicGameCount\":10},\"dominoes\":{\"count\":226,\"lastSeenTime\":1577032716307,\"difficulty\":0.6347305389221555,\"difficultyWeight\":167,\"publicGameCount\":10},\"door\":{\"count\":218,\"lastSeenTime\":1577016094689,\"difficulty\":0.5297029702970297,\"difficultyWeight\":202,\"publicGameCount\":3},\"doorknob\":{\"count\":225,\"lastSeenTime\":1576987429699,\"publicGameCount\":18,\"difficulty\":0.5317919075144507,\"difficultyWeight\":173},\"download\":{\"count\":235,\"lastSeenTime\":1577033407643,\"publicGameCount\":18,\"difficulty\":0.618421052631579,\"difficultyWeight\":152},\"dragon\":{\"count\":221,\"lastSeenTime\":1577003395215,\"difficulty\":0.5524861878453039,\"difficultyWeight\":181,\"publicGameCount\":7},\"dragonfly\":{\"count\":200,\"lastSeenTime\":1576990735116,\"publicGameCount\":12,\"difficulty\":0.5578231292517006,\"difficultyWeight\":147},\"drawer\":{\"count\":231,\"lastSeenTime\":1577032787613,\"publicGameCount\":7,\"difficulty\":0.7029702970297029,\"difficultyWeight\":101},\"drink\":{\"count\":391,\"lastSeenTime\":1577031510950,\"publicGameCount\":32,\"difficulty\":0.5630252100840337,\"difficultyWeight\":357},\"drive\":{\"count\":250,\"lastSeenTime\":1577024698445,\"publicGameCount\":14,\"difficulty\":0.6212121212121213,\"difficultyWeight\":198},\"driver\":{\"count\":249,\"lastSeenTime\":1577037412232,\"difficulty\":0.5925925925925927,\"difficultyWeight\":162,\"publicGameCount\":14},\"drool\":{\"count\":221,\"lastSeenTime\":1577018610787,\"difficulty\":0.6541353383458647,\"difficultyWeight\":133,\"publicGameCount\":7},\"droplet\":{\"count\":387,\"lastSeenTime\":1577001449472,\"publicGameCount\":30,\"difficulty\":0.6498054474708171,\"difficultyWeight\":257},\"duct tape\":{\"count\":207,\"lastSeenTime\":1577017859865,\"publicGameCount\":12,\"difficulty\":0.7346938775510204,\"difficultyWeight\":98},\"dynamite\":{\"count\":216,\"lastSeenTime\":1577034440167,\"publicGameCount\":19,\"difficulty\":0.597989949748744,\"difficultyWeight\":199},\"eagle\":{\"count\":208,\"lastSeenTime\":1576975499357,\"difficulty\":0.47368421052631576,\"difficultyWeight\":171,\"publicGameCount\":9},\"earbuds\":{\"count\":221,\"lastSeenTime\":1577012475718,\"publicGameCount\":22,\"difficulty\":0.5968586387434555,\"difficultyWeight\":191},\"earwax\":{\"count\":401,\"lastSeenTime\":1577013730906,\"publicGameCount\":37,\"difficulty\":0.6137566137566137,\"difficultyWeight\":378},\"eat\":{\"count\":404,\"lastSeenTime\":1577030358000,\"difficulty\":0.6607142857142857,\"difficultyWeight\":280,\"publicGameCount\":15},\"egg\":{\"count\":191,\"lastSeenTime\":1577017859865,\"difficulty\":0.5219123505976095,\"difficultyWeight\":251,\"publicGameCount\":9},\"electric car\":{\"count\":244,\"lastSeenTime\":1577035544830,\"publicGameCount\":16,\"difficulty\":0.7867647058823529,\"difficultyWeight\":136},\"electric guitar\":{\"count\":461,\"lastSeenTime\":1577014429167,\"publicGameCount\":35,\"difficulty\":0.7862318840579711,\"difficultyWeight\":276},\"elephant\":{\"count\":233,\"lastSeenTime\":1577014153105,\"publicGameCount\":22,\"difficulty\":0.4418604651162791,\"difficultyWeight\":215},\"elevator\":{\"count\":235,\"lastSeenTime\":1577033647739,\"publicGameCount\":13,\"difficulty\":0.48360655737704916,\"difficultyWeight\":122},\"end\":{\"count\":229,\"lastSeenTime\":1577031138755,\"difficulty\":0.6145833333333334,\"difficultyWeight\":96,\"publicGameCount\":7},\"engine\":{\"count\":242,\"lastSeenTime\":1577036158826,\"publicGameCount\":8,\"difficulty\":0.5975609756097561,\"difficultyWeight\":82},\"equator\":{\"count\":405,\"lastSeenTime\":1577025975223,\"publicGameCount\":26,\"difficulty\":0.5942028985507246,\"difficultyWeight\":207},\"error\":{\"count\":242,\"lastSeenTime\":1576973278025,\"difficulty\":0.5468750000000002,\"difficultyWeight\":128,\"publicGameCount\":11},\"evaporate\":{\"count\":242,\"lastSeenTime\":1576988895070,\"publicGameCount\":4,\"difficulty\":0.8,\"difficultyWeight\":35},\"evening\":{\"count\":231,\"lastSeenTime\":1576986689127,\"publicGameCount\":7,\"difficulty\":0.7402597402597403,\"difficultyWeight\":77},\"evolution\":{\"count\":220,\"lastSeenTime\":1577010384587,\"difficulty\":0.6417910447761194,\"difficultyWeight\":67,\"publicGameCount\":7},\"exam\":{\"count\":231,\"lastSeenTime\":1576979584203,\"publicGameCount\":19,\"difficulty\":0.5180722891566265,\"difficultyWeight\":166},\"explosion\":{\"count\":246,\"lastSeenTime\":1577029996661,\"publicGameCount\":20,\"difficulty\":0.6142131979695431,\"difficultyWeight\":197},\"eye\":{\"count\":413,\"lastSeenTime\":1577034239310,\"difficulty\":0.4728682170542636,\"difficultyWeight\":387,\"publicGameCount\":14},\"eyebrow\":{\"count\":445,\"lastSeenTime\":1577037511458,\"publicGameCount\":58,\"difficulty\":0.5087040618955514,\"difficultyWeight\":517},\"eyeshadow\":{\"count\":216,\"lastSeenTime\":1577007491736,\"publicGameCount\":12,\"difficulty\":0.6486486486486487,\"difficultyWeight\":111},\"face paint\":{\"count\":216,\"lastSeenTime\":1577010323756,\"publicGameCount\":11,\"difficulty\":0.7123287671232876,\"difficultyWeight\":73},\"fall\":{\"count\":461,\"lastSeenTime\":1577025129454,\"publicGameCount\":32,\"difficulty\":0.5156794425087107,\"difficultyWeight\":287},\"family\":{\"count\":232,\"lastSeenTime\":1576999137808,\"difficulty\":0.5700000000000001,\"difficultyWeight\":100,\"publicGameCount\":2},\"farm\":{\"count\":421,\"lastSeenTime\":1577030888377,\"publicGameCount\":29,\"difficulty\":0.5379939209726443,\"difficultyWeight\":329},\"farmer\":{\"count\":233,\"lastSeenTime\":1577019636661,\"publicGameCount\":14,\"difficulty\":0.5862068965517241,\"difficultyWeight\":145},\"fashion designer\":{\"count\":247,\"lastSeenTime\":1577016742708,\"publicGameCount\":8,\"difficulty\":0.7619047619047619,\"difficultyWeight\":42},\"fast\":{\"count\":445,\"lastSeenTime\":1577015786414,\"publicGameCount\":36,\"difficulty\":0.5367412140575079,\"difficultyWeight\":313},\"fast forward\":{\"count\":244,\"lastSeenTime\":1577020962581,\"publicGameCount\":19,\"difficulty\":0.7103448275862069,\"difficultyWeight\":145},\"father\":{\"count\":213,\"lastSeenTime\":1577020439934,\"difficulty\":0.7,\"difficultyWeight\":160,\"publicGameCount\":9},\"faucet\":{\"count\":214,\"lastSeenTime\":1577034546199,\"difficulty\":0.6721311475409836,\"difficultyWeight\":61,\"publicGameCount\":6},\"fidget spinner\":{\"count\":251,\"lastSeenTime\":1577029617419,\"publicGameCount\":43,\"difficulty\":0.6327868852459017,\"difficultyWeight\":305},\"filmmaker\":{\"count\":227,\"lastSeenTime\":1577001561609,\"publicGameCount\":9,\"difficulty\":0.6486486486486487,\"difficultyWeight\":74},\"fingertip\":{\"count\":444,\"lastSeenTime\":1577032358945,\"publicGameCount\":34,\"difficulty\":0.6431372549019608,\"difficultyWeight\":255},\"fire truck\":{\"count\":246,\"lastSeenTime\":1577011245370,\"publicGameCount\":30,\"difficulty\":0.5879629629629631,\"difficultyWeight\":216},\"fireball\":{\"count\":249,\"lastSeenTime\":1577010869992,\"publicGameCount\":25,\"difficulty\":0.6709956709956709,\"difficultyWeight\":231},\"firehouse\":{\"count\":440,\"lastSeenTime\":1577011662153,\"publicGameCount\":19,\"difficulty\":0.5999999999999999,\"difficultyWeight\":200},\"fireman\":{\"count\":214,\"lastSeenTime\":1577010262294,\"publicGameCount\":17,\"difficulty\":0.6211453744493389,\"difficultyWeight\":227},\"fireplace\":{\"count\":223,\"lastSeenTime\":1577032859509,\"publicGameCount\":14,\"difficulty\":0.5879396984924623,\"difficultyWeight\":199},\"fireside\":{\"count\":220,\"lastSeenTime\":1577033078485,\"difficulty\":0.7333333333333333,\"difficultyWeight\":60,\"publicGameCount\":4},\"firework\":{\"count\":237,\"lastSeenTime\":1577018586401,\"publicGameCount\":20,\"difficulty\":0.5208333333333335,\"difficultyWeight\":240},\"fish bowl\":{\"count\":220,\"lastSeenTime\":1577034656692,\"publicGameCount\":29,\"difficulty\":0.514018691588785,\"difficultyWeight\":214},\"fist fight\":{\"count\":227,\"lastSeenTime\":1577036293187,\"difficulty\":0.7345132743362832,\"difficultyWeight\":113,\"publicGameCount\":11},\"fitness trainer\":{\"count\":213,\"lastSeenTime\":1577025726927,\"publicGameCount\":8,\"difficulty\":0.7647058823529411,\"difficultyWeight\":51},\"flag\":{\"count\":426,\"lastSeenTime\":1577033997203,\"publicGameCount\":46,\"difficulty\":0.3579418344519016,\"difficultyWeight\":447},\"flagpole\":{\"count\":447,\"lastSeenTime\":1577018352358,\"publicGameCount\":40,\"difficulty\":0.6446540880503144,\"difficultyWeight\":318},\"flamethrower\":{\"count\":229,\"lastSeenTime\":1577019945970,\"publicGameCount\":26,\"difficulty\":0.7348066298342542,\"difficultyWeight\":181},\"flea\":{\"count\":221,\"lastSeenTime\":1577010774216,\"difficulty\":0.6630434782608695,\"difficultyWeight\":92,\"publicGameCount\":4},\"flock\":{\"count\":236,\"lastSeenTime\":1577021290587,\"publicGameCount\":6,\"difficulty\":0.5777777777777777,\"difficultyWeight\":90},\"flower\":{\"count\":447,\"lastSeenTime\":1577037345324,\"publicGameCount\":53,\"difficulty\":0.38228941684665224,\"difficultyWeight\":463},\"flu\":{\"count\":212,\"lastSeenTime\":1576974949148,\"publicGameCount\":8,\"difficulty\":0.44,\"difficultyWeight\":75},\"fly\":{\"count\":421,\"lastSeenTime\":1577031113164,\"difficulty\":0.566750629722922,\"difficultyWeight\":397,\"publicGameCount\":10},\"fog\":{\"count\":421,\"lastSeenTime\":1577020143058,\"publicGameCount\":12,\"difficulty\":0.6878980891719745,\"difficultyWeight\":157},\"fortune\":{\"count\":232,\"lastSeenTime\":1577016150699,\"publicGameCount\":5,\"difficulty\":0.8028169014084507,\"difficultyWeight\":71},\"fossil\":{\"count\":448,\"lastSeenTime\":1577034689603,\"publicGameCount\":20,\"difficulty\":0.7185929648241205,\"difficultyWeight\":199},\"fountain\":{\"count\":435,\"lastSeenTime\":1577025578748,\"publicGameCount\":49,\"difficulty\":0.5555555555555554,\"difficultyWeight\":369},\"freezer\":{\"count\":212,\"lastSeenTime\":1576999462046,\"publicGameCount\":13,\"difficulty\":0.5675675675675677,\"difficultyWeight\":111},\"fridge\":{\"count\":225,\"lastSeenTime\":1577018571006,\"difficulty\":0.5418994413407822,\"difficultyWeight\":179,\"publicGameCount\":11},\"fries\":{\"count\":213,\"lastSeenTime\":1577015197399,\"difficulty\":0.46443514644351463,\"difficultyWeight\":239,\"publicGameCount\":3},\"frog\":{\"count\":222,\"lastSeenTime\":1577015586196,\"publicGameCount\":7,\"difficulty\":0.46153846153846156,\"difficultyWeight\":130},\"frown\":{\"count\":223,\"lastSeenTime\":1577036283076,\"publicGameCount\":9,\"difficulty\":0.6083333333333333,\"difficultyWeight\":120},\"fruit\":{\"count\":233,\"lastSeenTime\":1577007767963,\"difficulty\":0.4015748031496063,\"difficultyWeight\":127,\"publicGameCount\":5},\"full\":{\"count\":475,\"lastSeenTime\":1577010615663,\"publicGameCount\":36,\"difficulty\":0.5847176079734219,\"difficultyWeight\":301},\"funeral\":{\"count\":231,\"lastSeenTime\":1577036754761,\"publicGameCount\":11,\"difficulty\":0.5454545454545454,\"difficultyWeight\":88},\"funny\":{\"count\":483,\"lastSeenTime\":1577035569138,\"publicGameCount\":34,\"difficulty\":0.6825396825396826,\"difficultyWeight\":252},\"gang\":{\"count\":238,\"lastSeenTime\":1577034096819,\"publicGameCount\":7,\"difficulty\":0.6639344262295082,\"difficultyWeight\":122},\"garbage\":{\"count\":221,\"lastSeenTime\":1577034556334,\"publicGameCount\":18,\"difficulty\":0.6103286384976526,\"difficultyWeight\":213},\"gardener\":{\"count\":227,\"lastSeenTime\":1577026040111,\"publicGameCount\":12,\"difficulty\":0.7431192660550459,\"difficultyWeight\":109},\"garlic\":{\"count\":231,\"lastSeenTime\":1577030520806,\"publicGameCount\":14,\"difficulty\":0.5583333333333333,\"difficultyWeight\":120},\"gas mask\":{\"count\":241,\"lastSeenTime\":1577002956642,\"publicGameCount\":23,\"difficulty\":0.7159090909090909,\"difficultyWeight\":176},\"gate\":{\"count\":233,\"lastSeenTime\":1577011781649,\"difficulty\":0.5586592178770949,\"difficultyWeight\":179,\"publicGameCount\":15},\"gem\":{\"count\":230,\"lastSeenTime\":1577018192097,\"difficulty\":0.5967741935483871,\"difficultyWeight\":186,\"publicGameCount\":4},\"genie\":{\"count\":247,\"lastSeenTime\":1576994586439,\"publicGameCount\":12,\"difficulty\":0.6626506024096386,\"difficultyWeight\":166},\"germ\":{\"count\":217,\"lastSeenTime\":1577014167357,\"difficulty\":0.5486725663716814,\"difficultyWeight\":113,\"publicGameCount\":10},\"ghost\":{\"count\":210,\"lastSeenTime\":1576992152678,\"difficulty\":0.4727272727272727,\"difficultyWeight\":330,\"publicGameCount\":4},\"giant\":{\"count\":235,\"lastSeenTime\":1577032982788,\"publicGameCount\":13,\"difficulty\":0.6944444444444444,\"difficultyWeight\":108},\"gift\":{\"count\":211,\"lastSeenTime\":1577025802876,\"publicGameCount\":8,\"difficulty\":0.4867724867724869,\"difficultyWeight\":189},\"giraffe\":{\"count\":223,\"lastSeenTime\":1577020114457,\"difficulty\":0.4594594594594595,\"difficultyWeight\":185,\"publicGameCount\":14},\"gladiator\":{\"count\":245,\"lastSeenTime\":1577032198145,\"difficulty\":0.68,\"difficultyWeight\":25,\"publicGameCount\":2},\"glasses\":{\"count\":241,\"lastSeenTime\":1577024306506,\"difficulty\":0.4945054945054945,\"difficultyWeight\":182,\"publicGameCount\":15},\"gloss\":{\"count\":245,\"lastSeenTime\":1577035714898,\"publicGameCount\":5,\"difficulty\":0.5970149253731343,\"difficultyWeight\":67},\"glove\":{\"count\":226,\"lastSeenTime\":1577018682226,\"difficulty\":0.555045871559633,\"difficultyWeight\":218,\"publicGameCount\":19},\"glow\":{\"count\":240,\"lastSeenTime\":1577007757536,\"publicGameCount\":10,\"difficulty\":0.5446428571428572,\"difficultyWeight\":112},\"glowstick\":{\"count\":255,\"lastSeenTime\":1577020336526,\"publicGameCount\":18,\"difficulty\":0.6220930232558141,\"difficultyWeight\":172},\"goal\":{\"count\":194,\"lastSeenTime\":1577015835147,\"publicGameCount\":8,\"difficulty\":0.5533333333333335,\"difficultyWeight\":150},\"godfather\":{\"count\":218,\"lastSeenTime\":1577018061246,\"publicGameCount\":8,\"difficulty\":0.7368421052631579,\"difficultyWeight\":76},\"gold\":{\"count\":218,\"lastSeenTime\":1576983733645,\"difficulty\":0.5560538116591929,\"difficultyWeight\":223,\"publicGameCount\":9},\"gold chain\":{\"count\":239,\"lastSeenTime\":1577032530295,\"publicGameCount\":16,\"difficulty\":0.6861313868613139,\"difficultyWeight\":137},\"golden apple\":{\"count\":220,\"lastSeenTime\":1577018743300,\"publicGameCount\":26,\"difficulty\":0.6188118811881187,\"difficultyWeight\":202},\"golden egg\":{\"count\":257,\"lastSeenTime\":1577034214987,\"publicGameCount\":45,\"difficulty\":0.7329376854599405,\"difficultyWeight\":337},\"goldfish\":{\"count\":216,\"lastSeenTime\":1577029961880,\"publicGameCount\":18,\"difficulty\":0.5367965367965368,\"difficultyWeight\":231},\"golf\":{\"count\":258,\"lastSeenTime\":1577033583113,\"difficulty\":0.5697674418604652,\"difficultyWeight\":172,\"publicGameCount\":9},\"goose\":{\"count\":233,\"lastSeenTime\":1576998176725,\"difficulty\":0.6982758620689655,\"difficultyWeight\":116,\"publicGameCount\":6},\"gorilla\":{\"count\":238,\"lastSeenTime\":1576975519093,\"publicGameCount\":13,\"difficulty\":0.725925925925926,\"difficultyWeight\":135},\"graffiti\":{\"count\":235,\"lastSeenTime\":1577025938533,\"publicGameCount\":15,\"difficulty\":0.6293103448275862,\"difficultyWeight\":116},\"grapefruit\":{\"count\":220,\"lastSeenTime\":1576954599059,\"publicGameCount\":8,\"difficulty\":0.7619047619047619,\"difficultyWeight\":63},\"grapes\":{\"count\":227,\"lastSeenTime\":1577032430625,\"publicGameCount\":4,\"difficulty\":0.45348837209302323,\"difficultyWeight\":172},\"graph\":{\"count\":199,\"lastSeenTime\":1576981282130,\"publicGameCount\":9,\"difficulty\":0.5578231292517006,\"difficultyWeight\":147},\"grass\":{\"count\":422,\"lastSeenTime\":1577029688943,\"publicGameCount\":26,\"difficulty\":0.5116959064327484,\"difficultyWeight\":342},\"grave\":{\"count\":228,\"lastSeenTime\":1577021218762,\"publicGameCount\":11,\"difficulty\":0.48633879781420764,\"difficultyWeight\":183},\"gravedigger\":{\"count\":208,\"lastSeenTime\":1577036892935,\"difficulty\":0.7608695652173914,\"difficultyWeight\":92,\"publicGameCount\":11},\"grenade\":{\"count\":243,\"lastSeenTime\":1577006677996,\"publicGameCount\":26,\"difficulty\":0.5836734693877551,\"difficultyWeight\":245},\"grid\":{\"count\":230,\"lastSeenTime\":1577029593108,\"difficulty\":0.6410256410256411,\"difficultyWeight\":117,\"publicGameCount\":10},\"grill\":{\"count\":240,\"lastSeenTime\":1577018165583,\"difficulty\":0.6607142857142857,\"difficultyWeight\":112,\"publicGameCount\":2},\"grin\":{\"count\":214,\"lastSeenTime\":1576976608765,\"difficulty\":0.6102941176470589,\"difficultyWeight\":136,\"publicGameCount\":13},\"guillotine\":{\"count\":243,\"lastSeenTime\":1577036953671,\"difficulty\":0.8548387096774194,\"difficultyWeight\":62,\"publicGameCount\":8},\"gumball\":{\"count\":227,\"lastSeenTime\":1577030902569,\"difficulty\":0.6568627450980391,\"difficultyWeight\":102,\"publicGameCount\":4},\"gummy\":{\"count\":431,\"lastSeenTime\":1577019972511,\"publicGameCount\":37,\"difficulty\":0.579124579124579,\"difficultyWeight\":297},\"gummy worm\":{\"count\":209,\"lastSeenTime\":1577002437912,\"publicGameCount\":20,\"difficulty\":0.678082191780822,\"difficultyWeight\":146},\"hacker\":{\"count\":248,\"lastSeenTime\":1577007782564,\"publicGameCount\":12,\"difficulty\":0.6935483870967742,\"difficultyWeight\":124},\"hairbrush\":{\"count\":236,\"lastSeenTime\":1577031895972,\"publicGameCount\":18,\"difficulty\":0.5533333333333333,\"difficultyWeight\":150},\"haircut\":{\"count\":214,\"lastSeenTime\":1576980501058,\"difficulty\":0.5688073394495413,\"difficultyWeight\":109,\"publicGameCount\":10},\"hairspray\":{\"count\":216,\"lastSeenTime\":1577035202003,\"publicGameCount\":11,\"difficulty\":0.6470588235294118,\"difficultyWeight\":119},\"hairy\":{\"count\":442,\"lastSeenTime\":1577030082147,\"publicGameCount\":28,\"difficulty\":0.5887445887445889,\"difficultyWeight\":231},\"half\":{\"count\":220,\"lastSeenTime\":1577021368947,\"difficulty\":0.5163043478260869,\"difficultyWeight\":184,\"publicGameCount\":9},\"hamburger\":{\"count\":223,\"lastSeenTime\":1577033017430,\"publicGameCount\":23,\"difficulty\":0.4900398406374502,\"difficultyWeight\":251},\"hammer\":{\"count\":230,\"lastSeenTime\":1577032786045,\"difficulty\":0.4740740740740741,\"difficultyWeight\":270,\"publicGameCount\":19},\"hamster\":{\"count\":218,\"lastSeenTime\":1577015971079,\"difficulty\":0.6587301587301586,\"difficultyWeight\":126,\"publicGameCount\":11},\"hand\":{\"count\":459,\"lastSeenTime\":1577029564602,\"difficulty\":0.38687782805429866,\"difficultyWeight\":442,\"publicGameCount\":34},\"handicap\":{\"count\":256,\"lastSeenTime\":1577037511458,\"publicGameCount\":7,\"difficulty\":0.8059701492537313,\"difficultyWeight\":67},\"handshake\":{\"count\":227,\"lastSeenTime\":1577007971712,\"publicGameCount\":12,\"difficulty\":0.6600000000000001,\"difficultyWeight\":100},\"hanger\":{\"count\":215,\"lastSeenTime\":1577037426426,\"difficulty\":0.49999999999999994,\"difficultyWeight\":110,\"publicGameCount\":1},\"harbor\":{\"count\":459,\"lastSeenTime\":1577037092671,\"difficulty\":0.8444444444444444,\"difficultyWeight\":90,\"publicGameCount\":9},\"hard hat\":{\"count\":234,\"lastSeenTime\":1577018781997,\"publicGameCount\":13,\"difficulty\":0.7777777777777778,\"difficultyWeight\":81},\"harp\":{\"count\":440,\"lastSeenTime\":1577036892935,\"publicGameCount\":17,\"difficulty\":0.5906735751295337,\"difficultyWeight\":193},\"harpoon\":{\"count\":212,\"lastSeenTime\":1576986413615,\"difficulty\":0.875,\"difficultyWeight\":88,\"publicGameCount\":6},\"hashtag\":{\"count\":227,\"lastSeenTime\":1577024212837,\"difficulty\":0.5597826086956522,\"difficultyWeight\":184,\"publicGameCount\":5},\"hazard\":{\"count\":227,\"lastSeenTime\":1577019684566,\"publicGameCount\":6,\"difficulty\":0.7115384615384616,\"difficultyWeight\":52},\"hazelnut\":{\"count\":246,\"lastSeenTime\":1576993732939,\"publicGameCount\":6,\"difficulty\":0.509090909090909,\"difficultyWeight\":55},\"headboard\":{\"count\":222,\"lastSeenTime\":1577031957749,\"publicGameCount\":9,\"difficulty\":0.6923076923076923,\"difficultyWeight\":65},\"heading\":{\"count\":207,\"lastSeenTime\":1577026078796,\"difficulty\":0.7058823529411765,\"difficultyWeight\":51,\"publicGameCount\":2},\"heart\":{\"count\":407,\"lastSeenTime\":1577032222590,\"publicGameCount\":35,\"difficulty\":0.3900226757369615,\"difficultyWeight\":441},\"heel\":{\"count\":446,\"lastSeenTime\":1577015110298,\"publicGameCount\":30,\"difficulty\":0.5167286245353159,\"difficultyWeight\":269},\"heist\":{\"count\":229,\"lastSeenTime\":1577037667912,\"publicGameCount\":4,\"difficulty\":0.8194444444444444,\"difficultyWeight\":72},\"helicopter\":{\"count\":211,\"lastSeenTime\":1577034096819,\"difficulty\":0.4226190476190476,\"difficultyWeight\":168,\"publicGameCount\":20},\"hell\":{\"count\":211,\"lastSeenTime\":1576972623220,\"difficulty\":0.5592105263157895,\"difficultyWeight\":152,\"publicGameCount\":8},\"hen\":{\"count\":228,\"lastSeenTime\":1577008396195,\"difficulty\":0.6666666666666666,\"difficultyWeight\":78,\"publicGameCount\":3},\"hero\":{\"count\":208,\"lastSeenTime\":1577025578748,\"difficulty\":0.5741626794258372,\"difficultyWeight\":209,\"publicGameCount\":12},\"hibernate\":{\"count\":214,\"lastSeenTime\":1577034096819,\"publicGameCount\":6,\"difficulty\":0.5813953488372093,\"difficultyWeight\":43},\"hieroglyph\":{\"count\":201,\"lastSeenTime\":1577037226802,\"publicGameCount\":7,\"difficulty\":0.7971014492753623,\"difficultyWeight\":69},\"high five\":{\"count\":254,\"lastSeenTime\":1577019799055,\"difficulty\":0.5734265734265734,\"difficultyWeight\":143,\"publicGameCount\":18},\"high heels\":{\"count\":211,\"lastSeenTime\":1577017330066,\"publicGameCount\":26,\"difficulty\":0.5027322404371585,\"difficultyWeight\":183},\"highway\":{\"count\":454,\"lastSeenTime\":1577037236956,\"publicGameCount\":23,\"difficulty\":0.5904761904761906,\"difficultyWeight\":210},\"hippie\":{\"count\":219,\"lastSeenTime\":1576945048708,\"difficulty\":0.6818181818181818,\"difficultyWeight\":66,\"publicGameCount\":6},\"hippo\":{\"count\":252,\"lastSeenTime\":1577037151662,\"difficulty\":0.7373737373737373,\"difficultyWeight\":99,\"publicGameCount\":8},\"hitchhiker\":{\"count\":244,\"lastSeenTime\":1577030311398,\"publicGameCount\":2,\"difficulty\":0.8,\"difficultyWeight\":20},\"hockey\":{\"count\":225,\"lastSeenTime\":1577025742812,\"difficulty\":0.6901408450704225,\"difficultyWeight\":142,\"publicGameCount\":7},\"holiday\":{\"count\":223,\"lastSeenTime\":1576972207002,\"publicGameCount\":11,\"difficulty\":0.7388059701492538,\"difficultyWeight\":134},\"honey\":{\"count\":214,\"lastSeenTime\":1577035177226,\"publicGameCount\":14,\"difficulty\":0.4880382775119617,\"difficultyWeight\":209},\"hoof\":{\"count\":228,\"lastSeenTime\":1577017431391,\"publicGameCount\":5,\"difficulty\":0.5609756097560975,\"difficultyWeight\":82},\"hook\":{\"count\":276,\"lastSeenTime\":1577020291134,\"difficulty\":0.4742268041237113,\"difficultyWeight\":194,\"publicGameCount\":16},\"horizon\":{\"count\":430,\"lastSeenTime\":1577029639639,\"publicGameCount\":17,\"difficulty\":0.723404255319149,\"difficultyWeight\":141},\"horse\":{\"count\":231,\"lastSeenTime\":1577036907083,\"publicGameCount\":6,\"difficulty\":0.4808743169398907,\"difficultyWeight\":183},\"horsewhip\":{\"count\":217,\"lastSeenTime\":1577031792602,\"publicGameCount\":6,\"difficulty\":0.8285714285714286,\"difficultyWeight\":70},\"hose\":{\"count\":218,\"lastSeenTime\":1577015378171,\"publicGameCount\":7,\"difficulty\":0.6513761467889908,\"difficultyWeight\":109},\"hospital\":{\"count\":443,\"lastSeenTime\":1577032873667,\"difficulty\":0.5020325203252033,\"difficultyWeight\":492,\"publicGameCount\":54},\"hot chocolate\":{\"count\":258,\"lastSeenTime\":1576994676492,\"publicGameCount\":39,\"difficulty\":0.702054794520548,\"difficultyWeight\":292},\"hot dog\":{\"count\":225,\"lastSeenTime\":1577018647384,\"publicGameCount\":37,\"difficulty\":0.525735294117647,\"difficultyWeight\":272},\"hot sauce\":{\"count\":209,\"lastSeenTime\":1577033960762,\"publicGameCount\":21,\"difficulty\":0.7531645569620253,\"difficultyWeight\":158},\"hourglass\":{\"count\":230,\"lastSeenTime\":1577014885145,\"difficulty\":0.6000000000000001,\"difficultyWeight\":275,\"publicGameCount\":21},\"hug\":{\"count\":252,\"lastSeenTime\":1577019371561,\"difficulty\":0.6630434782608695,\"difficultyWeight\":92,\"publicGameCount\":3},\"hummingbird\":{\"count\":217,\"lastSeenTime\":1577031754107,\"publicGameCount\":10,\"difficulty\":0.7108433734939759,\"difficultyWeight\":83},\"hurdle\":{\"count\":222,\"lastSeenTime\":1577030396800,\"publicGameCount\":7,\"difficulty\":0.6666666666666666,\"difficultyWeight\":99},\"hurt\":{\"count\":213,\"lastSeenTime\":1577011040351,\"difficulty\":0.5979381443298969,\"difficultyWeight\":97,\"publicGameCount\":5},\"husband\":{\"count\":226,\"lastSeenTime\":1577016590802,\"difficulty\":0.6309523809523809,\"difficultyWeight\":168,\"publicGameCount\":17},\"hut\":{\"count\":468,\"lastSeenTime\":1577018932714,\"difficulty\":0.5971223021582733,\"difficultyWeight\":278,\"publicGameCount\":23},\"hypnotize\":{\"count\":247,\"lastSeenTime\":1577037688224,\"difficulty\":0.7211538461538461,\"difficultyWeight\":104,\"publicGameCount\":13},\"ice cream truck\":{\"count\":229,\"lastSeenTime\":1577018964063,\"publicGameCount\":35,\"difficulty\":0.6770428015564203,\"difficultyWeight\":257},\"idea\":{\"count\":211,\"lastSeenTime\":1577021177893,\"difficulty\":0.5275590551181102,\"difficultyWeight\":127,\"publicGameCount\":7},\"imagination\":{\"count\":248,\"lastSeenTime\":1577037103049,\"publicGameCount\":18,\"difficulty\":0.746268656716418,\"difficultyWeight\":134},\"industry\":{\"count\":244,\"lastSeenTime\":1576973913856,\"publicGameCount\":5,\"difficulty\":0.75,\"difficultyWeight\":36},\"inside\":{\"count\":231,\"lastSeenTime\":1577012446133,\"publicGameCount\":11,\"difficulty\":0.6304347826086957,\"difficultyWeight\":92},\"ivy\":{\"count\":425,\"lastSeenTime\":1577030851645,\"publicGameCount\":14,\"difficulty\":0.576,\"difficultyWeight\":125},\"jacket\":{\"count\":243,\"lastSeenTime\":1577021204269,\"difficulty\":0.6271186440677966,\"difficultyWeight\":118,\"publicGameCount\":9},\"jackhammer\":{\"count\":214,\"lastSeenTime\":1577031781371,\"publicGameCount\":12,\"difficulty\":0.75,\"difficultyWeight\":108},\"jaguar\":{\"count\":234,\"lastSeenTime\":1577009531378,\"difficulty\":0.5757575757575758,\"difficultyWeight\":66,\"publicGameCount\":7},\"jalapeno\":{\"count\":220,\"lastSeenTime\":1577031583222,\"difficulty\":0.6642335766423357,\"difficultyWeight\":137,\"publicGameCount\":10},\"janitor\":{\"count\":237,\"lastSeenTime\":1577030406930,\"difficulty\":0.7211538461538461,\"difficultyWeight\":104,\"publicGameCount\":10},\"jaw\":{\"count\":416,\"lastSeenTime\":1577018262363,\"difficulty\":0.6192307692307693,\"difficultyWeight\":260,\"publicGameCount\":20},\"jeep\":{\"count\":225,\"lastSeenTime\":1577031536041,\"difficulty\":0.5277777777777778,\"difficultyWeight\":72,\"publicGameCount\":7},\"jello\":{\"count\":218,\"lastSeenTime\":1577003035473,\"publicGameCount\":12,\"difficulty\":0.584070796460177,\"difficultyWeight\":113},\"jelly\":{\"count\":248,\"lastSeenTime\":1577033407643,\"difficulty\":0.5943396226415094,\"difficultyWeight\":212,\"publicGameCount\":12},\"jellyfish\":{\"count\":223,\"lastSeenTime\":1577014939690,\"difficulty\":0.46031746031746035,\"difficultyWeight\":252,\"publicGameCount\":17},\"jet ski\":{\"count\":210,\"lastSeenTime\":1577034329984,\"publicGameCount\":11,\"difficulty\":0.7272727272727273,\"difficultyWeight\":88},\"joker\":{\"count\":214,\"lastSeenTime\":1577020810865,\"publicGameCount\":12,\"difficulty\":0.47126436781609193,\"difficultyWeight\":174},\"journalist\":{\"count\":244,\"lastSeenTime\":1577033163970,\"publicGameCount\":8,\"difficulty\":0.82,\"difficultyWeight\":50},\"judge\":{\"count\":215,\"lastSeenTime\":1577019635326,\"difficulty\":0.6203703703703702,\"difficultyWeight\":108,\"publicGameCount\":10},\"juice\":{\"count\":236,\"lastSeenTime\":1577037511458,\"publicGameCount\":11,\"difficulty\":0.5093167701863354,\"difficultyWeight\":161},\"jump rope\":{\"count\":209,\"lastSeenTime\":1577034656692,\"publicGameCount\":13,\"difficulty\":0.6811594202898551,\"difficultyWeight\":138},\"junk food\":{\"count\":226,\"lastSeenTime\":1577024698445,\"publicGameCount\":15,\"difficulty\":0.7529411764705882,\"difficultyWeight\":85},\"kangaroo\":{\"count\":220,\"lastSeenTime\":1577010822941,\"difficulty\":0.6216216216216216,\"difficultyWeight\":111,\"publicGameCount\":9},\"karaoke\":{\"count\":225,\"lastSeenTime\":1577033765748,\"publicGameCount\":13,\"difficulty\":0.7047619047619048,\"difficultyWeight\":105},\"karate\":{\"count\":235,\"lastSeenTime\":1577025144281,\"difficulty\":0.6120689655172413,\"difficultyWeight\":116,\"publicGameCount\":7},\"katana\":{\"count\":223,\"lastSeenTime\":1577002585121,\"publicGameCount\":11,\"difficulty\":0.6420454545454546,\"difficultyWeight\":176},\"kebab\":{\"count\":235,\"lastSeenTime\":1576955799822,\"difficulty\":0.6666666666666666,\"difficultyWeight\":84,\"publicGameCount\":7},\"ketchup\":{\"count\":238,\"lastSeenTime\":1577013730906,\"publicGameCount\":20,\"difficulty\":0.5445544554455445,\"difficultyWeight\":202},\"key\":{\"count\":225,\"lastSeenTime\":1577031259619,\"publicGameCount\":4,\"difficulty\":0.45555555555555555,\"difficultyWeight\":270},\"kidney\":{\"count\":410,\"lastSeenTime\":1577030984080,\"difficulty\":0.6153846153846154,\"difficultyWeight\":182,\"publicGameCount\":19},\"kite\":{\"count\":221,\"lastSeenTime\":1576985103686,\"publicGameCount\":13,\"difficulty\":0.41,\"difficultyWeight\":200},\"kitten\":{\"count\":240,\"lastSeenTime\":1577030096351,\"publicGameCount\":14,\"difficulty\":0.6089385474860335,\"difficultyWeight\":179},\"kiwi\":{\"count\":417,\"lastSeenTime\":1577033794297,\"difficulty\":0.522633744855967,\"difficultyWeight\":243,\"publicGameCount\":28},\"kneel\":{\"count\":200,\"lastSeenTime\":1577008308852,\"publicGameCount\":8,\"difficulty\":0.6907216494845361,\"difficultyWeight\":97},\"knight\":{\"count\":223,\"lastSeenTime\":1577035150930,\"difficulty\":0.6091954022988506,\"difficultyWeight\":87,\"publicGameCount\":10},\"kraken\":{\"count\":243,\"lastSeenTime\":1577037535729,\"difficulty\":0.7241379310344828,\"difficultyWeight\":87,\"publicGameCount\":6},\"ladder\":{\"count\":232,\"lastSeenTime\":1576996463561,\"difficulty\":0.5,\"difficultyWeight\":210,\"publicGameCount\":9},\"lady\":{\"count\":243,\"lastSeenTime\":1577020597928,\"publicGameCount\":14,\"difficulty\":0.6907894736842104,\"difficultyWeight\":152},\"lamb\":{\"count\":209,\"lastSeenTime\":1577035494111,\"difficulty\":0.5637583892617449,\"difficultyWeight\":149,\"publicGameCount\":11},\"language\":{\"count\":234,\"lastSeenTime\":1577013723748,\"publicGameCount\":12,\"difficulty\":0.71,\"difficultyWeight\":100},\"lantern\":{\"count\":239,\"lastSeenTime\":1577030325616,\"publicGameCount\":13,\"difficulty\":0.5806451612903226,\"difficultyWeight\":155},\"lava lamp\":{\"count\":212,\"lastSeenTime\":1577033078485,\"publicGameCount\":15,\"difficulty\":0.6030534351145039,\"difficultyWeight\":131},\"lawn mower\":{\"count\":218,\"lastSeenTime\":1577019187643,\"publicGameCount\":21,\"difficulty\":0.5592105263157895,\"difficultyWeight\":152},\"lawyer\":{\"count\":231,\"lastSeenTime\":1577035568579,\"publicGameCount\":3,\"difficulty\":0.9411764705882353,\"difficultyWeight\":68},\"leaf\":{\"count\":435,\"lastSeenTime\":1577005212976,\"publicGameCount\":37,\"difficulty\":0.41555555555555557,\"difficultyWeight\":450},\"leak\":{\"count\":229,\"lastSeenTime\":1577033633532,\"publicGameCount\":5,\"difficulty\":0.6385542168674698,\"difficultyWeight\":83},\"leash\":{\"count\":227,\"lastSeenTime\":1577009842635,\"difficulty\":0.6363636363636362,\"difficultyWeight\":154,\"publicGameCount\":10},\"lemon\":{\"count\":240,\"lastSeenTime\":1576971136739,\"publicGameCount\":11,\"difficulty\":0.5217391304347826,\"difficultyWeight\":253},\"lemonade\":{\"count\":196,\"lastSeenTime\":1577006756167,\"difficulty\":0.6738197424892703,\"difficultyWeight\":233,\"publicGameCount\":14},\"lettuce\":{\"count\":229,\"lastSeenTime\":1577018472586,\"publicGameCount\":6,\"difficulty\":0.5901639344262295,\"difficultyWeight\":122},\"lid\":{\"count\":221,\"lastSeenTime\":1577035372815,\"publicGameCount\":11,\"difficulty\":0.6153846153846154,\"difficultyWeight\":143},\"lighter\":{\"count\":230,\"lastSeenTime\":1577019809349,\"difficulty\":0.5422885572139304,\"difficultyWeight\":201,\"publicGameCount\":14},\"limbo\":{\"count\":236,\"lastSeenTime\":1577001745670,\"publicGameCount\":8,\"difficulty\":0.7435897435897436,\"difficultyWeight\":117},\"lime\":{\"count\":242,\"lastSeenTime\":1577024525038,\"publicGameCount\":13,\"difficulty\":0.532258064516129,\"difficultyWeight\":186},\"limousine\":{\"count\":230,\"lastSeenTime\":1577036283076,\"publicGameCount\":3,\"difficulty\":0.6000000000000001,\"difficultyWeight\":45},\"line\":{\"count\":225,\"lastSeenTime\":1576943162317,\"difficulty\":0.5136363636363636,\"difficultyWeight\":220,\"publicGameCount\":4},\"lizard\":{\"count\":200,\"lastSeenTime\":1576931077329,\"publicGameCount\":11,\"difficulty\":0.5546218487394957,\"difficultyWeight\":119},\"llama\":{\"count\":252,\"lastSeenTime\":1577034290492,\"difficulty\":0.5813953488372093,\"difficultyWeight\":129,\"publicGameCount\":9},\"loading\":{\"count\":255,\"lastSeenTime\":1577025502724,\"publicGameCount\":20,\"difficulty\":0.6053811659192825,\"difficultyWeight\":223},\"log\":{\"count\":399,\"lastSeenTime\":1577000170176,\"difficulty\":0.5561797752808989,\"difficultyWeight\":356,\"publicGameCount\":14},\"lollipop\":{\"count\":215,\"lastSeenTime\":1577004699540,\"publicGameCount\":13,\"difficulty\":0.5421686746987951,\"difficultyWeight\":166},\"loser\":{\"count\":208,\"lastSeenTime\":1577036293187,\"publicGameCount\":10,\"difficulty\":0.6558441558441559,\"difficultyWeight\":154},\"low\":{\"count\":458,\"lastSeenTime\":1577014053725,\"publicGameCount\":28,\"difficulty\":0.600877192982456,\"difficultyWeight\":228},\"luck\":{\"count\":229,\"lastSeenTime\":1577033647739,\"difficulty\":0.6419753086419753,\"difficultyWeight\":81,\"publicGameCount\":5},\"lumberjack\":{\"count\":226,\"lastSeenTime\":1577035483877,\"publicGameCount\":15,\"difficulty\":0.75,\"difficultyWeight\":104},\"lung\":{\"count\":419,\"lastSeenTime\":1577037392013,\"publicGameCount\":27,\"difficulty\":0.5239726027397259,\"difficultyWeight\":292},\"machine\":{\"count\":221,\"lastSeenTime\":1577018038260,\"publicGameCount\":5,\"difficulty\":0.5857142857142857,\"difficultyWeight\":70},\"magazine\":{\"count\":223,\"lastSeenTime\":1577000170176,\"publicGameCount\":11,\"difficulty\":0.64,\"difficultyWeight\":100},\"magic\":{\"count\":215,\"lastSeenTime\":1577031023734,\"difficulty\":0.6358024691358025,\"difficultyWeight\":162,\"publicGameCount\":12},\"magic wand\":{\"count\":204,\"lastSeenTime\":1577034229193,\"difficulty\":0.5999999999999999,\"difficultyWeight\":175,\"publicGameCount\":22},\"magician\":{\"count\":231,\"lastSeenTime\":1577024317066,\"difficulty\":0.6111111111111112,\"difficultyWeight\":126,\"publicGameCount\":8},\"magma\":{\"count\":198,\"lastSeenTime\":1577025240259,\"difficulty\":0.5677966101694916,\"difficultyWeight\":118,\"publicGameCount\":8},\"magnet\":{\"count\":233,\"lastSeenTime\":1577024499507,\"publicGameCount\":7,\"difficulty\":0.546875,\"difficultyWeight\":192},\"mailbox\":{\"count\":430,\"lastSeenTime\":1577035823959,\"publicGameCount\":39,\"difficulty\":0.4632768361581921,\"difficultyWeight\":354},\"mailman\":{\"count\":243,\"lastSeenTime\":1577001935445,\"publicGameCount\":15,\"difficulty\":0.5570469798657719,\"difficultyWeight\":149},\"makeup\":{\"count\":235,\"lastSeenTime\":1577035568579,\"publicGameCount\":18,\"difficulty\":0.5321637426900584,\"difficultyWeight\":171},\"manicure\":{\"count\":214,\"lastSeenTime\":1577013836576,\"publicGameCount\":10,\"difficulty\":0.7777777777777778,\"difficultyWeight\":72},\"mansion\":{\"count\":465,\"lastSeenTime\":1577021218762,\"publicGameCount\":23,\"difficulty\":0.6347305389221558,\"difficultyWeight\":167},\"maracas\":{\"count\":405,\"lastSeenTime\":1577037016878,\"publicGameCount\":30,\"difficulty\":0.6879699248120301,\"difficultyWeight\":266},\"marathon\":{\"count\":215,\"lastSeenTime\":1577032051558,\"publicGameCount\":7,\"difficulty\":0.6000000000000001,\"difficultyWeight\":50},\"marmot\":{\"count\":216,\"lastSeenTime\":1577024485059,\"publicGameCount\":2,\"difficulty\":0.9285714285714286,\"difficultyWeight\":14},\"marshmallow\":{\"count\":235,\"lastSeenTime\":1577025599091,\"difficulty\":0.771551724137931,\"difficultyWeight\":232,\"publicGameCount\":32},\"mascot\":{\"count\":218,\"lastSeenTime\":1577035865974,\"publicGameCount\":7,\"difficulty\":0.6956521739130435,\"difficultyWeight\":69},\"matchbox\":{\"count\":222,\"lastSeenTime\":1577031458931,\"publicGameCount\":21,\"difficulty\":0.6551724137931033,\"difficultyWeight\":174},\"mattress\":{\"count\":215,\"lastSeenTime\":1577031033935,\"publicGameCount\":11,\"difficulty\":0.6548672566371682,\"difficultyWeight\":113},\"meat\":{\"count\":257,\"lastSeenTime\":1577018005177,\"difficulty\":0.5454545454545454,\"difficultyWeight\":132,\"publicGameCount\":12},\"meatball\":{\"count\":223,\"lastSeenTime\":1577035629904,\"publicGameCount\":12,\"difficulty\":0.6293706293706294,\"difficultyWeight\":143},\"megaphone\":{\"count\":226,\"lastSeenTime\":1577016849135,\"publicGameCount\":17,\"difficulty\":0.6568047337278108,\"difficultyWeight\":169},\"melon\":{\"count\":260,\"lastSeenTime\":1577003426912,\"publicGameCount\":19,\"difficulty\":0.5589743589743591,\"difficultyWeight\":195},\"meme\":{\"count\":233,\"lastSeenTime\":1576998359206,\"difficulty\":0.4819277108433735,\"difficultyWeight\":83,\"publicGameCount\":7},\"message\":{\"count\":250,\"lastSeenTime\":1577035324132,\"difficulty\":0.5692307692307693,\"difficultyWeight\":195,\"publicGameCount\":18},\"metal\":{\"count\":209,\"lastSeenTime\":1577002509579,\"publicGameCount\":7,\"difficulty\":0.6428571428571429,\"difficultyWeight\":98},\"microphone\":{\"count\":223,\"lastSeenTime\":1577014895707,\"publicGameCount\":24,\"difficulty\":0.5235294117647059,\"difficultyWeight\":170},\"microwave\":{\"count\":260,\"lastSeenTime\":1577032161683,\"publicGameCount\":19,\"difficulty\":0.6374269005847953,\"difficultyWeight\":171},\"midnight\":{\"count\":236,\"lastSeenTime\":1576997601884,\"difficulty\":0.5548780487804879,\"difficultyWeight\":164,\"publicGameCount\":21},\"military\":{\"count\":243,\"lastSeenTime\":1577036791454,\"publicGameCount\":12,\"difficulty\":0.7128712871287128,\"difficultyWeight\":101},\"milk\":{\"count\":225,\"lastSeenTime\":1577017157118,\"publicGameCount\":10,\"difficulty\":0.5321100917431192,\"difficultyWeight\":218},\"milkman\":{\"count\":215,\"lastSeenTime\":1577036598485,\"publicGameCount\":14,\"difficulty\":0.6423357664233575,\"difficultyWeight\":137},\"milkshake\":{\"count\":230,\"lastSeenTime\":1577018647384,\"publicGameCount\":17,\"difficulty\":0.6111111111111113,\"difficultyWeight\":162},\"mime\":{\"count\":221,\"lastSeenTime\":1577011482424,\"publicGameCount\":6,\"difficulty\":0.7,\"difficultyWeight\":50},\"minigolf\":{\"count\":212,\"lastSeenTime\":1577004556511,\"difficulty\":0.6153846153846154,\"difficultyWeight\":91,\"publicGameCount\":8},\"mint\":{\"count\":238,\"lastSeenTime\":1576996149073,\"publicGameCount\":9,\"difficulty\":0.5675675675675675,\"difficultyWeight\":111},\"minute\":{\"count\":229,\"lastSeenTime\":1576973429723,\"publicGameCount\":9,\"difficulty\":0.5611510791366906,\"difficultyWeight\":139},\"mirror\":{\"count\":225,\"lastSeenTime\":1577025204663,\"publicGameCount\":12,\"difficulty\":0.6408163265306122,\"difficultyWeight\":245},\"missile\":{\"count\":250,\"lastSeenTime\":1577034679025,\"publicGameCount\":19,\"difficulty\":0.6875,\"difficultyWeight\":160},\"mohawk\":{\"count\":203,\"lastSeenTime\":1577036293187,\"publicGameCount\":15,\"difficulty\":0.5730994152046783,\"difficultyWeight\":171},\"money\":{\"count\":216,\"lastSeenTime\":1577035238778,\"difficulty\":0.4703196347031963,\"difficultyWeight\":219,\"publicGameCount\":3},\"monk\":{\"count\":223,\"lastSeenTime\":1576996401384,\"publicGameCount\":2,\"difficulty\":0.5909090909090909,\"difficultyWeight\":44},\"monkey\":{\"count\":217,\"lastSeenTime\":1577036473654,\"publicGameCount\":10,\"difficulty\":0.6134969325153373,\"difficultyWeight\":163},\"monster\":{\"count\":211,\"lastSeenTime\":1577010723399,\"publicGameCount\":13,\"difficulty\":0.6529411764705884,\"difficultyWeight\":170},\"moon\":{\"count\":223,\"lastSeenTime\":1576985294535,\"difficulty\":0.5165876777251186,\"difficultyWeight\":211,\"publicGameCount\":6},\"mop\":{\"count\":240,\"lastSeenTime\":1577031419224,\"difficulty\":0.6374269005847953,\"difficultyWeight\":171,\"publicGameCount\":12},\"morning\":{\"count\":209,\"lastSeenTime\":1576982634040,\"publicGameCount\":7,\"difficulty\":0.5833333333333331,\"difficultyWeight\":120},\"mosquito\":{\"count\":231,\"lastSeenTime\":1577035593475,\"publicGameCount\":13,\"difficulty\":0.6382978723404257,\"difficultyWeight\":141},\"moth\":{\"count\":228,\"lastSeenTime\":1576983921524,\"difficulty\":0.5697674418604651,\"difficultyWeight\":86,\"publicGameCount\":9},\"mother\":{\"count\":245,\"lastSeenTime\":1576988808941,\"publicGameCount\":16,\"difficulty\":0.5970149253731343,\"difficultyWeight\":134},\"motorbike\":{\"count\":237,\"lastSeenTime\":1577032752804,\"difficulty\":0.7,\"difficultyWeight\":80,\"publicGameCount\":10},\"mountain\":{\"count\":425,\"lastSeenTime\":1577025711695,\"publicGameCount\":47,\"difficulty\":0.4394736842105263,\"difficultyWeight\":380},\"mousetrap\":{\"count\":230,\"lastSeenTime\":1577036953671,\"publicGameCount\":12,\"difficulty\":0.5839416058394161,\"difficultyWeight\":137},\"movie\":{\"count\":226,\"lastSeenTime\":1577032716307,\"publicGameCount\":8,\"difficulty\":0.6766917293233082,\"difficultyWeight\":133},\"muffin\":{\"count\":210,\"lastSeenTime\":1576973587711,\"difficulty\":0.5445026178010471,\"difficultyWeight\":191,\"publicGameCount\":13},\"mug\":{\"count\":225,\"lastSeenTime\":1577007268089,\"difficulty\":0.5990566037735849,\"difficultyWeight\":212},\"murderer\":{\"count\":200,\"lastSeenTime\":1577019371561,\"publicGameCount\":12,\"difficulty\":0.6341463414634146,\"difficultyWeight\":164},\"musket\":{\"count\":223,\"lastSeenTime\":1577036598485,\"difficulty\":0.696969696969697,\"difficultyWeight\":99,\"publicGameCount\":4},\"mustache\":{\"count\":423,\"lastSeenTime\":1577036329616,\"difficulty\":0.6166666666666666,\"difficultyWeight\":420,\"publicGameCount\":51},\"mustard\":{\"count\":236,\"lastSeenTime\":1577025893054,\"difficulty\":0.5428571428571427,\"difficultyWeight\":105,\"publicGameCount\":10},\"nail file\":{\"count\":229,\"lastSeenTime\":1577013825828,\"publicGameCount\":3,\"difficulty\":0.7419354838709677,\"difficultyWeight\":31},\"napkin\":{\"count\":241,\"lastSeenTime\":1576994965500,\"difficulty\":0.73,\"difficultyWeight\":100,\"publicGameCount\":9},\"narwhal\":{\"count\":250,\"lastSeenTime\":1577032763018,\"publicGameCount\":7,\"difficulty\":0.7551020408163265,\"difficultyWeight\":98},\"nerd\":{\"count\":222,\"lastSeenTime\":1577016110707,\"difficulty\":0.6212121212121212,\"difficultyWeight\":132,\"publicGameCount\":5},\"network\":{\"count\":264,\"lastSeenTime\":1577014443779,\"difficulty\":0.5217391304347826,\"difficultyWeight\":115,\"publicGameCount\":11},\"nickel\":{\"count\":229,\"lastSeenTime\":1577011993887,\"difficulty\":0.7058823529411765,\"difficultyWeight\":102,\"publicGameCount\":5},\"night\":{\"count\":224,\"lastSeenTime\":1577009233758,\"difficulty\":0.5040322580645162,\"difficultyWeight\":248,\"publicGameCount\":19},\"nightmare\":{\"count\":230,\"lastSeenTime\":1577037521580,\"publicGameCount\":7,\"difficulty\":0.7283950617283951,\"difficultyWeight\":81},\"ninja\":{\"count\":201,\"lastSeenTime\":1577030541096,\"difficulty\":0.48872180451127817,\"difficultyWeight\":133,\"publicGameCount\":6},\"noob\":{\"count\":233,\"lastSeenTime\":1577029593108,\"difficulty\":0.6280487804878049,\"difficultyWeight\":164,\"publicGameCount\":14},\"north\":{\"count\":420,\"lastSeenTime\":1577034531942,\"publicGameCount\":47,\"difficulty\":0.44693877551020406,\"difficultyWeight\":490},\"nose\":{\"count\":442,\"lastSeenTime\":1577017937665,\"publicGameCount\":41,\"difficulty\":0.4392764857881137,\"difficultyWeight\":387},\"nose hair\":{\"count\":454,\"lastSeenTime\":1577026115551,\"publicGameCount\":44,\"difficulty\":0.6413994169096209,\"difficultyWeight\":343},\"nosebleed\":{\"count\":203,\"lastSeenTime\":1577024196032,\"publicGameCount\":12,\"difficulty\":0.6290322580645161,\"difficultyWeight\":186},\"nostrils\":{\"count\":411,\"lastSeenTime\":1577037316766,\"difficulty\":0.6711590296495957,\"difficultyWeight\":371,\"publicGameCount\":41},\"notepad\":{\"count\":228,\"lastSeenTime\":1577004326772,\"difficulty\":0.6744186046511628,\"difficultyWeight\":129,\"publicGameCount\":12},\"nothing\":{\"count\":233,\"lastSeenTime\":1577037117265,\"difficulty\":0.726027397260274,\"difficultyWeight\":146,\"publicGameCount\":9},\"novel\":{\"count\":221,\"lastSeenTime\":1577034229193,\"publicGameCount\":15,\"difficulty\":0.6879432624113475,\"difficultyWeight\":141},\"nugget\":{\"count\":217,\"lastSeenTime\":1577025104122,\"publicGameCount\":12,\"difficulty\":0.4855072463768116,\"difficultyWeight\":138},\"nuke\":{\"count\":246,\"lastSeenTime\":1577031765159,\"publicGameCount\":19,\"difficulty\":0.5723270440251572,\"difficultyWeight\":159},\"nutcracker\":{\"count\":433,\"lastSeenTime\":1577029996661,\"publicGameCount\":23,\"difficulty\":0.6705882352941176,\"difficultyWeight\":170},\"nutshell\":{\"count\":218,\"lastSeenTime\":1577032834915,\"publicGameCount\":4,\"difficulty\":0.7,\"difficultyWeight\":30},\"ocean\":{\"count\":404,\"lastSeenTime\":1577037031237,\"publicGameCount\":42,\"difficulty\":0.43258426966292135,\"difficultyWeight\":356},\"office\":{\"count\":429,\"lastSeenTime\":1577035789503,\"difficulty\":0.605095541401274,\"difficultyWeight\":157,\"publicGameCount\":18},\"old\":{\"count\":450,\"lastSeenTime\":1577036740392,\"publicGameCount\":25,\"difficulty\":0.5641891891891891,\"difficultyWeight\":296},\"omelet\":{\"count\":196,\"lastSeenTime\":1577005234169,\"publicGameCount\":8,\"difficulty\":0.6835443037974683,\"difficultyWeight\":79},\"onion\":{\"count\":212,\"lastSeenTime\":1577032076358,\"publicGameCount\":8,\"difficulty\":0.5378151260504201,\"difficultyWeight\":119},\"orange\":{\"count\":232,\"lastSeenTime\":1577032383846,\"difficulty\":0.5051546391752578,\"difficultyWeight\":194,\"publicGameCount\":8},\"orangutan\":{\"count\":240,\"lastSeenTime\":1577024591466,\"publicGameCount\":4,\"difficulty\":0.6578947368421053,\"difficultyWeight\":38},\"ostrich\":{\"count\":229,\"lastSeenTime\":1577036549571,\"difficulty\":0.5894736842105263,\"difficultyWeight\":95,\"publicGameCount\":9},\"outside\":{\"count\":246,\"lastSeenTime\":1576998606975,\"publicGameCount\":8,\"difficulty\":0.5967741935483871,\"difficultyWeight\":62},\"overweight\":{\"count\":431,\"lastSeenTime\":1577034350570,\"publicGameCount\":37,\"difficulty\":0.7872340425531915,\"difficultyWeight\":282},\"owl\":{\"count\":237,\"lastSeenTime\":1577032505816,\"difficulty\":0.5555555555555557,\"difficultyWeight\":171,\"publicGameCount\":12},\"oyster\":{\"count\":216,\"lastSeenTime\":1577029554508,\"difficulty\":0.6481481481481481,\"difficultyWeight\":54,\"publicGameCount\":6},\"paddle\":{\"count\":228,\"lastSeenTime\":1577007708551,\"publicGameCount\":6,\"difficulty\":0.6136363636363636,\"difficultyWeight\":88},\"page\":{\"count\":230,\"lastSeenTime\":1577036487959,\"difficulty\":0.624,\"difficultyWeight\":125,\"publicGameCount\":3},\"pain\":{\"count\":224,\"lastSeenTime\":1577035823959,\"difficulty\":0.47058823529411764,\"difficultyWeight\":102,\"publicGameCount\":7},\"paint\":{\"count\":222,\"lastSeenTime\":1577033178896,\"difficulty\":0.6358024691358025,\"difficultyWeight\":162,\"publicGameCount\":13},\"pancake\":{\"count\":208,\"lastSeenTime\":1577010282547,\"publicGameCount\":26,\"difficulty\":0.5782312925170067,\"difficultyWeight\":294},\"paper\":{\"count\":226,\"lastSeenTime\":1577018556567,\"difficulty\":0.5637583892617449,\"difficultyWeight\":149,\"publicGameCount\":4},\"paper bag\":{\"count\":261,\"lastSeenTime\":1576987482426,\"publicGameCount\":21,\"difficulty\":0.6289308176100629,\"difficultyWeight\":159},\"parachute\":{\"count\":232,\"lastSeenTime\":1577033983037,\"publicGameCount\":21,\"difficulty\":0.5388888888888891,\"difficultyWeight\":180},\"parakeet\":{\"count\":201,\"lastSeenTime\":1577013440470,\"publicGameCount\":1,\"difficulty\":0.6,\"difficultyWeight\":20},\"parents\":{\"count\":246,\"lastSeenTime\":1577034239310,\"publicGameCount\":15,\"difficulty\":0.5688073394495412,\"difficultyWeight\":109},\"park\":{\"count\":437,\"lastSeenTime\":1577032037095,\"publicGameCount\":26,\"difficulty\":0.539855072463768,\"difficultyWeight\":276},\"parking\":{\"count\":419,\"lastSeenTime\":1577015899997,\"publicGameCount\":38,\"difficulty\":0.6285714285714286,\"difficultyWeight\":315},\"parrot\":{\"count\":235,\"lastSeenTime\":1577036487959,\"publicGameCount\":6,\"difficulty\":0.6796116504854369,\"difficultyWeight\":103},\"party\":{\"count\":225,\"lastSeenTime\":1576989499887,\"publicGameCount\":5,\"difficulty\":0.6020408163265306,\"difficultyWeight\":98},\"password\":{\"count\":234,\"lastSeenTime\":1577031444488,\"difficulty\":0.5164835164835164,\"difficultyWeight\":182,\"publicGameCount\":18},\"pasta\":{\"count\":212,\"lastSeenTime\":1577020454463,\"difficulty\":0.6352941176470588,\"difficultyWeight\":170,\"publicGameCount\":11},\"paw\":{\"count\":222,\"lastSeenTime\":1577033216553,\"publicGameCount\":5,\"difficulty\":0.5269709543568465,\"difficultyWeight\":241},\"peace\":{\"count\":228,\"lastSeenTime\":1576991908852,\"difficulty\":0.5064102564102566,\"difficultyWeight\":156,\"publicGameCount\":3},\"peach\":{\"count\":196,\"lastSeenTime\":1577002538320,\"difficulty\":0.5802469135802469,\"difficultyWeight\":81,\"publicGameCount\":3},\"peacock\":{\"count\":203,\"lastSeenTime\":1577031845373,\"difficulty\":0.6767676767676769,\"difficultyWeight\":99,\"publicGameCount\":6},\"pedal\":{\"count\":220,\"lastSeenTime\":1577037688224,\"publicGameCount\":4,\"difficulty\":0.6274509803921569,\"difficultyWeight\":51},\"pencil case\":{\"count\":226,\"lastSeenTime\":1577031845373,\"publicGameCount\":18,\"difficulty\":0.6692913385826772,\"difficultyWeight\":127},\"pencil sharpener\":{\"count\":196,\"lastSeenTime\":1577025517516,\"publicGameCount\":26,\"difficulty\":0.7485714285714286,\"difficultyWeight\":175},\"pendulum\":{\"count\":229,\"lastSeenTime\":1577032591482,\"publicGameCount\":6,\"difficulty\":0.7777777777777778,\"difficultyWeight\":63},\"penny\":{\"count\":229,\"lastSeenTime\":1577035348501,\"difficulty\":0.5785714285714286,\"difficultyWeight\":140,\"publicGameCount\":4},\"pepper\":{\"count\":247,\"lastSeenTime\":1577034742470,\"publicGameCount\":16,\"difficulty\":0.46099290780141844,\"difficultyWeight\":141},\"perfume\":{\"count\":237,\"lastSeenTime\":1577018979029,\"publicGameCount\":13,\"difficulty\":0.6153846153846153,\"difficultyWeight\":117},\"person\":{\"count\":226,\"lastSeenTime\":1577020612196,\"publicGameCount\":12,\"difficulty\":0.6789473684210526,\"difficultyWeight\":190},\"pet food\":{\"count\":252,\"lastSeenTime\":1577032208262,\"publicGameCount\":14,\"difficulty\":0.7870370370370371,\"difficultyWeight\":108},\"petal\":{\"count\":444,\"lastSeenTime\":1577031128007,\"publicGameCount\":26,\"difficulty\":0.5454545454545453,\"difficultyWeight\":231},\"photo frame\":{\"count\":217,\"lastSeenTime\":1577000556936,\"difficulty\":0.6808510638297871,\"difficultyWeight\":188,\"publicGameCount\":25},\"photograph\":{\"count\":211,\"lastSeenTime\":1576988139074,\"publicGameCount\":22,\"difficulty\":0.633136094674556,\"difficultyWeight\":169},\"photographer\":{\"count\":255,\"lastSeenTime\":1577034121420,\"publicGameCount\":22,\"difficulty\":0.7019867549668874,\"difficultyWeight\":151},\"pickle\":{\"count\":219,\"lastSeenTime\":1577025055649,\"difficulty\":0.5555555555555556,\"difficultyWeight\":153,\"publicGameCount\":6},\"pie\":{\"count\":219,\"lastSeenTime\":1577031845373,\"publicGameCount\":8,\"difficulty\":0.5048076923076923,\"difficultyWeight\":208},\"pill\":{\"count\":225,\"lastSeenTime\":1576995408982,\"difficulty\":0.5445026178010471,\"difficultyWeight\":191,\"publicGameCount\":6},\"pillow\":{\"count\":225,\"lastSeenTime\":1577035914736,\"difficulty\":0.5976331360946746,\"difficultyWeight\":169,\"publicGameCount\":6},\"pillow fight\":{\"count\":235,\"lastSeenTime\":1577034350569,\"difficulty\":0.5833333333333334,\"difficultyWeight\":108,\"publicGameCount\":13},\"pilot\":{\"count\":216,\"lastSeenTime\":1577031818464,\"difficulty\":0.6857142857142857,\"difficultyWeight\":70,\"publicGameCount\":5},\"pinball\":{\"count\":215,\"lastSeenTime\":1577016407755,\"difficulty\":0.6767676767676768,\"difficultyWeight\":99,\"publicGameCount\":7},\"pine\":{\"count\":420,\"lastSeenTime\":1577020810866,\"difficulty\":0.5527950310559007,\"difficultyWeight\":161,\"publicGameCount\":12},\"pine cone\":{\"count\":459,\"lastSeenTime\":1577025277614,\"difficulty\":0.6767241379310345,\"difficultyWeight\":232,\"publicGameCount\":29},\"pinky\":{\"count\":432,\"lastSeenTime\":1577029862138,\"publicGameCount\":41,\"difficulty\":0.4666666666666667,\"difficultyWeight\":300},\"pinwheel\":{\"count\":238,\"lastSeenTime\":1576998816553,\"publicGameCount\":3,\"difficulty\":0.5897435897435898,\"difficultyWeight\":39},\"pirate\":{\"count\":252,\"lastSeenTime\":1577011796049,\"publicGameCount\":13,\"difficulty\":0.5796178343949044,\"difficultyWeight\":157},\"pirate ship\":{\"count\":233,\"lastSeenTime\":1577015776309,\"publicGameCount\":22,\"difficulty\":0.5612903225806452,\"difficultyWeight\":155},\"pitchfork\":{\"count\":236,\"lastSeenTime\":1577036574064,\"publicGameCount\":18,\"difficulty\":0.5527950310559007,\"difficultyWeight\":161},\"pizza\":{\"count\":258,\"lastSeenTime\":1576996939934,\"publicGameCount\":17,\"difficulty\":0.4537037037037037,\"difficultyWeight\":216},\"plague\":{\"count\":241,\"lastSeenTime\":1577020011949,\"publicGameCount\":5,\"difficulty\":0.828125,\"difficultyWeight\":64},\"planet\":{\"count\":229,\"lastSeenTime\":1577030287128,\"difficulty\":0.5869565217391302,\"difficultyWeight\":230,\"publicGameCount\":23},\"plank\":{\"count\":211,\"lastSeenTime\":1577032777377,\"publicGameCount\":13,\"difficulty\":0.6486486486486488,\"difficultyWeight\":148},\"platypus\":{\"count\":223,\"lastSeenTime\":1577034135613,\"publicGameCount\":13,\"difficulty\":0.6470588235294118,\"difficultyWeight\":102},\"playground\":{\"count\":457,\"lastSeenTime\":1577035876160,\"publicGameCount\":46,\"difficulty\":0.6510903426791277,\"difficultyWeight\":321},\"pocket\":{\"count\":205,\"lastSeenTime\":1577015538245,\"difficulty\":0.6344086021505377,\"difficultyWeight\":186,\"publicGameCount\":6},\"poisonous\":{\"count\":445,\"lastSeenTime\":1577036715889,\"publicGameCount\":34,\"difficulty\":0.7871485943775101,\"difficultyWeight\":249},\"pollution\":{\"count\":224,\"lastSeenTime\":1577005017478,\"difficulty\":0.7755102040816326,\"difficultyWeight\":98,\"publicGameCount\":7},\"polo\":{\"count\":231,\"lastSeenTime\":1576993408685,\"publicGameCount\":9,\"difficulty\":0.575,\"difficultyWeight\":80},\"pond\":{\"count\":394,\"lastSeenTime\":1577025613326,\"difficulty\":0.62890625,\"difficultyWeight\":256,\"publicGameCount\":15},\"pony\":{\"count\":230,\"lastSeenTime\":1577017142818,\"difficulty\":0.5858585858585859,\"difficultyWeight\":99,\"publicGameCount\":4},\"poodle\":{\"count\":200,\"lastSeenTime\":1577012460971,\"publicGameCount\":7,\"difficulty\":0.6722689075630253,\"difficultyWeight\":119},\"poop\":{\"count\":227,\"lastSeenTime\":1577032483552,\"difficulty\":0.4417808219178082,\"difficultyWeight\":292,\"publicGameCount\":6},\"porch\":{\"count\":222,\"lastSeenTime\":1577035277440,\"publicGameCount\":5,\"difficulty\":0.8,\"difficultyWeight\":70},\"porcupine\":{\"count\":225,\"lastSeenTime\":1577020363890,\"publicGameCount\":12,\"difficulty\":0.7480314960629921,\"difficultyWeight\":127},\"portrait\":{\"count\":223,\"lastSeenTime\":1577036303309,\"publicGameCount\":12,\"difficulty\":0.6296296296296297,\"difficultyWeight\":108},\"positive\":{\"count\":397,\"lastSeenTime\":1577036559751,\"publicGameCount\":33,\"difficulty\":0.6849315068493153,\"difficultyWeight\":292},\"poster\":{\"count\":207,\"lastSeenTime\":1577032968561,\"difficulty\":0.5967741935483871,\"difficultyWeight\":62,\"publicGameCount\":2},\"pot\":{\"count\":225,\"lastSeenTime\":1577003149686,\"difficulty\":0.5942028985507246,\"difficultyWeight\":138,\"publicGameCount\":7},\"pot of gold\":{\"count\":207,\"lastSeenTime\":1577001474096,\"publicGameCount\":25,\"difficulty\":0.7162162162162162,\"difficultyWeight\":148},\"potion\":{\"count\":222,\"lastSeenTime\":1577015620718,\"difficulty\":0.631578947368421,\"difficultyWeight\":171,\"publicGameCount\":10},\"powder\":{\"count\":232,\"lastSeenTime\":1577033608923,\"publicGameCount\":6,\"difficulty\":0.7045454545454546,\"difficultyWeight\":88},\"pray\":{\"count\":218,\"lastSeenTime\":1577036740392,\"publicGameCount\":15,\"difficulty\":0.45925925925925926,\"difficultyWeight\":135},\"preach\":{\"count\":241,\"lastSeenTime\":1577017456065,\"difficulty\":0.8085106382978723,\"difficultyWeight\":47,\"publicGameCount\":5},\"pregnant\":{\"count\":412,\"lastSeenTime\":1577034425936,\"publicGameCount\":54,\"difficulty\":0.5407407407407405,\"difficultyWeight\":405},\"present\":{\"count\":206,\"lastSeenTime\":1577037117265,\"difficulty\":0.5555555555555556,\"difficultyWeight\":207,\"publicGameCount\":4},\"president\":{\"count\":235,\"lastSeenTime\":1577016293273,\"difficulty\":0.5751633986928104,\"difficultyWeight\":153,\"publicGameCount\":17},\"pretzel\":{\"count\":205,\"lastSeenTime\":1577015586196,\"publicGameCount\":7,\"difficulty\":0.644927536231884,\"difficultyWeight\":138},\"prince\":{\"count\":205,\"lastSeenTime\":1577030652854,\"difficulty\":0.6618705035971222,\"difficultyWeight\":139,\"publicGameCount\":8},\"princess\":{\"count\":227,\"lastSeenTime\":1577031536040,\"publicGameCount\":18,\"difficulty\":0.5864978902953587,\"difficultyWeight\":237},\"prison\":{\"count\":421,\"lastSeenTime\":1577036022358,\"publicGameCount\":50,\"difficulty\":0.5371702637889686,\"difficultyWeight\":417},\"professor\":{\"count\":224,\"lastSeenTime\":1577017022501,\"difficulty\":0.7252747252747253,\"difficultyWeight\":91,\"publicGameCount\":10},\"programmer\":{\"count\":237,\"lastSeenTime\":1577001594957,\"publicGameCount\":4,\"difficulty\":0.6296296296296297,\"difficultyWeight\":27},\"protest\":{\"count\":246,\"lastSeenTime\":1577035593475,\"difficulty\":0.6346153846153846,\"difficultyWeight\":52,\"publicGameCount\":3},\"pudding\":{\"count\":233,\"lastSeenTime\":1577012169647,\"publicGameCount\":7,\"difficulty\":0.7349397590361446,\"difficultyWeight\":83},\"puddle\":{\"count\":465,\"lastSeenTime\":1577032090593,\"difficulty\":0.6570397111913358,\"difficultyWeight\":277,\"publicGameCount\":31},\"puffin\":{\"count\":218,\"lastSeenTime\":1577031971915,\"publicGameCount\":4,\"difficulty\":0.7428571428571429,\"difficultyWeight\":35},\"puma\":{\"count\":234,\"lastSeenTime\":1577032051558,\"difficulty\":0.5844155844155844,\"difficultyWeight\":77,\"publicGameCount\":6},\"purse\":{\"count\":229,\"lastSeenTime\":1577032283871,\"difficulty\":0.6796116504854369,\"difficultyWeight\":103,\"publicGameCount\":4},\"puzzle\":{\"count\":201,\"lastSeenTime\":1577017071398,\"difficulty\":0.5398773006134968,\"difficultyWeight\":163,\"publicGameCount\":11},\"pyramid\":{\"count\":205,\"lastSeenTime\":1577034462634,\"difficulty\":0.6518987341772152,\"difficultyWeight\":158,\"publicGameCount\":8},\"quarter\":{\"count\":243,\"lastSeenTime\":1577036527277,\"difficulty\":0.6496350364963503,\"difficultyWeight\":137,\"publicGameCount\":18},\"queen\":{\"count\":238,\"lastSeenTime\":1577016849135,\"difficulty\":0.4870689655172414,\"difficultyWeight\":232,\"publicGameCount\":9},\"queue\":{\"count\":255,\"lastSeenTime\":1577002548484,\"publicGameCount\":5,\"difficulty\":0.7837837837837838,\"difficultyWeight\":37},\"race\":{\"count\":230,\"lastSeenTime\":1577013387198,\"publicGameCount\":7,\"difficulty\":0.422680412371134,\"difficultyWeight\":97},\"racecar\":{\"count\":202,\"lastSeenTime\":1577036892935,\"publicGameCount\":6,\"difficulty\":0.7285714285714285,\"difficultyWeight\":70},\"radish\":{\"count\":219,\"lastSeenTime\":1577016752940,\"publicGameCount\":5,\"difficulty\":0.5294117647058824,\"difficultyWeight\":51},\"raft\":{\"count\":263,\"lastSeenTime\":1577024563450,\"publicGameCount\":10,\"difficulty\":0.4945054945054945,\"difficultyWeight\":91},\"rail\":{\"count\":421,\"lastSeenTime\":1577032662789,\"difficulty\":0.5950920245398773,\"difficultyWeight\":163,\"publicGameCount\":17},\"rainbow\":{\"count\":450,\"lastSeenTime\":1577031193533,\"publicGameCount\":43,\"difficulty\":0.4088176352705411,\"difficultyWeight\":499},\"raindrop\":{\"count\":444,\"lastSeenTime\":1577037306624,\"publicGameCount\":43,\"difficulty\":0.5449275362318838,\"difficultyWeight\":345},\"raisin\":{\"count\":207,\"lastSeenTime\":1577034135613,\"publicGameCount\":6,\"difficulty\":0.7454545454545455,\"difficultyWeight\":55},\"rake\":{\"count\":265,\"lastSeenTime\":1577018482673,\"difficulty\":0.4788732394366197,\"difficultyWeight\":71,\"publicGameCount\":8},\"ram\":{\"count\":212,\"lastSeenTime\":1577019236659,\"difficulty\":0.45,\"difficultyWeight\":60,\"publicGameCount\":4},\"rapper\":{\"count\":225,\"lastSeenTime\":1577035886295,\"publicGameCount\":13,\"difficulty\":0.6185567010309279,\"difficultyWeight\":97},\"raspberry\":{\"count\":215,\"lastSeenTime\":1577037042051,\"publicGameCount\":16,\"difficulty\":0.7049180327868853,\"difficultyWeight\":122},\"razorblade\":{\"count\":226,\"lastSeenTime\":1577037070414,\"publicGameCount\":11,\"difficulty\":0.6463414634146342,\"difficultyWeight\":82},\"reality\":{\"count\":230,\"lastSeenTime\":1577033043901,\"difficulty\":0.7115384615384616,\"difficultyWeight\":52,\"publicGameCount\":4},\"rectangle\":{\"count\":219,\"lastSeenTime\":1577021060711,\"publicGameCount\":14,\"difficulty\":0.5950920245398773,\"difficultyWeight\":163},\"recycling\":{\"count\":240,\"lastSeenTime\":1577019031436,\"publicGameCount\":12,\"difficulty\":0.625,\"difficultyWeight\":136},\"red carpet\":{\"count\":239,\"lastSeenTime\":1577020250301,\"publicGameCount\":27,\"difficulty\":0.7598039215686274,\"difficultyWeight\":204},\"reflection\":{\"count\":229,\"lastSeenTime\":1577031521720,\"publicGameCount\":16,\"difficulty\":0.7214285714285714,\"difficultyWeight\":140},\"relationship\":{\"count\":218,\"lastSeenTime\":1577037202537,\"publicGameCount\":15,\"difficulty\":0.6363636363636362,\"difficultyWeight\":99},\"rewind\":{\"count\":226,\"lastSeenTime\":1577033583113,\"publicGameCount\":3,\"difficulty\":0.6612903225806451,\"difficultyWeight\":62},\"rhinoceros\":{\"count\":211,\"lastSeenTime\":1576977112030,\"difficulty\":0.7777777777777778,\"difficultyWeight\":45,\"publicGameCount\":7},\"ribbon\":{\"count\":236,\"lastSeenTime\":1577007506033,\"publicGameCount\":11,\"difficulty\":0.5490196078431373,\"difficultyWeight\":102},\"rice\":{\"count\":201,\"lastSeenTime\":1577008267383,\"difficulty\":0.576,\"difficultyWeight\":125,\"publicGameCount\":5},\"river\":{\"count\":430,\"lastSeenTime\":1577031607937,\"publicGameCount\":48,\"difficulty\":0.44274809160305345,\"difficultyWeight\":393},\"robin\":{\"count\":242,\"lastSeenTime\":1577037016878,\"difficulty\":0.5223880597014925,\"difficultyWeight\":67,\"publicGameCount\":7},\"robot\":{\"count\":212,\"lastSeenTime\":1577037178254,\"publicGameCount\":7,\"difficulty\":0.5069124423963135,\"difficultyWeight\":217},\"rockstar\":{\"count\":234,\"lastSeenTime\":1577031166738,\"difficulty\":0.6577181208053692,\"difficultyWeight\":149,\"publicGameCount\":15},\"room\":{\"count\":226,\"lastSeenTime\":1577014691828,\"difficulty\":0.6024096385542169,\"difficultyWeight\":83,\"publicGameCount\":5},\"rooster\":{\"count\":220,\"lastSeenTime\":1577034462634,\"difficulty\":0.6551724137931034,\"difficultyWeight\":87,\"publicGameCount\":4},\"root\":{\"count\":413,\"lastSeenTime\":1577018853704,\"publicGameCount\":18,\"difficulty\":0.4999999999999999,\"difficultyWeight\":258},\"rose\":{\"count\":439,\"lastSeenTime\":1577032147462,\"publicGameCount\":39,\"difficulty\":0.44075829383886256,\"difficultyWeight\":422},\"rubber\":{\"count\":458,\"lastSeenTime\":1577030226184,\"difficulty\":0.6494252873563219,\"difficultyWeight\":174,\"publicGameCount\":20},\"ruby\":{\"count\":201,\"lastSeenTime\":1577031234774,\"publicGameCount\":10,\"difficulty\":0.7307692307692307,\"difficultyWeight\":130},\"run\":{\"count\":237,\"lastSeenTime\":1577036701657,\"publicGameCount\":2,\"difficulty\":0.5460992907801419,\"difficultyWeight\":141},\"rune\":{\"count\":225,\"lastSeenTime\":1577020153208,\"publicGameCount\":3,\"difficulty\":0.6571428571428571,\"difficultyWeight\":35},\"sad\":{\"count\":235,\"lastSeenTime\":1577012421074,\"difficulty\":0.4980694980694981,\"difficultyWeight\":259,\"publicGameCount\":5},\"salad\":{\"count\":238,\"lastSeenTime\":1577009895556,\"publicGameCount\":10,\"difficulty\":0.6046511627906976,\"difficultyWeight\":172},\"salmon\":{\"count\":423,\"lastSeenTime\":1577030082147,\"publicGameCount\":27,\"difficulty\":0.5733944954128439,\"difficultyWeight\":218},\"sandbox\":{\"count\":192,\"lastSeenTime\":1577017319731,\"difficulty\":0.6153846153846154,\"difficultyWeight\":130,\"publicGameCount\":16},\"sandstorm\":{\"count\":432,\"lastSeenTime\":1577024430436,\"publicGameCount\":25,\"difficulty\":0.6499999999999999,\"difficultyWeight\":180},\"satellite\":{\"count\":219,\"lastSeenTime\":1576996666059,\"publicGameCount\":12,\"difficulty\":0.7457627118644068,\"difficultyWeight\":118},\"sauce\":{\"count\":214,\"lastSeenTime\":1577015910164,\"publicGameCount\":7,\"difficulty\":0.6209677419354839,\"difficultyWeight\":124},\"scarf\":{\"count\":223,\"lastSeenTime\":1577030802925,\"publicGameCount\":16,\"difficulty\":0.47878787878787876,\"difficultyWeight\":165},\"scent\":{\"count\":245,\"lastSeenTime\":1577034214987,\"publicGameCount\":7,\"difficulty\":0.7222222222222222,\"difficultyWeight\":54},\"scream\":{\"count\":202,\"lastSeenTime\":1577015899997,\"difficulty\":0.6030927835051546,\"difficultyWeight\":194,\"publicGameCount\":10},\"screen\":{\"count\":235,\"lastSeenTime\":1577034632349,\"publicGameCount\":12,\"difficulty\":0.6,\"difficultyWeight\":155},\"screw\":{\"count\":189,\"lastSeenTime\":1577019457765,\"publicGameCount\":6,\"difficulty\":0.6335877862595419,\"difficultyWeight\":131},\"scribble\":{\"count\":220,\"lastSeenTime\":1577024452061,\"difficulty\":0.632258064516129,\"difficultyWeight\":155,\"publicGameCount\":7},\"scythe\":{\"count\":227,\"lastSeenTime\":1577021060711,\"publicGameCount\":12,\"difficulty\":0.5462962962962961,\"difficultyWeight\":108},\"sea\":{\"count\":437,\"lastSeenTime\":1577019066716,\"difficulty\":0.4537572254335259,\"difficultyWeight\":346,\"publicGameCount\":26},\"sea lion\":{\"count\":222,\"lastSeenTime\":1577033670196,\"publicGameCount\":12,\"difficulty\":0.6626506024096386,\"difficultyWeight\":83},\"seafood\":{\"count\":212,\"lastSeenTime\":1577031618529,\"publicGameCount\":15,\"difficulty\":0.6756756756756758,\"difficultyWeight\":111},\"seal\":{\"count\":224,\"lastSeenTime\":1577017417153,\"publicGameCount\":7,\"difficulty\":0.5975609756097561,\"difficultyWeight\":164},\"seashell\":{\"count\":469,\"lastSeenTime\":1577035324132,\"publicGameCount\":32,\"difficulty\":0.6532846715328469,\"difficultyWeight\":274},\"season\":{\"count\":201,\"lastSeenTime\":1577030973803,\"publicGameCount\":7,\"difficulty\":0.725,\"difficultyWeight\":80},\"seat belt\":{\"count\":233,\"lastSeenTime\":1577025564446,\"publicGameCount\":27,\"difficulty\":0.671875,\"difficultyWeight\":192},\"seaweed\":{\"count\":468,\"lastSeenTime\":1577017265397,\"publicGameCount\":28,\"difficulty\":0.6280991735537189,\"difficultyWeight\":242},\"second\":{\"count\":232,\"lastSeenTime\":1576998400404,\"publicGameCount\":17,\"difficulty\":0.6052631578947368,\"difficultyWeight\":152},\"seed\":{\"count\":437,\"lastSeenTime\":1577031113164,\"publicGameCount\":37,\"difficulty\":0.6107784431137722,\"difficultyWeight\":334},\"seesaw\":{\"count\":214,\"lastSeenTime\":1577037216675,\"difficulty\":0.6582278481012658,\"difficultyWeight\":79,\"publicGameCount\":4},\"semicircle\":{\"count\":224,\"lastSeenTime\":1577031282203,\"publicGameCount\":11,\"difficulty\":0.6804123711340206,\"difficultyWeight\":97},\"sewing machine\":{\"count\":227,\"lastSeenTime\":1577032208262,\"publicGameCount\":11,\"difficulty\":0.68,\"difficultyWeight\":75},\"shadow\":{\"count\":213,\"lastSeenTime\":1577031219834,\"publicGameCount\":16,\"difficulty\":0.5699481865284974,\"difficultyWeight\":193},\"sheep\":{\"count\":184,\"lastSeenTime\":1577036135826,\"difficulty\":0.45689655172413796,\"difficultyWeight\":232,\"publicGameCount\":7},\"shelf\":{\"count\":237,\"lastSeenTime\":1576983583807,\"publicGameCount\":9,\"difficulty\":0.6138613861386139,\"difficultyWeight\":101},\"shell\":{\"count\":414,\"lastSeenTime\":1577013397940,\"publicGameCount\":24,\"difficulty\":0.5472440944881891,\"difficultyWeight\":254},\"shipwreck\":{\"count\":446,\"lastSeenTime\":1577032786045,\"publicGameCount\":19,\"difficulty\":0.6484375,\"difficultyWeight\":128},\"shock\":{\"count\":206,\"lastSeenTime\":1577014063844,\"difficulty\":0.6513761467889908,\"difficultyWeight\":109,\"publicGameCount\":5},\"shoe\":{\"count\":219,\"lastSeenTime\":1577014366031,\"publicGameCount\":11,\"difficulty\":0.4933920704845815,\"difficultyWeight\":227},\"shoebox\":{\"count\":227,\"lastSeenTime\":1577032483552,\"difficulty\":0.5949367088607594,\"difficultyWeight\":158,\"publicGameCount\":12},\"shop\":{\"count\":457,\"lastSeenTime\":1577033308316,\"difficulty\":0.5950413223140495,\"difficultyWeight\":242,\"publicGameCount\":23},\"shopping cart\":{\"count\":225,\"lastSeenTime\":1577008938640,\"publicGameCount\":20,\"difficulty\":0.6168831168831169,\"difficultyWeight\":154},\"shoulder\":{\"count\":466,\"lastSeenTime\":1577036225894,\"publicGameCount\":38,\"difficulty\":0.6017699115044248,\"difficultyWeight\":339},\"shout\":{\"count\":215,\"lastSeenTime\":1576995704012,\"publicGameCount\":7,\"difficulty\":0.6583333333333333,\"difficultyWeight\":120},\"shower\":{\"count\":220,\"lastSeenTime\":1576955385547,\"difficulty\":0.49019607843137253,\"difficultyWeight\":153,\"publicGameCount\":8},\"shrub\":{\"count\":437,\"lastSeenTime\":1577032738629,\"publicGameCount\":15,\"difficulty\":0.7115384615384616,\"difficultyWeight\":104},\"sick\":{\"count\":226,\"lastSeenTime\":1577010162289,\"publicGameCount\":10,\"difficulty\":0.5107913669064749,\"difficultyWeight\":139},\"signature\":{\"count\":231,\"lastSeenTime\":1577008963878,\"publicGameCount\":11,\"difficulty\":0.5906432748538013,\"difficultyWeight\":171},\"silence\":{\"count\":213,\"lastSeenTime\":1577021380401,\"publicGameCount\":9,\"difficulty\":0.581081081081081,\"difficultyWeight\":74},\"silver\":{\"count\":234,\"lastSeenTime\":1577033058121,\"publicGameCount\":11,\"difficulty\":0.5208333333333334,\"difficultyWeight\":144},\"silverware\":{\"count\":227,\"lastSeenTime\":1577030240458,\"publicGameCount\":16,\"difficulty\":0.7063492063492064,\"difficultyWeight\":126},\"sing\":{\"count\":223,\"lastSeenTime\":1577026040111,\"difficulty\":0.5363636363636363,\"difficultyWeight\":220,\"publicGameCount\":10},\"sink\":{\"count\":234,\"lastSeenTime\":1576992818479,\"difficulty\":0.6126126126126128,\"difficultyWeight\":111,\"publicGameCount\":6},\"six pack\":{\"count\":666,\"lastSeenTime\":1577035387934,\"publicGameCount\":81,\"difficulty\":0.6969696969696971,\"difficultyWeight\":627},\"skateboard\":{\"count\":225,\"lastSeenTime\":1577034081969,\"publicGameCount\":19,\"difficulty\":0.5511363636363636,\"difficultyWeight\":176},\"skateboarder\":{\"count\":208,\"lastSeenTime\":1577036574064,\"publicGameCount\":16,\"difficulty\":0.6956521739130435,\"difficultyWeight\":138},\"ski jump\":{\"count\":238,\"lastSeenTime\":1576986579349,\"publicGameCount\":9,\"difficulty\":0.7160493827160493,\"difficultyWeight\":81},\"sky\":{\"count\":402,\"lastSeenTime\":1577006890843,\"difficulty\":0.5022727272727273,\"difficultyWeight\":440,\"publicGameCount\":16},\"sledge\":{\"count\":202,\"lastSeenTime\":1577036836029,\"difficulty\":0.6935483870967742,\"difficultyWeight\":62,\"publicGameCount\":2},\"sleeve\":{\"count\":232,\"lastSeenTime\":1576979880408,\"difficulty\":0.7009345794392523,\"difficultyWeight\":107,\"publicGameCount\":7},\"slide\":{\"count\":416,\"lastSeenTime\":1577035823959,\"publicGameCount\":23,\"difficulty\":0.482394366197183,\"difficultyWeight\":284},\"slime\":{\"count\":229,\"lastSeenTime\":1577036137207,\"publicGameCount\":9,\"difficulty\":0.625,\"difficultyWeight\":136},\"slippery\":{\"count\":424,\"lastSeenTime\":1577031259619,\"publicGameCount\":17,\"difficulty\":0.6986301369863014,\"difficultyWeight\":146},\"sloth\":{\"count\":230,\"lastSeenTime\":1577030506619,\"publicGameCount\":4,\"difficulty\":0.6792452830188679,\"difficultyWeight\":53},\"slow\":{\"count\":440,\"lastSeenTime\":1577010137946,\"publicGameCount\":29,\"difficulty\":0.5594713656387665,\"difficultyWeight\":227},\"smile\":{\"count\":445,\"lastSeenTime\":1577036513099,\"difficulty\":0.4460580912863071,\"difficultyWeight\":482,\"publicGameCount\":53},\"smoke\":{\"count\":229,\"lastSeenTime\":1577036559751,\"difficulty\":0.521276595744681,\"difficultyWeight\":188,\"publicGameCount\":13},\"snowball fight\":{\"count\":206,\"lastSeenTime\":1577017579132,\"publicGameCount\":17,\"difficulty\":0.7619047619047619,\"difficultyWeight\":126},\"snowboard\":{\"count\":225,\"lastSeenTime\":1577025129454,\"publicGameCount\":14,\"difficulty\":0.576,\"difficultyWeight\":125},\"snowman\":{\"count\":205,\"lastSeenTime\":1577035554960,\"difficulty\":0.4444444444444444,\"difficultyWeight\":225,\"publicGameCount\":16},\"soccer\":{\"count\":212,\"lastSeenTime\":1577024845093,\"publicGameCount\":7,\"difficulty\":0.5139664804469273,\"difficultyWeight\":179},\"soda\":{\"count\":199,\"lastSeenTime\":1577021133236,\"difficulty\":0.4801762114537445,\"difficultyWeight\":227,\"publicGameCount\":14},\"sound\":{\"count\":209,\"lastSeenTime\":1577011245370,\"publicGameCount\":2,\"difficulty\":0.48951048951048953,\"difficultyWeight\":143},\"soup\":{\"count\":246,\"lastSeenTime\":1577036183989,\"difficulty\":0.5075757575757576,\"difficultyWeight\":132,\"publicGameCount\":9},\"south\":{\"count\":423,\"lastSeenTime\":1577036730175,\"publicGameCount\":20,\"difficulty\":0.4605809128630705,\"difficultyWeight\":241},\"space\":{\"count\":208,\"lastSeenTime\":1576992937668,\"difficulty\":0.6141078838174274,\"difficultyWeight\":241,\"publicGameCount\":5},\"spade\":{\"count\":216,\"lastSeenTime\":1576964722158,\"publicGameCount\":11,\"difficulty\":0.6195652173913045,\"difficultyWeight\":92},\"spark\":{\"count\":228,\"lastSeenTime\":1577004186315,\"difficulty\":0.5714285714285714,\"difficultyWeight\":84,\"publicGameCount\":7},\"sparkles\":{\"count\":199,\"lastSeenTime\":1577029886480,\"publicGameCount\":9,\"difficulty\":0.8192771084337349,\"difficultyWeight\":83},\"spear\":{\"count\":226,\"lastSeenTime\":1576951863939,\"difficulty\":0.5999999999999999,\"difficultyWeight\":175,\"publicGameCount\":8},\"spelunker\":{\"count\":207,\"lastSeenTime\":1577018327956,\"difficulty\":0.8636363636363636,\"difficultyWeight\":22,\"publicGameCount\":1},\"spider\":{\"count\":222,\"lastSeenTime\":1577001885793,\"publicGameCount\":10,\"difficulty\":0.4389312977099237,\"difficultyWeight\":262},\"spin\":{\"count\":212,\"lastSeenTime\":1577011621389,\"publicGameCount\":9,\"difficulty\":0.6260869565217392,\"difficultyWeight\":115},\"spinach\":{\"count\":213,\"lastSeenTime\":1577010615663,\"difficulty\":0.7681159420289855,\"difficultyWeight\":69,\"publicGameCount\":7},\"spiral\":{\"count\":236,\"lastSeenTime\":1577019885747,\"difficulty\":0.6016260162601627,\"difficultyWeight\":123,\"publicGameCount\":11},\"sponge\":{\"count\":233,\"lastSeenTime\":1577024917709,\"difficulty\":0.6104651162790697,\"difficultyWeight\":172,\"publicGameCount\":12},\"spool\":{\"count\":196,\"lastSeenTime\":1577030951342,\"publicGameCount\":2,\"difficulty\":0.627906976744186,\"difficultyWeight\":43},\"spoon\":{\"count\":436,\"lastSeenTime\":1577032859509,\"publicGameCount\":45,\"difficulty\":0.49645390070922,\"difficultyWeight\":423},\"sports\":{\"count\":255,\"lastSeenTime\":1577010995697,\"difficulty\":0.656,\"difficultyWeight\":125,\"publicGameCount\":13},\"sprinkler\":{\"count\":216,\"lastSeenTime\":1577018733113,\"difficulty\":0.628099173553719,\"difficultyWeight\":121,\"publicGameCount\":7},\"square\":{\"count\":243,\"lastSeenTime\":1577013947672,\"publicGameCount\":19,\"difficulty\":0.5117370892018781,\"difficultyWeight\":213},\"squid\":{\"count\":219,\"lastSeenTime\":1577019935685,\"publicGameCount\":11,\"difficulty\":0.5657894736842105,\"difficultyWeight\":152},\"squirrel\":{\"count\":212,\"lastSeenTime\":1577007278407,\"difficulty\":0.7130434782608696,\"difficultyWeight\":115,\"publicGameCount\":12},\"stab\":{\"count\":239,\"lastSeenTime\":1577019494384,\"publicGameCount\":17,\"difficulty\":0.6196319018404908,\"difficultyWeight\":163},\"stadium\":{\"count\":444,\"lastSeenTime\":1577014707226,\"publicGameCount\":16,\"difficulty\":0.7421875,\"difficultyWeight\":128},\"stand\":{\"count\":234,\"lastSeenTime\":1577016005533,\"publicGameCount\":15,\"difficulty\":0.6068965517241379,\"difficultyWeight\":145},\"star\":{\"count\":216,\"lastSeenTime\":1577011192091,\"publicGameCount\":11,\"difficulty\":0.43288590604026844,\"difficultyWeight\":298},\"starfish\":{\"count\":201,\"lastSeenTime\":1576983895924,\"difficulty\":0.5219512195121951,\"difficultyWeight\":205,\"publicGameCount\":12},\"statue\":{\"count\":425,\"lastSeenTime\":1577036473654,\"publicGameCount\":28,\"difficulty\":0.6282051282051282,\"difficultyWeight\":234},\"steam\":{\"count\":226,\"lastSeenTime\":1577032958355,\"difficulty\":0.6464646464646465,\"difficultyWeight\":99,\"publicGameCount\":9},\"step\":{\"count\":248,\"lastSeenTime\":1577018165583,\"publicGameCount\":11,\"difficulty\":0.5182481751824818,\"difficultyWeight\":137},\"stomach\":{\"count\":446,\"lastSeenTime\":1576988931782,\"publicGameCount\":32,\"difficulty\":0.6812749003984063,\"difficultyWeight\":251},\"stone\":{\"count\":238,\"lastSeenTime\":1577019896135,\"publicGameCount\":9,\"difficulty\":0.5763888888888888,\"difficultyWeight\":144},\"stove\":{\"count\":248,\"lastSeenTime\":1577037117265,\"publicGameCount\":13,\"difficulty\":0.6453900709219859,\"difficultyWeight\":141},\"straw\":{\"count\":251,\"lastSeenTime\":1576995740856,\"publicGameCount\":16,\"difficulty\":0.603896103896104,\"difficultyWeight\":154},\"strawberry\":{\"count\":226,\"lastSeenTime\":1577033891936,\"difficulty\":0.4675324675324675,\"difficultyWeight\":231,\"publicGameCount\":28},\"street\":{\"count\":435,\"lastSeenTime\":1577015197399,\"publicGameCount\":36,\"difficulty\":0.681081081081081,\"difficultyWeight\":370},\"stress\":{\"count\":218,\"lastSeenTime\":1577011621389,\"difficulty\":0.6363636363636364,\"difficultyWeight\":22,\"publicGameCount\":2},\"student\":{\"count\":223,\"lastSeenTime\":1577007071313,\"publicGameCount\":10,\"difficulty\":0.6250000000000001,\"difficultyWeight\":96},\"studio\":{\"count\":390,\"lastSeenTime\":1577035508304,\"difficulty\":0.5853658536585366,\"difficultyWeight\":41,\"publicGameCount\":3},\"study\":{\"count\":411,\"lastSeenTime\":1577037653341,\"publicGameCount\":24,\"difficulty\":0.6041666666666666,\"difficultyWeight\":240},\"subway\":{\"count\":214,\"lastSeenTime\":1576988731899,\"publicGameCount\":13,\"difficulty\":0.49640287769784175,\"difficultyWeight\":139},\"suitcase\":{\"count\":220,\"lastSeenTime\":1577030301299,\"publicGameCount\":8,\"difficulty\":0.6528925619834711,\"difficultyWeight\":121},\"summer\":{\"count\":246,\"lastSeenTime\":1576985365869,\"difficulty\":0.6204819277108434,\"difficultyWeight\":166,\"publicGameCount\":13},\"sun\":{\"count\":219,\"lastSeenTime\":1577016080437,\"difficulty\":0.44061302681992337,\"difficultyWeight\":261,\"publicGameCount\":2},\"sunshade\":{\"count\":218,\"lastSeenTime\":1576970324105,\"publicGameCount\":9,\"difficulty\":0.7903225806451613,\"difficultyWeight\":62},\"supermarket\":{\"count\":453,\"lastSeenTime\":1577033336640,\"publicGameCount\":33,\"difficulty\":0.7565217391304347,\"difficultyWeight\":230},\"surfboard\":{\"count\":233,\"lastSeenTime\":1576995576227,\"difficulty\":0.5972850678733032,\"difficultyWeight\":221,\"publicGameCount\":15},\"surgeon\":{\"count\":213,\"lastSeenTime\":1577014074125,\"publicGameCount\":5,\"difficulty\":0.6744186046511628,\"difficultyWeight\":43},\"survivor\":{\"count\":225,\"lastSeenTime\":1577031618529,\"difficulty\":0.7419354838709677,\"difficultyWeight\":62,\"publicGameCount\":6},\"swamp\":{\"count\":450,\"lastSeenTime\":1577034411762,\"publicGameCount\":23,\"difficulty\":0.5170731707317073,\"difficultyWeight\":205},\"swan\":{\"count\":211,\"lastSeenTime\":1577036730175,\"publicGameCount\":9,\"difficulty\":0.5725806451612904,\"difficultyWeight\":124},\"swarm\":{\"count\":208,\"lastSeenTime\":1577019885747,\"difficulty\":0.6296296296296297,\"difficultyWeight\":54,\"publicGameCount\":4},\"sweat\":{\"count\":233,\"lastSeenTime\":1577020239958,\"publicGameCount\":13,\"difficulty\":0.5466666666666665,\"difficultyWeight\":150},\"sweater\":{\"count\":219,\"lastSeenTime\":1577008687049,\"difficulty\":0.6562499999999999,\"difficultyWeight\":160,\"publicGameCount\":9},\"swimming pool\":{\"count\":253,\"lastSeenTime\":1576980949563,\"publicGameCount\":31,\"difficulty\":0.7422222222222222,\"difficultyWeight\":225},\"swimsuit\":{\"count\":237,\"lastSeenTime\":1577030240458,\"publicGameCount\":14,\"difficulty\":0.680672268907563,\"difficultyWeight\":119},\"swordfish\":{\"count\":234,\"lastSeenTime\":1577033960762,\"publicGameCount\":16,\"difficulty\":0.5749999999999998,\"difficultyWeight\":160},\"table tennis\":{\"count\":204,\"lastSeenTime\":1577033708898,\"publicGameCount\":18,\"difficulty\":0.6363636363636364,\"difficultyWeight\":132},\"tablet\":{\"count\":452,\"lastSeenTime\":1577032752804,\"publicGameCount\":42,\"difficulty\":0.596923076923077,\"difficultyWeight\":325},\"tadpole\":{\"count\":230,\"lastSeenTime\":1577017517304,\"difficulty\":0.7431192660550459,\"difficultyWeight\":109,\"publicGameCount\":7},\"tail\":{\"count\":218,\"lastSeenTime\":1577015524015,\"difficulty\":0.5129533678756475,\"difficultyWeight\":193,\"publicGameCount\":3},\"take off\":{\"count\":236,\"lastSeenTime\":1577024859631,\"publicGameCount\":10,\"difficulty\":0.8311688311688312,\"difficultyWeight\":77},\"tangerine\":{\"count\":219,\"lastSeenTime\":1577035287582,\"difficulty\":0.7204301075268817,\"difficultyWeight\":93,\"publicGameCount\":9},\"tarantula\":{\"count\":227,\"lastSeenTime\":1576971438912,\"difficulty\":0.7079646017699115,\"difficultyWeight\":113,\"publicGameCount\":10},\"taxi driver\":{\"count\":218,\"lastSeenTime\":1576991662877,\"publicGameCount\":16,\"difficulty\":0.6074766355140186,\"difficultyWeight\":107},\"teapot\":{\"count\":226,\"lastSeenTime\":1577029725408,\"difficulty\":0.5746268656716418,\"difficultyWeight\":134,\"publicGameCount\":5},\"tear\":{\"count\":430,\"lastSeenTime\":1577034703857,\"publicGameCount\":41,\"difficulty\":0.510843373493976,\"difficultyWeight\":415},\"teaspoon\":{\"count\":232,\"lastSeenTime\":1576987040770,\"publicGameCount\":5,\"difficulty\":0.7903225806451613,\"difficultyWeight\":62},\"teddy bear\":{\"count\":220,\"lastSeenTime\":1576989119508,\"publicGameCount\":29,\"difficulty\":0.5046728971962618,\"difficultyWeight\":214},\"telephone\":{\"count\":233,\"lastSeenTime\":1577020551055,\"publicGameCount\":11,\"difficulty\":0.5414364640883977,\"difficultyWeight\":181},\"telescope\":{\"count\":239,\"lastSeenTime\":1577031322805,\"publicGameCount\":11,\"difficulty\":0.5454545454545454,\"difficultyWeight\":154},\"television\":{\"count\":235,\"lastSeenTime\":1577012079857,\"difficulty\":0.4327485380116959,\"difficultyWeight\":171,\"publicGameCount\":19},\"temperature\":{\"count\":211,\"lastSeenTime\":1577001314234,\"difficulty\":0.688622754491018,\"difficultyWeight\":167,\"publicGameCount\":20},\"tennis\":{\"count\":220,\"lastSeenTime\":1577034200815,\"difficulty\":0.5882352941176473,\"difficultyWeight\":187,\"publicGameCount\":9},\"tennis racket\":{\"count\":206,\"lastSeenTime\":1576994867256,\"publicGameCount\":29,\"difficulty\":0.69377990430622,\"difficultyWeight\":209},\"tent\":{\"count\":462,\"lastSeenTime\":1576996730066,\"publicGameCount\":42,\"difficulty\":0.4789473684210526,\"difficultyWeight\":380},\"tentacle\":{\"count\":216,\"lastSeenTime\":1577010855712,\"publicGameCount\":10,\"difficulty\":0.6271186440677966,\"difficultyWeight\":118},\"thief\":{\"count\":213,\"lastSeenTime\":1577020536744,\"publicGameCount\":15,\"difficulty\":0.6357142857142857,\"difficultyWeight\":140},\"thirst\":{\"count\":223,\"lastSeenTime\":1577019935685,\"publicGameCount\":12,\"difficulty\":0.5757575757575758,\"difficultyWeight\":99},\"throat\":{\"count\":437,\"lastSeenTime\":1577017714611,\"publicGameCount\":26,\"difficulty\":0.7322175732217573,\"difficultyWeight\":239},\"tickle\":{\"count\":232,\"lastSeenTime\":1577000582457,\"difficulty\":0.7741935483870968,\"difficultyWeight\":31,\"publicGameCount\":1},\"tie\":{\"count\":496,\"lastSeenTime\":1577037031237,\"publicGameCount\":49,\"difficulty\":0.5518987341772152,\"difficultyWeight\":395},\"tiger\":{\"count\":221,\"lastSeenTime\":1577016205028,\"publicGameCount\":8,\"difficulty\":0.5503875968992249,\"difficultyWeight\":129},\"time machine\":{\"count\":219,\"lastSeenTime\":1577033508319,\"publicGameCount\":11,\"difficulty\":0.8552631578947368,\"difficultyWeight\":76},\"timpani\":{\"count\":450,\"lastSeenTime\":1577013426420,\"publicGameCount\":8,\"difficulty\":0.7868852459016393,\"difficultyWeight\":61},\"tired\":{\"count\":213,\"lastSeenTime\":1577034411762,\"publicGameCount\":10,\"difficulty\":0.6214285714285714,\"difficultyWeight\":140},\"toad\":{\"count\":218,\"lastSeenTime\":1577018472586,\"publicGameCount\":3,\"difficulty\":0.6236559139784946,\"difficultyWeight\":93},\"toast\":{\"count\":212,\"lastSeenTime\":1577033920831,\"difficulty\":0.5729166666666666,\"difficultyWeight\":192,\"publicGameCount\":10},\"toaster\":{\"count\":242,\"lastSeenTime\":1577009805383,\"publicGameCount\":9,\"difficulty\":0.5786802030456852,\"difficultyWeight\":197},\"toenail\":{\"count\":413,\"lastSeenTime\":1577031419224,\"publicGameCount\":33,\"difficulty\":0.5187713310580204,\"difficultyWeight\":293},\"toilet\":{\"count\":256,\"lastSeenTime\":1577019361234,\"difficulty\":0.544642857142857,\"difficultyWeight\":224,\"publicGameCount\":12},\"tomato\":{\"count\":205,\"lastSeenTime\":1577012106287,\"difficulty\":0.5757575757575758,\"difficultyWeight\":264,\"publicGameCount\":4},\"tomb\":{\"count\":211,\"lastSeenTime\":1576995155567,\"difficulty\":0.6616541353383458,\"difficultyWeight\":133,\"publicGameCount\":9},\"tombstone\":{\"count\":246,\"lastSeenTime\":1577010930973,\"publicGameCount\":18,\"difficulty\":0.6196319018404908,\"difficultyWeight\":163},\"tongue\":{\"count\":463,\"lastSeenTime\":1577035961642,\"publicGameCount\":56,\"difficulty\":0.578494623655914,\"difficultyWeight\":465},\"toothpaste\":{\"count\":233,\"lastSeenTime\":1576998176725,\"publicGameCount\":25,\"difficulty\":0.5207373271889401,\"difficultyWeight\":217},\"top hat\":{\"count\":223,\"lastSeenTime\":1577036022358,\"publicGameCount\":35,\"difficulty\":0.5785123966942148,\"difficultyWeight\":242},\"torch\":{\"count\":217,\"lastSeenTime\":1577036907083,\"publicGameCount\":7,\"difficulty\":0.5714285714285713,\"difficultyWeight\":231},\"totem\":{\"count\":217,\"lastSeenTime\":1577009010620,\"difficulty\":0.6105263157894737,\"difficultyWeight\":95,\"publicGameCount\":8},\"toucan\":{\"count\":235,\"lastSeenTime\":1577037341722,\"difficulty\":0.7058823529411765,\"difficultyWeight\":51,\"publicGameCount\":4},\"tow truck\":{\"count\":223,\"lastSeenTime\":1577034613528,\"publicGameCount\":7,\"difficulty\":0.5806451612903226,\"difficultyWeight\":62},\"tower\":{\"count\":441,\"lastSeenTime\":1577032849365,\"publicGameCount\":35,\"difficulty\":0.5773480662983427,\"difficultyWeight\":362},\"toy\":{\"count\":243,\"lastSeenTime\":1577036096380,\"publicGameCount\":8,\"difficulty\":0.6138613861386139,\"difficultyWeight\":101},\"tractor\":{\"count\":208,\"lastSeenTime\":1577037202537,\"publicGameCount\":3,\"difficulty\":0.6395348837209303,\"difficultyWeight\":86},\"traffic\":{\"count\":411,\"lastSeenTime\":1577017692184,\"publicGameCount\":34,\"difficulty\":0.5671641791044776,\"difficultyWeight\":268},\"trailer\":{\"count\":205,\"lastSeenTime\":1577033269629,\"publicGameCount\":3,\"difficulty\":0.6666666666666666,\"difficultyWeight\":57},\"train\":{\"count\":215,\"lastSeenTime\":1577033007248,\"publicGameCount\":2,\"difficulty\":0.5245901639344263,\"difficultyWeight\":183},\"trap\":{\"count\":221,\"lastSeenTime\":1576981344984,\"publicGameCount\":4,\"difficulty\":0.7945205479452054,\"difficultyWeight\":73},\"trash can\":{\"count\":237,\"lastSeenTime\":1577024591466,\"publicGameCount\":21,\"difficulty\":0.6602564102564104,\"difficultyWeight\":156},\"traveler\":{\"count\":260,\"lastSeenTime\":1577037638341,\"publicGameCount\":7,\"difficulty\":0.7575757575757576,\"difficultyWeight\":66},\"treasure\":{\"count\":235,\"lastSeenTime\":1577035813853,\"publicGameCount\":14,\"difficulty\":0.5371900826446281,\"difficultyWeight\":121},\"tree\":{\"count\":417,\"lastSeenTime\":1577036635725,\"difficulty\":0.39667458432304037,\"difficultyWeight\":421,\"publicGameCount\":39},\"treehouse\":{\"count\":430,\"lastSeenTime\":1577031496440,\"publicGameCount\":47,\"difficulty\":0.4255813953488372,\"difficultyWeight\":430},\"trend\":{\"count\":240,\"lastSeenTime\":1577015571780,\"publicGameCount\":3,\"difficulty\":0.7692307692307693,\"difficultyWeight\":39},\"triangle\":{\"count\":238,\"lastSeenTime\":1577032564741,\"difficulty\":0.4823529411764706,\"difficultyWeight\":170,\"publicGameCount\":15},\"tricycle\":{\"count\":229,\"lastSeenTime\":1576949271003,\"publicGameCount\":10,\"difficulty\":0.5444444444444445,\"difficultyWeight\":90},\"trigger\":{\"count\":222,\"lastSeenTime\":1577033068320,\"publicGameCount\":8,\"difficulty\":0.6363636363636364,\"difficultyWeight\":88},\"triplets\":{\"count\":253,\"lastSeenTime\":1577013585761,\"publicGameCount\":16,\"difficulty\":0.6423357664233577,\"difficultyWeight\":137},\"tripod\":{\"count\":225,\"lastSeenTime\":1577025817270,\"difficulty\":0.532258064516129,\"difficultyWeight\":62,\"publicGameCount\":3},\"trombone\":{\"count\":436,\"lastSeenTime\":1577008552896,\"publicGameCount\":20,\"difficulty\":0.72,\"difficultyWeight\":175},\"trophy\":{\"count\":233,\"lastSeenTime\":1577017359795,\"difficulty\":0.5471698113207547,\"difficultyWeight\":159,\"publicGameCount\":10},\"truck\":{\"count\":231,\"lastSeenTime\":1577035522572,\"difficulty\":0.5053191489361702,\"difficultyWeight\":188,\"publicGameCount\":5},\"truck driver\":{\"count\":223,\"lastSeenTime\":1577024994037,\"publicGameCount\":11,\"difficulty\":0.625,\"difficultyWeight\":72},\"trumpet\":{\"count\":487,\"lastSeenTime\":1577025251101,\"difficulty\":0.5163043478260869,\"difficultyWeight\":184,\"publicGameCount\":23},\"tug\":{\"count\":461,\"lastSeenTime\":1577033733248,\"publicGameCount\":19,\"difficulty\":0.753731343283582,\"difficultyWeight\":134},\"turd\":{\"count\":229,\"lastSeenTime\":1577001701665,\"difficulty\":0.72,\"difficultyWeight\":100,\"publicGameCount\":8},\"turnip\":{\"count\":228,\"lastSeenTime\":1577034531942,\"publicGameCount\":4,\"difficulty\":0.6857142857142857,\"difficultyWeight\":35},\"turtle\":{\"count\":213,\"lastSeenTime\":1577025115050,\"difficulty\":0.46938775510204084,\"difficultyWeight\":245,\"publicGameCount\":10},\"tuxedo\":{\"count\":209,\"lastSeenTime\":1577018571006,\"publicGameCount\":10,\"difficulty\":0.6633663366336634,\"difficultyWeight\":101},\"udder\":{\"count\":242,\"lastSeenTime\":1577034764802,\"publicGameCount\":6,\"difficulty\":0.574074074074074,\"difficultyWeight\":54},\"ukulele\":{\"count\":441,\"lastSeenTime\":1577036401976,\"publicGameCount\":22,\"difficulty\":0.6904761904761906,\"difficultyWeight\":168},\"umbrella\":{\"count\":191,\"lastSeenTime\":1577017445912,\"publicGameCount\":19,\"difficulty\":0.4900662251655628,\"difficultyWeight\":302},\"uncle\":{\"count\":200,\"lastSeenTime\":1577015499271,\"difficulty\":0.5409836065573771,\"difficultyWeight\":61,\"publicGameCount\":5},\"unicorn\":{\"count\":238,\"lastSeenTime\":1577014016599,\"difficulty\":0.4126984126984127,\"difficultyWeight\":189,\"publicGameCount\":13},\"universe\":{\"count\":223,\"lastSeenTime\":1577031204146,\"publicGameCount\":16,\"difficulty\":0.6739130434782609,\"difficultyWeight\":138},\"valley\":{\"count\":412,\"lastSeenTime\":1577012045277,\"publicGameCount\":21,\"difficulty\":0.7150537634408602,\"difficultyWeight\":186},\"vampire\":{\"count\":218,\"lastSeenTime\":1577030912743,\"publicGameCount\":9,\"difficulty\":0.493975903614458,\"difficultyWeight\":166},\"vanilla\":{\"count\":232,\"lastSeenTime\":1577005159929,\"difficulty\":0.6770833333333334,\"difficultyWeight\":96,\"publicGameCount\":9},\"vegetable\":{\"count\":199,\"lastSeenTime\":1577011218462,\"publicGameCount\":16,\"difficulty\":0.6146341463414634,\"difficultyWeight\":205},\"vein\":{\"count\":421,\"lastSeenTime\":1577031296608,\"publicGameCount\":28,\"difficulty\":0.5755395683453235,\"difficultyWeight\":278},\"vent\":{\"count\":213,\"lastSeenTime\":1577004559679,\"difficulty\":0.4909090909090909,\"difficultyWeight\":55,\"publicGameCount\":5},\"victim\":{\"count\":206,\"lastSeenTime\":1577036498776,\"difficulty\":0.6938775510204082,\"difficultyWeight\":49,\"publicGameCount\":6},\"victory\":{\"count\":223,\"lastSeenTime\":1576976111834,\"difficulty\":0.5677966101694916,\"difficultyWeight\":118,\"publicGameCount\":11},\"video\":{\"count\":237,\"lastSeenTime\":1577005054567,\"difficulty\":0.5736040609137056,\"difficultyWeight\":197,\"publicGameCount\":18},\"video game\":{\"count\":222,\"lastSeenTime\":1577030492374,\"publicGameCount\":26,\"difficulty\":0.7419354838709677,\"difficultyWeight\":186},\"vine\":{\"count\":413,\"lastSeenTime\":1577036121146,\"publicGameCount\":16,\"difficulty\":0.6610878661087864,\"difficultyWeight\":239},\"vise\":{\"count\":240,\"lastSeenTime\":1577024354735,\"difficulty\":0.6764705882352942,\"difficultyWeight\":34,\"publicGameCount\":2},\"vodka\":{\"count\":236,\"lastSeenTime\":1577007782564,\"publicGameCount\":12,\"difficulty\":0.5348837209302325,\"difficultyWeight\":129},\"volleyball\":{\"count\":229,\"lastSeenTime\":1577002683374,\"publicGameCount\":32,\"difficulty\":0.5269709543568465,\"difficultyWeight\":241},\"volume\":{\"count\":201,\"lastSeenTime\":1577004186315,\"difficulty\":0.5706214689265536,\"difficultyWeight\":177,\"publicGameCount\":14},\"vomit\":{\"count\":216,\"lastSeenTime\":1576998921481,\"publicGameCount\":10,\"difficulty\":0.553072625698324,\"difficultyWeight\":179},\"vortex\":{\"count\":237,\"lastSeenTime\":1576970308945,\"publicGameCount\":4,\"difficulty\":0.8043478260869565,\"difficultyWeight\":46},\"waist\":{\"count\":407,\"lastSeenTime\":1577036635725,\"difficulty\":0.6467391304347825,\"difficultyWeight\":184,\"publicGameCount\":19},\"wallpaper\":{\"count\":234,\"lastSeenTime\":1577030057610,\"publicGameCount\":6,\"difficulty\":0.6666666666666666,\"difficultyWeight\":63},\"walrus\":{\"count\":247,\"lastSeenTime\":1577036387422,\"difficulty\":0.6268656716417911,\"difficultyWeight\":67,\"publicGameCount\":7},\"watch\":{\"count\":483,\"lastSeenTime\":1577032066062,\"publicGameCount\":50,\"difficulty\":0.5214285714285715,\"difficultyWeight\":420},\"water\":{\"count\":393,\"lastSeenTime\":1577034007333,\"difficulty\":0.45416666666666666,\"difficultyWeight\":480,\"publicGameCount\":47},\"water cycle\":{\"count\":229,\"lastSeenTime\":1576984747355,\"publicGameCount\":9,\"difficulty\":0.85,\"difficultyWeight\":60},\"water gun\":{\"count\":209,\"lastSeenTime\":1577030861848,\"publicGameCount\":30,\"difficulty\":0.5,\"difficultyWeight\":210},\"wealth\":{\"count\":233,\"lastSeenTime\":1577035383092,\"difficulty\":0.6605504587155964,\"difficultyWeight\":109,\"publicGameCount\":8},\"weapon\":{\"count\":225,\"lastSeenTime\":1577017753478,\"publicGameCount\":11,\"difficulty\":0.5826086956521739,\"difficultyWeight\":115},\"weasel\":{\"count\":232,\"lastSeenTime\":1577033068320,\"publicGameCount\":2,\"difficulty\":0.6206896551724138,\"difficultyWeight\":29},\"weather\":{\"count\":432,\"lastSeenTime\":1577034546199,\"publicGameCount\":27,\"difficulty\":0.6148148148148149,\"difficultyWeight\":270},\"web\":{\"count\":233,\"lastSeenTime\":1577013555945,\"difficulty\":0.5690607734806631,\"difficultyWeight\":181,\"publicGameCount\":4},\"website\":{\"count\":248,\"lastSeenTime\":1577024636673,\"publicGameCount\":13,\"difficulty\":0.5413533834586465,\"difficultyWeight\":133},\"well\":{\"count\":475,\"lastSeenTime\":1577029578873,\"difficulty\":0.5381944444444444,\"difficultyWeight\":288,\"publicGameCount\":29},\"whale\":{\"count\":221,\"lastSeenTime\":1577031334229,\"publicGameCount\":8,\"difficulty\":0.5198237885462555,\"difficultyWeight\":227},\"whistle\":{\"count\":417,\"lastSeenTime\":1577032824600,\"publicGameCount\":30,\"difficulty\":0.5772357723577237,\"difficultyWeight\":246},\"wind\":{\"count\":461,\"lastSeenTime\":1577037632002,\"publicGameCount\":30,\"difficulty\":0.4868421052631579,\"difficultyWeight\":228},\"window\":{\"count\":199,\"lastSeenTime\":1576981481678,\"difficulty\":0.4585987261146497,\"difficultyWeight\":157,\"publicGameCount\":3},\"wine\":{\"count\":243,\"lastSeenTime\":1577025336889,\"difficulty\":0.5924170616113745,\"difficultyWeight\":211,\"publicGameCount\":6},\"wine glass\":{\"count\":244,\"lastSeenTime\":1577033780065,\"difficulty\":0.5617977528089888,\"difficultyWeight\":178,\"publicGameCount\":21},\"wing\":{\"count\":230,\"lastSeenTime\":1577032161683,\"publicGameCount\":10,\"difficulty\":0.49765258215962427,\"difficultyWeight\":213},\"winner\":{\"count\":242,\"lastSeenTime\":1577024591466,\"publicGameCount\":13,\"difficulty\":0.6145833333333331,\"difficultyWeight\":192},\"winter\":{\"count\":231,\"lastSeenTime\":1577008822217,\"publicGameCount\":12,\"difficulty\":0.6211180124223602,\"difficultyWeight\":161},\"wire\":{\"count\":223,\"lastSeenTime\":1577030325616,\"difficulty\":0.5864197530864198,\"difficultyWeight\":162,\"publicGameCount\":8},\"wireless\":{\"count\":207,\"lastSeenTime\":1577019386006,\"publicGameCount\":13,\"difficulty\":0.5511811023622047,\"difficultyWeight\":127},\"wizard\":{\"count\":227,\"lastSeenTime\":1577025827446,\"publicGameCount\":18,\"difficulty\":0.5347826086956522,\"difficultyWeight\":230},\"wolf\":{\"count\":214,\"lastSeenTime\":1577037141569,\"difficulty\":0.4649122807017544,\"difficultyWeight\":114,\"publicGameCount\":7},\"wonderland\":{\"count\":220,\"lastSeenTime\":1577018743300,\"publicGameCount\":6,\"difficulty\":0.6896551724137931,\"difficultyWeight\":58},\"woodpecker\":{\"count\":216,\"lastSeenTime\":1577016345341,\"difficulty\":0.569620253164557,\"difficultyWeight\":79,\"publicGameCount\":9},\"wool\":{\"count\":232,\"lastSeenTime\":1576994611979,\"difficulty\":0.6129032258064515,\"difficultyWeight\":124,\"publicGameCount\":8},\"work\":{\"count\":229,\"lastSeenTime\":1576981150242,\"difficulty\":0.6304347826086957,\"difficultyWeight\":46,\"publicGameCount\":3},\"worm\":{\"count\":227,\"lastSeenTime\":1577003987414,\"difficulty\":0.4336734693877551,\"difficultyWeight\":196,\"publicGameCount\":5},\"wound\":{\"count\":215,\"lastSeenTime\":1577019177354,\"publicGameCount\":5,\"difficulty\":0.6951219512195121,\"difficultyWeight\":82},\"wrapping\":{\"count\":235,\"lastSeenTime\":1577014911739,\"difficulty\":0.4473684210526316,\"difficultyWeight\":38,\"publicGameCount\":4},\"wreath\":{\"count\":256,\"lastSeenTime\":1577017849635,\"publicGameCount\":8,\"difficulty\":0.691358024691358,\"difficultyWeight\":81},\"wrench\":{\"count\":223,\"lastSeenTime\":1576997095980,\"publicGameCount\":10,\"difficulty\":0.626984126984127,\"difficultyWeight\":126},\"wrestling\":{\"count\":219,\"lastSeenTime\":1577004520443,\"publicGameCount\":6,\"difficulty\":0.6491228070175439,\"difficultyWeight\":57},\"wrist\":{\"count\":439,\"lastSeenTime\":1577035409514,\"publicGameCount\":37,\"difficulty\":0.570987654320988,\"difficultyWeight\":324},\"x-ray\":{\"count\":225,\"lastSeenTime\":1577011993887,\"publicGameCount\":11,\"difficulty\":0.6716417910447762,\"difficultyWeight\":67},\"xylophone\":{\"count\":400,\"lastSeenTime\":1577010272408,\"publicGameCount\":19,\"difficulty\":0.6440677966101697,\"difficultyWeight\":118},\"yacht\":{\"count\":244,\"lastSeenTime\":1576981974478,\"publicGameCount\":6,\"difficulty\":0.7032967032967034,\"difficultyWeight\":91},\"yeti\":{\"count\":256,\"lastSeenTime\":1577020536744,\"publicGameCount\":14,\"difficulty\":0.5061728395061729,\"difficultyWeight\":81},\"yo-yo\":{\"count\":217,\"lastSeenTime\":1577033946337,\"publicGameCount\":43,\"difficulty\":0.5562913907284768,\"difficultyWeight\":302},\"yogurt\":{\"count\":244,\"lastSeenTime\":1576996416399,\"publicGameCount\":15,\"difficulty\":0.6120689655172413,\"difficultyWeight\":116},\"yolk\":{\"count\":204,\"lastSeenTime\":1577007452649,\"difficulty\":0.5833333333333334,\"difficultyWeight\":168,\"publicGameCount\":6},\"young\":{\"count\":439,\"lastSeenTime\":1577034350570,\"publicGameCount\":23,\"difficulty\":0.5882352941176472,\"difficultyWeight\":187},\"zebra\":{\"count\":214,\"lastSeenTime\":1577036927354,\"difficulty\":0.5491329479768787,\"difficultyWeight\":173,\"publicGameCount\":8},\"zigzag\":{\"count\":212,\"lastSeenTime\":1577015524015,\"publicGameCount\":12,\"difficulty\":0.5777777777777777,\"difficultyWeight\":135},\"zipper\":{\"count\":226,\"lastSeenTime\":1577036426489,\"publicGameCount\":12,\"difficulty\":0.6111111111111112,\"difficultyWeight\":144},\"zombie\":{\"count\":226,\"lastSeenTime\":1577029617419,\"publicGameCount\":13,\"difficulty\":0.5555555555555556,\"difficultyWeight\":144},\"zoom\":{\"count\":241,\"lastSeenTime\":1577031155319,\"difficulty\":0.6518518518518519,\"difficultyWeight\":135,\"publicGameCount\":11},\"W-LAN\":{\"count\":226,\"lastSeenTime\":1577008267383,\"publicGameCount\":6,\"difficulty\":0.8909090909090909,\"difficultyWeight\":55},\"cherry blossom\":{\"count\":440,\"lastSeenTime\":1577035714898,\"difficulty\":0.73992673992674,\"difficultyWeight\":273,\"publicGameCount\":38},\"Adidas\":{\"count\":419,\"lastSeenTime\":1577035455493,\"difficulty\":0.5552560646900269,\"difficultyWeight\":371,\"publicGameCount\":44},\"galaxy\":{\"count\":212,\"lastSeenTime\":1577031856118,\"publicGameCount\":11,\"difficulty\":0.5359477124183007,\"difficultyWeight\":153},\"procrastination\":{\"count\":229,\"lastSeenTime\":1576986816477,\"publicGameCount\":4,\"difficulty\":0.8620689655172413,\"difficultyWeight\":29},\"vote\":{\"count\":226,\"lastSeenTime\":1577035372815,\"difficulty\":0.4365079365079365,\"difficultyWeight\":126,\"publicGameCount\":10},\"burrito\":{\"count\":252,\"lastSeenTime\":1577021253681,\"publicGameCount\":13,\"difficulty\":0.5094339622641509,\"difficultyWeight\":106},\"snowflake\":{\"count\":433,\"lastSeenTime\":1577037178254,\"difficulty\":0.5217391304347823,\"difficultyWeight\":437,\"publicGameCount\":56},\"wheelbarrow\":{\"count\":217,\"lastSeenTime\":1577012475718,\"publicGameCount\":11,\"difficulty\":0.735632183908046,\"difficultyWeight\":87},\"Jesus Christ\":{\"count\":418,\"lastSeenTime\":1577033680486,\"publicGameCount\":55,\"difficulty\":0.6112412177985944,\"difficultyWeight\":427},\"Einstein\":{\"count\":439,\"lastSeenTime\":1577035886295,\"publicGameCount\":20,\"difficulty\":0.6939890710382512,\"difficultyWeight\":183},\"Porky Pig\":{\"count\":440,\"lastSeenTime\":1577000593113,\"publicGameCount\":19,\"difficulty\":0.7152777777777778,\"difficultyWeight\":144},\"chew\":{\"count\":235,\"lastSeenTime\":1576996198033,\"difficulty\":0.5652173913043478,\"difficultyWeight\":69,\"publicGameCount\":8},\"underground\":{\"count\":450,\"lastSeenTime\":1577030347875,\"publicGameCount\":32,\"difficulty\":0.7522123893805309,\"difficultyWeight\":226},\"China\":{\"count\":449,\"lastSeenTime\":1577024929912,\"difficulty\":0.5127478753541076,\"difficultyWeight\":353,\"publicGameCount\":33},\"Skrillex\":{\"count\":425,\"lastSeenTime\":1577035161889,\"publicGameCount\":5,\"difficulty\":0.8163265306122449,\"difficultyWeight\":49},\"dock\":{\"count\":451,\"lastSeenTime\":1577031583222,\"publicGameCount\":22,\"difficulty\":0.6158192090395479,\"difficultyWeight\":177},\"streamer\":{\"count\":217,\"lastSeenTime\":1577020128841,\"difficulty\":0.711864406779661,\"difficultyWeight\":59,\"publicGameCount\":5},\"gender\":{\"count\":212,\"lastSeenTime\":1577034253534,\"difficulty\":0.6258064516129033,\"difficultyWeight\":155,\"publicGameCount\":7},\"echo\":{\"count\":237,\"lastSeenTime\":1577013787870,\"publicGameCount\":9,\"difficulty\":0.5774647887323944,\"difficultyWeight\":71},\"MTV\":{\"count\":455,\"lastSeenTime\":1577030172832,\"publicGameCount\":11,\"difficulty\":0.5478260869565218,\"difficultyWeight\":115},\"Canada\":{\"count\":441,\"lastSeenTime\":1577036000120,\"publicGameCount\":40,\"difficulty\":0.525974025974026,\"difficultyWeight\":308},\"magic trick\":{\"count\":205,\"lastSeenTime\":1577034200815,\"publicGameCount\":16,\"difficulty\":0.7281553398058253,\"difficultyWeight\":103},\"SpongeBob\":{\"count\":446,\"lastSeenTime\":1577033755621,\"publicGameCount\":58,\"difficulty\":0.49460043196544284,\"difficultyWeight\":463},\"Spiderman\":{\"count\":419,\"lastSeenTime\":1577032373261,\"publicGameCount\":45,\"difficulty\":0.5544303797468356,\"difficultyWeight\":395},\"asymmetry\":{\"count\":217,\"lastSeenTime\":1577016345341,\"publicGameCount\":3,\"difficulty\":0.6428571428571429,\"difficultyWeight\":28},\"Monday\":{\"count\":228,\"lastSeenTime\":1577033931737,\"difficulty\":0.596638655462185,\"difficultyWeight\":119,\"publicGameCount\":10},\"Bomberman\":{\"count\":428,\"lastSeenTime\":1577020774303,\"publicGameCount\":11,\"difficulty\":0.7474747474747475,\"difficultyWeight\":99},\"Crash Bandicoot\":{\"count\":430,\"lastSeenTime\":1577036416241,\"publicGameCount\":20,\"difficulty\":0.8106060606060606,\"difficultyWeight\":132},\"firecracker\":{\"count\":242,\"lastSeenTime\":1577019674312,\"publicGameCount\":19,\"difficulty\":0.7172413793103448,\"difficultyWeight\":145},\"Usain Bolt\":{\"count\":436,\"lastSeenTime\":1577035761130,\"publicGameCount\":30,\"difficulty\":0.7535545023696683,\"difficultyWeight\":211},\"disease\":{\"count\":246,\"lastSeenTime\":1577019036151,\"publicGameCount\":5,\"difficulty\":0.8181818181818182,\"difficultyWeight\":77},\"adult\":{\"count\":221,\"lastSeenTime\":1577007668912,\"publicGameCount\":9,\"difficulty\":0.5254237288135593,\"difficultyWeight\":118},\"slump\":{\"count\":217,\"lastSeenTime\":1577036268892,\"publicGameCount\":2,\"difficulty\":0.7916666666666666,\"difficultyWeight\":24},\"Pink Panther\":{\"count\":449,\"lastSeenTime\":1577012155351,\"publicGameCount\":35,\"difficulty\":0.7,\"difficultyWeight\":230},\"jester\":{\"count\":230,\"lastSeenTime\":1577034315724,\"publicGameCount\":5,\"difficulty\":0.75,\"difficultyWeight\":48},\"Wall-e\":{\"count\":465,\"lastSeenTime\":1577033283809,\"publicGameCount\":27,\"difficulty\":0.6528497409326426,\"difficultyWeight\":193},\"rat\":{\"count\":245,\"lastSeenTime\":1576993659400,\"difficulty\":0.5144508670520233,\"difficultyWeight\":173,\"publicGameCount\":3},\"ballet\":{\"count\":235,\"lastSeenTime\":1577031644668,\"publicGameCount\":6,\"difficulty\":0.6391752577319587,\"difficultyWeight\":97},\"writer\":{\"count\":227,\"lastSeenTime\":1577024525038,\"difficulty\":0.8271604938271605,\"difficultyWeight\":81,\"publicGameCount\":6},\"Android\":{\"count\":425,\"lastSeenTime\":1577015388643,\"publicGameCount\":36,\"difficulty\":0.5247148288973384,\"difficultyWeight\":263},\"Cupid\":{\"count\":210,\"lastSeenTime\":1576983598019,\"difficulty\":0.4621212121212121,\"difficultyWeight\":132,\"publicGameCount\":14},\"headband\":{\"count\":237,\"lastSeenTime\":1577035544830,\"publicGameCount\":12,\"difficulty\":0.6435643564356436,\"difficultyWeight\":101},\"alligator\":{\"count\":106,\"lastSeenTime\":1576870146221,\"publicGameCount\":5,\"difficulty\":0.7339449541284404,\"difficultyWeight\":109},\"foil\":{\"count\":230,\"lastSeenTime\":1577030677699,\"publicGameCount\":3,\"difficulty\":0.5833333333333334,\"difficultyWeight\":48},\"Lego\":{\"count\":198,\"lastSeenTime\":1577029947635,\"publicGameCount\":21,\"difficulty\":0.5340501792114697,\"difficultyWeight\":279},\"text\":{\"count\":231,\"lastSeenTime\":1577032283871,\"publicGameCount\":13,\"difficulty\":0.518796992481203,\"difficultyWeight\":133},\"Mona Lisa\":{\"count\":235,\"lastSeenTime\":1576996381190,\"publicGameCount\":12,\"difficulty\":0.6886792452830188,\"difficultyWeight\":106},\"Zorro\":{\"count\":449,\"lastSeenTime\":1577025402030,\"publicGameCount\":13,\"difficulty\":0.753968253968254,\"difficultyWeight\":126},\"Teletubby\":{\"count\":428,\"lastSeenTime\":1577031672748,\"publicGameCount\":30,\"difficulty\":0.7336065573770493,\"difficultyWeight\":244},\"social media\":{\"count\":242,\"lastSeenTime\":1577020474773,\"publicGameCount\":21,\"difficulty\":0.6942675159235668,\"difficultyWeight\":157},\"skin\":{\"count\":417,\"lastSeenTime\":1577024168827,\"difficulty\":0.5833333333333333,\"difficultyWeight\":216,\"publicGameCount\":26},\"WhatsApp\":{\"count\":460,\"lastSeenTime\":1577037070414,\"publicGameCount\":29,\"difficulty\":0.6506024096385542,\"difficultyWeight\":249},\"Easter\":{\"count\":211,\"lastSeenTime\":1577007198808,\"difficulty\":0.6521739130434782,\"difficultyWeight\":184,\"publicGameCount\":6},\"gasp\":{\"count\":208,\"lastSeenTime\":1576992767532,\"publicGameCount\":7,\"difficulty\":0.6097560975609755,\"difficultyWeight\":82},\"east\":{\"count\":463,\"lastSeenTime\":1577015121316,\"publicGameCount\":26,\"difficulty\":0.5,\"difficultyWeight\":246},\"Finn and Jake\":{\"count\":483,\"lastSeenTime\":1577032113038,\"publicGameCount\":36,\"difficulty\":0.7665369649805448,\"difficultyWeight\":257},\"Robin Hood\":{\"count\":411,\"lastSeenTime\":1577009740704,\"publicGameCount\":26,\"difficulty\":0.6616915422885573,\"difficultyWeight\":201},\"mammoth\":{\"count\":204,\"lastSeenTime\":1577019236659,\"publicGameCount\":12,\"difficulty\":0.6762589928057554,\"difficultyWeight\":139},\"kitchen\":{\"count\":267,\"lastSeenTime\":1577024859631,\"publicGameCount\":12,\"difficulty\":0.6115702479338843,\"difficultyWeight\":121},\"armadillo\":{\"count\":222,\"lastSeenTime\":1577020587743,\"difficulty\":0.7446808510638298,\"difficultyWeight\":47,\"publicGameCount\":5},\"Mexico\":{\"count\":440,\"lastSeenTime\":1577035187744,\"publicGameCount\":29,\"difficulty\":0.5258620689655171,\"difficultyWeight\":232},\"deep\":{\"count\":428,\"lastSeenTime\":1577016799930,\"publicGameCount\":24,\"difficulty\":0.558252427184466,\"difficultyWeight\":206},\"leprechaun\":{\"count\":204,\"lastSeenTime\":1577019066716,\"publicGameCount\":12,\"difficulty\":0.6869565217391305,\"difficultyWeight\":115},\"Lasagna\":{\"count\":210,\"lastSeenTime\":1576951729940,\"publicGameCount\":13,\"difficulty\":0.7452830188679245,\"difficultyWeight\":106},\"fire alarm\":{\"count\":228,\"lastSeenTime\":1577033530627,\"publicGameCount\":21,\"difficulty\":0.618421052631579,\"difficultyWeight\":152},\"Kim Jong-un\":{\"count\":440,\"lastSeenTime\":1577037056234,\"publicGameCount\":31,\"difficulty\":0.782051282051282,\"difficultyWeight\":234},\"Uranus\":{\"count\":228,\"lastSeenTime\":1577019226526,\"publicGameCount\":10,\"difficulty\":0.5384615384615384,\"difficultyWeight\":117},\"internet\":{\"count\":215,\"lastSeenTime\":1577034401652,\"difficulty\":0.6408839779005526,\"difficultyWeight\":181,\"publicGameCount\":14},\"chimpanzee\":{\"count\":222,\"lastSeenTime\":1577035508304,\"publicGameCount\":10,\"difficulty\":0.6304347826086957,\"difficultyWeight\":92},\"Chuck Norris\":{\"count\":436,\"lastSeenTime\":1577014177490,\"difficulty\":0.6923076923076923,\"difficultyWeight\":91,\"publicGameCount\":10},\"Tower Bridge\":{\"count\":428,\"lastSeenTime\":1577020501514,\"publicGameCount\":24,\"difficulty\":0.7116564417177914,\"difficultyWeight\":163},\"controller\":{\"count\":222,\"lastSeenTime\":1577036426489,\"publicGameCount\":28,\"difficulty\":0.5714285714285714,\"difficultyWeight\":217},\"neck\":{\"count\":438,\"lastSeenTime\":1577034571183,\"publicGameCount\":27,\"difficulty\":0.4730158730158731,\"difficultyWeight\":315},\"donkey\":{\"count\":207,\"lastSeenTime\":1577018979029,\"difficulty\":0.5126050420168069,\"difficultyWeight\":119,\"publicGameCount\":4},\"superpower\":{\"count\":193,\"lastSeenTime\":1577035654185,\"publicGameCount\":12,\"difficulty\":0.7425742574257426,\"difficultyWeight\":101},\"Mr Bean\":{\"count\":207,\"lastSeenTime\":1577025104122,\"publicGameCount\":14,\"difficulty\":0.8378378378378378,\"difficultyWeight\":111},\"trick shot\":{\"count\":218,\"lastSeenTime\":1577032198145,\"publicGameCount\":11,\"difficulty\":0.7,\"difficultyWeight\":80},\"John Cena\":{\"count\":424,\"lastSeenTime\":1577037653341,\"difficulty\":0.6901408450704225,\"difficultyWeight\":213,\"publicGameCount\":29},\"catfish\":{\"count\":221,\"lastSeenTime\":1577024677438,\"difficulty\":0.5720524017467249,\"difficultyWeight\":229,\"publicGameCount\":16},\"bobsled\":{\"count\":204,\"lastSeenTime\":1577036169423,\"difficulty\":0.6774193548387096,\"difficultyWeight\":31,\"publicGameCount\":2},\"bamboo\":{\"count\":460,\"lastSeenTime\":1577033619352,\"publicGameCount\":31,\"difficulty\":0.6079999999999999,\"difficultyWeight\":250},\"Lion King\":{\"count\":468,\"lastSeenTime\":1577033322479,\"publicGameCount\":41,\"difficulty\":0.7075471698113207,\"difficultyWeight\":318},\"periscope\":{\"count\":209,\"lastSeenTime\":1577008232089,\"publicGameCount\":7,\"difficulty\":0.813953488372093,\"difficultyWeight\":86},\"generator\":{\"count\":229,\"lastSeenTime\":1576999434864,\"publicGameCount\":6,\"difficulty\":0.6527777777777778,\"difficultyWeight\":72},\"roadblock\":{\"count\":460,\"lastSeenTime\":1577034071183,\"publicGameCount\":19,\"difficulty\":0.7412587412587412,\"difficultyWeight\":143},\"licorice\":{\"count\":234,\"lastSeenTime\":1577001733732,\"publicGameCount\":9,\"difficulty\":0.734375,\"difficultyWeight\":64},\"Phineas and Ferb\":{\"count\":420,\"lastSeenTime\":1577035297722,\"publicGameCount\":34,\"difficulty\":0.7578125,\"difficultyWeight\":256},\"binoculars\":{\"count\":212,\"lastSeenTime\":1577025537901,\"publicGameCount\":15,\"difficulty\":0.6783216783216783,\"difficultyWeight\":143},\"Finn\":{\"count\":437,\"lastSeenTime\":1577026115551,\"publicGameCount\":20,\"difficulty\":0.6614583333333335,\"difficultyWeight\":192},\"workplace\":{\"count\":229,\"lastSeenTime\":1577016914668,\"publicGameCount\":13,\"difficulty\":0.6212121212121212,\"difficultyWeight\":132},\"bartender\":{\"count\":247,\"lastSeenTime\":1577003628703,\"difficulty\":0.6029411764705882,\"difficultyWeight\":68,\"publicGameCount\":8},\"Norway\":{\"count\":425,\"lastSeenTime\":1577033058121,\"publicGameCount\":15,\"difficulty\":0.7062937062937062,\"difficultyWeight\":143},\"collapse\":{\"count\":201,\"lastSeenTime\":1577007012836,\"publicGameCount\":4,\"difficulty\":0.825,\"difficultyWeight\":40},\"waffle\":{\"count\":202,\"lastSeenTime\":1577019674312,\"difficulty\":0.57487922705314,\"difficultyWeight\":207,\"publicGameCount\":16},\"Asia\":{\"count\":444,\"lastSeenTime\":1577036527277,\"publicGameCount\":26,\"difficulty\":0.5278969957081544,\"difficultyWeight\":233},\"whisk\":{\"count\":222,\"lastSeenTime\":1577034425936,\"difficulty\":0.7088607594936709,\"difficultyWeight\":79,\"publicGameCount\":3},\"gangster\":{\"count\":210,\"lastSeenTime\":1577020985528,\"publicGameCount\":12,\"difficulty\":0.7256637168141593,\"difficultyWeight\":113},\"Monster\":{\"count\":218,\"lastSeenTime\":1577032236778,\"difficulty\":0.6518987341772153,\"difficultyWeight\":158,\"publicGameCount\":5},\"employer\":{\"count\":229,\"lastSeenTime\":1577015285487,\"difficulty\":0.7619047619047619,\"difficultyWeight\":42,\"publicGameCount\":4},\"Obelix\":{\"count\":444,\"lastSeenTime\":1577036872584,\"difficulty\":0.7088607594936709,\"difficultyWeight\":79,\"publicGameCount\":6},\"Jimmy Neutron\":{\"count\":423,\"lastSeenTime\":1577035494111,\"publicGameCount\":25,\"difficulty\":0.7925531914893617,\"difficultyWeight\":188},\"mold\":{\"count\":209,\"lastSeenTime\":1577019997716,\"difficulty\":0.5647058823529412,\"difficultyWeight\":85,\"publicGameCount\":7},\"motorcycle\":{\"count\":232,\"lastSeenTime\":1577018362555,\"publicGameCount\":19,\"difficulty\":0.5727272727272728,\"difficultyWeight\":110},\"Spartacus\":{\"count\":461,\"lastSeenTime\":1577032469364,\"publicGameCount\":9,\"difficulty\":0.8588235294117647,\"difficultyWeight\":85},\"Portugal\":{\"count\":418,\"lastSeenTime\":1577034642507,\"difficulty\":0.6595744680851063,\"difficultyWeight\":94,\"publicGameCount\":10},\"laboratory\":{\"count\":391,\"lastSeenTime\":1577036081186,\"publicGameCount\":14,\"difficulty\":0.7744360902255639,\"difficultyWeight\":133},\"Paypal\":{\"count\":482,\"lastSeenTime\":1577033043901,\"publicGameCount\":28,\"difficulty\":0.6093023255813952,\"difficultyWeight\":215},\"fireproof\":{\"count\":444,\"lastSeenTime\":1577035216186,\"publicGameCount\":22,\"difficulty\":0.6963350785340315,\"difficultyWeight\":191},\"toe\":{\"count\":438,\"lastSeenTime\":1577020301493,\"difficulty\":0.5583596214511038,\"difficultyWeight\":317,\"publicGameCount\":20},\"Thor\":{\"count\":447,\"lastSeenTime\":1577036081186,\"publicGameCount\":35,\"difficulty\":0.5119453924914675,\"difficultyWeight\":293},\"Chewbacca\":{\"count\":448,\"lastSeenTime\":1577034033521,\"difficulty\":0.7142857142857143,\"difficultyWeight\":182,\"publicGameCount\":19},\"referee\":{\"count\":258,\"lastSeenTime\":1577021339910,\"publicGameCount\":8,\"difficulty\":0.7931034482758621,\"difficultyWeight\":87},\"dress\":{\"count\":244,\"lastSeenTime\":1577034593673,\"publicGameCount\":8,\"difficulty\":0.5238095238095237,\"difficultyWeight\":147},\"guitar\":{\"count\":421,\"lastSeenTime\":1577011431541,\"difficulty\":0.4467005076142132,\"difficultyWeight\":394,\"publicGameCount\":40},\"allergy\":{\"count\":213,\"lastSeenTime\":1577016886171,\"difficulty\":0.6851851851851852,\"difficultyWeight\":108,\"publicGameCount\":12},\"Olaf\":{\"count\":420,\"lastSeenTime\":1577018155425,\"publicGameCount\":41,\"difficulty\":0.5478260869565222,\"difficultyWeight\":345},\"Mount Everest\":{\"count\":455,\"lastSeenTime\":1577037226802,\"publicGameCount\":48,\"difficulty\":0.6486486486486484,\"difficultyWeight\":333},\"vertical\":{\"count\":229,\"lastSeenTime\":1577029784063,\"difficulty\":0.6349206349206349,\"difficultyWeight\":63,\"publicGameCount\":6},\"aircraft\":{\"count\":221,\"lastSeenTime\":1576999516005,\"publicGameCount\":9,\"difficulty\":0.7647058823529411,\"difficultyWeight\":102},\"Atlantis\":{\"count\":265,\"lastSeenTime\":1577007329399,\"publicGameCount\":5,\"difficulty\":0.6857142857142857,\"difficultyWeight\":35},\"archer\":{\"count\":239,\"lastSeenTime\":1577015985232,\"publicGameCount\":13,\"difficulty\":0.6666666666666666,\"difficultyWeight\":150},\"toolbox\":{\"count\":226,\"lastSeenTime\":1577034689603,\"publicGameCount\":9,\"difficulty\":0.5882352941176471,\"difficultyWeight\":119},\"hyena\":{\"count\":223,\"lastSeenTime\":1577032763018,\"difficulty\":0.8,\"difficultyWeight\":45,\"publicGameCount\":5},\"pipe\":{\"count\":238,\"lastSeenTime\":1576991278078,\"publicGameCount\":10,\"difficulty\":0.5579710144927537,\"difficultyWeight\":138},\"undo\":{\"count\":235,\"lastSeenTime\":1577000929474,\"publicGameCount\":11,\"difficulty\":0.627906976744186,\"difficultyWeight\":86},\"reindeer\":{\"count\":231,\"lastSeenTime\":1577019605874,\"publicGameCount\":13,\"difficulty\":0.5537190082644629,\"difficultyWeight\":121},\"NASCAR\":{\"count\":245,\"lastSeenTime\":1576996365789,\"publicGameCount\":7,\"difficulty\":0.5510204081632653,\"difficultyWeight\":49},\"cousin\":{\"count\":222,\"lastSeenTime\":1577018410162,\"publicGameCount\":7,\"difficulty\":0.6588235294117646,\"difficultyWeight\":85},\"Big Ben\":{\"count\":438,\"lastSeenTime\":1577034239310,\"publicGameCount\":33,\"difficulty\":0.7066115702479339,\"difficultyWeight\":242},\"dome\":{\"count\":208,\"lastSeenTime\":1577034022367,\"publicGameCount\":7,\"difficulty\":0.546875,\"difficultyWeight\":64},\"coast\":{\"count\":429,\"lastSeenTime\":1577030043413,\"publicGameCount\":18,\"difficulty\":0.6211180124223602,\"difficultyWeight\":161},\"whisper\":{\"count\":268,\"lastSeenTime\":1576989329890,\"publicGameCount\":18,\"difficulty\":0.6106870229007634,\"difficultyWeight\":131},\"coyote\":{\"count\":207,\"lastSeenTime\":1577018818664,\"publicGameCount\":2,\"difficulty\":0.5833333333333334,\"difficultyWeight\":36},\"sting\":{\"count\":206,\"lastSeenTime\":1577036825894,\"difficulty\":0.6981132075471698,\"difficultyWeight\":106,\"publicGameCount\":7},\"dig\":{\"count\":200,\"lastSeenTime\":1577020587743,\"difficulty\":0.484375,\"difficultyWeight\":128,\"publicGameCount\":4},\"cowboy\":{\"count\":228,\"lastSeenTime\":1577019636661,\"difficulty\":0.5691056910569106,\"difficultyWeight\":123,\"publicGameCount\":8},\"vaccine\":{\"count\":248,\"lastSeenTime\":1577015499271,\"difficulty\":0.5757575757575758,\"difficultyWeight\":99,\"publicGameCount\":11},\"piano\":{\"count\":476,\"lastSeenTime\":1577011647836,\"difficulty\":0.5481727574750831,\"difficultyWeight\":301,\"publicGameCount\":32},\"ceiling\":{\"count\":218,\"lastSeenTime\":1576998592191,\"difficulty\":0.5463917525773195,\"difficultyWeight\":97,\"publicGameCount\":6},\"marigold\":{\"count\":455,\"lastSeenTime\":1577032676999,\"publicGameCount\":9,\"difficulty\":0.865979381443299,\"difficultyWeight\":97},\"map\":{\"count\":471,\"lastSeenTime\":1577012475718,\"difficulty\":0.5310880829015544,\"difficultyWeight\":386,\"publicGameCount\":38},\"Squidward\":{\"count\":397,\"lastSeenTime\":1577034713991,\"difficulty\":0.5569620253164557,\"difficultyWeight\":237,\"publicGameCount\":34},\"Beethoven\":{\"count\":430,\"lastSeenTime\":1577011492557,\"publicGameCount\":9,\"difficulty\":0.7931034482758621,\"difficultyWeight\":87},\"Colosseum\":{\"count\":421,\"lastSeenTime\":1577030433295,\"publicGameCount\":19,\"difficulty\":0.808641975308642,\"difficultyWeight\":162},\"touch\":{\"count\":233,\"lastSeenTime\":1577025841683,\"publicGameCount\":6,\"difficulty\":0.5443037974683544,\"difficultyWeight\":79},\"Kung Fu\":{\"count\":193,\"lastSeenTime\":1577036000120,\"publicGameCount\":17,\"difficulty\":0.7520661157024794,\"difficultyWeight\":121},\"canister\":{\"count\":239,\"lastSeenTime\":1577016031951,\"publicGameCount\":5,\"difficulty\":0.71875,\"difficultyWeight\":32},\"Youtube\":{\"count\":438,\"lastSeenTime\":1577025214850,\"publicGameCount\":65,\"difficulty\":0.4058919803600655,\"difficultyWeight\":611},\"goat\":{\"count\":246,\"lastSeenTime\":1577026115551,\"publicGameCount\":12,\"difficulty\":0.6174863387978142,\"difficultyWeight\":183},\"customer\":{\"count\":220,\"lastSeenTime\":1577030262784,\"publicGameCount\":7,\"difficulty\":0.611764705882353,\"difficultyWeight\":85},\"France\":{\"count\":427,\"lastSeenTime\":1577030951342,\"difficulty\":0.6213592233009708,\"difficultyWeight\":309,\"publicGameCount\":33},\"country\":{\"count\":442,\"lastSeenTime\":1577016173491,\"publicGameCount\":26,\"difficulty\":0.6933333333333332,\"difficultyWeight\":225},\"mannequin\":{\"count\":222,\"lastSeenTime\":1576999022677,\"difficulty\":0.75,\"difficultyWeight\":60,\"publicGameCount\":5},\"Harry Potter\":{\"count\":465,\"lastSeenTime\":1577037131444,\"publicGameCount\":59,\"difficulty\":0.6574712643678161,\"difficultyWeight\":435},\"risk\":{\"count\":221,\"lastSeenTime\":1577030937070,\"publicGameCount\":6,\"difficulty\":0.6206896551724138,\"difficultyWeight\":58},\"walk\":{\"count\":223,\"lastSeenTime\":1577009740704,\"publicGameCount\":8,\"difficulty\":0.6232876712328766,\"difficultyWeight\":146},\"delivery\":{\"count\":235,\"lastSeenTime\":1577035937353,\"publicGameCount\":9,\"difficulty\":0.5316455696202531,\"difficultyWeight\":79},\"roof\":{\"count\":223,\"lastSeenTime\":1577017800715,\"publicGameCount\":8,\"difficulty\":0.5000000000000001,\"difficultyWeight\":134},\"Steam\":{\"count\":216,\"lastSeenTime\":1576990865256,\"publicGameCount\":13,\"difficulty\":0.6232876712328768,\"difficultyWeight\":146},\"Argentina\":{\"count\":411,\"lastSeenTime\":1577032857353,\"publicGameCount\":12,\"difficulty\":0.5480769230769231,\"difficultyWeight\":104},\"Iron Giant\":{\"count\":202,\"lastSeenTime\":1577024820240,\"publicGameCount\":6,\"difficulty\":0.631578947368421,\"difficultyWeight\":38},\"bookshelf\":{\"count\":232,\"lastSeenTime\":1576991898546,\"difficulty\":0.639751552795031,\"difficultyWeight\":161,\"publicGameCount\":16},\"Pepsi\":{\"count\":436,\"lastSeenTime\":1577030530959,\"publicGameCount\":54,\"difficulty\":0.5100401606425703,\"difficultyWeight\":498},\"cringe\":{\"count\":230,\"lastSeenTime\":1577032123143,\"difficulty\":0.7586206896551724,\"difficultyWeight\":87,\"publicGameCount\":10},\"Greece\":{\"count\":476,\"lastSeenTime\":1577036927354,\"publicGameCount\":16,\"difficulty\":0.7133333333333334,\"difficultyWeight\":150},\"Mozart\":{\"count\":450,\"lastSeenTime\":1577019721923,\"difficulty\":0.7525773195876289,\"difficultyWeight\":97,\"publicGameCount\":9},\"popular\":{\"count\":413,\"lastSeenTime\":1577015274772,\"publicGameCount\":24,\"difficulty\":0.64804469273743,\"difficultyWeight\":179},\"repeat\":{\"count\":233,\"lastSeenTime\":1577013811336,\"publicGameCount\":4,\"difficulty\":0.6,\"difficultyWeight\":40},\"pub\":{\"count\":404,\"lastSeenTime\":1577035975818,\"difficulty\":0.550561797752809,\"difficultyWeight\":89,\"publicGameCount\":7},\"spatula\":{\"count\":243,\"lastSeenTime\":1577032161683,\"publicGameCount\":14,\"difficulty\":0.5193798449612403,\"difficultyWeight\":129},\"skyline\":{\"count\":406,\"lastSeenTime\":1577026064542,\"publicGameCount\":16,\"difficulty\":0.6981132075471698,\"difficultyWeight\":159},\"frosting\":{\"count\":248,\"lastSeenTime\":1577032591482,\"difficulty\":0.6595744680851063,\"difficultyWeight\":47,\"publicGameCount\":4},\"Saturn\":{\"count\":210,\"lastSeenTime\":1577018276584,\"difficulty\":0.5662650602409639,\"difficultyWeight\":166,\"publicGameCount\":8},\"dew\":{\"count\":437,\"lastSeenTime\":1577037446644,\"publicGameCount\":14,\"difficulty\":0.7265625000000001,\"difficultyWeight\":128},\"lane\":{\"count\":442,\"lastSeenTime\":1577020835639,\"publicGameCount\":16,\"difficulty\":0.622093023255814,\"difficultyWeight\":172},\"garden\":{\"count\":213,\"lastSeenTime\":1577009379377,\"publicGameCount\":11,\"difficulty\":0.6793893129770993,\"difficultyWeight\":131},\"boil\":{\"count\":229,\"lastSeenTime\":1577003346224,\"difficulty\":0.6428571428571429,\"difficultyWeight\":70,\"publicGameCount\":2},\"Katy Perry\":{\"count\":476,\"lastSeenTime\":1577034044177,\"publicGameCount\":22,\"difficulty\":0.7421383647798742,\"difficultyWeight\":159},\"blush\":{\"count\":194,\"lastSeenTime\":1576993062459,\"difficulty\":0.664179104477612,\"difficultyWeight\":134,\"publicGameCount\":3},\"London\":{\"count\":418,\"lastSeenTime\":1577034315724,\"publicGameCount\":20,\"difficulty\":0.6163522012578618,\"difficultyWeight\":159},\"religion\":{\"count\":221,\"lastSeenTime\":1576985623739,\"difficulty\":0.6605504587155964,\"difficultyWeight\":109,\"publicGameCount\":7},\"waiter\":{\"count\":237,\"lastSeenTime\":1577025115050,\"publicGameCount\":9,\"difficulty\":0.6140350877192982,\"difficultyWeight\":114},\"brainwash\":{\"count\":225,\"lastSeenTime\":1577010201020,\"publicGameCount\":10,\"difficulty\":0.7428571428571429,\"difficultyWeight\":70},\"Cuba\":{\"count\":452,\"lastSeenTime\":1577029900661,\"difficulty\":0.6533333333333333,\"difficultyWeight\":150,\"publicGameCount\":13},\"Earth\":{\"count\":220,\"lastSeenTime\":1577034376972,\"publicGameCount\":7,\"difficulty\":0.5,\"difficultyWeight\":196},\"antenna\":{\"count\":211,\"lastSeenTime\":1577024317066,\"difficulty\":0.611764705882353,\"difficultyWeight\":85,\"publicGameCount\":6},\"goatee\":{\"count\":214,\"lastSeenTime\":1577037472968,\"difficulty\":0.6857142857142857,\"difficultyWeight\":140,\"publicGameCount\":8},\"grumpy\":{\"count\":229,\"lastSeenTime\":1576993128309,\"publicGameCount\":15,\"difficulty\":0.6027397260273972,\"difficultyWeight\":146},\"gravel\":{\"count\":224,\"lastSeenTime\":1576931267636,\"difficulty\":0.6923076923076923,\"difficultyWeight\":39,\"publicGameCount\":3},\"kendama\":{\"count\":210,\"lastSeenTime\":1577033694684,\"difficulty\":0.8518518518518519,\"difficultyWeight\":27,\"publicGameCount\":2},\"peninsula\":{\"count\":450,\"lastSeenTime\":1577036463485,\"publicGameCount\":18,\"difficulty\":0.7941176470588235,\"difficultyWeight\":136},\"windshield\":{\"count\":226,\"lastSeenTime\":1577032037095,\"publicGameCount\":9,\"difficulty\":0.6,\"difficultyWeight\":70},\"Vault boy\":{\"count\":414,\"lastSeenTime\":1577031409078,\"publicGameCount\":19,\"difficulty\":0.831081081081081,\"difficultyWeight\":148},\"stork\":{\"count\":240,\"lastSeenTime\":1577013987614,\"difficulty\":0.8157894736842105,\"difficultyWeight\":76,\"publicGameCount\":4},\"fake teeth\":{\"count\":239,\"lastSeenTime\":1577009881239,\"publicGameCount\":12,\"difficulty\":0.7244897959183674,\"difficultyWeight\":98},\"croissant\":{\"count\":246,\"lastSeenTime\":1577037436536,\"publicGameCount\":16,\"difficulty\":0.6287878787878788,\"difficultyWeight\":132},\"Deadpool\":{\"count\":483,\"lastSeenTime\":1577037131444,\"publicGameCount\":44,\"difficulty\":0.6242424242424244,\"difficultyWeight\":330},\"Santa\":{\"count\":439,\"lastSeenTime\":1577032334398,\"publicGameCount\":48,\"difficulty\":0.4295774647887324,\"difficultyWeight\":426},\"cornfield\":{\"count\":214,\"lastSeenTime\":1576962903510,\"publicGameCount\":5,\"difficulty\":0.7368421052631579,\"difficultyWeight\":57},\"engineer\":{\"count\":240,\"lastSeenTime\":1577030702095,\"difficulty\":0.7432432432432432,\"difficultyWeight\":74,\"publicGameCount\":8},\"Vatican\":{\"count\":447,\"lastSeenTime\":1577030072028,\"difficulty\":0.8425925925925926,\"difficultyWeight\":108,\"publicGameCount\":10},\"reptile\":{\"count\":226,\"lastSeenTime\":1577033143595,\"publicGameCount\":12,\"difficulty\":0.6161616161616161,\"difficultyWeight\":99},\"camping\":{\"count\":236,\"lastSeenTime\":1577026107044,\"difficulty\":0.5592105263157896,\"difficultyWeight\":152,\"publicGameCount\":14},\"slope\":{\"count\":219,\"lastSeenTime\":1577012339365,\"publicGameCount\":9,\"difficulty\":0.6938775510204082,\"difficultyWeight\":98},\"Japan\":{\"count\":455,\"lastSeenTime\":1577036248643,\"publicGameCount\":34,\"difficulty\":0.5085910652920962,\"difficultyWeight\":291},\"sausage\":{\"count\":225,\"lastSeenTime\":1577030096351,\"difficulty\":0.6194690265486725,\"difficultyWeight\":113,\"publicGameCount\":7},\"fort\":{\"count\":424,\"lastSeenTime\":1577015311021,\"publicGameCount\":23,\"difficulty\":0.5555555555555556,\"difficultyWeight\":234},\"sunrise\":{\"count\":200,\"lastSeenTime\":1577029639639,\"difficulty\":0.5465838509316772,\"difficultyWeight\":322,\"publicGameCount\":15},\"nature\":{\"count\":433,\"lastSeenTime\":1577034728271,\"publicGameCount\":22,\"difficulty\":0.597989949748744,\"difficultyWeight\":199},\"shotgun\":{\"count\":214,\"lastSeenTime\":1577025827446,\"publicGameCount\":18,\"difficulty\":0.5837320574162679,\"difficultyWeight\":209},\"poison\":{\"count\":252,\"lastSeenTime\":1577033322479,\"difficulty\":0.5458167330677292,\"difficultyWeight\":251,\"publicGameCount\":24},\"Stone Age\":{\"count\":198,\"lastSeenTime\":1576983573415,\"publicGameCount\":11,\"difficulty\":0.7142857142857143,\"difficultyWeight\":84},\"sleep\":{\"count\":240,\"lastSeenTime\":1577036801585,\"difficulty\":0.421875,\"difficultyWeight\":192,\"publicGameCount\":8},\"headphones\":{\"count\":214,\"lastSeenTime\":1577014657759,\"publicGameCount\":23,\"difficulty\":0.41578947368421054,\"difficultyWeight\":190},\"jail\":{\"count\":467,\"lastSeenTime\":1577029725408,\"publicGameCount\":54,\"difficulty\":0.5081374321880653,\"difficultyWeight\":553},\"welder\":{\"count\":243,\"lastSeenTime\":1577025975223,\"difficulty\":0.5636363636363637,\"difficultyWeight\":55,\"publicGameCount\":3},\"Dracula\":{\"count\":488,\"lastSeenTime\":1577036441110,\"publicGameCount\":28,\"difficulty\":0.7103174603174605,\"difficultyWeight\":252},\"scuba\":{\"count\":217,\"lastSeenTime\":1577029784063,\"publicGameCount\":2,\"difficulty\":0.7105263157894737,\"difficultyWeight\":38},\"Lady Gaga\":{\"count\":466,\"lastSeenTime\":1577030433295,\"publicGameCount\":17,\"difficulty\":0.8103448275862069,\"difficultyWeight\":116},\"firefly\":{\"count\":212,\"lastSeenTime\":1577030616301,\"publicGameCount\":9,\"difficulty\":0.8064516129032258,\"difficultyWeight\":93},\"Audi\":{\"count\":410,\"lastSeenTime\":1577019350603,\"publicGameCount\":32,\"difficulty\":0.5954198473282444,\"difficultyWeight\":262},\"espresso\":{\"count\":235,\"lastSeenTime\":1577029664662,\"publicGameCount\":8,\"difficulty\":0.7,\"difficultyWeight\":70},\"Neptune\":{\"count\":208,\"lastSeenTime\":1577024220453,\"publicGameCount\":6,\"difficulty\":0.5616438356164384,\"difficultyWeight\":73},\"leather\":{\"count\":198,\"lastSeenTime\":1577012388447,\"difficulty\":0.6190476190476191,\"difficultyWeight\":63,\"publicGameCount\":4},\"zeppelin\":{\"count\":252,\"lastSeenTime\":1576998517639,\"publicGameCount\":2,\"difficulty\":0.8846153846153846,\"difficultyWeight\":26},\"slingshot\":{\"count\":221,\"lastSeenTime\":1577002117401,\"difficulty\":0.5874125874125874,\"difficultyWeight\":143,\"publicGameCount\":12},\"lily\":{\"count\":414,\"lastSeenTime\":1577018600637,\"publicGameCount\":18,\"difficulty\":0.6296296296296295,\"difficultyWeight\":189},\"Russia\":{\"count\":403,\"lastSeenTime\":1577007668912,\"publicGameCount\":36,\"difficulty\":0.5555555555555556,\"difficultyWeight\":270},\"pro\":{\"count\":217,\"lastSeenTime\":1577033163970,\"difficulty\":0.6384615384615384,\"difficultyWeight\":130,\"publicGameCount\":10},\"cicada\":{\"count\":225,\"lastSeenTime\":1577020190238,\"difficulty\":1,\"difficultyWeight\":4},\"Statue of Liberty\":{\"count\":407,\"lastSeenTime\":1577037436536,\"publicGameCount\":41,\"difficulty\":0.7395498392282959,\"difficultyWeight\":311},\"kettle\":{\"count\":221,\"lastSeenTime\":1577013531039,\"difficulty\":0.5862068965517241,\"difficultyWeight\":87,\"publicGameCount\":4},\"Europe\":{\"count\":441,\"lastSeenTime\":1576997288948,\"publicGameCount\":17,\"difficulty\":0.6690647482014388,\"difficultyWeight\":139},\"flight attendant\":{\"count\":226,\"lastSeenTime\":1576996198033,\"publicGameCount\":5,\"difficulty\":0.8518518518518519,\"difficultyWeight\":27},\"election\":{\"count\":243,\"lastSeenTime\":1577030802925,\"publicGameCount\":2,\"difficulty\":0.75,\"difficultyWeight\":20},\"origami\":{\"count\":221,\"lastSeenTime\":1577036195110,\"difficulty\":0.6323529411764706,\"difficultyWeight\":68,\"publicGameCount\":4},\"hill\":{\"count\":388,\"lastSeenTime\":1577032246891,\"publicGameCount\":25,\"difficulty\":0.5357142857142856,\"difficultyWeight\":336},\"continent\":{\"count\":444,\"lastSeenTime\":1577032459097,\"publicGameCount\":19,\"difficulty\":0.7062937062937062,\"difficultyWeight\":143},\"soldier\":{\"count\":202,\"lastSeenTime\":1577015835147,\"publicGameCount\":13,\"difficulty\":0.631578947368421,\"difficultyWeight\":114},\"Home Alone\":{\"count\":210,\"lastSeenTime\":1577035297722,\"publicGameCount\":9,\"difficulty\":0.7285714285714285,\"difficultyWeight\":70},\"antelope\":{\"count\":225,\"lastSeenTime\":1577029650059,\"difficulty\":0.8,\"difficultyWeight\":55,\"publicGameCount\":4},\"Cat Woman\":{\"count\":464,\"lastSeenTime\":1577031259619,\"publicGameCount\":32,\"difficulty\":0.70995670995671,\"difficultyWeight\":231},\"Captain America\":{\"count\":456,\"lastSeenTime\":1577016789684,\"difficulty\":0.736318407960199,\"difficultyWeight\":402,\"publicGameCount\":51},\"Intel\":{\"count\":424,\"lastSeenTime\":1577020636784,\"publicGameCount\":9,\"difficulty\":0.7011494252873564,\"difficultyWeight\":87},\"Eiffel tower\":{\"count\":443,\"lastSeenTime\":1577037426426,\"publicGameCount\":57,\"difficulty\":0.6568627450980392,\"difficultyWeight\":408},\"betray\":{\"count\":257,\"lastSeenTime\":1577024830624,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"duck\":{\"count\":233,\"lastSeenTime\":1577018661849,\"publicGameCount\":4,\"difficulty\":0.4019607843137255,\"difficultyWeight\":204},\"piggy bank\":{\"count\":222,\"lastSeenTime\":1576996012229,\"difficulty\":0.5433526011560693,\"difficultyWeight\":173,\"publicGameCount\":24},\"skunk\":{\"count\":222,\"lastSeenTime\":1577035656351,\"publicGameCount\":4,\"difficulty\":0.6515151515151515,\"difficultyWeight\":66},\"Pluto\":{\"count\":414,\"lastSeenTime\":1577011956828,\"publicGameCount\":28,\"difficulty\":0.5,\"difficultyWeight\":240},\"Tarzan\":{\"count\":452,\"lastSeenTime\":1577032787613,\"publicGameCount\":27,\"difficulty\":0.5119617224880384,\"difficultyWeight\":209},\"God\":{\"count\":233,\"lastSeenTime\":1577000522384,\"difficulty\":0.558139534883721,\"difficultyWeight\":215,\"publicGameCount\":9},\"acid\":{\"count\":233,\"lastSeenTime\":1577025190112,\"publicGameCount\":9,\"difficulty\":0.6190476190476191,\"difficultyWeight\":84},\"bed bug\":{\"count\":201,\"lastSeenTime\":1577010496834,\"publicGameCount\":15,\"difficulty\":0.7024793388429752,\"difficultyWeight\":121},\"Oreo\":{\"count\":221,\"lastSeenTime\":1576982169774,\"publicGameCount\":18,\"difficulty\":0.5063829787234041,\"difficultyWeight\":235},\"freckles\":{\"count\":440,\"lastSeenTime\":1577017628796,\"publicGameCount\":34,\"difficulty\":0.6876876876876877,\"difficultyWeight\":333},\"chemical\":{\"count\":206,\"lastSeenTime\":1577009379377,\"publicGameCount\":19,\"difficulty\":0.6948051948051948,\"difficultyWeight\":154},\"tissue\":{\"count\":215,\"lastSeenTime\":1577033719031,\"publicGameCount\":10,\"difficulty\":0.5873015873015873,\"difficultyWeight\":126},\"mantis\":{\"count\":230,\"lastSeenTime\":1577019187643,\"publicGameCount\":5,\"difficulty\":0.7536231884057971,\"difficultyWeight\":69},\"clarinet\":{\"count\":459,\"lastSeenTime\":1577025827446,\"publicGameCount\":20,\"difficulty\":0.7298850574712644,\"difficultyWeight\":174},\"tunnel\":{\"count\":460,\"lastSeenTime\":1577030520806,\"difficulty\":0.617363344051447,\"difficultyWeight\":311,\"publicGameCount\":36},\"knot\":{\"count\":231,\"lastSeenTime\":1577010323756,\"publicGameCount\":10,\"difficulty\":0.5918367346938775,\"difficultyWeight\":98},\"Nintendo Switch\":{\"count\":466,\"lastSeenTime\":1577018696562,\"publicGameCount\":59,\"difficulty\":0.6941176470588233,\"difficultyWeight\":425},\"shallow\":{\"count\":429,\"lastSeenTime\":1577036225894,\"difficulty\":0.7966101694915254,\"difficultyWeight\":59,\"publicGameCount\":7},\"cobra\":{\"count\":210,\"lastSeenTime\":1577037103049,\"publicGameCount\":15,\"difficulty\":0.5228758169934641,\"difficultyWeight\":153},\"Yoshi\":{\"count\":454,\"lastSeenTime\":1577031807616,\"publicGameCount\":36,\"difficulty\":0.6470588235294118,\"difficultyWeight\":272},\"drip\":{\"count\":215,\"lastSeenTime\":1577029872241,\"difficulty\":0.5471698113207547,\"difficultyWeight\":106,\"publicGameCount\":4},\"BMX\":{\"count\":229,\"lastSeenTime\":1577034081969,\"publicGameCount\":10,\"difficulty\":0.5675675675675675,\"difficultyWeight\":74},\"North Korea\":{\"count\":435,\"lastSeenTime\":1577035387934,\"publicGameCount\":31,\"difficulty\":0.7624521072796935,\"difficultyWeight\":261},\"crowbar\":{\"count\":249,\"lastSeenTime\":1577033092734,\"publicGameCount\":10,\"difficulty\":0.7391304347826086,\"difficultyWeight\":92},\"Mummy\":{\"count\":233,\"lastSeenTime\":1577025742812,\"publicGameCount\":10,\"difficulty\":0.6275862068965518,\"difficultyWeight\":145},\"space suit\":{\"count\":228,\"lastSeenTime\":1577009327318,\"publicGameCount\":11,\"difficulty\":0.611764705882353,\"difficultyWeight\":85},\"Jack-o-lantern\":{\"count\":210,\"lastSeenTime\":1576945758832,\"publicGameCount\":23,\"difficulty\":0.6624203821656052,\"difficultyWeight\":157},\"meerkat\":{\"count\":234,\"lastSeenTime\":1577024712891,\"publicGameCount\":2,\"difficulty\":0.7586206896551724,\"difficultyWeight\":29},\"Sonic\":{\"count\":415,\"lastSeenTime\":1577037627992,\"difficulty\":0.5281501340482575,\"difficultyWeight\":373,\"publicGameCount\":36},\"Fred Flintstone\":{\"count\":437,\"lastSeenTime\":1577031871352,\"publicGameCount\":14,\"difficulty\":0.8623853211009175,\"difficultyWeight\":109},\"embers\":{\"count\":215,\"lastSeenTime\":1577009668770,\"publicGameCount\":3,\"difficulty\":0.8064516129032258,\"difficultyWeight\":31},\"coral\":{\"count\":452,\"lastSeenTime\":1577017071398,\"publicGameCount\":21,\"difficulty\":0.6435643564356436,\"difficultyWeight\":202},\"radar\":{\"count\":224,\"lastSeenTime\":1577024393446,\"publicGameCount\":5,\"difficulty\":0.6097560975609756,\"difficultyWeight\":82},\"DNA\":{\"count\":220,\"lastSeenTime\":1577036513099,\"difficulty\":0.551912568306011,\"difficultyWeight\":183,\"publicGameCount\":5},\"violence\":{\"count\":214,\"lastSeenTime\":1577020760004,\"difficulty\":0.7714285714285715,\"difficultyWeight\":70,\"publicGameCount\":8},\"ham\":{\"count\":237,\"lastSeenTime\":1577013426420,\"difficulty\":0.6764705882352942,\"difficultyWeight\":136,\"publicGameCount\":6},\"pistachio\":{\"count\":216,\"lastSeenTime\":1577031792602,\"publicGameCount\":12,\"difficulty\":0.7209302325581396,\"difficultyWeight\":86},\"comfortable\":{\"count\":413,\"lastSeenTime\":1577035900512,\"publicGameCount\":12,\"difficulty\":0.8241758241758241,\"difficultyWeight\":91},\"Croatia\":{\"count\":432,\"lastSeenTime\":1577032459097,\"publicGameCount\":6,\"difficulty\":0.7391304347826086,\"difficultyWeight\":69},\"Hula Hoop\":{\"count\":198,\"lastSeenTime\":1576999174479,\"publicGameCount\":10,\"difficulty\":0.6097560975609756,\"difficultyWeight\":82},\"translate\":{\"count\":201,\"lastSeenTime\":1577031672748,\"publicGameCount\":8,\"difficulty\":0.6588235294117647,\"difficultyWeight\":85},\"cymbal\":{\"count\":412,\"lastSeenTime\":1577011010114,\"publicGameCount\":8,\"difficulty\":0.734375,\"difficultyWeight\":64},\"neighbor\":{\"count\":209,\"lastSeenTime\":1577010360204,\"publicGameCount\":14,\"difficulty\":0.6616541353383458,\"difficultyWeight\":133},\"beet\":{\"count\":261,\"lastSeenTime\":1577008650446,\"publicGameCount\":4,\"difficulty\":0.6136363636363636,\"difficultyWeight\":44},\"margarine\":{\"count\":231,\"lastSeenTime\":1577037192421,\"publicGameCount\":4,\"difficulty\":0.8260869565217391,\"difficultyWeight\":46},\"Michael Jackson\":{\"count\":441,\"lastSeenTime\":1577030347875,\"publicGameCount\":39,\"difficulty\":0.7794676806083649,\"difficultyWeight\":263},\"bricklayer\":{\"count\":231,\"lastSeenTime\":1577035263186,\"publicGameCount\":4,\"difficulty\":0.8148148148148148,\"difficultyWeight\":27},\"Black Friday\":{\"count\":236,\"lastSeenTime\":1577035358654,\"publicGameCount\":13,\"difficulty\":0.7894736842105263,\"difficultyWeight\":95},\"sugar\":{\"count\":206,\"lastSeenTime\":1577019684566,\"publicGameCount\":8,\"difficulty\":0.6333333333333333,\"difficultyWeight\":120},\"witness\":{\"count\":229,\"lastSeenTime\":1577034391339,\"publicGameCount\":8,\"difficulty\":0.6865671641791045,\"difficultyWeight\":67},\"greed\":{\"count\":222,\"lastSeenTime\":1577020821191,\"difficulty\":0.7027027027027027,\"difficultyWeight\":74,\"publicGameCount\":4},\"shake\":{\"count\":228,\"lastSeenTime\":1577035150930,\"difficulty\":0.6710526315789473,\"difficultyWeight\":76,\"publicGameCount\":6},\"neighborhood\":{\"count\":470,\"lastSeenTime\":1577035865974,\"publicGameCount\":26,\"difficulty\":0.8157894736842105,\"difficultyWeight\":190},\"Doritos\":{\"count\":219,\"lastSeenTime\":1577019838761,\"difficulty\":0.4700460829493088,\"difficultyWeight\":217,\"publicGameCount\":14},\"doctor\":{\"count\":239,\"lastSeenTime\":1577026093155,\"difficulty\":0.5602094240837696,\"difficultyWeight\":191,\"publicGameCount\":9},\"Minotaur\":{\"count\":245,\"lastSeenTime\":1577015070110,\"publicGameCount\":11,\"difficulty\":0.75,\"difficultyWeight\":84},\"Reddit\":{\"count\":435,\"lastSeenTime\":1577020190238,\"publicGameCount\":23,\"difficulty\":0.6329787234042554,\"difficultyWeight\":188},\"poppy\":{\"count\":459,\"lastSeenTime\":1577036515120,\"difficulty\":0.6887417218543046,\"difficultyWeight\":151,\"publicGameCount\":14},\"nail polish\":{\"count\":238,\"lastSeenTime\":1577008601707,\"publicGameCount\":21,\"difficulty\":0.7284768211920529,\"difficultyWeight\":151},\"Pikachu\":{\"count\":462,\"lastSeenTime\":1577015222488,\"publicGameCount\":59,\"difficulty\":0.5194508009153317,\"difficultyWeight\":437},\"Excalibur\":{\"count\":222,\"lastSeenTime\":1576989813585,\"difficulty\":0.703125,\"difficultyWeight\":64,\"publicGameCount\":8},\"cow\":{\"count\":208,\"lastSeenTime\":1576997396108,\"difficulty\":0.4416243654822335,\"difficultyWeight\":197,\"publicGameCount\":5},\"throne\":{\"count\":235,\"lastSeenTime\":1577031633688,\"difficulty\":0.6219512195121951,\"difficultyWeight\":82,\"publicGameCount\":5},\"braces\":{\"count\":233,\"lastSeenTime\":1576998697393,\"publicGameCount\":8,\"difficulty\":0.5250000000000001,\"difficultyWeight\":200},\"retail\":{\"count\":227,\"lastSeenTime\":1577031498760,\"difficulty\":0.5454545454545454,\"difficultyWeight\":44,\"publicGameCount\":2},\"badger\":{\"count\":232,\"lastSeenTime\":1577037521580,\"publicGameCount\":3,\"difficulty\":0.813953488372093,\"difficultyWeight\":43},\"fizz\":{\"count\":227,\"lastSeenTime\":1577009445318,\"difficulty\":0.5833333333333334,\"difficultyWeight\":96,\"publicGameCount\":10},\"Elmo\":{\"count\":431,\"lastSeenTime\":1577004674031,\"publicGameCount\":50,\"difficulty\":0.5670588235294118,\"difficultyWeight\":425},\"yawn\":{\"count\":219,\"lastSeenTime\":1576966776767,\"publicGameCount\":13,\"difficulty\":0.5688073394495414,\"difficultyWeight\":109},\"Mars\":{\"count\":229,\"lastSeenTime\":1577033906184,\"publicGameCount\":13,\"difficulty\":0.5680473372781066,\"difficultyWeight\":169},\"quilt\":{\"count\":226,\"lastSeenTime\":1577001434887,\"publicGameCount\":5,\"difficulty\":0.75,\"difficultyWeight\":64},\"firefighter\":{\"count\":225,\"lastSeenTime\":1577020200660,\"publicGameCount\":27,\"difficulty\":0.54337899543379,\"difficultyWeight\":219},\"oil\":{\"count\":193,\"lastSeenTime\":1576988731899,\"publicGameCount\":10,\"difficulty\":0.6153846153846154,\"difficultyWeight\":117},\"bus\":{\"count\":207,\"lastSeenTime\":1577011324920,\"difficulty\":0.4719626168224299,\"difficultyWeight\":214},\"Anubis\":{\"count\":206,\"lastSeenTime\":1576965573413,\"difficulty\":0.7142857142857143,\"difficultyWeight\":70,\"publicGameCount\":7},\"floodlight\":{\"count\":215,\"lastSeenTime\":1577034401652,\"publicGameCount\":6,\"difficulty\":0.7567567567567568,\"difficultyWeight\":37},\"mayor\":{\"count\":221,\"lastSeenTime\":1577025416426,\"publicGameCount\":6,\"difficulty\":0.5818181818181818,\"difficultyWeight\":55},\"ravioli\":{\"count\":204,\"lastSeenTime\":1577018048472,\"publicGameCount\":9,\"difficulty\":0.675,\"difficultyWeight\":80},\"cap\":{\"count\":221,\"lastSeenTime\":1577010712375,\"difficulty\":0.5119047619047619,\"difficultyWeight\":84,\"publicGameCount\":1},\"match\":{\"count\":235,\"lastSeenTime\":1577033733248,\"publicGameCount\":9,\"difficulty\":0.5289855072463768,\"difficultyWeight\":138},\"Asterix\":{\"count\":433,\"lastSeenTime\":1577035876160,\"publicGameCount\":9,\"difficulty\":0.8541666666666666,\"difficultyWeight\":96},\"arch\":{\"count\":221,\"lastSeenTime\":1577037638341,\"difficulty\":0.7075471698113207,\"difficultyWeight\":106,\"publicGameCount\":8},\"Goofy\":{\"count\":399,\"lastSeenTime\":1577037667912,\"publicGameCount\":12,\"difficulty\":0.5503355704697986,\"difficultyWeight\":149},\"tampon\":{\"count\":229,\"lastSeenTime\":1577033017430,\"difficulty\":0.6382978723404256,\"difficultyWeight\":141,\"publicGameCount\":8},\"building\":{\"count\":413,\"lastSeenTime\":1577029872241,\"publicGameCount\":43,\"difficulty\":0.641833810888252,\"difficultyWeight\":349},\"pin\":{\"count\":234,\"lastSeenTime\":1577033814863,\"difficulty\":0.5669291338582677,\"difficultyWeight\":127,\"publicGameCount\":6},\"Tower of Pisa\":{\"count\":441,\"lastSeenTime\":1576982169774,\"publicGameCount\":26,\"difficulty\":0.7969543147208121,\"difficultyWeight\":197},\"Jenga\":{\"count\":221,\"lastSeenTime\":1577037365574,\"publicGameCount\":11,\"difficulty\":0.706422018348624,\"difficultyWeight\":109},\"vacation\":{\"count\":204,\"lastSeenTime\":1577011285181,\"publicGameCount\":5,\"difficulty\":0.6296296296296297,\"difficultyWeight\":54},\"sauna\":{\"count\":225,\"lastSeenTime\":1577010111283,\"publicGameCount\":5,\"difficulty\":0.6511627906976745,\"difficultyWeight\":43},\"Tetris\":{\"count\":240,\"lastSeenTime\":1577033216553,\"difficulty\":0.6616541353383458,\"difficultyWeight\":133,\"publicGameCount\":11},\"nest\":{\"count\":195,\"lastSeenTime\":1577002693201,\"publicGameCount\":8,\"difficulty\":0.5250000000000001,\"difficultyWeight\":120},\"bunk bed\":{\"count\":257,\"lastSeenTime\":1577030010895,\"publicGameCount\":23,\"difficulty\":0.6424242424242426,\"difficultyWeight\":165},\"ABBA\":{\"count\":460,\"lastSeenTime\":1577036953671,\"publicGameCount\":13,\"difficulty\":0.5217391304347826,\"difficultyWeight\":92},\"scary\":{\"count\":460,\"lastSeenTime\":1577020163387,\"publicGameCount\":28,\"difficulty\":0.6395348837209305,\"difficultyWeight\":258},\"arm\":{\"count\":464,\"lastSeenTime\":1577032801953,\"difficulty\":0.4507462686567164,\"difficultyWeight\":335,\"publicGameCount\":36},\"iPhone\":{\"count\":219,\"lastSeenTime\":1577017990731,\"difficulty\":0.5201793721973094,\"difficultyWeight\":223,\"publicGameCount\":20},\"Susan Wojcicki\":{\"count\":430,\"lastSeenTime\":1577021368947,\"publicGameCount\":15,\"difficulty\":0.8348623853211009,\"difficultyWeight\":109},\"nun\":{\"count\":236,\"lastSeenTime\":1576990865256,\"publicGameCount\":10,\"difficulty\":0.5686274509803921,\"difficultyWeight\":102},\"parade\":{\"count\":240,\"lastSeenTime\":1577001935445,\"publicGameCount\":7,\"difficulty\":0.6875,\"difficultyWeight\":64},\"crawl space\":{\"count\":226,\"lastSeenTime\":1577013344367,\"publicGameCount\":11,\"difficulty\":0.6790123456790124,\"difficultyWeight\":81},\"Pac-Man\":{\"count\":438,\"lastSeenTime\":1577037141569,\"publicGameCount\":89,\"difficulty\":0.5050651230101304,\"difficultyWeight\":691},\"soil\":{\"count\":465,\"lastSeenTime\":1577001522879,\"publicGameCount\":19,\"difficulty\":0.6411764705882353,\"difficultyWeight\":170},\"lens\":{\"count\":234,\"lastSeenTime\":1577031765159,\"publicGameCount\":3,\"difficulty\":0.5576923076923077,\"difficultyWeight\":52},\"gas\":{\"count\":220,\"lastSeenTime\":1577036096380,\"publicGameCount\":13,\"difficulty\":0.6267605633802817,\"difficultyWeight\":142},\"mall\":{\"count\":451,\"lastSeenTime\":1577019105920,\"publicGameCount\":17,\"difficulty\":0.49324324324324326,\"difficultyWeight\":148},\"Green Lantern\":{\"count\":445,\"lastSeenTime\":1577016282546,\"publicGameCount\":32,\"difficulty\":0.7022222222222222,\"difficultyWeight\":225},\"celebrity\":{\"count\":234,\"lastSeenTime\":1577024296338,\"publicGameCount\":13,\"difficulty\":0.6886792452830188,\"difficultyWeight\":106},\"promotion\":{\"count\":229,\"lastSeenTime\":1577037535729,\"difficulty\":0.6170212765957447,\"difficultyWeight\":47,\"publicGameCount\":3},\"hammock\":{\"count\":216,\"lastSeenTime\":1577014089395,\"difficulty\":0.6477272727272727,\"difficultyWeight\":88,\"publicGameCount\":5},\"stereo\":{\"count\":229,\"lastSeenTime\":1577016935320,\"publicGameCount\":11,\"difficulty\":0.6727272727272727,\"difficultyWeight\":110},\"pillar\":{\"count\":220,\"lastSeenTime\":1577037316766,\"difficulty\":0.7555555555555555,\"difficultyWeight\":45,\"publicGameCount\":2},\"Capricorn\":{\"count\":244,\"lastSeenTime\":1577036258761,\"publicGameCount\":2,\"difficulty\":0.5217391304347826,\"difficultyWeight\":23},\"facade\":{\"count\":247,\"lastSeenTime\":1577030172832,\"difficulty\":0.9666666666666667,\"difficultyWeight\":30,\"publicGameCount\":1},\"Titanic\":{\"count\":224,\"lastSeenTime\":1577036811707,\"publicGameCount\":14,\"difficulty\":0.5329949238578681,\"difficultyWeight\":197},\"dinner\":{\"count\":229,\"lastSeenTime\":1576994893392,\"difficulty\":0.5733333333333334,\"difficultyWeight\":75,\"publicGameCount\":4},\"Luigi\":{\"count\":421,\"lastSeenTime\":1577016522371,\"publicGameCount\":31,\"difficulty\":0.5348837209302324,\"difficultyWeight\":258},\"Winnie the Pooh\":{\"count\":449,\"lastSeenTime\":1577036498776,\"publicGameCount\":41,\"difficulty\":0.6783216783216782,\"difficultyWeight\":286},\"Gandalf\":{\"count\":456,\"lastSeenTime\":1577037678090,\"publicGameCount\":22,\"difficulty\":0.7415730337078652,\"difficultyWeight\":178},\"Charlie Chaplin\":{\"count\":435,\"lastSeenTime\":1577025889721,\"publicGameCount\":14,\"difficulty\":0.8,\"difficultyWeight\":100},\"villain\":{\"count\":212,\"lastSeenTime\":1576964936100,\"publicGameCount\":11,\"difficulty\":0.6702127659574468,\"difficultyWeight\":94},\"Johnny Bravo\":{\"count\":424,\"lastSeenTime\":1577018909748,\"publicGameCount\":16,\"difficulty\":0.7952755905511811,\"difficultyWeight\":127},\"halo\":{\"count\":226,\"lastSeenTime\":1577018671994,\"publicGameCount\":10,\"difficulty\":0.6694214876033058,\"difficultyWeight\":121},\"pigeon\":{\"count\":220,\"lastSeenTime\":1577011472230,\"publicGameCount\":11,\"difficulty\":0.6911764705882353,\"difficultyWeight\":136},\"butt cheeks\":{\"count\":443,\"lastSeenTime\":1577025302098,\"publicGameCount\":55,\"difficulty\":0.75,\"difficultyWeight\":424},\"hip hop\":{\"count\":404,\"lastSeenTime\":1577034507564,\"publicGameCount\":17,\"difficulty\":0.8243243243243243,\"difficultyWeight\":148},\"macho\":{\"count\":455,\"lastSeenTime\":1577025104883,\"publicGameCount\":10,\"difficulty\":0.8588235294117647,\"difficultyWeight\":85},\"hovercraft\":{\"count\":216,\"lastSeenTime\":1577036513099,\"publicGameCount\":7,\"difficulty\":0.6615384615384615,\"difficultyWeight\":65},\"needle\":{\"count\":204,\"lastSeenTime\":1576991450871,\"publicGameCount\":7,\"difficulty\":0.644927536231884,\"difficultyWeight\":138},\"hair roller\":{\"count\":211,\"lastSeenTime\":1577033178896,\"publicGameCount\":2,\"difficulty\":0.8333333333333334,\"difficultyWeight\":12},\"Notch\":{\"count\":463,\"lastSeenTime\":1577037316766,\"difficulty\":0.7394957983193278,\"difficultyWeight\":119,\"publicGameCount\":15},\"upgrade\":{\"count\":202,\"lastSeenTime\":1577031469464,\"difficulty\":0.6203703703703703,\"difficultyWeight\":108,\"publicGameCount\":14},\"bean bag\":{\"count\":250,\"lastSeenTime\":1577016194818,\"publicGameCount\":8,\"difficulty\":0.8194444444444444,\"difficultyWeight\":72},\"bellow\":{\"count\":207,\"lastSeenTime\":1576954501686,\"publicGameCount\":4,\"difficulty\":0.723404255319149,\"difficultyWeight\":47},\"plunger\":{\"count\":216,\"lastSeenTime\":1577001542782,\"publicGameCount\":12,\"difficulty\":0.6684210526315791,\"difficultyWeight\":190},\"Mario\":{\"count\":422,\"lastSeenTime\":1577030262784,\"publicGameCount\":28,\"difficulty\":0.4525993883792049,\"difficultyWeight\":327},\"pigsty\":{\"count\":423,\"lastSeenTime\":1577033936117,\"publicGameCount\":10,\"difficulty\":0.7956989247311828,\"difficultyWeight\":93},\"KFC\":{\"count\":372,\"lastSeenTime\":1577019302199,\"difficulty\":0.5886699507389161,\"difficultyWeight\":406,\"publicGameCount\":24},\"wheel\":{\"count\":224,\"lastSeenTime\":1577014128670,\"publicGameCount\":9,\"difficulty\":0.5653710247349824,\"difficultyWeight\":283},\"Brazil\":{\"count\":465,\"lastSeenTime\":1577035455493,\"difficulty\":0.7044334975369458,\"difficultyWeight\":203,\"publicGameCount\":21},\"swag\":{\"count\":229,\"lastSeenTime\":1577017118352,\"publicGameCount\":5,\"difficulty\":0.654320987654321,\"difficultyWeight\":81},\"Nasa\":{\"count\":460,\"lastSeenTime\":1577020311647,\"publicGameCount\":36,\"difficulty\":0.5431034482758622,\"difficultyWeight\":348},\"autograph\":{\"count\":240,\"lastSeenTime\":1577036329616,\"publicGameCount\":12,\"difficulty\":0.7380952380952381,\"difficultyWeight\":84},\"hilarious\":{\"count\":458,\"lastSeenTime\":1577003366572,\"publicGameCount\":19,\"difficulty\":0.7672955974842768,\"difficultyWeight\":159},\"acne\":{\"count\":402,\"lastSeenTime\":1577036401976,\"difficulty\":0.6024096385542169,\"difficultyWeight\":249,\"publicGameCount\":24},\"backpack\":{\"count\":199,\"lastSeenTime\":1577004757603,\"publicGameCount\":14,\"difficulty\":0.5888324873096445,\"difficultyWeight\":197},\"manhole\":{\"count\":429,\"lastSeenTime\":1577018038260,\"publicGameCount\":23,\"difficulty\":0.7076023391812867,\"difficultyWeight\":171},\"applause\":{\"count\":239,\"lastSeenTime\":1577035714898,\"difficulty\":0.7307692307692307,\"difficultyWeight\":52,\"publicGameCount\":5},\"Bruce Lee\":{\"count\":445,\"lastSeenTime\":1577034703857,\"publicGameCount\":11,\"difficulty\":0.7888888888888889,\"difficultyWeight\":90},\"Segway\":{\"count\":201,\"lastSeenTime\":1577025478336,\"publicGameCount\":5,\"difficulty\":0.6494845360824743,\"difficultyWeight\":97},\"advertisement\":{\"count\":226,\"lastSeenTime\":1576976891248,\"publicGameCount\":14,\"difficulty\":0.6869565217391305,\"difficultyWeight\":115},\"Poseidon\":{\"count\":386,\"lastSeenTime\":1577037151662,\"publicGameCount\":22,\"difficulty\":0.6558441558441559,\"difficultyWeight\":154},\"reception\":{\"count\":240,\"lastSeenTime\":1576997044902,\"publicGameCount\":7,\"difficulty\":0.8208955223880597,\"difficultyWeight\":67},\"vinegar\":{\"count\":230,\"lastSeenTime\":1577010111283,\"publicGameCount\":6,\"difficulty\":0.7727272727272727,\"difficultyWeight\":66},\"geography\":{\"count\":412,\"lastSeenTime\":1577007820280,\"publicGameCount\":17,\"difficulty\":0.6696428571428571,\"difficultyWeight\":112},\"peasant\":{\"count\":241,\"lastSeenTime\":1577032383846,\"publicGameCount\":5,\"difficulty\":0.7627118644067796,\"difficultyWeight\":59},\"Skittles\":{\"count\":223,\"lastSeenTime\":1577033102907,\"publicGameCount\":24,\"difficulty\":0.5600000000000002,\"difficultyWeight\":225},\"teacher\":{\"count\":248,\"lastSeenTime\":1577025028815,\"publicGameCount\":11,\"difficulty\":0.582089552238806,\"difficultyWeight\":134},\"bed sheet\":{\"count\":208,\"lastSeenTime\":1577025807131,\"publicGameCount\":15,\"difficulty\":0.7407407407407407,\"difficultyWeight\":108},\"abyss\":{\"count\":237,\"lastSeenTime\":1577002423477,\"difficulty\":1,\"difficultyWeight\":13},\"corner\":{\"count\":217,\"lastSeenTime\":1577035216186,\"difficulty\":0.6068965517241379,\"difficultyWeight\":145,\"publicGameCount\":4},\"cat\":{\"count\":238,\"lastSeenTime\":1577029947635,\"difficulty\":0.5299539170506911,\"difficultyWeight\":217,\"publicGameCount\":2},\"Miniclip\":{\"count\":390,\"lastSeenTime\":1577007467354,\"publicGameCount\":12,\"difficulty\":0.8301886792452831,\"difficultyWeight\":106},\"saxophone\":{\"count\":403,\"lastSeenTime\":1577020454463,\"publicGameCount\":20,\"difficulty\":0.6081871345029239,\"difficultyWeight\":171},\"safe\":{\"count\":246,\"lastSeenTime\":1577036416241,\"difficulty\":0.6114649681528661,\"difficultyWeight\":157,\"publicGameCount\":9},\"model\":{\"count\":221,\"lastSeenTime\":1577029810408,\"publicGameCount\":5,\"difficulty\":0.5172413793103449,\"difficultyWeight\":29},\"trapdoor\":{\"count\":209,\"lastSeenTime\":1577018338118,\"publicGameCount\":5,\"difficulty\":0.6461538461538462,\"difficultyWeight\":65},\"copper\":{\"count\":214,\"lastSeenTime\":1577035569138,\"difficulty\":0.8571428571428571,\"difficultyWeight\":70,\"publicGameCount\":5},\"anvil\":{\"count\":221,\"lastSeenTime\":1577014904417,\"difficulty\":0.6821192052980133,\"difficultyWeight\":151,\"publicGameCount\":7},\"Leonardo da Vinci\":{\"count\":454,\"lastSeenTime\":1577011492557,\"publicGameCount\":15,\"difficulty\":0.8037383177570093,\"difficultyWeight\":107},\"lounge\":{\"count\":244,\"lastSeenTime\":1576976513111,\"publicGameCount\":5,\"difficulty\":0.6507936507936508,\"difficultyWeight\":63},\"plumber\":{\"count\":245,\"lastSeenTime\":1577036473654,\"publicGameCount\":17,\"difficulty\":0.6170212765957447,\"difficultyWeight\":141},\"eel\":{\"count\":224,\"lastSeenTime\":1577020032335,\"publicGameCount\":7,\"difficulty\":0.6233766233766235,\"difficultyWeight\":77},\"blanket\":{\"count\":238,\"lastSeenTime\":1576995190104,\"publicGameCount\":12,\"difficulty\":0.5686274509803922,\"difficultyWeight\":102},\"house\":{\"count\":437,\"lastSeenTime\":1577025316429,\"difficulty\":0.38779527559055116,\"difficultyWeight\":508,\"publicGameCount\":36},\"otter\":{\"count\":214,\"lastSeenTime\":1577032691219,\"publicGameCount\":11,\"difficulty\":0.7722772277227723,\"difficultyWeight\":101},\"Mr. Meeseeks\":{\"count\":217,\"lastSeenTime\":1577015560740,\"publicGameCount\":1,\"difficulty\":0.9193548387096774,\"difficultyWeight\":62},\"kazoo\":{\"count\":429,\"lastSeenTime\":1577018938852,\"publicGameCount\":18,\"difficulty\":0.7073170731707316,\"difficultyWeight\":205},\"think\":{\"count\":219,\"lastSeenTime\":1577007452649,\"difficulty\":0.59,\"difficultyWeight\":200,\"publicGameCount\":6},\"youtuber\":{\"count\":207,\"lastSeenTime\":1577029699092,\"publicGameCount\":10,\"difficulty\":0.6287878787878788,\"difficultyWeight\":132},\"frostbite\":{\"count\":239,\"lastSeenTime\":1577002452174,\"difficulty\":0.6721311475409836,\"difficultyWeight\":61,\"publicGameCount\":8},\"octagon\":{\"count\":214,\"lastSeenTime\":1577009560276,\"difficulty\":0.6431924882629108,\"difficultyWeight\":213,\"publicGameCount\":13},\"Bible\":{\"count\":200,\"lastSeenTime\":1576983820374,\"publicGameCount\":9,\"difficulty\":0.47802197802197804,\"difficultyWeight\":182},\"figurine\":{\"count\":207,\"lastSeenTime\":1577025767393,\"difficulty\":0.9285714285714286,\"difficultyWeight\":14,\"publicGameCount\":1},\"pear\":{\"count\":221,\"lastSeenTime\":1577030691919,\"difficulty\":0.49624060150375937,\"difficultyWeight\":266,\"publicGameCount\":5},\"world\":{\"count\":219,\"lastSeenTime\":1576996350217,\"difficulty\":0.576923076923077,\"difficultyWeight\":182,\"publicGameCount\":14},\"peanut\":{\"count\":224,\"lastSeenTime\":1576988381834,\"publicGameCount\":7,\"difficulty\":0.6267942583732058,\"difficultyWeight\":209},\"daughter\":{\"count\":219,\"lastSeenTime\":1577020215138,\"publicGameCount\":14,\"difficulty\":0.739884393063584,\"difficultyWeight\":173},\"Pringles\":{\"count\":213,\"lastSeenTime\":1577016532618,\"difficulty\":0.5531914893617021,\"difficultyWeight\":141,\"publicGameCount\":12},\"gravity\":{\"count\":224,\"lastSeenTime\":1577032997046,\"publicGameCount\":8,\"difficulty\":0.7105263157894737,\"difficultyWeight\":76},\"willow\":{\"count\":435,\"lastSeenTime\":1577019664821,\"publicGameCount\":10,\"difficulty\":0.6185567010309279,\"difficultyWeight\":97},\"sew\":{\"count\":236,\"lastSeenTime\":1577002452173,\"publicGameCount\":6,\"difficulty\":0.6923076923076923,\"difficultyWeight\":52},\"Northern Lights\":{\"count\":436,\"lastSeenTime\":1577037092671,\"publicGameCount\":19,\"difficulty\":0.7985611510791367,\"difficultyWeight\":139},\"health\":{\"count\":226,\"lastSeenTime\":1577034268153,\"difficulty\":0.6236559139784946,\"difficultyWeight\":93,\"publicGameCount\":8},\"backflip\":{\"count\":226,\"lastSeenTime\":1577007604955,\"publicGameCount\":9,\"difficulty\":0.5441176470588235,\"difficultyWeight\":68},\"Mont Blanc\":{\"count\":420,\"lastSeenTime\":1577036825894,\"publicGameCount\":8,\"difficulty\":0.8,\"difficultyWeight\":60},\"crucible\":{\"count\":218,\"lastSeenTime\":1577016562092,\"difficulty\":0.8181818181818182,\"difficultyWeight\":22,\"publicGameCount\":2},\"Bugs Bunny\":{\"count\":387,\"lastSeenTime\":1577033780065,\"publicGameCount\":33,\"difficulty\":0.6973684210526315,\"difficultyWeight\":228},\"cement\":{\"count\":226,\"lastSeenTime\":1577025781863,\"difficulty\":0.8309859154929577,\"difficultyWeight\":71,\"publicGameCount\":8},\"actor\":{\"count\":210,\"lastSeenTime\":1577009158040,\"publicGameCount\":3,\"difficulty\":0.6428571428571429,\"difficultyWeight\":28},\"comedy\":{\"count\":214,\"lastSeenTime\":1577007506033,\"difficulty\":0.8064516129032258,\"difficultyWeight\":62,\"publicGameCount\":1},\"chainsaw\":{\"count\":214,\"lastSeenTime\":1577017128569,\"publicGameCount\":19,\"difficulty\":0.5829145728643218,\"difficultyWeight\":199},\"virtual reality\":{\"count\":221,\"lastSeenTime\":1577020239958,\"publicGameCount\":12,\"difficulty\":0.8095238095238095,\"difficultyWeight\":105},\"England\":{\"count\":468,\"lastSeenTime\":1577035803681,\"difficulty\":0.6455696202531644,\"difficultyWeight\":237,\"publicGameCount\":24},\"polar bear\":{\"count\":222,\"lastSeenTime\":1577037568133,\"publicGameCount\":27,\"difficulty\":0.6021505376344087,\"difficultyWeight\":186},\"fern\":{\"count\":450,\"lastSeenTime\":1577009073445,\"publicGameCount\":18,\"difficulty\":0.7285714285714285,\"difficultyWeight\":140},\"folder\":{\"count\":220,\"lastSeenTime\":1577024929912,\"difficulty\":0.7450980392156863,\"difficultyWeight\":153,\"publicGameCount\":12},\"microscope\":{\"count\":233,\"lastSeenTime\":1576987263425,\"difficulty\":0.7045454545454546,\"difficultyWeight\":132,\"publicGameCount\":18},\"tattoo\":{\"count\":228,\"lastSeenTime\":1576976036447,\"publicGameCount\":11,\"difficulty\":0.6225165562913907,\"difficultyWeight\":151},\"lynx\":{\"count\":237,\"lastSeenTime\":1577035985945,\"publicGameCount\":2,\"difficulty\":0.7037037037037037,\"difficultyWeight\":27},\"shopping\":{\"count\":211,\"lastSeenTime\":1577032516007,\"publicGameCount\":12,\"difficulty\":0.5585585585585586,\"difficultyWeight\":111},\"violin\":{\"count\":442,\"lastSeenTime\":1577030033309,\"publicGameCount\":25,\"difficulty\":0.6008583690987125,\"difficultyWeight\":233},\"Mr. Bean\":{\"count\":248,\"lastSeenTime\":1577017456065,\"difficulty\":0.717391304347826,\"difficultyWeight\":92,\"publicGameCount\":5},\"Velociraptor\":{\"count\":239,\"lastSeenTime\":1577019187643,\"publicGameCount\":7,\"difficulty\":0.7959183673469388,\"difficultyWeight\":49},\"macaroni\":{\"count\":220,\"lastSeenTime\":1576922210439,\"publicGameCount\":12,\"difficulty\":0.7628865979381443,\"difficultyWeight\":97},\"quicksand\":{\"count\":453,\"lastSeenTime\":1577030581728,\"publicGameCount\":22,\"difficulty\":0.782608695652174,\"difficultyWeight\":184},\"UFO\":{\"count\":217,\"lastSeenTime\":1577032857352,\"difficulty\":0.47572815533980584,\"difficultyWeight\":206,\"publicGameCount\":7},\"patient\":{\"count\":209,\"lastSeenTime\":1576997705631,\"difficulty\":0.8846153846153846,\"difficultyWeight\":26,\"publicGameCount\":2},\"glue\":{\"count\":231,\"lastSeenTime\":1577007668912,\"publicGameCount\":8,\"difficulty\":0.5463917525773195,\"difficultyWeight\":97},\"wrestler\":{\"count\":223,\"lastSeenTime\":1577033608923,\"publicGameCount\":7,\"difficulty\":0.8285714285714286,\"difficultyWeight\":70},\"duel\":{\"count\":234,\"lastSeenTime\":1577024907310,\"publicGameCount\":4,\"difficulty\":0.684931506849315,\"difficultyWeight\":73},\"Sudoku\":{\"count\":227,\"lastSeenTime\":1577001113903,\"publicGameCount\":14,\"difficulty\":0.5307692307692308,\"difficultyWeight\":130},\"cushion\":{\"count\":236,\"lastSeenTime\":1577015315181,\"publicGameCount\":6,\"difficulty\":0.5636363636363637,\"difficultyWeight\":55},\"walnut\":{\"count\":209,\"lastSeenTime\":1576993566290,\"publicGameCount\":8,\"difficulty\":0.7,\"difficultyWeight\":110},\"drama\":{\"count\":248,\"lastSeenTime\":1576989489716,\"difficulty\":0.6491228070175439,\"difficultyWeight\":57,\"publicGameCount\":5},\"caviar\":{\"count\":236,\"lastSeenTime\":1577031871353,\"publicGameCount\":2,\"difficulty\":0.7857142857142857,\"difficultyWeight\":14},\"King Kong\":{\"count\":418,\"lastSeenTime\":1577007630765,\"publicGameCount\":28,\"difficulty\":0.6682692307692305,\"difficultyWeight\":208},\"USB\":{\"count\":219,\"lastSeenTime\":1577036917213,\"publicGameCount\":17,\"difficulty\":0.6175438596491226,\"difficultyWeight\":285},\"Darwin Watterson\":{\"count\":252,\"lastSeenTime\":1577002203423,\"publicGameCount\":9,\"difficulty\":0.8783783783783784,\"difficultyWeight\":74},\"saddle\":{\"count\":224,\"lastSeenTime\":1577037402133,\"publicGameCount\":8,\"difficulty\":0.6209677419354839,\"difficultyWeight\":124},\"paintball\":{\"count\":247,\"lastSeenTime\":1577035629904,\"publicGameCount\":15,\"difficulty\":0.675,\"difficultyWeight\":120},\"baklava\":{\"count\":244,\"lastSeenTime\":1577018964063,\"publicGameCount\":2,\"difficulty\":0.8636363636363636,\"difficultyWeight\":22},\"hermit\":{\"count\":207,\"lastSeenTime\":1576986977281,\"difficulty\":0.625,\"difficultyWeight\":56,\"publicGameCount\":3},\"diploma\":{\"count\":223,\"lastSeenTime\":1577015732671,\"difficulty\":0.7808219178082192,\"difficultyWeight\":73,\"publicGameCount\":7},\"candle\":{\"count\":212,\"lastSeenTime\":1577017763955,\"difficulty\":0.4959016393442623,\"difficultyWeight\":244,\"publicGameCount\":6},\"Madagascar\":{\"count\":464,\"lastSeenTime\":1577018327956,\"publicGameCount\":17,\"difficulty\":0.7482014388489209,\"difficultyWeight\":139},\"beetle\":{\"count\":231,\"lastSeenTime\":1577030201858,\"publicGameCount\":7,\"difficulty\":0.547945205479452,\"difficultyWeight\":73},\"Morty\":{\"count\":419,\"lastSeenTime\":1577037355436,\"publicGameCount\":19,\"difficulty\":0.6600985221674877,\"difficultyWeight\":203},\"dashboard\":{\"count\":216,\"lastSeenTime\":1576995423938,\"publicGameCount\":9,\"difficulty\":0.5972222222222222,\"difficultyWeight\":72},\"nutmeg\":{\"count\":190,\"lastSeenTime\":1577020860567,\"publicGameCount\":2,\"difficulty\":0.5185185185185185,\"difficultyWeight\":54},\"Hercules\":{\"count\":463,\"lastSeenTime\":1577033007248,\"publicGameCount\":17,\"difficulty\":0.7890625,\"difficultyWeight\":128},\"Solar System\":{\"count\":229,\"lastSeenTime\":1577036527277,\"publicGameCount\":22,\"difficulty\":0.6411764705882353,\"difficultyWeight\":170},\"camera\":{\"count\":230,\"lastSeenTime\":1577011606837,\"publicGameCount\":14,\"difficulty\":0.549407114624506,\"difficultyWeight\":253},\"tuba\":{\"count\":404,\"lastSeenTime\":1576993882569,\"publicGameCount\":12,\"difficulty\":0.5564516129032259,\"difficultyWeight\":124},\"leech\":{\"count\":229,\"lastSeenTime\":1576988203694,\"publicGameCount\":5,\"difficulty\":0.7014925373134329,\"difficultyWeight\":67},\"search\":{\"count\":208,\"lastSeenTime\":1577030851645,\"publicGameCount\":7,\"difficulty\":0.5963855421686747,\"difficultyWeight\":166},\"Slinky\":{\"count\":239,\"lastSeenTime\":1576996381190,\"publicGameCount\":6,\"difficulty\":0.6190476190476191,\"difficultyWeight\":63},\"lipstick\":{\"count\":224,\"lastSeenTime\":1577004001722,\"publicGameCount\":26,\"difficulty\":0.44981412639405205,\"difficultyWeight\":269},\"headache\":{\"count\":234,\"lastSeenTime\":1577025363327,\"publicGameCount\":12,\"difficulty\":0.5514018691588786,\"difficultyWeight\":107},\"Paris\":{\"count\":429,\"lastSeenTime\":1577033891936,\"difficulty\":0.5563549160671462,\"difficultyWeight\":417,\"publicGameCount\":46},\"pogo stick\":{\"count\":199,\"lastSeenTime\":1577032738629,\"publicGameCount\":17,\"difficulty\":0.6046511627906976,\"difficultyWeight\":129},\"lemur\":{\"count\":217,\"lastSeenTime\":1577036701657,\"difficulty\":0.7567567567567568,\"difficultyWeight\":37,\"publicGameCount\":3},\"Mr Meeseeks\":{\"count\":232,\"lastSeenTime\":1577018492804,\"difficulty\":0.8333333333333334,\"difficultyWeight\":96,\"publicGameCount\":11},\"player\":{\"count\":217,\"lastSeenTime\":1577017667709,\"difficulty\":0.7480314960629921,\"difficultyWeight\":127,\"publicGameCount\":8},\"invention\":{\"count\":200,\"lastSeenTime\":1577002350973,\"publicGameCount\":2,\"difficulty\":0.6071428571428571,\"difficultyWeight\":28},\"bumper\":{\"count\":231,\"lastSeenTime\":1577009177631,\"publicGameCount\":9,\"difficulty\":0.6185567010309279,\"difficultyWeight\":97},\"handle\":{\"count\":244,\"lastSeenTime\":1577031193533,\"difficulty\":0.7169811320754716,\"difficultyWeight\":53,\"publicGameCount\":3},\"sword\":{\"count\":235,\"lastSeenTime\":1577011105897,\"publicGameCount\":12,\"difficulty\":0.45964912280701753,\"difficultyWeight\":285},\"tabletop\":{\"count\":235,\"lastSeenTime\":1577025627579,\"publicGameCount\":4,\"difficulty\":0.7,\"difficultyWeight\":50},\"shark\":{\"count\":231,\"lastSeenTime\":1577025952720,\"difficulty\":0.5128205128205128,\"difficultyWeight\":156},\"laundry\":{\"count\":208,\"lastSeenTime\":1577011695040,\"difficulty\":0.6133333333333333,\"difficultyWeight\":75,\"publicGameCount\":6},\"Chinatown\":{\"count\":404,\"lastSeenTime\":1577025841683,\"publicGameCount\":11,\"difficulty\":0.6506024096385542,\"difficultyWeight\":83},\"Spain\":{\"count\":410,\"lastSeenTime\":1577032968561,\"publicGameCount\":14,\"difficulty\":0.5909090909090909,\"difficultyWeight\":176},\"label\":{\"count\":210,\"lastSeenTime\":1577031546307,\"difficulty\":0.6470588235294118,\"difficultyWeight\":85,\"publicGameCount\":7},\"vanish\":{\"count\":230,\"lastSeenTime\":1577033804412,\"publicGameCount\":7,\"difficulty\":0.6818181818181818,\"difficultyWeight\":88},\"nose ring\":{\"count\":245,\"lastSeenTime\":1577010384587,\"publicGameCount\":27,\"difficulty\":0.5929648241206029,\"difficultyWeight\":199},\"drought\":{\"count\":440,\"lastSeenTime\":1577034022367,\"difficulty\":0.8307692307692308,\"difficultyWeight\":130,\"publicGameCount\":12},\"policeman\":{\"count\":224,\"lastSeenTime\":1577002051390,\"publicGameCount\":16,\"difficulty\":0.5661764705882353,\"difficultyWeight\":136},\"Stegosaurus\":{\"count\":215,\"lastSeenTime\":1577013975511,\"publicGameCount\":9,\"difficulty\":0.72,\"difficultyWeight\":75},\"dice\":{\"count\":254,\"lastSeenTime\":1577031234774,\"difficulty\":0.5078125,\"difficultyWeight\":256,\"publicGameCount\":14},\"pope\":{\"count\":230,\"lastSeenTime\":1577025018536,\"publicGameCount\":5,\"difficulty\":0.7176470588235293,\"difficultyWeight\":85},\"attic\":{\"count\":223,\"lastSeenTime\":1576998400404,\"difficulty\":0.6470588235294118,\"difficultyWeight\":51,\"publicGameCount\":3},\"Family Guy\":{\"count\":247,\"lastSeenTime\":1576983442566,\"publicGameCount\":18,\"difficulty\":0.672,\"difficultyWeight\":125},\"server\":{\"count\":208,\"lastSeenTime\":1577033043901,\"publicGameCount\":4,\"difficulty\":0.8214285714285714,\"difficultyWeight\":56},\"vulture\":{\"count\":212,\"lastSeenTime\":1577031248949,\"publicGameCount\":7,\"difficulty\":0.6931818181818182,\"difficultyWeight\":88},\"banker\":{\"count\":216,\"lastSeenTime\":1577010447702,\"difficulty\":0.7065217391304348,\"difficultyWeight\":92,\"publicGameCount\":5},\"treadmill\":{\"count\":231,\"lastSeenTime\":1577037341722,\"publicGameCount\":10,\"difficulty\":0.6373626373626373,\"difficultyWeight\":91},\"chestnut\":{\"count\":210,\"lastSeenTime\":1577010593183,\"difficulty\":0.7454545454545455,\"difficultyWeight\":55,\"publicGameCount\":4},\"scarecrow\":{\"count\":239,\"lastSeenTime\":1577033308316,\"publicGameCount\":10,\"difficulty\":0.6434782608695652,\"difficultyWeight\":115},\"lake\":{\"count\":426,\"lastSeenTime\":1577016713300,\"difficulty\":0.4876543209876543,\"difficultyWeight\":324,\"publicGameCount\":28},\"doll\":{\"count\":230,\"lastSeenTime\":1577031458931,\"difficulty\":0.464,\"difficultyWeight\":125,\"publicGameCount\":10},\"impact\":{\"count\":232,\"lastSeenTime\":1576994494324,\"publicGameCount\":4,\"difficulty\":0.7741935483870968,\"difficultyWeight\":31},\"papaya\":{\"count\":226,\"lastSeenTime\":1577035338348,\"difficulty\":0.6354166666666667,\"difficultyWeight\":96,\"publicGameCount\":9},\"landlord\":{\"count\":229,\"lastSeenTime\":1577009049641,\"publicGameCount\":1,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"flying pig\":{\"count\":202,\"lastSeenTime\":1577034300607,\"publicGameCount\":20,\"difficulty\":0.6620689655172414,\"difficultyWeight\":145},\"brunette\":{\"count\":211,\"lastSeenTime\":1577036608773,\"publicGameCount\":7,\"difficulty\":0.7611940298507462,\"difficultyWeight\":67},\"flask\":{\"count\":208,\"lastSeenTime\":1577035277440,\"difficulty\":0.7101449275362319,\"difficultyWeight\":138,\"publicGameCount\":8},\"notebook\":{\"count\":233,\"lastSeenTime\":1577013787870,\"difficulty\":0.5894039735099338,\"difficultyWeight\":151,\"publicGameCount\":10},\"boat\":{\"count\":219,\"lastSeenTime\":1577036836029,\"difficulty\":0.43356643356643354,\"difficultyWeight\":286,\"publicGameCount\":3},\"bookmark\":{\"count\":241,\"lastSeenTime\":1577014895707,\"publicGameCount\":13,\"difficulty\":0.5769230769230769,\"difficultyWeight\":130},\"floppy disk\":{\"count\":213,\"lastSeenTime\":1577025817270,\"publicGameCount\":10,\"difficulty\":0.72,\"difficultyWeight\":75},\"back pain\":{\"count\":242,\"lastSeenTime\":1576992076643,\"publicGameCount\":13,\"difficulty\":0.7525773195876289,\"difficultyWeight\":97},\"shrew\":{\"count\":217,\"lastSeenTime\":1577033891936,\"difficulty\":0.9655172413793104,\"difficultyWeight\":29,\"publicGameCount\":1},\"T-rex\":{\"count\":193,\"lastSeenTime\":1577010511117,\"publicGameCount\":25,\"difficulty\":0.5235294117647058,\"difficultyWeight\":170},\"motherboard\":{\"count\":234,\"lastSeenTime\":1576992062315,\"publicGameCount\":10,\"difficulty\":0.8333333333333334,\"difficultyWeight\":60},\"stylus\":{\"count\":254,\"lastSeenTime\":1577003174559,\"publicGameCount\":4,\"difficulty\":0.7073170731707317,\"difficultyWeight\":41},\"magnifier\":{\"count\":218,\"lastSeenTime\":1577033647739,\"publicGameCount\":13,\"difficulty\":0.6666666666666666,\"difficultyWeight\":111},\"Band-Aid\":{\"count\":222,\"lastSeenTime\":1576994596924,\"publicGameCount\":21,\"difficulty\":0.6845637583892618,\"difficultyWeight\":149},\"journey\":{\"count\":232,\"lastSeenTime\":1577017189646,\"difficulty\":0.5681818181818182,\"difficultyWeight\":44,\"publicGameCount\":4},\"minivan\":{\"count\":196,\"lastSeenTime\":1577024539413,\"difficulty\":0.7162162162162162,\"difficultyWeight\":74,\"publicGameCount\":8},\"lotion\":{\"count\":245,\"lastSeenTime\":1577036927354,\"publicGameCount\":7,\"difficulty\":0.6704545454545454,\"difficultyWeight\":88},\"cartoon\":{\"count\":229,\"lastSeenTime\":1576992213093,\"publicGameCount\":5,\"difficulty\":0.5955056179775281,\"difficultyWeight\":89},\"skates\":{\"count\":235,\"lastSeenTime\":1577031282203,\"difficulty\":0.5063291139240507,\"difficultyWeight\":158,\"publicGameCount\":8},\"barcode\":{\"count\":221,\"lastSeenTime\":1576998517639,\"difficulty\":0.7322834645669292,\"difficultyWeight\":127,\"publicGameCount\":10},\"conversation\":{\"count\":223,\"lastSeenTime\":1577000593113,\"publicGameCount\":14,\"difficulty\":0.7419354838709677,\"difficultyWeight\":124},\"maid\":{\"count\":221,\"lastSeenTime\":1577015985232,\"difficulty\":0.6055045871559633,\"difficultyWeight\":109,\"publicGameCount\":9},\"desperate\":{\"count\":244,\"lastSeenTime\":1577025599091,\"publicGameCount\":1,\"difficulty\":0.8888888888888888,\"difficultyWeight\":9},\"Chrome\":{\"count\":444,\"lastSeenTime\":1577036754761,\"publicGameCount\":39,\"difficulty\":0.4968553459119497,\"difficultyWeight\":318},\"waterfall\":{\"count\":438,\"lastSeenTime\":1577036588307,\"publicGameCount\":62,\"difficulty\":0.5926640926640926,\"difficultyWeight\":518},\"furniture\":{\"count\":244,\"lastSeenTime\":1576994478529,\"publicGameCount\":7,\"difficulty\":0.6491228070175439,\"difficultyWeight\":57},\"Yin and Yang\":{\"count\":221,\"lastSeenTime\":1576994622929,\"publicGameCount\":33,\"difficulty\":0.7345132743362832,\"difficultyWeight\":226},\"wig\":{\"count\":222,\"lastSeenTime\":1577004363564,\"difficulty\":0.6666666666666666,\"difficultyWeight\":144,\"publicGameCount\":9},\"food\":{\"count\":226,\"lastSeenTime\":1577024946172,\"difficulty\":0.5389610389610391,\"difficultyWeight\":154,\"publicGameCount\":7},\"sensei\":{\"count\":195,\"lastSeenTime\":1577030602131,\"publicGameCount\":6,\"difficulty\":0.7215189873417721,\"difficultyWeight\":79},\"Venus\":{\"count\":214,\"lastSeenTime\":1577031895972,\"difficulty\":0.6666666666666666,\"difficultyWeight\":78,\"publicGameCount\":5},\"albatross\":{\"count\":211,\"lastSeenTime\":1577009186739,\"publicGameCount\":4,\"difficulty\":0.8378378378378378,\"difficultyWeight\":37},\"vegetarian\":{\"count\":236,\"lastSeenTime\":1577034229193,\"publicGameCount\":14,\"difficulty\":0.7086614173228346,\"difficultyWeight\":127},\"Florida\":{\"count\":449,\"lastSeenTime\":1577037263306,\"publicGameCount\":20,\"difficulty\":0.6423841059602649,\"difficultyWeight\":151},\"Milky Way\":{\"count\":228,\"lastSeenTime\":1577012349812,\"publicGameCount\":16,\"difficulty\":0.625,\"difficultyWeight\":112},\"aristocrat\":{\"count\":226,\"lastSeenTime\":1577036195110,\"difficulty\":0.6538461538461539,\"difficultyWeight\":26,\"publicGameCount\":3},\"flush\":{\"count\":233,\"lastSeenTime\":1577037632002,\"difficulty\":0.620253164556962,\"difficultyWeight\":79,\"publicGameCount\":5},\"tumor\":{\"count\":220,\"lastSeenTime\":1577011724574,\"difficulty\":0.6,\"difficultyWeight\":15,\"publicGameCount\":1},\"safari\":{\"count\":222,\"lastSeenTime\":1577024514106,\"publicGameCount\":9,\"difficulty\":0.7920792079207921,\"difficultyWeight\":101},\"catalog\":{\"count\":225,\"lastSeenTime\":1577017108045,\"difficulty\":0.675,\"difficultyWeight\":40,\"publicGameCount\":2},\"veterinarian\":{\"count\":201,\"lastSeenTime\":1576991253422,\"publicGameCount\":7,\"difficulty\":0.8135593220338984,\"difficultyWeight\":59},\"high score\":{\"count\":226,\"lastSeenTime\":1577033283809,\"publicGameCount\":17,\"difficulty\":0.7338709677419355,\"difficultyWeight\":124},\"afterlife\":{\"count\":212,\"lastSeenTime\":1577020215138,\"publicGameCount\":9,\"difficulty\":0.6435643564356436,\"difficultyWeight\":101},\"logo\":{\"count\":205,\"lastSeenTime\":1577003987414,\"publicGameCount\":9,\"difficulty\":0.5394736842105263,\"difficultyWeight\":76},\"mushroom\":{\"count\":220,\"lastSeenTime\":1577011071361,\"difficulty\":0.4980237154150198,\"difficultyWeight\":253,\"publicGameCount\":15},\"mole\":{\"count\":249,\"lastSeenTime\":1577018796307,\"publicGameCount\":8,\"difficulty\":0.6607142857142857,\"difficultyWeight\":112},\"marmalade\":{\"count\":238,\"lastSeenTime\":1577032261139,\"publicGameCount\":4,\"difficulty\":0.8837209302325582,\"difficultyWeight\":43},\"eraser\":{\"count\":185,\"lastSeenTime\":1576983157896,\"publicGameCount\":11,\"difficulty\":0.6034482758620688,\"difficultyWeight\":174},\"gummy bear\":{\"count\":206,\"lastSeenTime\":1577035761130,\"publicGameCount\":29,\"difficulty\":0.5693779904306221,\"difficultyWeight\":209},\"comet\":{\"count\":227,\"lastSeenTime\":1577025287762,\"difficulty\":0.7156862745098039,\"difficultyWeight\":102,\"publicGameCount\":7},\"hunter\":{\"count\":206,\"lastSeenTime\":1577024820240,\"publicGameCount\":4,\"difficulty\":0.6603773584905659,\"difficultyWeight\":106},\"bouncer\":{\"count\":224,\"lastSeenTime\":1577000209447,\"publicGameCount\":6,\"difficulty\":0.65,\"difficultyWeight\":40},\"exercise\":{\"count\":208,\"lastSeenTime\":1576960300833,\"publicGameCount\":15,\"difficulty\":0.6268656716417911,\"difficultyWeight\":134},\"commander\":{\"count\":195,\"lastSeenTime\":1577015378171,\"difficulty\":0.7101449275362319,\"difficultyWeight\":69,\"publicGameCount\":6},\"classroom\":{\"count\":233,\"lastSeenTime\":1577020948126,\"publicGameCount\":6,\"difficulty\":0.6097560975609755,\"difficultyWeight\":82},\"lava\":{\"count\":199,\"lastSeenTime\":1577019263045,\"publicGameCount\":9,\"difficulty\":0.542857142857143,\"difficultyWeight\":245},\"koala\":{\"count\":211,\"lastSeenTime\":1577030372247,\"difficulty\":0.6524822695035462,\"difficultyWeight\":141,\"publicGameCount\":10},\"market\":{\"count\":235,\"lastSeenTime\":1577036169423,\"difficulty\":0.6095238095238096,\"difficultyWeight\":105,\"publicGameCount\":7},\"miner\":{\"count\":212,\"lastSeenTime\":1577014794126,\"difficulty\":0.5192307692307693,\"difficultyWeight\":104,\"publicGameCount\":6},\"marble\":{\"count\":237,\"lastSeenTime\":1577024946172,\"difficulty\":0.7184466019417476,\"difficultyWeight\":103,\"publicGameCount\":7},\"fur\":{\"count\":225,\"lastSeenTime\":1577024845092,\"difficulty\":0.580952380952381,\"difficultyWeight\":105,\"publicGameCount\":10},\"raincoat\":{\"count\":220,\"lastSeenTime\":1577031885678,\"difficulty\":0.5675675675675677,\"difficultyWeight\":111,\"publicGameCount\":12},\"sunburn\":{\"count\":195,\"lastSeenTime\":1577011807131,\"publicGameCount\":15,\"difficulty\":0.6022099447513812,\"difficultyWeight\":181},\"robber\":{\"count\":249,\"lastSeenTime\":1577030973803,\"difficulty\":0.5632911392405063,\"difficultyWeight\":158,\"publicGameCount\":12},\"leave\":{\"count\":194,\"lastSeenTime\":1577033479516,\"difficulty\":0.4098360655737705,\"difficultyWeight\":61,\"publicGameCount\":8},\"girl\":{\"count\":243,\"lastSeenTime\":1577037042051,\"difficulty\":0.5116279069767442,\"difficultyWeight\":258,\"publicGameCount\":11}}"
  },
  {
    "path": "tools/skribbliohintsconverter/german.json",
    "content": "{\"Sommersprossen\":{\"count\":5,\"lastSeenTime\":1586959168567},\"inkognito\":{\"count\":7,\"lastSeenTime\":1586901586361},\"Marienkäfer\":{\"count\":7,\"lastSeenTime\":1586958264090,\"difficulty\":0.8902439024390244,\"difficultyWeight\":82},\"Zaun\":{\"count\":8,\"lastSeenTime\":1586958848320},\"graben\":{\"count\":6,\"lastSeenTime\":1586896977731,\"publicGameCount\":1},\"Erfrierung\":{\"count\":7,\"lastSeenTime\":1586900635930},\"Kessel\":{\"count\":7,\"lastSeenTime\":1586839270292},\"Kellner\":{\"count\":6,\"lastSeenTime\":1586900763534},\"Panzerband\":{\"count\":4,\"lastSeenTime\":1586860197013,\"difficulty\":1,\"difficultyWeight\":11},\"Schnorchel\":{\"count\":12,\"lastSeenTime\":1586901554174,\"difficulty\":1,\"difficultyWeight\":4},\"Abgrund\":{\"count\":10,\"lastSeenTime\":1586869078737,\"difficulty\":1,\"difficultyWeight\":2},\"geduldig\":{\"count\":8,\"lastSeenTime\":1586959178759,\"publicGameCount\":1,\"difficulty\":0.8888888888888888,\"difficultyWeight\":9},\"Edelstein\":{\"count\":8,\"lastSeenTime\":1586954627819,\"difficulty\":1,\"difficultyWeight\":1},\"Rasseln\":{\"count\":6,\"lastSeenTime\":1586919552513,\"difficulty\":1,\"difficultyWeight\":3},\"Ohr\":{\"count\":11,\"lastSeenTime\":1586900881142,\"difficulty\":0.5833333333333334,\"difficultyWeight\":12},\"Elektron\":{\"count\":9,\"lastSeenTime\":1586903684169},\"Telefonbuch\":{\"count\":7,\"lastSeenTime\":1586908504643},\"Kim Jong-Un\":{\"count\":5,\"lastSeenTime\":1586904405029},\"Backenzahn\":{\"count\":9,\"lastSeenTime\":1586915737415},\"Ameisenbär\":{\"count\":9,\"lastSeenTime\":1586916550509,\"difficulty\":0.8,\"difficultyWeight\":5},\"Zaubertrick\":{\"count\":4,\"lastSeenTime\":1586783316765,\"difficulty\":1,\"difficultyWeight\":4},\"Angestellter\":{\"count\":5,\"lastSeenTime\":1586858975693,\"publicGameCount\":1},\"Beförderung\":{\"count\":6,\"lastSeenTime\":1586914119532,\"difficulty\":1,\"difficultyWeight\":6},\"Krokodil\":{\"count\":8,\"lastSeenTime\":1586901461723},\"keuchen\":{\"count\":6,\"lastSeenTime\":1586875186652},\"Bleiche\":{\"count\":6,\"lastSeenTime\":1586785407694},\"The Rock\":{\"count\":8,\"lastSeenTime\":1586901554174},\"Karteikasten\":{\"count\":8,\"lastSeenTime\":1586958934411,\"difficulty\":0.875,\"difficultyWeight\":8},\"fliegendes Schwein\":{\"count\":13,\"lastSeenTime\":1586920922732,\"difficulty\":0.9473684210526315,\"difficultyWeight\":19},\"wachsen\":{\"count\":7,\"lastSeenTime\":1586920637722,\"difficulty\":1,\"difficultyWeight\":1},\"scharfe Soße\":{\"count\":4,\"lastSeenTime\":1586959595986},\"Grab\":{\"count\":8,\"lastSeenTime\":1586919297771},\"Milchmann\":{\"count\":10,\"lastSeenTime\":1586955716758},\"Pfanne\":{\"count\":11,\"lastSeenTime\":1586958959180},\"Säbel\":{\"count\":11,\"lastSeenTime\":1586900301076,\"difficulty\":0.75,\"difficultyWeight\":28},\"Peperoni\":{\"count\":9,\"lastSeenTime\":1586901643471,\"difficulty\":1,\"difficultyWeight\":17},\"Pony\":{\"count\":6,\"lastSeenTime\":1586914196223},\"Zirkus\":{\"count\":8,\"lastSeenTime\":1586959814583,\"publicGameCount\":1,\"difficulty\":0.375,\"difficultyWeight\":8},\"Kredithai\":{\"count\":2,\"lastSeenTime\":1586784756252,\"publicGameCount\":1,\"difficulty\":0.8,\"difficultyWeight\":5},\"Triangel\":{\"count\":4,\"lastSeenTime\":1586954834961},\"Jo-Jo\":{\"count\":10,\"lastSeenTime\":1586919312988,\"publicGameCount\":1},\"Tür\":{\"count\":8,\"lastSeenTime\":1586826993481,\"difficulty\":0.8181818181818182,\"difficultyWeight\":11},\"Bauchnabel\":{\"count\":6,\"lastSeenTime\":1586896963540,\"difficulty\":1,\"difficultyWeight\":1},\"Wecker\":{\"count\":5,\"lastSeenTime\":1586903561657},\"Ravioli\":{\"count\":7,\"lastSeenTime\":1586916277356},\"Kolosseum\":{\"count\":9,\"lastSeenTime\":1586868692820,\"difficulty\":0.8,\"difficultyWeight\":15},\"Herde\":{\"count\":5,\"lastSeenTime\":1586959031017},\"zeigen\":{\"count\":5,\"lastSeenTime\":1586954989864},\"lächeln\":{\"count\":10,\"lastSeenTime\":1586839535428,\"difficulty\":1,\"difficultyWeight\":9},\"Götterspeise\":{\"count\":7,\"lastSeenTime\":1586958784537,\"difficulty\":1,\"difficultyWeight\":5},\"Injektion\":{\"count\":5,\"lastSeenTime\":1586956145689},\"Gewürz\":{\"count\":12,\"lastSeenTime\":1586908982317,\"difficulty\":1,\"difficultyWeight\":9},\"Tal\":{\"count\":8,\"lastSeenTime\":1586913596578},\"Seerose\":{\"count\":8,\"lastSeenTime\":1586901672587,\"difficulty\":0.625,\"difficultyWeight\":8},\"Erdkern\":{\"count\":8,\"lastSeenTime\":1586959814583,\"difficulty\":0.8918918918918919,\"difficultyWeight\":37},\"Motorrad\":{\"count\":8,\"lastSeenTime\":1586914280738,\"difficulty\":0.9285714285714286,\"difficultyWeight\":14},\"Billard\":{\"count\":7,\"lastSeenTime\":1586915767461},\"Tourist\":{\"count\":5,\"lastSeenTime\":1586896203705},\"Nachbar\":{\"count\":6,\"lastSeenTime\":1586890615582},\"Gesicht\":{\"count\":6,\"lastSeenTime\":1586868886553,\"difficulty\":0.7058823529411765,\"difficultyWeight\":17},\"Rick\":{\"count\":10,\"lastSeenTime\":1586913893763},\"detonieren\":{\"count\":7,\"lastSeenTime\":1586958100659},\"Elsa\":{\"count\":7,\"lastSeenTime\":1586916469958,\"difficulty\":1,\"difficultyWeight\":9},\"Ehefrau\":{\"count\":2,\"lastSeenTime\":1586956145689},\"atmen\":{\"count\":5,\"lastSeenTime\":1586812666102},\"Laser\":{\"count\":5,\"lastSeenTime\":1586901839909},\"Basketball\":{\"count\":12,\"lastSeenTime\":1586909325207,\"difficulty\":1,\"difficultyWeight\":3},\"Kegelrobbe\":{\"count\":8,\"lastSeenTime\":1586920346900,\"difficulty\":1,\"difficultyWeight\":6},\"Hagel\":{\"count\":6,\"lastSeenTime\":1586897064138,\"publicGameCount\":1,\"difficulty\":0.9473684210526315,\"difficultyWeight\":19},\"Sitzsack\":{\"count\":9,\"lastSeenTime\":1586958719765,\"publicGameCount\":1,\"difficulty\":0.9024390243902439,\"difficultyWeight\":41},\"Seuche\":{\"count\":8,\"lastSeenTime\":1586954664216},\"Bambi\":{\"count\":8,\"lastSeenTime\":1586900739157},\"Schutzhelm\":{\"count\":6,\"lastSeenTime\":1586903323590},\"undicht\":{\"count\":7,\"lastSeenTime\":1586909063921},\"Mund\":{\"count\":6,\"lastSeenTime\":1586959840559},\"Chips\":{\"count\":5,\"lastSeenTime\":1586896769426,\"difficulty\":0.7857142857142857,\"difficultyWeight\":14},\"Eis\":{\"count\":9,\"lastSeenTime\":1586897078678,\"difficulty\":0.7435897435897436,\"difficultyWeight\":39},\"Kühlschrank\":{\"count\":8,\"lastSeenTime\":1586959391653,\"difficulty\":0.8771929824561403,\"difficultyWeight\":57},\"Ehemann\":{\"count\":10,\"lastSeenTime\":1586909226093},\"Hammerhai\":{\"count\":11,\"lastSeenTime\":1586955559002,\"difficulty\":1,\"difficultyWeight\":16},\"Lasso\":{\"count\":7,\"lastSeenTime\":1586902973020,\"difficulty\":0.8260869565217391,\"difficultyWeight\":23},\"Elon Musk\":{\"count\":8,\"lastSeenTime\":1586956273734},\"Steve Jobs\":{\"count\":9,\"lastSeenTime\":1586908290545},\"Redner\":{\"count\":10,\"lastSeenTime\":1586920690415,\"difficulty\":0.896551724137931,\"difficultyWeight\":29},\"Schaukel\":{\"count\":8,\"lastSeenTime\":1586913942457},\"Feuerwehrmann\":{\"count\":7,\"lastSeenTime\":1586891283320,\"difficulty\":0.9555555555555556,\"difficultyWeight\":45},\"Atmosphäre\":{\"count\":8,\"lastSeenTime\":1586904287692,\"difficulty\":0.9,\"difficultyWeight\":10},\"Android\":{\"count\":6,\"lastSeenTime\":1586901554174},\"Frankenstein\":{\"count\":5,\"lastSeenTime\":1586958748793},\"Neptun\":{\"count\":6,\"lastSeenTime\":1586954713056},\"Bruch\":{\"count\":5,\"lastSeenTime\":1586880896100,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"Handschlag\":{\"count\":6,\"lastSeenTime\":1586895467027},\"Wolke\":{\"count\":6,\"lastSeenTime\":1586954975722},\"Schwarm\":{\"count\":12,\"lastSeenTime\":1586959633128,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":9},\"Rettich\":{\"count\":3,\"lastSeenTime\":1586819449062},\"Kirsche\":{\"count\":5,\"lastSeenTime\":1586921142411},\"Anime\":{\"count\":8,\"lastSeenTime\":1586955286110,\"difficulty\":1,\"difficultyWeight\":1},\"Wasserschildkröte\":{\"count\":7,\"lastSeenTime\":1586903673095,\"difficulty\":0.7777777777777778,\"difficultyWeight\":18},\"Baguette\":{\"count\":9,\"lastSeenTime\":1586959242580,\"difficulty\":0.9,\"difficultyWeight\":50},\"Badewanne\":{\"count\":6,\"lastSeenTime\":1586879384676,\"difficulty\":1,\"difficultyWeight\":36},\"Maulkorb\":{\"count\":8,\"lastSeenTime\":1586921043126},\"Bullauge\":{\"count\":8,\"lastSeenTime\":1586908191616},\"Songtext\":{\"count\":5,\"lastSeenTime\":1586908418545},\"Fred Feuerstein\":{\"count\":7,\"lastSeenTime\":1586920843703},\"funkeln\":{\"count\":6,\"lastSeenTime\":1586869723557,\"difficulty\":1,\"difficultyWeight\":5},\"Fossil\":{\"count\":8,\"lastSeenTime\":1586956453935},\"Widder\":{\"count\":6,\"lastSeenTime\":1586919477051},\"Bulle\":{\"count\":9,\"lastSeenTime\":1586920637722},\"Welt\":{\"count\":6,\"lastSeenTime\":1586914742004,\"difficulty\":0.5454545454545454,\"difficultyWeight\":11},\"Surfbrett\":{\"count\":6,\"lastSeenTime\":1586727413339},\"Benachrichtigung\":{\"count\":6,\"lastSeenTime\":1586818022119,\"difficulty\":1,\"difficultyWeight\":7},\"tief\":{\"count\":6,\"lastSeenTime\":1586955737202},\"Richter\":{\"count\":6,\"lastSeenTime\":1586782749678,\"publicGameCount\":1,\"difficulty\":0.6666666666666666,\"difficultyWeight\":3},\"Guillotine\":{\"count\":8,\"lastSeenTime\":1586915609902,\"difficulty\":1,\"difficultyWeight\":7},\"Zahnlücke\":{\"count\":5,\"lastSeenTime\":1586913571135,\"difficulty\":0.36363636363636365,\"difficultyWeight\":11,\"publicGameCount\":1},\"warm\":{\"count\":6,\"lastSeenTime\":1586955763543},\"Nachricht\":{\"count\":10,\"lastSeenTime\":1586914387880,\"difficulty\":1,\"difficultyWeight\":10},\"Figur\":{\"count\":4,\"lastSeenTime\":1586620030988,\"difficulty\":0.8076923076923077,\"difficultyWeight\":26},\"Kartoffelpuffer\":{\"count\":6,\"lastSeenTime\":1586915428040},\"Sprudel\":{\"count\":3,\"lastSeenTime\":1586828072825},\"Radieschen\":{\"count\":11,\"lastSeenTime\":1586903975283},\"Pizza\":{\"count\":5,\"lastSeenTime\":1586807229861,\"publicGameCount\":1,\"difficulty\":0.6818181818181818,\"difficultyWeight\":22},\"Schulter\":{\"count\":7,\"lastSeenTime\":1586916048294},\"Türkei\":{\"count\":4,\"lastSeenTime\":1586908304826},\"Kanalisation\":{\"count\":6,\"lastSeenTime\":1586913988149,\"difficulty\":1,\"difficultyWeight\":10},\"Wasserpistole\":{\"count\":6,\"lastSeenTime\":1586727892454,\"difficulty\":0.6818181818181818,\"difficultyWeight\":22},\"Pudding\":{\"count\":6,\"lastSeenTime\":1586954713056,\"difficulty\":1,\"difficultyWeight\":6},\"Benzin\":{\"count\":4,\"lastSeenTime\":1586706898795,\"difficulty\":0.9491525423728814,\"difficultyWeight\":59},\"Spaghetti\":{\"count\":6,\"lastSeenTime\":1586879335186,\"difficulty\":0.625,\"difficultyWeight\":8},\"Micky Maus\":{\"count\":6,\"lastSeenTime\":1586881158128,\"difficulty\":1,\"difficultyWeight\":15,\"publicGameCount\":1},\"Mark Zuckerberg\":{\"count\":7,\"lastSeenTime\":1586716859656},\"Elefant\":{\"count\":2,\"lastSeenTime\":1586714038574,\"difficulty\":0.875,\"difficultyWeight\":16},\"Bühne\":{\"count\":3,\"lastSeenTime\":1586818507852,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Oreo\":{\"count\":5,\"lastSeenTime\":1586958375030,\"publicGameCount\":1,\"difficulty\":0.875,\"difficultyWeight\":8},\"Nasenbluten\":{\"count\":5,\"lastSeenTime\":1586827386179,\"publicGameCount\":1,\"difficulty\":0.8823529411764706,\"difficultyWeight\":17},\"Rapper\":{\"count\":6,\"lastSeenTime\":1586959290196,\"difficulty\":1,\"difficultyWeight\":45},\"Bungee Jumping\":{\"count\":7,\"lastSeenTime\":1586874829202,\"publicGameCount\":1,\"difficulty\":0.625,\"difficultyWeight\":8},\"Abend\":{\"count\":9,\"lastSeenTime\":1586915115067,\"difficulty\":0.75,\"difficultyWeight\":8},\"Crash Bandicoot\":{\"count\":6,\"lastSeenTime\":1586900136092},\"Welle\":{\"count\":5,\"lastSeenTime\":1586954727368,\"difficulty\":0.8695652173913043,\"difficultyWeight\":23},\"Fass\":{\"count\":7,\"lastSeenTime\":1586907500591,\"publicGameCount\":1,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"beten\":{\"count\":5,\"lastSeenTime\":1586859052667,\"difficulty\":0.8181818181818182,\"difficultyWeight\":11},\"Marionette\":{\"count\":8,\"lastSeenTime\":1586956477794},\"Pferdeschwanz\":{\"count\":5,\"lastSeenTime\":1586904244327,\"difficulty\":1,\"difficultyWeight\":8},\"Käfig\":{\"count\":5,\"lastSeenTime\":1586902702172},\"Dirndl\":{\"count\":7,\"lastSeenTime\":1586958037635,\"publicGameCount\":1,\"difficulty\":0.85,\"difficultyWeight\":20},\"Fensterbank\":{\"count\":7,\"lastSeenTime\":1586954834961},\"Laubhaufen\":{\"count\":4,\"lastSeenTime\":1586959429213,\"publicGameCount\":1,\"difficulty\":0.625,\"difficultyWeight\":8},\"frei schweben\":{\"count\":5,\"lastSeenTime\":1586915236139,\"difficulty\":1,\"difficultyWeight\":10},\"Lineal\":{\"count\":7,\"lastSeenTime\":1586900054688,\"difficulty\":1,\"difficultyWeight\":20,\"publicGameCount\":1},\"Mr. Meeseeks\":{\"count\":5,\"lastSeenTime\":1586903133369},\"Volleyball\":{\"count\":9,\"lastSeenTime\":1586914918478},\"Kanister\":{\"count\":8,\"lastSeenTime\":1586710393999,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"Nasenhaar\":{\"count\":8,\"lastSeenTime\":1586919917033},\"Apokalypse\":{\"count\":5,\"lastSeenTime\":1586874424086},\"Hürdenlauf\":{\"count\":4,\"lastSeenTime\":1586913556716},\"Sprache\":{\"count\":8,\"lastSeenTime\":1586956501071,\"difficulty\":1,\"difficultyWeight\":4},\"Bomberman\":{\"count\":6,\"lastSeenTime\":1586874456666,\"difficulty\":0.75,\"difficultyWeight\":12},\"Labyrinth\":{\"count\":6,\"lastSeenTime\":1586957848254,\"difficulty\":1,\"difficultyWeight\":4},\"Rasierschaum\":{\"count\":5,\"lastSeenTime\":1586874742120},\"Skrillex\":{\"count\":4,\"lastSeenTime\":1586914501681},\"Laboratorium\":{\"count\":9,\"lastSeenTime\":1586958278719},\"Kapitän\":{\"count\":8,\"lastSeenTime\":1586954900699},\"Chihuahua\":{\"count\":8,\"lastSeenTime\":1586920761496,\"publicGameCount\":1},\"giftig\":{\"count\":5,\"lastSeenTime\":1586814434311},\"winzig\":{\"count\":8,\"lastSeenTime\":1586919868530},\"Friseur\":{\"count\":7,\"lastSeenTime\":1586908996510},\"Weizen\":{\"count\":5,\"lastSeenTime\":1586913670980,\"difficulty\":0.7,\"difficultyWeight\":10},\"Trompete\":{\"count\":9,\"lastSeenTime\":1586958821795,\"publicGameCount\":1,\"difficulty\":0.8125,\"difficultyWeight\":16},\"backen\":{\"count\":8,\"lastSeenTime\":1586920926700},\"Brennnessel\":{\"count\":9,\"lastSeenTime\":1586959557107,\"difficulty\":1,\"difficultyWeight\":9},\"goldenes Ei\":{\"count\":4,\"lastSeenTime\":1586880869166,\"publicGameCount\":1,\"difficulty\":0.3333333333333333,\"difficultyWeight\":6},\"Feuerball\":{\"count\":5,\"lastSeenTime\":1586908079268,\"difficulty\":0.75,\"difficultyWeight\":16},\"Maikäfer\":{\"count\":3,\"lastSeenTime\":1586839864880},\"Clownfisch\":{\"count\":7,\"lastSeenTime\":1586907361110,\"difficulty\":0.75,\"difficultyWeight\":40,\"publicGameCount\":1},\"Sonnenbrand\":{\"count\":9,\"lastSeenTime\":1586915960185},\"Vitamin\":{\"count\":5,\"lastSeenTime\":1586880100518},\"Fastfood\":{\"count\":6,\"lastSeenTime\":1586958998098},\"Suppe\":{\"count\":9,\"lastSeenTime\":1586956516194,\"difficulty\":0.625,\"difficultyWeight\":8},\"Diener\":{\"count\":4,\"lastSeenTime\":1586903271433,\"difficulty\":1,\"difficultyWeight\":2},\"Diva\":{\"count\":10,\"lastSeenTime\":1586909335317},\"stark\":{\"count\":9,\"lastSeenTime\":1586956477794,\"difficulty\":0.375,\"difficultyWeight\":8},\"Eiszapfen\":{\"count\":4,\"lastSeenTime\":1586901471842},\"Physalis\":{\"count\":9,\"lastSeenTime\":1586920069685},\"Marshmallow\":{\"count\":12,\"lastSeenTime\":1586959455308},\"Velociraptor\":{\"count\":10,\"lastSeenTime\":1586915529401,\"difficulty\":1,\"difficultyWeight\":3},\"Umweltverschmutzung\":{\"count\":4,\"lastSeenTime\":1586826994350},\"schüchtern\":{\"count\":7,\"lastSeenTime\":1586907327679},\"Bayern\":{\"count\":5,\"lastSeenTime\":1586869155093},\"Gottesanbeterin\":{\"count\":6,\"lastSeenTime\":1586916027724},\"Pirat\":{\"count\":7,\"lastSeenTime\":1586920737024},\"Leuchtreklame\":{\"count\":3,\"lastSeenTime\":1586900446863,\"difficulty\":1,\"difficultyWeight\":5},\"Argentinien\":{\"count\":7,\"lastSeenTime\":1586890826443},\"Zug\":{\"count\":11,\"lastSeenTime\":1586891319807,\"publicGameCount\":1,\"difficulty\":0.9333333333333333,\"difficultyWeight\":15},\"Ärmel\":{\"count\":5,\"lastSeenTime\":1586896252833,\"difficulty\":0.9,\"difficultyWeight\":10},\"Dschungel\":{\"count\":6,\"lastSeenTime\":1586832410030,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":6},\"Zigarette\":{\"count\":12,\"lastSeenTime\":1586915365103,\"difficulty\":0.7857142857142857,\"difficultyWeight\":14},\"Goldfisch\":{\"count\":13,\"lastSeenTime\":1586907414380,\"difficulty\":0.7777777777777778,\"difficultyWeight\":18},\"Junk Food\":{\"count\":6,\"lastSeenTime\":1586903867648},\"Löwe\":{\"count\":9,\"lastSeenTime\":1586955726995,\"difficulty\":1,\"difficultyWeight\":7},\"Pflaster\":{\"count\":3,\"lastSeenTime\":1586955249129,\"difficulty\":1,\"difficultyWeight\":10},\"zelten\":{\"count\":2,\"lastSeenTime\":1586958907689,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Gemüse\":{\"count\":7,\"lastSeenTime\":1586916153776,\"difficulty\":0.75,\"difficultyWeight\":12},\"verteidigen\":{\"count\":6,\"lastSeenTime\":1586921022722},\"Schnauze\":{\"count\":8,\"lastSeenTime\":1586839274332},\"Dieb\":{\"count\":10,\"lastSeenTime\":1586832874040},\"Cajon\":{\"count\":5,\"lastSeenTime\":1586907829080},\"Saxofon\":{\"count\":3,\"lastSeenTime\":1586955385136},\"Turmalin\":{\"count\":2,\"lastSeenTime\":1586959314784},\"alt\":{\"count\":6,\"lastSeenTime\":1586908731467},\"Safari\":{\"count\":5,\"lastSeenTime\":1586908006992},\"Teich\":{\"count\":8,\"lastSeenTime\":1586921142411,\"publicGameCount\":1,\"difficulty\":0.9166666666666666,\"difficultyWeight\":12},\"Wildwasserbahn\":{\"count\":8,\"lastSeenTime\":1586868482944},\"Hula Hoop\":{\"count\":6,\"lastSeenTime\":1586900001994,\"difficulty\":0.7692307692307693,\"difficultyWeight\":13},\"Zahnpasta\":{\"count\":2,\"lastSeenTime\":1586568563727,\"publicGameCount\":1,\"difficulty\":0.5238095238095238,\"difficultyWeight\":21},\"Rindfleisch\":{\"count\":4,\"lastSeenTime\":1586860097373},\"Zehnagel\":{\"count\":7,\"lastSeenTime\":1586914683667},\"Mosaik\":{\"count\":6,\"lastSeenTime\":1586896117394},\"Rockstar\":{\"count\":4,\"lastSeenTime\":1586726069070},\"Opfer\":{\"count\":9,\"lastSeenTime\":1586958697329},\"Kiefer\":{\"count\":9,\"lastSeenTime\":1586959106188,\"difficulty\":0.9285714285714286,\"difficultyWeight\":70},\"Düne\":{\"count\":5,\"lastSeenTime\":1586915406529,\"difficulty\":1,\"difficultyWeight\":17},\"Urlaub\":{\"count\":6,\"lastSeenTime\":1586901521530,\"difficulty\":0.5,\"difficultyWeight\":4},\"Satellit\":{\"count\":5,\"lastSeenTime\":1586958859906,\"difficulty\":0,\"difficultyWeight\":1},\"Bargeld\":{\"count\":3,\"lastSeenTime\":1586817668923},\"links\":{\"count\":8,\"lastSeenTime\":1586959840559},\"klettern\":{\"count\":5,\"lastSeenTime\":1586889515810},\"Graffiti\":{\"count\":8,\"lastSeenTime\":1586954914968},\"Schrank\":{\"count\":7,\"lastSeenTime\":1586919941975,\"difficulty\":0.75,\"difficultyWeight\":8},\"Apple\":{\"count\":10,\"lastSeenTime\":1586903370090},\"Flasche\":{\"count\":9,\"lastSeenTime\":1586958510664},\"Untersetzer\":{\"count\":6,\"lastSeenTime\":1586901812091,\"difficulty\":0.88,\"difficultyWeight\":25},\"Rom\":{\"count\":10,\"lastSeenTime\":1586908893157},\"Höhlenforscher\":{\"count\":3,\"lastSeenTime\":1586812916765},\"Picasso\":{\"count\":9,\"lastSeenTime\":1586897236338,\"difficulty\":1,\"difficultyWeight\":6},\"Türsteher\":{\"count\":6,\"lastSeenTime\":1586916101564},\"Ukulele\":{\"count\":5,\"lastSeenTime\":1586920797958,\"difficulty\":0.8571428571428571,\"difficultyWeight\":14},\"Medaille\":{\"count\":4,\"lastSeenTime\":1586724733005,\"difficulty\":0.9830508474576272,\"difficultyWeight\":59},\"Cousin\":{\"count\":6,\"lastSeenTime\":1586879212090},\"Bongo\":{\"count\":8,\"lastSeenTime\":1586881205453,\"difficulty\":0.45454545454545453,\"difficultyWeight\":11},\"jung\":{\"count\":10,\"lastSeenTime\":1586902787660,\"publicGameCount\":1,\"difficulty\":0.6666666666666667,\"difficultyWeight\":9},\"Computer\":{\"count\":7,\"lastSeenTime\":1586907977622,\"publicGameCount\":1,\"difficulty\":0.9285714285714286,\"difficultyWeight\":14},\"Schotter\":{\"count\":6,\"lastSeenTime\":1586903429291},\"Flöte\":{\"count\":5,\"lastSeenTime\":1586908480352,\"difficulty\":0.9166666666666666,\"difficultyWeight\":12},\"Eselsohr\":{\"count\":8,\"lastSeenTime\":1586879959531,\"publicGameCount\":1,\"difficulty\":0.9333333333333333,\"difficultyWeight\":45},\"Rezeptionist\":{\"count\":5,\"lastSeenTime\":1586874966390},\"Junge\":{\"count\":10,\"lastSeenTime\":1586958582243},\"Straßenbahn\":{\"count\":6,\"lastSeenTime\":1586920843703,\"difficulty\":1,\"difficultyWeight\":37},\"Murmeln\":{\"count\":7,\"lastSeenTime\":1586956545635},\"Schere\":{\"count\":9,\"lastSeenTime\":1586869695200,\"publicGameCount\":1,\"difficulty\":0.47058823529411764,\"difficultyWeight\":17},\"Heckspoiler\":{\"count\":4,\"lastSeenTime\":1586955958335},\"verdampfen\":{\"count\":10,\"lastSeenTime\":1586955701781},\"Truthahn\":{\"count\":13,\"lastSeenTime\":1586958335993},\"Avocado\":{\"count\":9,\"lastSeenTime\":1586915960185,\"difficulty\":0.7,\"difficultyWeight\":10},\"gestresst\":{\"count\":6,\"lastSeenTime\":1586916023587},\"Sonne\":{\"count\":10,\"lastSeenTime\":1586958719765,\"difficulty\":0.5238095238095238,\"difficultyWeight\":21,\"publicGameCount\":1},\"Diät\":{\"count\":5,\"lastSeenTime\":1586896181329},\"traurig\":{\"count\":10,\"lastSeenTime\":1586955138676,\"difficulty\":0.6666666666666666,\"difficultyWeight\":6},\"Elch\":{\"count\":7,\"lastSeenTime\":1586916027724,\"difficulty\":0.5,\"difficultyWeight\":8},\"Luftmatratze\":{\"count\":4,\"lastSeenTime\":1586840877832,\"publicGameCount\":1,\"difficulty\":0.75,\"difficultyWeight\":8},\"Rubin\":{\"count\":3,\"lastSeenTime\":1586904161945,\"difficulty\":0.9285714285714286,\"difficultyWeight\":14,\"publicGameCount\":1},\"Waschlappen\":{\"count\":7,\"lastSeenTime\":1586908504643},\"Eselsbrücke\":{\"count\":4,\"lastSeenTime\":1586813267167,\"difficulty\":0.8387096774193549,\"difficultyWeight\":62},\"Eistee\":{\"count\":9,\"lastSeenTime\":1586908118744},\"Reise\":{\"count\":10,\"lastSeenTime\":1586880290728},\"Glücksspiel\":{\"count\":5,\"lastSeenTime\":1586891062617,\"difficulty\":1,\"difficultyWeight\":7},\"Party\":{\"count\":5,\"lastSeenTime\":1586826796918,\"difficulty\":0.7674418604651163,\"difficultyWeight\":43},\"Feuerzeug\":{\"count\":8,\"lastSeenTime\":1586959207698,\"difficulty\":1,\"difficultyWeight\":7},\"Trend\":{\"count\":6,\"lastSeenTime\":1586895477389},\"Schlüsselbund\":{\"count\":4,\"lastSeenTime\":1586840879616},\"Zeuge\":{\"count\":2,\"lastSeenTime\":1586896530203},\"Einschlag\":{\"count\":6,\"lastSeenTime\":1586955224835},\"Tablet\":{\"count\":12,\"lastSeenTime\":1586958755749},\"Aussichtspunkt\":{\"count\":12,\"lastSeenTime\":1586920576642,\"difficulty\":0.6875,\"difficultyWeight\":16},\"Käfer\":{\"count\":8,\"lastSeenTime\":1586890093454},\"Gänseblümchen\":{\"count\":12,\"lastSeenTime\":1586956263288,\"difficulty\":1,\"difficultyWeight\":10},\"ABBA\":{\"count\":5,\"lastSeenTime\":1586959728501},\"Desoxyribonukleinsäure\":{\"count\":7,\"lastSeenTime\":1586815682131},\"draußen\":{\"count\":5,\"lastSeenTime\":1586920119062},\"Präsident\":{\"count\":5,\"lastSeenTime\":1586815439060},\"Tuba\":{\"count\":6,\"lastSeenTime\":1586908204031},\"betrügen\":{\"count\":8,\"lastSeenTime\":1586880201224},\"Kleeblatt\":{\"count\":13,\"lastSeenTime\":1586959753084,\"difficulty\":0.7833333333333333,\"difficultyWeight\":60},\"Fahrrad\":{\"count\":3,\"lastSeenTime\":1586707253394},\"Seestern\":{\"count\":12,\"lastSeenTime\":1586921241738,\"difficulty\":0.5,\"difficultyWeight\":12,\"publicGameCount\":1},\"Comic\":{\"count\":5,\"lastSeenTime\":1586874869836},\"Safe\":{\"count\":6,\"lastSeenTime\":1586916266718},\"Tschechien\":{\"count\":3,\"lastSeenTime\":1586707005648,\"difficulty\":0.7,\"difficultyWeight\":10},\"Baum\":{\"count\":6,\"lastSeenTime\":1586908996510,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":10},\"W-LAN\":{\"count\":7,\"lastSeenTime\":1586959622590},\"Pokemon\":{\"count\":9,\"lastSeenTime\":1586957940022},\"Gehirnwäsche\":{\"count\":9,\"lastSeenTime\":1586904343119},\"Patriot\":{\"count\":12,\"lastSeenTime\":1586914845805},\"Schwimmbad\":{\"count\":9,\"lastSeenTime\":1586869648250,\"publicGameCount\":2,\"difficulty\":0.75,\"difficultyWeight\":16},\"Limousine\":{\"count\":6,\"lastSeenTime\":1586959391653},\"Gesichtsbemalung\":{\"count\":9,\"lastSeenTime\":1586919941975},\"Paprika\":{\"count\":4,\"lastSeenTime\":1586895689435},\"Absperrband\":{\"count\":8,\"lastSeenTime\":1586889393401},\"Kamm\":{\"count\":7,\"lastSeenTime\":1586904357384,\"difficulty\":0.85,\"difficultyWeight\":20},\"Irland\":{\"count\":2,\"lastSeenTime\":1586889696772},\"Föhn\":{\"count\":7,\"lastSeenTime\":1586959168567},\"Rose\":{\"count\":7,\"lastSeenTime\":1586959106188,\"difficulty\":0.9090909090909091,\"difficultyWeight\":11},\"Seilrutsche\":{\"count\":10,\"lastSeenTime\":1586920285874},\"Herbst\":{\"count\":6,\"lastSeenTime\":1586959533143,\"difficulty\":1,\"difficultyWeight\":4},\"Apfel\":{\"count\":9,\"lastSeenTime\":1586909335317},\"Fahnenstange\":{\"count\":5,\"lastSeenTime\":1586903221605},\"Skateboard\":{\"count\":6,\"lastSeenTime\":1586915392140},\"spucken\":{\"count\":3,\"lastSeenTime\":1586723813838},\"Meerjungfrau\":{\"count\":8,\"lastSeenTime\":1586914109258,\"publicGameCount\":1,\"difficulty\":0.5,\"difficultyWeight\":8},\"Löwenzahn\":{\"count\":4,\"lastSeenTime\":1586834155226,\"difficulty\":0.7777777777777778,\"difficultyWeight\":9},\"Armbanduhr\":{\"count\":9,\"lastSeenTime\":1586909311071,\"publicGameCount\":2,\"difficulty\":0.6666666666666666,\"difficultyWeight\":6},\"Fabrik\":{\"count\":2,\"lastSeenTime\":1586633994738},\"Berühmtheit\":{\"count\":6,\"lastSeenTime\":1586955938117},\"NASCAR\":{\"count\":4,\"lastSeenTime\":1586713655448},\"Urknall\":{\"count\":4,\"lastSeenTime\":1586812433787},\"Nest\":{\"count\":7,\"lastSeenTime\":1586919750850,\"difficulty\":0.8571428571428571,\"difficultyWeight\":14},\"Bernstein\":{\"count\":13,\"lastSeenTime\":1586959585641,\"difficulty\":1,\"difficultyWeight\":4},\"Auge\":{\"count\":19,\"lastSeenTime\":1586920265574,\"difficulty\":0.5789473684210527,\"difficultyWeight\":19,\"publicGameCount\":1},\"Skispringen\":{\"count\":4,\"lastSeenTime\":1586954588805},\"Sphinx\":{\"count\":4,\"lastSeenTime\":1586881119264},\"Wind\":{\"count\":7,\"lastSeenTime\":1586919968806,\"difficulty\":1,\"difficultyWeight\":16},\"Piratenschiff\":{\"count\":4,\"lastSeenTime\":1586900828046,\"difficulty\":0.9459459459459459,\"difficultyWeight\":37},\"Twitter\":{\"count\":10,\"lastSeenTime\":1586958848321,\"publicGameCount\":1,\"difficulty\":0.8,\"difficultyWeight\":10},\"genau\":{\"count\":8,\"lastSeenTime\":1586826669362,\"difficulty\":1,\"difficultyWeight\":3},\"Pelikan\":{\"count\":5,\"lastSeenTime\":1586954698858,\"difficulty\":1,\"difficultyWeight\":2},\"Katastrophe\":{\"count\":4,\"lastSeenTime\":1586914754340},\"Hotdog\":{\"count\":5,\"lastSeenTime\":1586908838335},\"Sport\":{\"count\":6,\"lastSeenTime\":1586813898884},\"Toilette\":{\"count\":5,\"lastSeenTime\":1586873774235,\"difficulty\":0.9166666666666666,\"difficultyWeight\":12},\"Schranke\":{\"count\":6,\"lastSeenTime\":1586903059681},\"lustig\":{\"count\":6,\"lastSeenTime\":1586858614527},\"Fleischbällchen\":{\"count\":7,\"lastSeenTime\":1586958385310,\"difficulty\":1,\"difficultyWeight\":6},\"Strudel\":{\"count\":5,\"lastSeenTime\":1586959193290},\"Spiegelei\":{\"count\":7,\"lastSeenTime\":1586869103569,\"difficulty\":0.6666666666666667,\"difficultyWeight\":9},\"Einhorn\":{\"count\":10,\"lastSeenTime\":1586901028464,\"publicGameCount\":1,\"difficulty\":0.75,\"difficultyWeight\":8},\"Rücken\":{\"count\":6,\"lastSeenTime\":1586959417006,\"difficulty\":1,\"difficultyWeight\":36},\"pflügen\":{\"count\":5,\"lastSeenTime\":1586908054437},\"Goofy\":{\"count\":9,\"lastSeenTime\":1586959789851},\"Seifenoper\":{\"count\":4,\"lastSeenTime\":1586902616627},\"Kopflaus\":{\"count\":3,\"lastSeenTime\":1586879608242},\"Traumfänger\":{\"count\":5,\"lastSeenTime\":1586903097380},\"Kernspintomografie\":{\"count\":6,\"lastSeenTime\":1586921270600},\"klingen\":{\"count\":5,\"lastSeenTime\":1586914243836},\"Kaulquappe\":{\"count\":6,\"lastSeenTime\":1586913698511,\"difficulty\":0.8823529411764706,\"difficultyWeight\":17},\"vorspulen\":{\"count\":6,\"lastSeenTime\":1586913816802},\"Augenlid\":{\"count\":10,\"lastSeenTime\":1586957950175},\"Panda\":{\"count\":11,\"lastSeenTime\":1586920637722},\"Singapur\":{\"count\":5,\"lastSeenTime\":1586840929412},\"Zauberer\":{\"count\":6,\"lastSeenTime\":1586955238992},\"Himbeere\":{\"count\":10,\"lastSeenTime\":1586909016736},\"Cerberus\":{\"count\":7,\"lastSeenTime\":1586959830012},\"Pfirsich\":{\"count\":5,\"lastSeenTime\":1586806870118},\"Dachs\":{\"count\":2,\"lastSeenTime\":1586914418213},\"bleichen\":{\"count\":6,\"lastSeenTime\":1586881168379},\"Photoshop\":{\"count\":7,\"lastSeenTime\":1586899941163},\"Hut\":{\"count\":7,\"lastSeenTime\":1586955344691},\"Text\":{\"count\":6,\"lastSeenTime\":1586959269543},\"Jesus\":{\"count\":3,\"lastSeenTime\":1586880616380,\"difficulty\":0.8888888888888888,\"difficultyWeight\":9},\"stehen\":{\"count\":8,\"lastSeenTime\":1586957974879},\"Chinatown\":{\"count\":4,\"lastSeenTime\":1586832383649},\"Tausendfüßer\":{\"count\":11,\"lastSeenTime\":1586903624140,\"difficulty\":0.6,\"difficultyWeight\":10},\"Schlitten\":{\"count\":8,\"lastSeenTime\":1586873964321,\"difficulty\":0.7647058823529411,\"difficultyWeight\":34},\"Rakete\":{\"count\":12,\"lastSeenTime\":1586955838030,\"difficulty\":1,\"difficultyWeight\":104},\"Glatze\":{\"count\":4,\"lastSeenTime\":1586891242624,\"difficulty\":0.7441860465116279,\"difficultyWeight\":43},\"Kopie\":{\"count\":8,\"lastSeenTime\":1586955392320},\"älter\":{\"count\":10,\"lastSeenTime\":1586955634694},\"Weihnachtsbaum\":{\"count\":7,\"lastSeenTime\":1586913606771,\"difficulty\":0.6,\"difficultyWeight\":5},\"Ruder\":{\"count\":5,\"lastSeenTime\":1586897420912,\"difficulty\":0.8333333333333334,\"difficultyWeight\":24},\"Ecke\":{\"count\":7,\"lastSeenTime\":1586920576642},\"Bohne\":{\"count\":8,\"lastSeenTime\":1586958998098},\"Apotheker\":{\"count\":9,\"lastSeenTime\":1586915566245,\"difficulty\":0.8333333333333334,\"difficultyWeight\":18},\"Scherzkeks\":{\"count\":5,\"lastSeenTime\":1586955654939},\"Küste\":{\"count\":9,\"lastSeenTime\":1586900749848,\"publicGameCount\":1,\"difficulty\":0.625,\"difficultyWeight\":8},\"anzünden\":{\"count\":8,\"lastSeenTime\":1586958027091,\"difficulty\":0.8,\"difficultyWeight\":20},\"googeln\":{\"count\":7,\"lastSeenTime\":1586920133284,\"difficulty\":1,\"difficultyWeight\":6},\"wackeln\":{\"count\":4,\"lastSeenTime\":1586873308659},\"Roter Teppich\":{\"count\":3,\"lastSeenTime\":1586890539988,\"difficulty\":1,\"difficultyWeight\":3},\"Scheune\":{\"count\":6,\"lastSeenTime\":1586920034941},\"Schlachter\":{\"count\":5,\"lastSeenTime\":1586873642917},\"Vogelscheuche\":{\"count\":7,\"lastSeenTime\":1586959417006,\"publicGameCount\":1,\"difficulty\":0.5714285714285714,\"difficultyWeight\":14},\"Sauerstoff\":{\"count\":5,\"lastSeenTime\":1586897343815},\"Ente\":{\"count\":4,\"lastSeenTime\":1586914831496,\"difficulty\":0.9333333333333333,\"difficultyWeight\":15},\"blind\":{\"count\":6,\"lastSeenTime\":1586859567294,\"difficulty\":0.7222222222222222,\"difficultyWeight\":18},\"Blasebalg\":{\"count\":9,\"lastSeenTime\":1586920483192,\"difficulty\":1,\"difficultyWeight\":6},\"Kathedrale\":{\"count\":7,\"lastSeenTime\":1586915624112},\"Altglascontainer\":{\"count\":2,\"lastSeenTime\":1586619769643},\"Poster\":{\"count\":11,\"lastSeenTime\":1586955913834,\"difficulty\":0.5,\"difficultyWeight\":8},\"rot\":{\"count\":6,\"lastSeenTime\":1586900776963},\"Windel\":{\"count\":5,\"lastSeenTime\":1586726463833},\"Bösewicht\":{\"count\":4,\"lastSeenTime\":1586903915052},\"Bettwanze\":{\"count\":7,\"lastSeenTime\":1586915006438},\"schwingen\":{\"count\":10,\"lastSeenTime\":1586956009184,\"difficulty\":0.9166666666666666,\"difficultyWeight\":12},\"Kaffee\":{\"count\":9,\"lastSeenTime\":1586908494479},\"Tennis\":{\"count\":5,\"lastSeenTime\":1586710847152},\"Priester\":{\"count\":7,\"lastSeenTime\":1586955517664},\"elektrisch\":{\"count\":3,\"lastSeenTime\":1586914280738},\"Schneeflocke\":{\"count\":10,\"lastSeenTime\":1586921032863,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Bus\":{\"count\":7,\"lastSeenTime\":1586956453935},\"Kindergarten\":{\"count\":5,\"lastSeenTime\":1586900125985},\"Goblin\":{\"count\":4,\"lastSeenTime\":1586869879731},\"Revolver\":{\"count\":9,\"lastSeenTime\":1586956489403},\"Versteck\":{\"count\":6,\"lastSeenTime\":1586902853216},\"Polarlicht\":{\"count\":12,\"lastSeenTime\":1586907486194,\"difficulty\":0.8431372549019608,\"difficultyWeight\":51},\"Speer\":{\"count\":8,\"lastSeenTime\":1586913581904},\"befehlen\":{\"count\":5,\"lastSeenTime\":1586726791412},\"Beute\":{\"count\":5,\"lastSeenTime\":1586879469524},\"Möhre\":{\"count\":10,\"lastSeenTime\":1586954713056},\"MTV\":{\"count\":13,\"lastSeenTime\":1586914373601},\"Nutella\":{\"count\":4,\"lastSeenTime\":1586869069583,\"difficulty\":1,\"difficultyWeight\":2},\"Grinsen\":{\"count\":6,\"lastSeenTime\":1586959121500,\"difficulty\":1,\"difficultyWeight\":8},\"saufen\":{\"count\":3,\"lastSeenTime\":1586726288386},\"Koralle\":{\"count\":14,\"lastSeenTime\":1586955224835},\"Ende\":{\"count\":3,\"lastSeenTime\":1586813572686,\"difficulty\":0.6666666666666666,\"difficultyWeight\":3},\"Halbinsel\":{\"count\":6,\"lastSeenTime\":1586869576824},\"Wasserfall\":{\"count\":5,\"lastSeenTime\":1586916565022,\"difficulty\":0.6666666666666666,\"difficultyWeight\":9,\"publicGameCount\":1},\"Fuß\":{\"count\":3,\"lastSeenTime\":1586909104982},\"Thermometer\":{\"count\":4,\"lastSeenTime\":1586897053852},\"Chat\":{\"count\":6,\"lastSeenTime\":1586838997852,\"difficulty\":0.7058823529411765,\"difficultyWeight\":17},\"Werbespot\":{\"count\":4,\"lastSeenTime\":1586726387745},\"Gebrauchtwagenhändler\":{\"count\":9,\"lastSeenTime\":1586920538046,\"difficulty\":1,\"difficultyWeight\":10},\"Fisch\":{\"count\":11,\"lastSeenTime\":1586916404987,\"difficulty\":1,\"difficultyWeight\":36},\"zerreißen\":{\"count\":5,\"lastSeenTime\":1586919697403,\"difficulty\":1,\"difficultyWeight\":10},\"Schaufensterpuppe\":{\"count\":7,\"lastSeenTime\":1586916382544},\"Tapete\":{\"count\":11,\"lastSeenTime\":1586903246007,\"difficulty\":0.6111111111111112,\"difficultyWeight\":18},\"Ober\":{\"count\":8,\"lastSeenTime\":1586955809521,\"difficulty\":1,\"difficultyWeight\":4},\"Diplom\":{\"count\":7,\"lastSeenTime\":1586916252219},\"Strahlung\":{\"count\":8,\"lastSeenTime\":1586900895312},\"stechen\":{\"count\":10,\"lastSeenTime\":1586958642478},\"Espresso\":{\"count\":5,\"lastSeenTime\":1586909006610,\"difficulty\":0.8333333333333334,\"difficultyWeight\":18},\"Rutsche\":{\"count\":6,\"lastSeenTime\":1586868015613},\"skribbl.io\":{\"count\":4,\"lastSeenTime\":1586832435328},\"kurz\":{\"count\":10,\"lastSeenTime\":1586907668803},\"Wörterbuch\":{\"count\":4,\"lastSeenTime\":1586727362775,\"difficulty\":1,\"difficultyWeight\":17},\"Mont Blanc\":{\"count\":6,\"lastSeenTime\":1586815159300},\"Hamster\":{\"count\":7,\"lastSeenTime\":1586869613566},\"Artist\":{\"count\":3,\"lastSeenTime\":1586914869480},\"Champion\":{\"count\":3,\"lastSeenTime\":1586817823665,\"difficulty\":0.875,\"difficultyWeight\":8},\"Addition\":{\"count\":6,\"lastSeenTime\":1586956253026},\"Haselnuss\":{\"count\":6,\"lastSeenTime\":1586921096637},\"Oktoberfest\":{\"count\":8,\"lastSeenTime\":1586955862348},\"Kürbislaterne\":{\"count\":6,\"lastSeenTime\":1586900927708},\"Glücksrad\":{\"count\":9,\"lastSeenTime\":1586818937722},\"schielen\":{\"count\":3,\"lastSeenTime\":1586596228156},\"zerren\":{\"count\":10,\"lastSeenTime\":1586955409372},\"Hockey\":{\"count\":4,\"lastSeenTime\":1586900226190,\"difficulty\":0.8636363636363636,\"difficultyWeight\":22},\"Keller\":{\"count\":3,\"lastSeenTime\":1586839939626},\"Playstation\":{\"count\":9,\"lastSeenTime\":1586915493381,\"difficulty\":0.7692307692307693,\"difficultyWeight\":13},\"Bugs Bunny\":{\"count\":5,\"lastSeenTime\":1586954698858},\"Spender\":{\"count\":7,\"lastSeenTime\":1586784575401},\"Flaschendrehen\":{\"count\":6,\"lastSeenTime\":1586879929914,\"publicGameCount\":1,\"difficulty\":0.7,\"difficultyWeight\":10},\"Stuhlbein\":{\"count\":7,\"lastSeenTime\":1586900412247,\"difficulty\":1,\"difficultyWeight\":32},\"angreifen\":{\"count\":4,\"lastSeenTime\":1586827564451},\"Popeye\":{\"count\":6,\"lastSeenTime\":1586873629254},\"Verbrecher\":{\"count\":8,\"lastSeenTime\":1586916342434,\"difficulty\":0.8,\"difficultyWeight\":5},\"Federmäppchen\":{\"count\":5,\"lastSeenTime\":1586902813258},\"BMX\":{\"count\":6,\"lastSeenTime\":1586916266718},\"Chamäleon\":{\"count\":8,\"lastSeenTime\":1586880818922,\"difficulty\":0.8571428571428571,\"difficultyWeight\":14},\"Europa\":{\"count\":5,\"lastSeenTime\":1586873585720},\"Sattelschlepper\":{\"count\":6,\"lastSeenTime\":1586828072825},\"Magma\":{\"count\":5,\"lastSeenTime\":1586717707336,\"difficulty\":1,\"difficultyWeight\":8},\"Beule\":{\"count\":6,\"lastSeenTime\":1586859604461},\"Jalapeno\":{\"count\":5,\"lastSeenTime\":1586869197437},\"Detektiv\":{\"count\":7,\"lastSeenTime\":1586913497512},\"Ei\":{\"count\":8,\"lastSeenTime\":1586859308294,\"difficulty\":0.6666666666666666,\"difficultyWeight\":48},\"Storch\":{\"count\":3,\"lastSeenTime\":1586895909639},\"Gasse\":{\"count\":4,\"lastSeenTime\":1586958873120,\"difficulty\":1,\"difficultyWeight\":9},\"Champagner\":{\"count\":7,\"lastSeenTime\":1586920676259},\"Werbung\":{\"count\":7,\"lastSeenTime\":1586914094806,\"difficulty\":0.9565217391304348,\"difficultyWeight\":46},\"Hulk\":{\"count\":3,\"lastSeenTime\":1586880213361,\"difficulty\":1,\"difficultyWeight\":8},\"Mafia\":{\"count\":7,\"lastSeenTime\":1586920153587,\"difficulty\":1,\"difficultyWeight\":8},\"Strandkorb\":{\"count\":9,\"lastSeenTime\":1586956016971},\"kitzeln\":{\"count\":8,\"lastSeenTime\":1586920883005},\"Mexiko\":{\"count\":6,\"lastSeenTime\":1586879731749},\"Hochzeitskutsche\":{\"count\":5,\"lastSeenTime\":1586957989157,\"difficulty\":1,\"difficultyWeight\":9},\"Pastete\":{\"count\":8,\"lastSeenTime\":1586819518500},\"Schilf\":{\"count\":9,\"lastSeenTime\":1586897164255},\"Intel\":{\"count\":11,\"lastSeenTime\":1586919413397},\"Weihnachten\":{\"count\":3,\"lastSeenTime\":1586880506505,\"difficulty\":1,\"difficultyWeight\":12},\"Dose\":{\"count\":7,\"lastSeenTime\":1586920237009},\"Luchs\":{\"count\":3,\"lastSeenTime\":1586595496641,\"difficulty\":1,\"difficultyWeight\":11},\"Vogelstrauß\":{\"count\":7,\"lastSeenTime\":1586902713347,\"difficulty\":0.9090909090909091,\"difficultyWeight\":11},\"Stirn\":{\"count\":2,\"lastSeenTime\":1586890418363},\"Bar\":{\"count\":9,\"lastSeenTime\":1586903925357},\"Lama\":{\"count\":9,\"lastSeenTime\":1586956501071},\"Orchidee\":{\"count\":3,\"lastSeenTime\":1586899991881},\"berühmt\":{\"count\":9,\"lastSeenTime\":1586909119149},\"Boris Becker\":{\"count\":2,\"lastSeenTime\":1586580996457,\"difficulty\":1,\"difficultyWeight\":5},\"Katana\":{\"count\":4,\"lastSeenTime\":1586724355196},\"Riesenrad\":{\"count\":5,\"lastSeenTime\":1586955681359},\"Social Media\":{\"count\":5,\"lastSeenTime\":1586896605134},\"Voodoo\":{\"count\":10,\"lastSeenTime\":1586901206044,\"difficulty\":1,\"difficultyWeight\":6},\"Radar\":{\"count\":5,\"lastSeenTime\":1586900301076,\"difficulty\":1,\"difficultyWeight\":5},\"Tortenheber\":{\"count\":10,\"lastSeenTime\":1586913827190},\"Bauernhof\":{\"count\":3,\"lastSeenTime\":1586901801777},\"Segway\":{\"count\":3,\"lastSeenTime\":1586920900377,\"difficulty\":0.7575757575757576,\"difficultyWeight\":33},\"Ringelblume\":{\"count\":4,\"lastSeenTime\":1586914903455},\"Trophäe\":{\"count\":7,\"lastSeenTime\":1586900881142},\"Atem\":{\"count\":5,\"lastSeenTime\":1586958012186},\"Oase\":{\"count\":7,\"lastSeenTime\":1586896127512},\"Weinglas\":{\"count\":3,\"lastSeenTime\":1586895726867,\"difficulty\":1,\"difficultyWeight\":3},\"Reinkarnation\":{\"count\":14,\"lastSeenTime\":1586916637868},\"Matrjoschka\":{\"count\":6,\"lastSeenTime\":1586915664822},\"Regenmantel\":{\"count\":6,\"lastSeenTime\":1586955737202},\"Peppa Pig\":{\"count\":6,\"lastSeenTime\":1586818357030},\"Tastatur\":{\"count\":9,\"lastSeenTime\":1586919394915,\"difficulty\":1,\"difficultyWeight\":8},\"Samstag\":{\"count\":13,\"lastSeenTime\":1586955370991,\"difficulty\":1,\"difficultyWeight\":8},\"Killerwal\":{\"count\":6,\"lastSeenTime\":1586895562695},\"Sternfrucht\":{\"count\":9,\"lastSeenTime\":1586921256075,\"difficulty\":0.6666666666666666,\"difficultyWeight\":6},\"Muskel\":{\"count\":8,\"lastSeenTime\":1586959695898},\"erschreckend\":{\"count\":4,\"lastSeenTime\":1586709223746,\"publicGameCount\":1,\"difficulty\":0.8333333333333334,\"difficultyWeight\":6},\"Allergie\":{\"count\":6,\"lastSeenTime\":1586956352310,\"difficulty\":0.42857142857142855,\"difficultyWeight\":7},\"Himmel\":{\"count\":10,\"lastSeenTime\":1586919736561,\"difficulty\":0.94,\"difficultyWeight\":50},\"Oberteil\":{\"count\":7,\"lastSeenTime\":1586958642478},\"Kreide\":{\"count\":9,\"lastSeenTime\":1586958973713},\"Kermit\":{\"count\":6,\"lastSeenTime\":1586869916885},\"Eis am Stiel\":{\"count\":4,\"lastSeenTime\":1586914134487},\"Staffelei\":{\"count\":8,\"lastSeenTime\":1586909063921,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":32},\"Kissenschlacht\":{\"count\":7,\"lastSeenTime\":1586914590565},\"Falle\":{\"count\":6,\"lastSeenTime\":1586900828046,\"difficulty\":0.8421052631578947,\"difficultyWeight\":38},\"Korb\":{\"count\":10,\"lastSeenTime\":1586920346900},\"Limette\":{\"count\":6,\"lastSeenTime\":1586954664216,\"difficulty\":0.9310344827586207,\"difficultyWeight\":29},\"Rauch\":{\"count\":8,\"lastSeenTime\":1586914820916},\"Helium\":{\"count\":6,\"lastSeenTime\":1586916550509},\"Ahorn\":{\"count\":5,\"lastSeenTime\":1586890315125},\"Klobrille\":{\"count\":7,\"lastSeenTime\":1586903271433,\"publicGameCount\":1,\"difficulty\":0.875,\"difficultyWeight\":16},\"falten\":{\"count\":5,\"lastSeenTime\":1586868317304,\"difficulty\":0.7142857142857143,\"difficultyWeight\":14},\"Preisschild\":{\"count\":4,\"lastSeenTime\":1586908189842},\"Shampoo\":{\"count\":5,\"lastSeenTime\":1586596511045},\"Hängematte\":{\"count\":4,\"lastSeenTime\":1586913783575,\"difficulty\":0.4444444444444444,\"difficultyWeight\":9},\"Monaco\":{\"count\":9,\"lastSeenTime\":1586955385136},\"Laptop\":{\"count\":11,\"lastSeenTime\":1586956545635,\"difficulty\":0.42857142857142855,\"difficultyWeight\":7},\"Banane\":{\"count\":6,\"lastSeenTime\":1586873408581},\"Pac-Man\":{\"count\":7,\"lastSeenTime\":1586889858351,\"difficulty\":0.9375,\"difficultyWeight\":16},\"Radio\":{\"count\":3,\"lastSeenTime\":1586727102331,\"difficulty\":0.7777777777777778,\"difficultyWeight\":36},\"Mörder\":{\"count\":3,\"lastSeenTime\":1586727017449,\"difficulty\":1,\"difficultyWeight\":6},\"Sanduhr\":{\"count\":7,\"lastSeenTime\":1586826882193,\"difficulty\":0.7,\"difficultyWeight\":10},\"Jay Z\":{\"count\":4,\"lastSeenTime\":1586879531452},\"Einkaufswagen\":{\"count\":8,\"lastSeenTime\":1586816175412,\"difficulty\":1,\"difficultyWeight\":8},\"Bluterguss\":{\"count\":7,\"lastSeenTime\":1586956324955,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":7},\"Green Lantern\":{\"count\":7,\"lastSeenTime\":1586959595986},\"Quartal\":{\"count\":2,\"lastSeenTime\":1586716898363},\"Spinne\":{\"count\":8,\"lastSeenTime\":1586913633876,\"difficulty\":0.5263157894736842,\"difficultyWeight\":19},\"Pfannkuchen\":{\"count\":9,\"lastSeenTime\":1586956545635,\"difficulty\":0.9607843137254902,\"difficultyWeight\":51},\"Rippe\":{\"count\":14,\"lastSeenTime\":1586958471219,\"difficulty\":0.9166666666666666,\"difficultyWeight\":12},\"schwarz\":{\"count\":5,\"lastSeenTime\":1586954999969,\"publicGameCount\":1,\"difficulty\":0.6666666666666666,\"difficultyWeight\":3},\"Silberbesteck\":{\"count\":8,\"lastSeenTime\":1586816892701},\"Russland\":{\"count\":2,\"lastSeenTime\":1586568214189,\"difficulty\":1,\"difficultyWeight\":8},\"Sumpf\":{\"count\":7,\"lastSeenTime\":1586915428040},\"Vogelbad\":{\"count\":6,\"lastSeenTime\":1586903781874},\"Torte\":{\"count\":6,\"lastSeenTime\":1586914727219,\"difficulty\":0.8,\"difficultyWeight\":20},\"Klaue\":{\"count\":4,\"lastSeenTime\":1586919394915},\"Sherlock Holmes\":{\"count\":7,\"lastSeenTime\":1586891268927,\"difficulty\":1,\"difficultyWeight\":8},\"Kronleuchter\":{\"count\":4,\"lastSeenTime\":1586900076992,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Muskelkater\":{\"count\":9,\"lastSeenTime\":1586958683104,\"publicGameCount\":1,\"difficulty\":0.875,\"difficultyWeight\":8},\"Land\":{\"count\":5,\"lastSeenTime\":1586896155897},\"Käse\":{\"count\":2,\"lastSeenTime\":1586712115480,\"difficulty\":0.75,\"difficultyWeight\":4},\"Vatikan\":{\"count\":7,\"lastSeenTime\":1586880423720,\"publicGameCount\":1},\"Südpol\":{\"count\":7,\"lastSeenTime\":1586916317911,\"difficulty\":1,\"difficultyWeight\":12},\"feiern\":{\"count\":12,\"lastSeenTime\":1586955286110},\"Netzwerk\":{\"count\":8,\"lastSeenTime\":1586908672662,\"difficulty\":0.7272727272727273,\"difficultyWeight\":11},\"Taschenlampe\":{\"count\":5,\"lastSeenTime\":1586880869166,\"difficulty\":0.5238095238095238,\"difficultyWeight\":21},\"Spieß\":{\"count\":10,\"lastSeenTime\":1586919384885,\"difficulty\":0.2222222222222222,\"difficultyWeight\":9},\"Wohnzimmer\":{\"count\":3,\"lastSeenTime\":1586569967340,\"publicGameCount\":1},\"königlich\":{\"count\":8,\"lastSeenTime\":1586921180981},\"Strand\":{\"count\":8,\"lastSeenTime\":1586954925078,\"difficulty\":0.8571428571428571,\"difficultyWeight\":28},\"Bärenfalle\":{\"count\":8,\"lastSeenTime\":1586901239971},\"Abfall\":{\"count\":8,\"lastSeenTime\":1586807202609,\"difficulty\":0.84,\"difficultyWeight\":25,\"publicGameCount\":1},\"LKW-Fahrer\":{\"count\":6,\"lastSeenTime\":1586915354278,\"difficulty\":0.875,\"difficultyWeight\":72},\"Wand\":{\"count\":6,\"lastSeenTime\":1586908175585},\"schwimmen\":{\"count\":5,\"lastSeenTime\":1586916127462,\"difficulty\":0.9722222222222222,\"difficultyWeight\":36},\"Peitsche\":{\"count\":5,\"lastSeenTime\":1586914893907,\"difficulty\":1,\"difficultyWeight\":52},\"Leichtsinn\":{\"count\":8,\"lastSeenTime\":1586903925357},\"Luftkissenboot\":{\"count\":7,\"lastSeenTime\":1586958485799},\"Einhornwal\":{\"count\":8,\"lastSeenTime\":1586919423610},\"Iron Man\":{\"count\":5,\"lastSeenTime\":1586890464755,\"publicGameCount\":1},\"Schlüssel\":{\"count\":5,\"lastSeenTime\":1586834021563,\"difficulty\":0.4444444444444444,\"difficultyWeight\":9},\"Basis\":{\"count\":12,\"lastSeenTime\":1586874906969},\"Pickel\":{\"count\":8,\"lastSeenTime\":1586959695898},\"unendlich\":{\"count\":7,\"lastSeenTime\":1586955691477,\"difficulty\":0.4166666666666667,\"difficultyWeight\":12},\"Gru\":{\"count\":9,\"lastSeenTime\":1586919797630},\"Trittstufe\":{\"count\":6,\"lastSeenTime\":1586957855578},\"Handfläche\":{\"count\":8,\"lastSeenTime\":1586919640209},\"jonglieren\":{\"count\":8,\"lastSeenTime\":1586958658325},\"Korallenriff\":{\"count\":5,\"lastSeenTime\":1586916127462,\"publicGameCount\":1,\"difficulty\":0.75,\"difficultyWeight\":8},\"Achselhöhle\":{\"count\":7,\"lastSeenTime\":1586916680436},\"Taco\":{\"count\":11,\"lastSeenTime\":1586920858569,\"difficulty\":0.7560975609756098,\"difficultyWeight\":41,\"publicGameCount\":1},\"Violine\":{\"count\":6,\"lastSeenTime\":1586806873561,\"difficulty\":0.38461538461538464,\"difficultyWeight\":13},\"Bahnschiene\":{\"count\":11,\"lastSeenTime\":1586889379582},\"mürrisch\":{\"count\":6,\"lastSeenTime\":1586919797630,\"difficulty\":0.5625,\"difficultyWeight\":16},\"Rechnung\":{\"count\":7,\"lastSeenTime\":1586879558728,\"difficulty\":0.975609756097561,\"difficultyWeight\":41},\"Panzerfaust\":{\"count\":7,\"lastSeenTime\":1586955125492},\"Wahl\":{\"count\":4,\"lastSeenTime\":1586873925511},\"Farbe\":{\"count\":6,\"lastSeenTime\":1586916266718},\"Hafenbecken\":{\"count\":7,\"lastSeenTime\":1586958264090},\"Mario\":{\"count\":6,\"lastSeenTime\":1586956599160},\"Zahnstocher\":{\"count\":4,\"lastSeenTime\":1586900670423},\"Mumie\":{\"count\":4,\"lastSeenTime\":1586920005337,\"difficulty\":1,\"difficultyWeight\":26},\"Stativ\":{\"count\":4,\"lastSeenTime\":1586900162376},\"Fernglas\":{\"count\":10,\"lastSeenTime\":1586921022722},\"parallel\":{\"count\":6,\"lastSeenTime\":1586916565022,\"difficulty\":1,\"difficultyWeight\":3},\"Rüstung\":{\"count\":7,\"lastSeenTime\":1586827071400},\"Gang\":{\"count\":4,\"lastSeenTime\":1586813707177},\"Insel\":{\"count\":8,\"lastSeenTime\":1586959020405,\"difficulty\":0.631578947368421,\"difficultyWeight\":19},\"Versicherungskaufmann\":{\"count\":8,\"lastSeenTime\":1586955088291},\"Euro\":{\"count\":7,\"lastSeenTime\":1586959850831},\"Charlie Chaplin\":{\"count\":12,\"lastSeenTime\":1586958907689,\"publicGameCount\":1},\"Barbecue\":{\"count\":8,\"lastSeenTime\":1586914554202,\"difficulty\":0.8,\"difficultyWeight\":20},\"Haus\":{\"count\":4,\"lastSeenTime\":1586785382597,\"difficulty\":0.5,\"difficultyWeight\":10},\"Nachtclub\":{\"count\":6,\"lastSeenTime\":1586881045754},\"Toaster\":{\"count\":9,\"lastSeenTime\":1586896242674},\"Nacht\":{\"count\":10,\"lastSeenTime\":1586958769937},\"Elmo\":{\"count\":8,\"lastSeenTime\":1586955620355},\"König der Löwen\":{\"count\":6,\"lastSeenTime\":1586895858023,\"difficulty\":1,\"difficultyWeight\":5},\"Mona Lisa\":{\"count\":5,\"lastSeenTime\":1586920751201},\"Muskete\":{\"count\":5,\"lastSeenTime\":1586956033779,\"difficulty\":0,\"difficultyWeight\":2},\"Handgelenk\":{\"count\":3,\"lastSeenTime\":1586957888650,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":13},\"Lasagne\":{\"count\":9,\"lastSeenTime\":1586908494479},\"KFC\":{\"count\":7,\"lastSeenTime\":1586909250467},\"Überlebender\":{\"count\":10,\"lastSeenTime\":1586868863888},\"Bandnudel\":{\"count\":5,\"lastSeenTime\":1586879785134},\"Lemur\":{\"count\":10,\"lastSeenTime\":1586956453935},\"Walross\":{\"count\":7,\"lastSeenTime\":1586956197682,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"Baseballschläger\":{\"count\":10,\"lastSeenTime\":1586891023780},\"Oktopus\":{\"count\":12,\"lastSeenTime\":1586957837428,\"difficulty\":1,\"difficultyWeight\":6},\"Rennen\":{\"count\":6,\"lastSeenTime\":1586915767461,\"difficulty\":0.5,\"difficultyWeight\":10},\"Mikrofon\":{\"count\":8,\"lastSeenTime\":1586895872235,\"publicGameCount\":1,\"difficulty\":0.6,\"difficultyWeight\":10},\"Bogen\":{\"count\":6,\"lastSeenTime\":1586806308278},\"Superman\":{\"count\":9,\"lastSeenTime\":1586920336794,\"publicGameCount\":1,\"difficulty\":0.5555555555555556,\"difficultyWeight\":9},\"Dudelsack\":{\"count\":7,\"lastSeenTime\":1586914181975},\"Lippen\":{\"count\":12,\"lastSeenTime\":1586903726114,\"difficulty\":1,\"difficultyWeight\":9},\"Fotograf\":{\"count\":14,\"lastSeenTime\":1586958561895,\"difficulty\":1,\"difficultyWeight\":18},\"Popcorn\":{\"count\":8,\"lastSeenTime\":1586955809521,\"publicGameCount\":1,\"difficulty\":0.3333333333333333,\"difficultyWeight\":6},\"Haarschuppen\":{\"count\":5,\"lastSeenTime\":1586896700238},\"vollständig\":{\"count\":8,\"lastSeenTime\":1586958547642},\"Batman\":{\"count\":5,\"lastSeenTime\":1586914243836},\"Vulkanologe\":{\"count\":7,\"lastSeenTime\":1586956287941},\"Geschirrschrank\":{\"count\":3,\"lastSeenTime\":1586782917680},\"Taschentuch\":{\"count\":4,\"lastSeenTime\":1586879263241},\"Lamm\":{\"count\":8,\"lastSeenTime\":1586955300241,\"difficulty\":1,\"difficultyWeight\":1},\"Megafon\":{\"count\":7,\"lastSeenTime\":1586920651904},\"Lockenwickler\":{\"count\":4,\"lastSeenTime\":1586784602447},\"Bienenstich\":{\"count\":10,\"lastSeenTime\":1586916368116,\"publicGameCount\":1,\"difficulty\":0.4117647058823529,\"difficultyWeight\":17},\"Ohrring\":{\"count\":3,\"lastSeenTime\":1586784746074},\"wütend\":{\"count\":8,\"lastSeenTime\":1586920029620},\"Hölle\":{\"count\":4,\"lastSeenTime\":1586901682745,\"difficulty\":1,\"difficultyWeight\":11},\"Plätzchen\":{\"count\":4,\"lastSeenTime\":1586827227421},\"Traktor\":{\"count\":11,\"lastSeenTime\":1586908787449},\"Skorpion\":{\"count\":7,\"lastSeenTime\":1586959633128},\"Fell\":{\"count\":6,\"lastSeenTime\":1586955517664},\"Lady Gaga\":{\"count\":5,\"lastSeenTime\":1586901511433},\"übergewichtig\":{\"count\":6,\"lastSeenTime\":1586959117095},\"Himmelbett\":{\"count\":9,\"lastSeenTime\":1586914903455},\"Boot\":{\"count\":7,\"lastSeenTime\":1586958683104,\"difficulty\":0.5625,\"difficultyWeight\":16,\"publicGameCount\":1},\"Chinesische Mauer\":{\"count\":4,\"lastSeenTime\":1586890378764},\"Link\":{\"count\":5,\"lastSeenTime\":1586907863533},\"Cartoon\":{\"count\":5,\"lastSeenTime\":1586907707534,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":10},\"Seegurke\":{\"count\":7,\"lastSeenTime\":1586897025198,\"difficulty\":1,\"difficultyWeight\":7},\"Zucker\":{\"count\":5,\"lastSeenTime\":1586907778315},\"Bambus\":{\"count\":6,\"lastSeenTime\":1586954617410},\"Marathon\":{\"count\":7,\"lastSeenTime\":1586955392320},\"Donner\":{\"count\":5,\"lastSeenTime\":1586832635442},\"Schottland\":{\"count\":5,\"lastSeenTime\":1586957863554},\"beißen\":{\"count\":6,\"lastSeenTime\":1586889525947},\"Konzert\":{\"count\":7,\"lastSeenTime\":1586914403534},\"Vogel\":{\"count\":2,\"lastSeenTime\":1586896941227,\"difficulty\":0.86,\"difficultyWeight\":50},\"Maniküre\":{\"count\":9,\"lastSeenTime\":1586957960523},\"Personenschützer\":{\"count\":5,\"lastSeenTime\":1586920094776},\"Nagel\":{\"count\":12,\"lastSeenTime\":1586955456078},\"Flammkuchen\":{\"count\":5,\"lastSeenTime\":1586896242674},\"Kopftuch\":{\"count\":5,\"lastSeenTime\":1586915949972,\"difficulty\":0.8571428571428571,\"difficultyWeight\":14},\"Faustkampf\":{\"count\":4,\"lastSeenTime\":1586816692499},\"Bikini\":{\"count\":7,\"lastSeenTime\":1586900635930},\"schütteln\":{\"count\":6,\"lastSeenTime\":1586955334605},\"Klebestift\":{\"count\":6,\"lastSeenTime\":1586957950175,\"difficulty\":1,\"difficultyWeight\":19},\"Florist\":{\"count\":6,\"lastSeenTime\":1586959522880},\"Ananas\":{\"count\":6,\"lastSeenTime\":1586826228383},\"Oper\":{\"count\":6,\"lastSeenTime\":1586916574944,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Klippe\":{\"count\":5,\"lastSeenTime\":1586900422423},\"Riese\":{\"count\":5,\"lastSeenTime\":1586858562011,\"difficulty\":0.5,\"difficultyWeight\":8},\"Krankenhaus\":{\"count\":7,\"lastSeenTime\":1586908697152},\"müde\":{\"count\":2,\"lastSeenTime\":1586958171361},\"prokrastinieren\":{\"count\":3,\"lastSeenTime\":1586806544125},\"Wrestler\":{\"count\":6,\"lastSeenTime\":1586889892808},\"Eiskaffee\":{\"count\":7,\"lastSeenTime\":1586914270411},\"Auspuff\":{\"count\":7,\"lastSeenTime\":1586954925078},\"erinnern\":{\"count\":3,\"lastSeenTime\":1586909119149},\"Walnuss\":{\"count\":4,\"lastSeenTime\":1586903726114,\"difficulty\":0.875,\"difficultyWeight\":16},\"Pech\":{\"count\":8,\"lastSeenTime\":1586899941163,\"difficulty\":1,\"difficultyWeight\":2},\"Garage\":{\"count\":8,\"lastSeenTime\":1586915200929},\"Lego\":{\"count\":6,\"lastSeenTime\":1586838924837,\"difficulty\":0.6,\"difficultyWeight\":5},\"Ballon\":{\"count\":6,\"lastSeenTime\":1586908541127,\"difficulty\":0.72,\"difficultyWeight\":50},\"Barkeeper\":{\"count\":11,\"lastSeenTime\":1586958809891},\"vergrößern\":{\"count\":5,\"lastSeenTime\":1586913973573},\"insolvent\":{\"count\":9,\"lastSeenTime\":1586915806469},\"Demonstration\":{\"count\":4,\"lastSeenTime\":1586859897712,\"publicGameCount\":1,\"difficulty\":0.375,\"difficultyWeight\":8},\"denken\":{\"count\":4,\"lastSeenTime\":1586838914729},\"Goldtopf\":{\"count\":7,\"lastSeenTime\":1586920275708},\"Wanderstock\":{\"count\":9,\"lastSeenTime\":1586915417224,\"difficulty\":1,\"difficultyWeight\":20},\"Papagei\":{\"count\":8,\"lastSeenTime\":1586916141879},\"Fledermaus\":{\"count\":6,\"lastSeenTime\":1586890056241,\"difficulty\":1,\"difficultyWeight\":6},\"Sudoku\":{\"count\":1,\"lastSeenTime\":1586552881359,\"difficulty\":1,\"difficultyWeight\":1},\"Cola\":{\"count\":11,\"lastSeenTime\":1586958983867,\"difficulty\":1,\"difficultyWeight\":8},\"Kakao\":{\"count\":5,\"lastSeenTime\":1586904343119,\"publicGameCount\":1},\"untergewichtig\":{\"count\":3,\"lastSeenTime\":1586914491372,\"difficulty\":0.8421052631578947,\"difficultyWeight\":19},\"Zeitlupe\":{\"count\":9,\"lastSeenTime\":1586920053882,\"difficulty\":0.8888888888888888,\"difficultyWeight\":36},\"Österreich\":{\"count\":9,\"lastSeenTime\":1586915919352},\"Nintendo\":{\"count\":4,\"lastSeenTime\":1586913633876,\"difficulty\":1,\"difficultyWeight\":3},\"Eltern\":{\"count\":5,\"lastSeenTime\":1586955429782,\"difficulty\":0.4666666666666667,\"difficultyWeight\":15},\"Tannenbaum\":{\"count\":9,\"lastSeenTime\":1586907472056,\"difficulty\":1,\"difficultyWeight\":5},\"Hyäne\":{\"count\":7,\"lastSeenTime\":1586806967390,\"difficulty\":1,\"difficultyWeight\":4},\"Komödie\":{\"count\":4,\"lastSeenTime\":1586589955120},\"Daune\":{\"count\":8,\"lastSeenTime\":1586914806527},\"Axt\":{\"count\":6,\"lastSeenTime\":1586901361357},\"Heuschrecke\":{\"count\":5,\"lastSeenTime\":1586908118744,\"difficulty\":1,\"difficultyWeight\":25},\"Baumkrone\":{\"count\":8,\"lastSeenTime\":1586881235651},\"Bier\":{\"count\":7,\"lastSeenTime\":1586921059401,\"publicGameCount\":1,\"difficulty\":0.967741935483871,\"difficultyWeight\":93},\"Maibaum\":{\"count\":8,\"lastSeenTime\":1586915299932},\"Haarfarbe\":{\"count\":7,\"lastSeenTime\":1586959814583,\"difficulty\":1,\"difficultyWeight\":43},\"Webseite\":{\"count\":5,\"lastSeenTime\":1586815794279,\"difficulty\":0.6923076923076923,\"difficultyWeight\":26},\"Gift\":{\"count\":5,\"lastSeenTime\":1586959020405},\"Buch\":{\"count\":5,\"lastSeenTime\":1586956009184},\"Pflug\":{\"count\":4,\"lastSeenTime\":1586901375521,\"difficulty\":1,\"difficultyWeight\":4},\"Blut\":{\"count\":7,\"lastSeenTime\":1586958983867},\"Igel\":{\"count\":9,\"lastSeenTime\":1586859619922},\"machomäßig\":{\"count\":3,\"lastSeenTime\":1586805850042,\"difficulty\":0.9,\"difficultyWeight\":10},\"Schnürsenkel\":{\"count\":9,\"lastSeenTime\":1586920604951,\"difficulty\":0.42857142857142855,\"difficultyWeight\":7},\"Felsen\":{\"count\":12,\"lastSeenTime\":1586954834961,\"difficulty\":0.5882352941176471,\"difficultyWeight\":17,\"publicGameCount\":1},\"Mähdrescher\":{\"count\":5,\"lastSeenTime\":1586901067015},\"Anglerfisch\":{\"count\":5,\"lastSeenTime\":1586785741382},\"Kanarienvogel\":{\"count\":3,\"lastSeenTime\":1586873649256,\"difficulty\":1,\"difficultyWeight\":10},\"Lautstärke\":{\"count\":8,\"lastSeenTime\":1586890045700},\"Dynamo\":{\"count\":5,\"lastSeenTime\":1586869422590},\"Brust\":{\"count\":5,\"lastSeenTime\":1586897420912,\"difficulty\":1,\"difficultyWeight\":1},\"Fahrer\":{\"count\":5,\"lastSeenTime\":1586958561895},\"Schaukelpferd\":{\"count\":5,\"lastSeenTime\":1586958697329,\"difficulty\":1,\"difficultyWeight\":5},\"Schatten\":{\"count\":5,\"lastSeenTime\":1586840034942,\"difficulty\":1,\"difficultyWeight\":5},\"Entensuppe\":{\"count\":6,\"lastSeenTime\":1586897164255,\"difficulty\":1,\"difficultyWeight\":6},\"Abraham Lincoln\":{\"count\":6,\"lastSeenTime\":1586956599160},\"Papageientaucher\":{\"count\":11,\"lastSeenTime\":1586956363582},\"Milch\":{\"count\":4,\"lastSeenTime\":1586959193290,\"difficulty\":0.9166666666666666,\"difficultyWeight\":12},\"Yeti\":{\"count\":5,\"lastSeenTime\":1586955152448},\"dreckig\":{\"count\":4,\"lastSeenTime\":1586920552243},\"Steigung\":{\"count\":4,\"lastSeenTime\":1586908838335},\"Schaumschläger\":{\"count\":10,\"lastSeenTime\":1586955681359,\"difficulty\":1,\"difficultyWeight\":9},\"Möbel\":{\"count\":5,\"lastSeenTime\":1586909133282,\"difficulty\":1,\"difficultyWeight\":27},\"Feueralarm\":{\"count\":4,\"lastSeenTime\":1586914428482},\"Fahrkarte\":{\"count\":9,\"lastSeenTime\":1586904061376},\"Kredit\":{\"count\":7,\"lastSeenTime\":1586920972036},\"Alphorn\":{\"count\":10,\"lastSeenTime\":1586958278719},\"Partnerlook\":{\"count\":8,\"lastSeenTime\":1586916352907,\"difficulty\":1,\"difficultyWeight\":9},\"Panflöte\":{\"count\":5,\"lastSeenTime\":1586827260902},\"Blumenkohl\":{\"count\":5,\"lastSeenTime\":1586958809891},\"Geist\":{\"count\":3,\"lastSeenTime\":1586868785173,\"difficulty\":0.75,\"difficultyWeight\":32},\"Nordpol\":{\"count\":5,\"lastSeenTime\":1586958360375,\"publicGameCount\":1,\"difficulty\":0.8,\"difficultyWeight\":10},\"Fanta\":{\"count\":8,\"lastSeenTime\":1586919783421,\"difficulty\":0.6666666666666666,\"difficultyWeight\":18},\"Periskop\":{\"count\":6,\"lastSeenTime\":1586915731157},\"erbrechen\":{\"count\":6,\"lastSeenTime\":1586954798444},\"Bonbon\":{\"count\":9,\"lastSeenTime\":1586915703672,\"difficulty\":0.625,\"difficultyWeight\":8,\"publicGameCount\":1},\"Oboe\":{\"count\":9,\"lastSeenTime\":1586916574944},\"Schnurrbart\":{\"count\":8,\"lastSeenTime\":1586914157190,\"publicGameCount\":1,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"Höhlenmensch\":{\"count\":7,\"lastSeenTime\":1586954975722},\"Büroklammer\":{\"count\":13,\"lastSeenTime\":1586959570753,\"difficulty\":0.7608695652173914,\"difficultyWeight\":46},\"Tunnelblick\":{\"count\":6,\"lastSeenTime\":1586958077398},\"Besenstiel\":{\"count\":3,\"lastSeenTime\":1586903648591,\"difficulty\":1,\"difficultyWeight\":27},\"Kreuzung\":{\"count\":8,\"lastSeenTime\":1586913670980,\"difficulty\":0.9423076923076923,\"difficultyWeight\":52},\"Zentaur\":{\"count\":4,\"lastSeenTime\":1586908583500,\"difficulty\":0.8,\"difficultyWeight\":5},\"Papaya\":{\"count\":6,\"lastSeenTime\":1586955263523},\"Notch\":{\"count\":4,\"lastSeenTime\":1586826344267},\"Arm\":{\"count\":9,\"lastSeenTime\":1586828011219,\"difficulty\":1,\"difficultyWeight\":6},\"Dolch\":{\"count\":8,\"lastSeenTime\":1586914565215},\"DNS\":{\"count\":4,\"lastSeenTime\":1586873397605,\"difficulty\":1,\"difficultyWeight\":2},\"Seelöwe\":{\"count\":5,\"lastSeenTime\":1586858858134,\"difficulty\":1,\"difficultyWeight\":6},\"Blutspende\":{\"count\":8,\"lastSeenTime\":1586955113604,\"publicGameCount\":1},\"Astronaut\":{\"count\":6,\"lastSeenTime\":1586959279701},\"Frankreich\":{\"count\":3,\"lastSeenTime\":1586596653489},\"Beine\":{\"count\":8,\"lastSeenTime\":1586913768003},\"Logo\":{\"count\":7,\"lastSeenTime\":1586920015464},\"Freitag\":{\"count\":4,\"lastSeenTime\":1586812381709,\"publicGameCount\":1,\"difficulty\":0.6875,\"difficultyWeight\":16},\"Süßholz raspeln\":{\"count\":4,\"lastSeenTime\":1586812346307},\"Schock\":{\"count\":4,\"lastSeenTime\":1586897287249},\"Alufolie\":{\"count\":8,\"lastSeenTime\":1586900724985,\"difficulty\":1,\"difficultyWeight\":6},\"Geysir\":{\"count\":3,\"lastSeenTime\":1586727718047},\"Kirche\":{\"count\":4,\"lastSeenTime\":1586651112698,\"difficulty\":0.5454545454545454,\"difficultyWeight\":11},\"Kinderwagen\":{\"count\":4,\"lastSeenTime\":1586816753545},\"Kuckucksuhr\":{\"count\":4,\"lastSeenTime\":1586815755534},\"Grinch\":{\"count\":10,\"lastSeenTime\":1586958239433,\"difficulty\":1,\"difficultyWeight\":10},\"Klempner\":{\"count\":6,\"lastSeenTime\":1586903531503,\"publicGameCount\":1,\"difficulty\":0.75,\"difficultyWeight\":8},\"Geröll\":{\"count\":7,\"lastSeenTime\":1586903634298},\"Hologramm\":{\"count\":4,\"lastSeenTime\":1586726805561},\"Rollladen\":{\"count\":4,\"lastSeenTime\":1586839583890},\"Dikdik\":{\"count\":4,\"lastSeenTime\":1586890005207},\"Gladiator\":{\"count\":5,\"lastSeenTime\":1586921032863,\"difficulty\":0.8421052631578947,\"difficultyWeight\":19,\"publicGameCount\":1},\"Brasilien\":{\"count\":6,\"lastSeenTime\":1586827712672},\"Glanz\":{\"count\":4,\"lastSeenTime\":1586913853735},\"Karte\":{\"count\":6,\"lastSeenTime\":1586919287618,\"difficulty\":1,\"difficultyWeight\":15},\"Silber\":{\"count\":6,\"lastSeenTime\":1586896166029,\"publicGameCount\":1},\"Sicherheitsdienst\":{\"count\":5,\"lastSeenTime\":1586915949972},\"Uranus\":{\"count\":5,\"lastSeenTime\":1586874623611,\"difficulty\":1,\"difficultyWeight\":11},\"Knöchel\":{\"count\":9,\"lastSeenTime\":1586958944806},\"Eiche\":{\"count\":4,\"lastSeenTime\":1586920566543,\"difficulty\":1,\"difficultyWeight\":79},\"Schnecke\":{\"count\":9,\"lastSeenTime\":1586919773316},\"Bleistift\":{\"count\":3,\"lastSeenTime\":1586717347143},\"Reh\":{\"count\":5,\"lastSeenTime\":1586914831496,\"publicGameCount\":1,\"difficulty\":0.6,\"difficultyWeight\":5},\"Anzug\":{\"count\":3,\"lastSeenTime\":1586806231030,\"difficulty\":1,\"difficultyWeight\":5},\"Süden\":{\"count\":5,\"lastSeenTime\":1586782502910,\"difficulty\":0.2222222222222222,\"difficultyWeight\":9},\"Spitzer\":{\"count\":5,\"lastSeenTime\":1586958375030},\"lesen\":{\"count\":5,\"lastSeenTime\":1586958973713,\"difficulty\":0.8387096774193549,\"difficultyWeight\":31},\"Köder\":{\"count\":3,\"lastSeenTime\":1586832725500,\"difficulty\":1,\"difficultyWeight\":1},\"Nike\":{\"count\":9,\"lastSeenTime\":1586959492934,\"difficulty\":0.7857142857142857,\"difficultyWeight\":14},\"Vault boy\":{\"count\":3,\"lastSeenTime\":1586907877908},\"Handy\":{\"count\":6,\"lastSeenTime\":1586890188914,\"difficulty\":1,\"difficultyWeight\":1},\"Garten\":{\"count\":6,\"lastSeenTime\":1586901605672},\"Fuchs\":{\"count\":3,\"lastSeenTime\":1586920566543,\"difficulty\":0.8666666666666667,\"difficultyWeight\":30},\"Musik\":{\"count\":3,\"lastSeenTime\":1586879877998,\"difficulty\":1,\"difficultyWeight\":6},\"niedrig\":{\"count\":8,\"lastSeenTime\":1586880759383},\"Scheibenwischer\":{\"count\":9,\"lastSeenTime\":1586959304612},\"Roboter\":{\"count\":6,\"lastSeenTime\":1586909133282},\"Säge\":{\"count\":2,\"lastSeenTime\":1586633399505,\"difficulty\":0.4,\"difficultyWeight\":10},\"blau\":{\"count\":9,\"lastSeenTime\":1586914403534,\"publicGameCount\":1,\"difficulty\":0.96875,\"difficultyWeight\":32},\"Treibsand\":{\"count\":7,\"lastSeenTime\":1586959695898},\"Segelflieger\":{\"count\":5,\"lastSeenTime\":1586954774095},\"Zahnseide\":{\"count\":4,\"lastSeenTime\":1586903333845},\"glühen\":{\"count\":5,\"lastSeenTime\":1586818299882},\"Inuit\":{\"count\":10,\"lastSeenTime\":1586914258463},\"Flaschenpost\":{\"count\":6,\"lastSeenTime\":1586907451820},\"Christbaumkugel\":{\"count\":8,\"lastSeenTime\":1586957903080},\"Hummer\":{\"count\":12,\"lastSeenTime\":1586958052113},\"Vin Diesel\":{\"count\":10,\"lastSeenTime\":1586915186679},\"offen\":{\"count\":6,\"lastSeenTime\":1586889697457},\"Windmühle\":{\"count\":3,\"lastSeenTime\":1586833318970,\"difficulty\":0.9166666666666666,\"difficultyWeight\":24},\"fernsehen\":{\"count\":5,\"lastSeenTime\":1586915846579},\"Zeitmaschine\":{\"count\":7,\"lastSeenTime\":1586897211835},\"Tasche\":{\"count\":5,\"lastSeenTime\":1586858696188,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":10},\"Abendessen\":{\"count\":8,\"lastSeenTime\":1586903965187,\"difficulty\":0.75,\"difficultyWeight\":8},\"Moskito\":{\"count\":11,\"lastSeenTime\":1586959714261,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Lava\":{\"count\":8,\"lastSeenTime\":1586902766371,\"difficulty\":1,\"difficultyWeight\":6},\"Eingabestift\":{\"count\":5,\"lastSeenTime\":1586915021163},\"Tropfen\":{\"count\":4,\"lastSeenTime\":1586958748793,\"difficulty\":0.875,\"difficultyWeight\":40},\"Zoowärter\":{\"count\":8,\"lastSeenTime\":1586959290196,\"difficulty\":1,\"difficultyWeight\":3},\"Flugzeug\":{\"count\":4,\"lastSeenTime\":1586915149693},\"doppelt\":{\"count\":4,\"lastSeenTime\":1586806127412},\"Senf\":{\"count\":5,\"lastSeenTime\":1586900422423},\"Klassenzimmer\":{\"count\":5,\"lastSeenTime\":1586908801649,\"difficulty\":0.75,\"difficultyWeight\":4},\"schminken\":{\"count\":7,\"lastSeenTime\":1586955209647},\"Knoten\":{\"count\":6,\"lastSeenTime\":1586909005772},\"kahl\":{\"count\":7,\"lastSeenTime\":1586957903080},\"Ketchup\":{\"count\":6,\"lastSeenTime\":1586875034252,\"publicGameCount\":1,\"difficulty\":0.5555555555555556,\"difficultyWeight\":9},\"Armbrust\":{\"count\":5,\"lastSeenTime\":1586897226069},\"Kehle\":{\"count\":5,\"lastSeenTime\":1586900524596},\"Deckenventilator\":{\"count\":7,\"lastSeenTime\":1586815355269},\"Hobbit\":{\"count\":2,\"lastSeenTime\":1586784590637,\"difficulty\":1,\"difficultyWeight\":18},\"Boxer\":{\"count\":5,\"lastSeenTime\":1586814868590,\"difficulty\":1,\"difficultyWeight\":1},\"Lupe\":{\"count\":9,\"lastSeenTime\":1586897078678,\"difficulty\":1,\"difficultyWeight\":24},\"Steinbock\":{\"count\":8,\"lastSeenTime\":1586914631184,\"difficulty\":0.9696969696969697,\"difficultyWeight\":33},\"Tor\":{\"count\":7,\"lastSeenTime\":1586958636395,\"difficulty\":1,\"difficultyWeight\":10},\"Kneipe\":{\"count\":10,\"lastSeenTime\":1586890339661,\"difficulty\":0.8,\"difficultyWeight\":15},\"Zement\":{\"count\":7,\"lastSeenTime\":1586895733096},\"Träne\":{\"count\":8,\"lastSeenTime\":1586873585720,\"difficulty\":0.7222222222222222,\"difficultyWeight\":18},\"Veranda\":{\"count\":7,\"lastSeenTime\":1586954727368},\"Oberarm\":{\"count\":3,\"lastSeenTime\":1586806833684},\"Marmelade\":{\"count\":7,\"lastSeenTime\":1586903836685,\"difficulty\":1,\"difficultyWeight\":40},\"Banjo\":{\"count\":8,\"lastSeenTime\":1586958200965},\"Herz\":{\"count\":7,\"lastSeenTime\":1586879684720,\"difficulty\":0.8695652173913043,\"difficultyWeight\":23,\"publicGameCount\":1},\"Vision\":{\"count\":10,\"lastSeenTime\":1586907654631},\"Katze\":{\"count\":7,\"lastSeenTime\":1586874013016},\"Knopf\":{\"count\":2,\"lastSeenTime\":1586710517071,\"difficulty\":0.4166666666666667,\"difficultyWeight\":12},\"biegen\":{\"count\":7,\"lastSeenTime\":1586916455715},\"Prüfung\":{\"count\":9,\"lastSeenTime\":1586955948209},\"Psychologe\":{\"count\":6,\"lastSeenTime\":1586959585641},\"zusammenzucken\":{\"count\":10,\"lastSeenTime\":1586915354278},\"Baumhaus\":{\"count\":5,\"lastSeenTime\":1586909260571,\"difficulty\":1,\"difficultyWeight\":5},\"Alpaka\":{\"count\":12,\"lastSeenTime\":1586900125985},\"Hieroglyphen\":{\"count\":12,\"lastSeenTime\":1586958596468},\"Saugglocke\":{\"count\":7,\"lastSeenTime\":1586832373335},\"Kasino\":{\"count\":8,\"lastSeenTime\":1586915974465},\"Funke\":{\"count\":7,\"lastSeenTime\":1586955385136,\"difficulty\":1,\"difficultyWeight\":10},\"Venus\":{\"count\":10,\"lastSeenTime\":1586959076238,\"difficulty\":0.7,\"difficultyWeight\":20},\"Feuersalamander\":{\"count\":1,\"lastSeenTime\":1586561707947},\"Lebensmittel\":{\"count\":3,\"lastSeenTime\":1586726805561,\"difficulty\":1,\"difficultyWeight\":3},\"Säule\":{\"count\":4,\"lastSeenTime\":1586895477389,\"difficulty\":0.6666666666666666,\"difficultyWeight\":6},\"dürr\":{\"count\":3,\"lastSeenTime\":1586955913834},\"Audi\":{\"count\":6,\"lastSeenTime\":1586880818922,\"difficulty\":1,\"difficultyWeight\":6},\"langsam\":{\"count\":3,\"lastSeenTime\":1586709182856},\"Lutscher\":{\"count\":7,\"lastSeenTime\":1586869733694},\"haarig\":{\"count\":5,\"lastSeenTime\":1586889811471,\"publicGameCount\":1,\"difficulty\":0.6666666666666666,\"difficultyWeight\":15},\"Monobraue\":{\"count\":9,\"lastSeenTime\":1586958697329},\"bekifft\":{\"count\":10,\"lastSeenTime\":1586915716336},\"Elfenbein\":{\"count\":11,\"lastSeenTime\":1586959090713},\"Medusa\":{\"count\":4,\"lastSeenTime\":1586832990793},\"Schlumpf\":{\"count\":6,\"lastSeenTime\":1586916164227,\"publicGameCount\":1},\"Muschel\":{\"count\":16,\"lastSeenTime\":1586959232575,\"publicGameCount\":1,\"difficulty\":0.3333333333333333,\"difficultyWeight\":6},\"Kartoffel\":{\"count\":4,\"lastSeenTime\":1586901839909},\"Maler\":{\"count\":7,\"lastSeenTime\":1586908838335},\"stoßen\":{\"count\":5,\"lastSeenTime\":1586901166652},\"Nemo\":{\"count\":4,\"lastSeenTime\":1586954910317,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":15},\"Schimpanse\":{\"count\":6,\"lastSeenTime\":1586879248947,\"difficulty\":0.7777777777777778,\"difficultyWeight\":9},\"schlafen\":{\"count\":7,\"lastSeenTime\":1586956048018,\"difficulty\":0.4,\"difficultyWeight\":5},\"Einzelhandel\":{\"count\":5,\"lastSeenTime\":1586879799373,\"publicGameCount\":1},\"Frühling\":{\"count\":8,\"lastSeenTime\":1586957837428,\"difficulty\":0.3333333333333333,\"difficultyWeight\":6},\"Corn Flakes\":{\"count\":5,\"lastSeenTime\":1586919687264,\"difficulty\":0.875,\"difficultyWeight\":8},\"Tarzan\":{\"count\":7,\"lastSeenTime\":1586959455308},\"Baumstumpf\":{\"count\":7,\"lastSeenTime\":1586902713347},\"schneiden\":{\"count\":7,\"lastSeenTime\":1586919348003},\"Kopfhörer\":{\"count\":7,\"lastSeenTime\":1586955609964,\"difficulty\":1,\"difficultyWeight\":6},\"Suppenkelle\":{\"count\":3,\"lastSeenTime\":1586959482662},\"Paralleluniversum\":{\"count\":5,\"lastSeenTime\":1586826400303},\"Friedhof\":{\"count\":8,\"lastSeenTime\":1586954627819,\"difficulty\":1,\"difficultyWeight\":6},\"Auster\":{\"count\":5,\"lastSeenTime\":1586958100659},\"Flammenwerfer\":{\"count\":6,\"lastSeenTime\":1586956599160},\"Bürgersteig\":{\"count\":4,\"lastSeenTime\":1586913482555},\"Luxemburg\":{\"count\":5,\"lastSeenTime\":1586890217261},\"Hotel\":{\"count\":6,\"lastSeenTime\":1586816892701},\"Spirale\":{\"count\":3,\"lastSeenTime\":1586706667073},\"schauen\":{\"count\":7,\"lastSeenTime\":1586879469524},\"Lavalampe\":{\"count\":3,\"lastSeenTime\":1586807857048,\"difficulty\":1,\"difficultyWeight\":3},\"Nussschale\":{\"count\":6,\"lastSeenTime\":1586895833706},\"Kette\":{\"count\":6,\"lastSeenTime\":1586956048018},\"Trinkgeld\":{\"count\":4,\"lastSeenTime\":1586868835247},\"Leuchtturm\":{\"count\":6,\"lastSeenTime\":1586896740857},\"Fingernagel\":{\"count\":10,\"lastSeenTime\":1586903359622},\"Weinrebe\":{\"count\":5,\"lastSeenTime\":1586834116405},\"Raum\":{\"count\":6,\"lastSeenTime\":1586955238992},\"Clown\":{\"count\":8,\"lastSeenTime\":1586907400222},\"Granate\":{\"count\":5,\"lastSeenTime\":1586919664805,\"difficulty\":0.6,\"difficultyWeight\":5},\"William Wallace\":{\"count\":5,\"lastSeenTime\":1586914080489},\"Rückenschmerzen\":{\"count\":9,\"lastSeenTime\":1586920872823},\"Tasse\":{\"count\":5,\"lastSeenTime\":1586834116405,\"difficulty\":0.25,\"difficultyWeight\":8},\"Nagelpflege\":{\"count\":6,\"lastSeenTime\":1586914729019},\"Torpedo\":{\"count\":5,\"lastSeenTime\":1586956181125,\"publicGameCount\":1,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Glitzer\":{\"count\":4,\"lastSeenTime\":1586919460885,\"difficulty\":0.8,\"difficultyWeight\":10},\"Wiesel\":{\"count\":9,\"lastSeenTime\":1586955286110},\"schweben\":{\"count\":9,\"lastSeenTime\":1586919773316,\"difficulty\":0.8378378378378378,\"difficultyWeight\":37},\"Mücke\":{\"count\":6,\"lastSeenTime\":1586904248334},\"Schatz\":{\"count\":6,\"lastSeenTime\":1586815563232},\"Hahn\":{\"count\":7,\"lastSeenTime\":1586833201869,\"difficulty\":0.75,\"difficultyWeight\":32},\"Essiggurke\":{\"count\":5,\"lastSeenTime\":1586919610641},\"Glühbirne\":{\"count\":4,\"lastSeenTime\":1586913868342,\"difficulty\":0.96,\"difficultyWeight\":50},\"Deodorant\":{\"count\":5,\"lastSeenTime\":1586826254067,\"difficulty\":0.4,\"difficultyWeight\":5},\"Harfe\":{\"count\":6,\"lastSeenTime\":1586919327173,\"difficulty\":0.8421052631578947,\"difficultyWeight\":19},\"umarmen\":{\"count\":7,\"lastSeenTime\":1586921094172,\"publicGameCount\":2,\"difficulty\":0.9,\"difficultyWeight\":10},\"Diagonale\":{\"count\":6,\"lastSeenTime\":1586900402067},\"Axolotl\":{\"count\":5,\"lastSeenTime\":1586827401622},\"Radioaktivität\":{\"count\":9,\"lastSeenTime\":1586958253918},\"Kirby\":{\"count\":7,\"lastSeenTime\":1586914387880},\"Achterbahn\":{\"count\":5,\"lastSeenTime\":1586914270411,\"difficulty\":0.5333333333333333,\"difficultyWeight\":15},\"Hand\":{\"count\":6,\"lastSeenTime\":1586900278764,\"difficulty\":0.4,\"difficultyWeight\":5},\"Sattel\":{\"count\":8,\"lastSeenTime\":1586958525123,\"difficulty\":1,\"difficultyWeight\":12},\"Tacker\":{\"count\":4,\"lastSeenTime\":1586815146910},\"Vorstellungskraft\":{\"count\":3,\"lastSeenTime\":1586959401878},\"umkehren\":{\"count\":7,\"lastSeenTime\":1586915974465},\"Bürste\":{\"count\":6,\"lastSeenTime\":1586954749821},\"Regen\":{\"count\":2,\"lastSeenTime\":1586569585076,\"publicGameCount\":1,\"difficulty\":0.8727272727272727,\"difficultyWeight\":55},\"aufwachen\":{\"count\":12,\"lastSeenTime\":1586914869480,\"difficulty\":1,\"difficultyWeight\":9},\"Kettensäge\":{\"count\":5,\"lastSeenTime\":1586955634694},\"Paris\":{\"count\":6,\"lastSeenTime\":1586880936347},\"Thunfisch\":{\"count\":8,\"lastSeenTime\":1586902616627},\"Picknick\":{\"count\":5,\"lastSeenTime\":1586840420314,\"difficulty\":1,\"difficultyWeight\":12},\"Nagelschere\":{\"count\":7,\"lastSeenTime\":1586881247045},\"Waschbrettbauch\":{\"count\":4,\"lastSeenTime\":1586807932952},\"Donald Duck\":{\"count\":6,\"lastSeenTime\":1586903750797},\"Hecht\":{\"count\":8,\"lastSeenTime\":1586903048902},\"Schallplatte\":{\"count\":4,\"lastSeenTime\":1586826573783},\"Laterne\":{\"count\":7,\"lastSeenTime\":1586895872235,\"difficulty\":1,\"difficultyWeight\":9},\"singen\":{\"count\":7,\"lastSeenTime\":1586914181975},\"Hampelmann\":{\"count\":7,\"lastSeenTime\":1586805325864},\"Krawatte\":{\"count\":3,\"lastSeenTime\":1586815863706,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":8},\"Werkzeugkasten\":{\"count\":9,\"lastSeenTime\":1586919821927},\"Qualle\":{\"count\":3,\"lastSeenTime\":1586711756970,\"difficulty\":0.8648648648648649,\"difficultyWeight\":37,\"publicGameCount\":1},\"Gans\":{\"count\":6,\"lastSeenTime\":1586897445244},\"Flutlicht\":{\"count\":4,\"lastSeenTime\":1586869078737,\"difficulty\":1,\"difficultyWeight\":8},\"Dampf\":{\"count\":3,\"lastSeenTime\":1586859475541,\"difficulty\":0.25,\"difficultyWeight\":8},\"Reißverschlussverfahren\":{\"count\":4,\"lastSeenTime\":1586913868342},\"Polizist\":{\"count\":6,\"lastSeenTime\":1586881085327,\"difficulty\":1,\"difficultyWeight\":6},\"Aschenbecher\":{\"count\":7,\"lastSeenTime\":1586879531452},\"Drillinge\":{\"count\":4,\"lastSeenTime\":1586897154134,\"difficulty\":0.8275862068965517,\"difficultyWeight\":29},\"Insekt\":{\"count\":11,\"lastSeenTime\":1586955938117},\"Spongebob\":{\"count\":8,\"lastSeenTime\":1586901003976},\"Slalom\":{\"count\":9,\"lastSeenTime\":1586903939910,\"difficulty\":1,\"difficultyWeight\":26},\"Brieftaube\":{\"count\":7,\"lastSeenTime\":1586919394915,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Gebäck\":{\"count\":6,\"lastSeenTime\":1586879170331,\"difficulty\":1,\"difficultyWeight\":3},\"Wasserhahn\":{\"count\":4,\"lastSeenTime\":1586959207698},\"tippen\":{\"count\":9,\"lastSeenTime\":1586903673095},\"Robin Hood\":{\"count\":4,\"lastSeenTime\":1586873676367},\"Lieferung\":{\"count\":5,\"lastSeenTime\":1586806294106},\"Strauß\":{\"count\":3,\"lastSeenTime\":1586817693807},\"fleischfressend\":{\"count\":4,\"lastSeenTime\":1586816002310},\"Faultier\":{\"count\":6,\"lastSeenTime\":1586915856980},\"Geburtstag\":{\"count\":6,\"lastSeenTime\":1586806643897,\"publicGameCount\":1,\"difficulty\":0.9090909090909091,\"difficultyWeight\":11},\"Tierfutter\":{\"count\":4,\"lastSeenTime\":1586901089526},\"Obelix\":{\"count\":6,\"lastSeenTime\":1586891242624,\"difficulty\":0.2857142857142857,\"difficultyWeight\":7},\"Dollar\":{\"count\":10,\"lastSeenTime\":1586955654939,\"difficulty\":0.375,\"difficultyWeight\":8},\"Eichhörnchen\":{\"count\":6,\"lastSeenTime\":1586958325841},\"kratzen\":{\"count\":7,\"lastSeenTime\":1586896509911,\"difficulty\":1,\"difficultyWeight\":5},\"klatschen\":{\"count\":5,\"lastSeenTime\":1586858550508},\"Raumschiff\":{\"count\":3,\"lastSeenTime\":1586713907372,\"publicGameCount\":2,\"difficulty\":1,\"difficultyWeight\":7},\"Ikea\":{\"count\":3,\"lastSeenTime\":1586897039497},\"sternhagelvoll\":{\"count\":5,\"lastSeenTime\":1586812941735},\"Keksdose\":{\"count\":14,\"lastSeenTime\":1586955419506,\"difficulty\":1,\"difficultyWeight\":1},\"Ameisenhaufen\":{\"count\":10,\"lastSeenTime\":1586913424347},\"Pilz\":{\"count\":5,\"lastSeenTime\":1586957940022},\"heiß\":{\"count\":5,\"lastSeenTime\":1586868067356,\"difficulty\":0.9761904761904762,\"difficultyWeight\":42},\"Tabak\":{\"count\":9,\"lastSeenTime\":1586907386047,\"difficulty\":1,\"difficultyWeight\":10},\"High Heels\":{\"count\":5,\"lastSeenTime\":1586915139518},\"Schublade\":{\"count\":3,\"lastSeenTime\":1586874917114},\"Coffeeshop\":{\"count\":5,\"lastSeenTime\":1586896530203},\"Schlauch\":{\"count\":5,\"lastSeenTime\":1586889566614},\"Teletubby\":{\"count\":7,\"lastSeenTime\":1586902641439},\"Butter\":{\"count\":10,\"lastSeenTime\":1586889682224},\"Münze\":{\"count\":3,\"lastSeenTime\":1586909250467,\"difficulty\":1,\"difficultyWeight\":38},\"Überschrift\":{\"count\":7,\"lastSeenTime\":1586914883727,\"difficulty\":0.5,\"difficultyWeight\":6},\"Rapunzel\":{\"count\":5,\"lastSeenTime\":1586956130879},\"Ofen\":{\"count\":10,\"lastSeenTime\":1586908141001},\"Afrofrisur\":{\"count\":5,\"lastSeenTime\":1586913696698},\"Aufkleber\":{\"count\":5,\"lastSeenTime\":1586897455407},\"magersüchtig\":{\"count\":7,\"lastSeenTime\":1586919650407,\"difficulty\":1,\"difficultyWeight\":6},\"Pflaume\":{\"count\":5,\"lastSeenTime\":1586869723557},\"Giftzwerg\":{\"count\":4,\"lastSeenTime\":1586840557813,\"difficulty\":0.9767441860465116,\"difficultyWeight\":43},\"Pfadfinder\":{\"count\":8,\"lastSeenTime\":1586913606771},\"Barcode\":{\"count\":9,\"lastSeenTime\":1586956552197,\"difficulty\":1,\"difficultyWeight\":5},\"Morgen\":{\"count\":7,\"lastSeenTime\":1586818656558,\"difficulty\":1,\"difficultyWeight\":5},\"Tisch\":{\"count\":9,\"lastSeenTime\":1586955654939,\"publicGameCount\":1,\"difficulty\":0.42857142857142855,\"difficultyWeight\":7},\"Rotkehlchen\":{\"count\":11,\"lastSeenTime\":1586914181975},\"Kalender\":{\"count\":5,\"lastSeenTime\":1586904040749},\"Elektroauto\":{\"count\":6,\"lastSeenTime\":1586955025294},\"Jäger\":{\"count\":6,\"lastSeenTime\":1586956019428,\"difficulty\":1,\"difficultyWeight\":7},\"Hase\":{\"count\":7,\"lastSeenTime\":1586903333845},\"Kiste\":{\"count\":4,\"lastSeenTime\":1586879520233},\"Käsekuchen\":{\"count\":11,\"lastSeenTime\":1586909201701},\"Kreuzfahrt\":{\"count\":7,\"lastSeenTime\":1586959570753,\"publicGameCount\":1,\"difficulty\":0.33333333333333337,\"difficultyWeight\":9},\"Corn Dog\":{\"count\":6,\"lastSeenTime\":1586826796918},\"Parade\":{\"count\":10,\"lastSeenTime\":1586915442369,\"publicGameCount\":1,\"difficulty\":0.875,\"difficultyWeight\":8},\"Überfall\":{\"count\":9,\"lastSeenTime\":1586919650407},\"Quelle\":{\"count\":6,\"lastSeenTime\":1586873482759},\"Kontrabass\":{\"count\":11,\"lastSeenTime\":1586919348003,\"difficulty\":1,\"difficultyWeight\":10},\"Matratze\":{\"count\":8,\"lastSeenTime\":1586920957237},\"Xylofon\":{\"count\":8,\"lastSeenTime\":1586955429782},\"Daumen\":{\"count\":5,\"lastSeenTime\":1586916404987,\"publicGameCount\":1,\"difficulty\":0.95,\"difficultyWeight\":20},\"Tischdecke\":{\"count\":9,\"lastSeenTime\":1586958983867},\"Dachschaden\":{\"count\":6,\"lastSeenTime\":1586817605940},\"Sonnenaufgang\":{\"count\":8,\"lastSeenTime\":1586959789851,\"publicGameCount\":2,\"difficulty\":0.7777777777777778,\"difficultyWeight\":27},\"Halbleiter\":{\"count\":4,\"lastSeenTime\":1586954678504},\"Kranz\":{\"count\":8,\"lastSeenTime\":1586908175585},\"High Score\":{\"count\":8,\"lastSeenTime\":1586874283356},\"Fliegenklatsche\":{\"count\":9,\"lastSeenTime\":1586920005337,\"difficulty\":0.9622641509433962,\"difficultyWeight\":53},\"Maskottchen\":{\"count\":3,\"lastSeenTime\":1586725969582,\"difficulty\":0.9,\"difficultyWeight\":10},\"Tank\":{\"count\":10,\"lastSeenTime\":1586913948292,\"difficulty\":0.5555555555555556,\"difficultyWeight\":9},\"Kung Fu\":{\"count\":6,\"lastSeenTime\":1586958325841},\"lachen\":{\"count\":8,\"lastSeenTime\":1586869397751,\"difficulty\":0.25,\"difficultyWeight\":8},\"Klarinette\":{\"count\":5,\"lastSeenTime\":1586896444515},\"Hacker\":{\"count\":8,\"lastSeenTime\":1586904412233},\"vertikal\":{\"count\":5,\"lastSeenTime\":1586959482662,\"difficulty\":1,\"difficultyWeight\":4},\"Sicherheitsgurt\":{\"count\":6,\"lastSeenTime\":1586903950072},\"Schokolade\":{\"count\":9,\"lastSeenTime\":1586913948292},\"Schminke\":{\"count\":5,\"lastSeenTime\":1586902926018},\"Stoff\":{\"count\":5,\"lastSeenTime\":1586858918703},\"Grashüpfer\":{\"count\":6,\"lastSeenTime\":1586916116567,\"difficulty\":0.3333333333333333,\"difficultyWeight\":12},\"Schule\":{\"count\":7,\"lastSeenTime\":1586914893907},\"Schmied\":{\"count\":4,\"lastSeenTime\":1586958077398},\"erzählen\":{\"count\":6,\"lastSeenTime\":1586920322622},\"Weide\":{\"count\":8,\"lastSeenTime\":1586901346838},\"Golfwagen\":{\"count\":9,\"lastSeenTime\":1586907900355},\"Lichtschalter\":{\"count\":4,\"lastSeenTime\":1586712768631},\"Perle\":{\"count\":6,\"lastSeenTime\":1586896769426,\"difficulty\":0.9333333333333333,\"difficultyWeight\":15,\"publicGameCount\":1},\"Explosion\":{\"count\":8,\"lastSeenTime\":1586958873120,\"publicGameCount\":1,\"difficulty\":0.7333333333333333,\"difficultyWeight\":15},\"Kleid\":{\"count\":4,\"lastSeenTime\":1586959417006,\"difficulty\":0.8857142857142857,\"difficultyWeight\":70},\"Klingelton\":{\"count\":6,\"lastSeenTime\":1586901606974},\"depressiv\":{\"count\":6,\"lastSeenTime\":1586958821795,\"difficulty\":1,\"difficultyWeight\":6},\"Bauer\":{\"count\":5,\"lastSeenTime\":1586827875892},\"Bildschirm\":{\"count\":10,\"lastSeenTime\":1586903836685},\"Sparschwein\":{\"count\":15,\"lastSeenTime\":1586914575777,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Lakritz\":{\"count\":9,\"lastSeenTime\":1586914387880},\"fahren\":{\"count\":8,\"lastSeenTime\":1586890826443,\"difficulty\":0.5,\"difficultyWeight\":4},\"Pistole\":{\"count\":4,\"lastSeenTime\":1586907962530,\"difficulty\":1,\"difficultyWeight\":8},\"Held\":{\"count\":6,\"lastSeenTime\":1586907729754},\"Eiffelturm\":{\"count\":4,\"lastSeenTime\":1586874677647,\"difficulty\":1,\"difficultyWeight\":8},\"Brücke\":{\"count\":10,\"lastSeenTime\":1586908141001},\"Kreis\":{\"count\":5,\"lastSeenTime\":1586879705061},\"Skalpell\":{\"count\":7,\"lastSeenTime\":1586956215415},\"Batterie\":{\"count\":10,\"lastSeenTime\":1586954900699,\"difficulty\":0.5333333333333333,\"difficultyWeight\":15},\"Hühnchen\":{\"count\":14,\"lastSeenTime\":1586959738785},\"Thron\":{\"count\":6,\"lastSeenTime\":1586915365103,\"difficulty\":1,\"difficultyWeight\":5},\"Narbe\":{\"count\":5,\"lastSeenTime\":1586839235965},\"Spielzeug\":{\"count\":8,\"lastSeenTime\":1586915767461,\"difficulty\":1,\"difficultyWeight\":35},\"Lunge\":{\"count\":5,\"lastSeenTime\":1586815863706,\"difficulty\":0.82,\"difficultyWeight\":50},\"Seepferdchen\":{\"count\":5,\"lastSeenTime\":1586916074772},\"melken\":{\"count\":4,\"lastSeenTime\":1586874527694},\"Paparazzi\":{\"count\":7,\"lastSeenTime\":1586879892909},\"Wange\":{\"count\":8,\"lastSeenTime\":1586920312527,\"difficulty\":0.30000000000000004,\"difficultyWeight\":10},\"Schneemann\":{\"count\":7,\"lastSeenTime\":1586907351001,\"difficulty\":0.5,\"difficultyWeight\":14},\"Muttermal\":{\"count\":5,\"lastSeenTime\":1586908721366,\"publicGameCount\":1,\"difficulty\":0,\"difficultyWeight\":1},\"Groschen\":{\"count\":6,\"lastSeenTime\":1586958052113},\"differenzieren\":{\"count\":4,\"lastSeenTime\":1586901181085},\"Domino\":{\"count\":8,\"lastSeenTime\":1586959482662,\"difficulty\":0.4444444444444444,\"difficultyWeight\":9},\"schreien\":{\"count\":6,\"lastSeenTime\":1586954588805},\"Hawaiihemd\":{\"count\":4,\"lastSeenTime\":1586874677647,\"difficulty\":0.7222222222222222,\"difficultyWeight\":18},\"Brustkorb\":{\"count\":6,\"lastSeenTime\":1586954967541,\"difficulty\":1,\"difficultyWeight\":7},\"rechnen\":{\"count\":4,\"lastSeenTime\":1586708948976,\"difficulty\":0.8181818181818182,\"difficultyWeight\":11},\"Steckdose\":{\"count\":7,\"lastSeenTime\":1586959178760,\"difficulty\":0.75,\"difficultyWeight\":20},\"Gürtel\":{\"count\":2,\"lastSeenTime\":1586874869836},\"Hirsch\":{\"count\":8,\"lastSeenTime\":1586956145689},\"Pantomime\":{\"count\":6,\"lastSeenTime\":1586858586343},\"Rochen\":{\"count\":5,\"lastSeenTime\":1586833743451,\"difficulty\":0.7777777777777778,\"difficultyWeight\":9},\"Spiderman\":{\"count\":7,\"lastSeenTime\":1586908697152,\"difficulty\":0.8409090909090909,\"difficultyWeight\":44},\"Schlafenszeit\":{\"count\":7,\"lastSeenTime\":1586916118321,\"difficulty\":0.8,\"difficultyWeight\":5},\"Samsung\":{\"count\":10,\"lastSeenTime\":1586896554510},\"Nahrung\":{\"count\":5,\"lastSeenTime\":1586957848254},\"Harry Potter\":{\"count\":8,\"lastSeenTime\":1586920722806,\"difficulty\":1,\"difficultyWeight\":24},\"Katy Perry\":{\"count\":5,\"lastSeenTime\":1586833719821},\"Rückspiegel\":{\"count\":4,\"lastSeenTime\":1586869324825},\"Erdnuss-flips\":{\"count\":9,\"lastSeenTime\":1586920690415},\"Weltraum\":{\"count\":4,\"lastSeenTime\":1586919697403,\"difficulty\":1,\"difficultyWeight\":12},\"Virtual Reality\":{\"count\":7,\"lastSeenTime\":1586869058242},\"brüllen\":{\"count\":3,\"lastSeenTime\":1586875005520},\"Heinzelmännchen\":{\"count\":6,\"lastSeenTime\":1586914560752,\"difficulty\":1,\"difficultyWeight\":8},\"Spiel\":{\"count\":3,\"lastSeenTime\":1586727314043},\"Form\":{\"count\":3,\"lastSeenTime\":1586921270600},\"Küchentuch\":{\"count\":6,\"lastSeenTime\":1586881021273},\"Pilot\":{\"count\":6,\"lastSeenTime\":1586958141882,\"difficulty\":0.8545454545454545,\"difficultyWeight\":55},\"Gnom\":{\"count\":4,\"lastSeenTime\":1586832821211},\"Rettungsring\":{\"count\":6,\"lastSeenTime\":1586914109258},\"Augenbraue\":{\"count\":4,\"lastSeenTime\":1586880956767,\"difficulty\":1,\"difficultyWeight\":3},\"Schleichwerbung\":{\"count\":2,\"lastSeenTime\":1586955457642},\"Unfall\":{\"count\":6,\"lastSeenTime\":1586920285874,\"difficulty\":1,\"difficultyWeight\":5},\"Photosynthese\":{\"count\":3,\"lastSeenTime\":1586955392320,\"difficulty\":1,\"difficultyWeight\":13},\"Donald Trump\":{\"count\":6,\"lastSeenTime\":1586901719438,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":4},\"Farbpalette\":{\"count\":9,\"lastSeenTime\":1586908721968},\"Schlafstörung\":{\"count\":6,\"lastSeenTime\":1586919858412},\"Geldbeutel\":{\"count\":3,\"lastSeenTime\":1586908494479},\"Dreirad\":{\"count\":6,\"lastSeenTime\":1586903421160},\"Ziege\":{\"count\":6,\"lastSeenTime\":1586826949191},\"Palme\":{\"count\":4,\"lastSeenTime\":1586908787449},\"Grabstein\":{\"count\":7,\"lastSeenTime\":1586867963918,\"difficulty\":0.33333333333333337,\"difficultyWeight\":9},\"Wunde\":{\"count\":13,\"lastSeenTime\":1586955152448},\"Eule\":{\"count\":8,\"lastSeenTime\":1586873598800},\"Huf\":{\"count\":8,\"lastSeenTime\":1586903867648},\"Gourmet\":{\"count\":1,\"lastSeenTime\":1586564694384},\"Emoji\":{\"count\":3,\"lastSeenTime\":1586633980478,\"difficulty\":0.7941176470588235,\"difficultyWeight\":34},\"Stereo\":{\"count\":6,\"lastSeenTime\":1586959595986,\"difficulty\":0.9333333333333333,\"difficultyWeight\":15},\"Ski\":{\"count\":5,\"lastSeenTime\":1586840301535},\"Brezel\":{\"count\":5,\"lastSeenTime\":1586921071907,\"difficulty\":0.625,\"difficultyWeight\":8},\"Leine\":{\"count\":6,\"lastSeenTime\":1586890378764},\"Gepäckträger\":{\"count\":8,\"lastSeenTime\":1586959279701,\"difficulty\":1,\"difficultyWeight\":36},\"Jaguar\":{\"count\":8,\"lastSeenTime\":1586920336794},\"Paypal\":{\"count\":9,\"lastSeenTime\":1586901166652,\"difficulty\":1,\"difficultyWeight\":22},\"Spitzmaus\":{\"count\":5,\"lastSeenTime\":1586921209345,\"difficulty\":1,\"difficultyWeight\":9},\"Glas\":{\"count\":11,\"lastSeenTime\":1586916328101,\"difficulty\":1,\"difficultyWeight\":1},\"Wasserkreislauf\":{\"count\":5,\"lastSeenTime\":1586880595683,\"difficulty\":1,\"difficultyWeight\":8},\"Veröffentlichung\":{\"count\":7,\"lastSeenTime\":1586916382544},\"Henne\":{\"count\":8,\"lastSeenTime\":1586840782545},\"Barbar\":{\"count\":6,\"lastSeenTime\":1586875120930},\"Happy Meal\":{\"count\":9,\"lastSeenTime\":1586919433115},\"Kleber\":{\"count\":7,\"lastSeenTime\":1586816382821},\"schenken\":{\"count\":4,\"lastSeenTime\":1586916731964,\"publicGameCount\":1,\"difficulty\":0.8333333333333334,\"difficultyWeight\":24},\"Portugal\":{\"count\":8,\"lastSeenTime\":1586914309641,\"difficulty\":0.42857142857142855,\"difficultyWeight\":7},\"Stirnband\":{\"count\":6,\"lastSeenTime\":1586813412560,\"difficulty\":0.8333333333333334,\"difficultyWeight\":6},\"Tannenzapfen\":{\"count\":9,\"lastSeenTime\":1586958325841},\"Uniform\":{\"count\":8,\"lastSeenTime\":1586907547051,\"publicGameCount\":1,\"difficulty\":0.8,\"difficultyWeight\":5},\"Aubergine\":{\"count\":7,\"lastSeenTime\":1586958642478,\"difficulty\":0.8571428571428571,\"difficultyWeight\":49},\"Bruce Lee\":{\"count\":4,\"lastSeenTime\":1586908921509},\"Schacht\":{\"count\":4,\"lastSeenTime\":1586839026220},\"Youtuber\":{\"count\":8,\"lastSeenTime\":1586959804291},\"Leiche\":{\"count\":5,\"lastSeenTime\":1586954999969,\"difficulty\":0.9,\"difficultyWeight\":10},\"Mond\":{\"count\":2,\"lastSeenTime\":1586806443319},\"Pyramide\":{\"count\":10,\"lastSeenTime\":1586955716758,\"difficulty\":0.5714285714285714,\"difficultyWeight\":14},\"Tandem\":{\"count\":4,\"lastSeenTime\":1586890378764,\"difficulty\":0.9333333333333333,\"difficultyWeight\":15},\"Rucksack\":{\"count\":6,\"lastSeenTime\":1586914557302},\"Reisepass\":{\"count\":5,\"lastSeenTime\":1586921104275},\"Seite\":{\"count\":7,\"lastSeenTime\":1586954664216,\"difficulty\":1,\"difficultyWeight\":10},\"Abzug\":{\"count\":6,\"lastSeenTime\":1586919836074},\"Hosentasche\":{\"count\":10,\"lastSeenTime\":1586879853156,\"difficulty\":0.9411764705882353,\"difficultyWeight\":17},\"Rübe\":{\"count\":4,\"lastSeenTime\":1586880531589},\"Katzenklo\":{\"count\":5,\"lastSeenTime\":1586959508307},\"Zirkel\":{\"count\":2,\"lastSeenTime\":1586902738828,\"difficulty\":1,\"difficultyWeight\":6},\"Kohlrübe\":{\"count\":6,\"lastSeenTime\":1586879359526,\"difficulty\":1,\"difficultyWeight\":5},\"Jacht\":{\"count\":5,\"lastSeenTime\":1586900866878,\"difficulty\":1,\"difficultyWeight\":23},\"Serviette\":{\"count\":4,\"lastSeenTime\":1586902776556},\"hart\":{\"count\":3,\"lastSeenTime\":1586874767406},\"Karate\":{\"count\":11,\"lastSeenTime\":1586902738828,\"difficulty\":0.75,\"difficultyWeight\":4},\"Diamant\":{\"count\":9,\"lastSeenTime\":1586958289143,\"publicGameCount\":1,\"difficulty\":0.918918918918919,\"difficultyWeight\":37},\"Lagerfeuer\":{\"count\":8,\"lastSeenTime\":1586903853302},\"Deadpool\":{\"count\":6,\"lastSeenTime\":1586901547884},\"Universum\":{\"count\":6,\"lastSeenTime\":1586959090713},\"Bär\":{\"count\":8,\"lastSeenTime\":1586895747389,\"difficulty\":0.8,\"difficultyWeight\":15,\"publicGameCount\":1},\"Verkehrskontrolle\":{\"count\":8,\"lastSeenTime\":1586959789851,\"difficulty\":1,\"difficultyWeight\":19},\"Komet\":{\"count\":8,\"lastSeenTime\":1586916382544},\"übergeben\":{\"count\":7,\"lastSeenTime\":1586900739157,\"difficulty\":1,\"difficultyWeight\":16},\"Röntgenstrahlung\":{\"count\":5,\"lastSeenTime\":1586916565022},\"Polo\":{\"count\":7,\"lastSeenTime\":1586919552513},\"Gott\":{\"count\":3,\"lastSeenTime\":1586707906596,\"difficulty\":1,\"difficultyWeight\":1},\"Nasenlöcher\":{\"count\":4,\"lastSeenTime\":1586920836680,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Berlin\":{\"count\":5,\"lastSeenTime\":1586868603483,\"difficulty\":0.7222222222222222,\"difficultyWeight\":18},\"küssen\":{\"count\":10,\"lastSeenTime\":1586919783421},\"Schleim\":{\"count\":9,\"lastSeenTime\":1586890237676},\"Flipper\":{\"count\":2,\"lastSeenTime\":1586907839176,\"difficulty\":0.8,\"difficultyWeight\":5},\"Schubkarre\":{\"count\":4,\"lastSeenTime\":1586783730394},\"Airbag\":{\"count\":3,\"lastSeenTime\":1586827613351,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Schwerkraft\":{\"count\":3,\"lastSeenTime\":1586826965958},\"Gürteltier\":{\"count\":5,\"lastSeenTime\":1586711447154},\"Tunnel\":{\"count\":6,\"lastSeenTime\":1586908054437,\"difficulty\":0.8888888888888888,\"difficultyWeight\":63},\"Freiheitsstatue\":{\"count\":5,\"lastSeenTime\":1586908392957},\"Idee\":{\"count\":7,\"lastSeenTime\":1586957888650,\"difficulty\":0.25,\"difficultyWeight\":8},\"Black Friday\":{\"count\":5,\"lastSeenTime\":1586958299322,\"publicGameCount\":1,\"difficulty\":0.6666666666666666,\"difficultyWeight\":12},\"Parkplatz\":{\"count\":4,\"lastSeenTime\":1586920954248,\"difficulty\":0.8,\"difficultyWeight\":5},\"Video\":{\"count\":9,\"lastSeenTime\":1586908315438,\"difficulty\":0.8,\"difficultyWeight\":10},\"Speck\":{\"count\":3,\"lastSeenTime\":1586710915055},\"Nebel\":{\"count\":4,\"lastSeenTime\":1586954808666},\"Queue\":{\"count\":4,\"lastSeenTime\":1586859189711},\"Stegosaurus\":{\"count\":6,\"lastSeenTime\":1586916368116},\"Hälfte\":{\"count\":4,\"lastSeenTime\":1586920180037},\"ernten\":{\"count\":7,\"lastSeenTime\":1586873461546},\"pieksen\":{\"count\":7,\"lastSeenTime\":1586907414380},\"Zahnarzt\":{\"count\":7,\"lastSeenTime\":1586916153776,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"Brownie\":{\"count\":6,\"lastSeenTime\":1586914683667},\"Busch\":{\"count\":5,\"lastSeenTime\":1586879770813},\"Fluss\":{\"count\":9,\"lastSeenTime\":1586919384885},\"Besen\":{\"count\":5,\"lastSeenTime\":1586812283796},\"Federball\":{\"count\":5,\"lastSeenTime\":1586900264634,\"difficulty\":0.8125,\"difficultyWeight\":16},\"Keyboard\":{\"count\":8,\"lastSeenTime\":1586915609902,\"difficulty\":0.7333333333333333,\"difficultyWeight\":15},\"James Bond\":{\"count\":6,\"lastSeenTime\":1586904332915,\"difficulty\":1,\"difficultyWeight\":3},\"Armleuchter\":{\"count\":6,\"lastSeenTime\":1586919327173},\"Litschi\":{\"count\":6,\"lastSeenTime\":1586913581904,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":12},\"Barbier\":{\"count\":9,\"lastSeenTime\":1586902713347},\"Sweatshirt\":{\"count\":7,\"lastSeenTime\":1586907547051},\"Fenster\":{\"count\":2,\"lastSeenTime\":1586632836406,\"difficulty\":0.4,\"difficultyWeight\":10},\"Lavendel\":{\"count\":3,\"lastSeenTime\":1586889943537},\"Taille\":{\"count\":7,\"lastSeenTime\":1586908315438},\"Befehlshaber\":{\"count\":5,\"lastSeenTime\":1586904102272},\"falsche Zähne\":{\"count\":6,\"lastSeenTime\":1586915031903},\"Sonic\":{\"count\":5,\"lastSeenTime\":1586817982440},\"Eber\":{\"count\":6,\"lastSeenTime\":1586812232504},\"Tonleiter\":{\"count\":11,\"lastSeenTime\":1586908392957,\"difficulty\":1,\"difficultyWeight\":26},\"Döner\":{\"count\":8,\"lastSeenTime\":1586919797630,\"difficulty\":1,\"difficultyWeight\":3},\"Dracula\":{\"count\":5,\"lastSeenTime\":1586901152323,\"difficulty\":1,\"difficultyWeight\":4},\"Seife\":{\"count\":5,\"lastSeenTime\":1586913596578},\"Feldstecher\":{\"count\":5,\"lastSeenTime\":1586873383077},\"Saft\":{\"count\":10,\"lastSeenTime\":1586908697152,\"difficulty\":1,\"difficultyWeight\":12},\"Portal\":{\"count\":7,\"lastSeenTime\":1586880741697},\"Badeanzug\":{\"count\":4,\"lastSeenTime\":1586897368245,\"publicGameCount\":1},\"Trüffel\":{\"count\":6,\"lastSeenTime\":1586919927137},\"Bräutigam\":{\"count\":10,\"lastSeenTime\":1586919836074,\"difficulty\":1,\"difficultyWeight\":26},\"Baklava\":{\"count\":6,\"lastSeenTime\":1586907693323},\"studieren\":{\"count\":5,\"lastSeenTime\":1586914206725,\"difficulty\":0.9130434782608695,\"difficultyWeight\":46},\"Norwegen\":{\"count\":9,\"lastSeenTime\":1586954588805},\"Fidget Spinner\":{\"count\":7,\"lastSeenTime\":1586901014103,\"difficulty\":0.9090909090909091,\"difficultyWeight\":11},\"Schwanz\":{\"count\":9,\"lastSeenTime\":1586915529401,\"difficulty\":0.9285714285714286,\"difficultyWeight\":14},\"schnell\":{\"count\":10,\"lastSeenTime\":1586909080709,\"difficulty\":0.33333333333333337,\"difficultyWeight\":9},\"Grubenarbeiter\":{\"count\":3,\"lastSeenTime\":1586838964600},\"flach\":{\"count\":2,\"lastSeenTime\":1586590610487},\"Maki\":{\"count\":8,\"lastSeenTime\":1586919433115},\"Xbox\":{\"count\":5,\"lastSeenTime\":1586954617410,\"difficulty\":1,\"difficultyWeight\":3},\"Holz\":{\"count\":5,\"lastSeenTime\":1586916731964},\"Grippe\":{\"count\":4,\"lastSeenTime\":1586913633876},\"spannen\":{\"count\":6,\"lastSeenTime\":1586890968538},\"Allee\":{\"count\":5,\"lastSeenTime\":1586868169552},\"Anker\":{\"count\":3,\"lastSeenTime\":1586890117788,\"difficulty\":0.8571428571428571,\"difficultyWeight\":21},\"Stoppuhr\":{\"count\":7,\"lastSeenTime\":1586958959180},\"Gesundheit\":{\"count\":7,\"lastSeenTime\":1586914820916,\"publicGameCount\":1,\"difficulty\":0.3333333333333333,\"difficultyWeight\":6},\"Tattoo\":{\"count\":3,\"lastSeenTime\":1586874552382,\"difficulty\":1,\"difficultyWeight\":8},\"Alkohol\":{\"count\":13,\"lastSeenTime\":1586896554510,\"difficulty\":0.33333333333333337,\"difficultyWeight\":9},\"Müller\":{\"count\":4,\"lastSeenTime\":1586706924436},\"Schweiz\":{\"count\":6,\"lastSeenTime\":1586921032863},\"verlassen\":{\"count\":5,\"lastSeenTime\":1586840121442},\"Pfannenwender\":{\"count\":11,\"lastSeenTime\":1586879170331},\"Kamel\":{\"count\":3,\"lastSeenTime\":1586813676447,\"difficulty\":0.9090909090909091,\"difficultyWeight\":44},\"Raupe\":{\"count\":8,\"lastSeenTime\":1586818853521},\"Hexe\":{\"count\":5,\"lastSeenTime\":1586869324825,\"difficulty\":1,\"difficultyWeight\":11},\"Vorschlaghammer\":{\"count\":4,\"lastSeenTime\":1586920483192},\"Dora\":{\"count\":5,\"lastSeenTime\":1586959193290},\"rollen\":{\"count\":8,\"lastSeenTime\":1586896877511},\"epilieren\":{\"count\":7,\"lastSeenTime\":1586890675024},\"herunterladen\":{\"count\":4,\"lastSeenTime\":1586908155214,\"difficulty\":1,\"difficultyWeight\":3},\"Lampe\":{\"count\":4,\"lastSeenTime\":1586709093864,\"difficulty\":0.6153846153846154,\"difficultyWeight\":13},\"Diskette\":{\"count\":7,\"lastSeenTime\":1586955763543},\"Umhang\":{\"count\":8,\"lastSeenTime\":1586957874303},\"Jeep\":{\"count\":6,\"lastSeenTime\":1586954808666},\"Horn\":{\"count\":15,\"lastSeenTime\":1586915299932,\"publicGameCount\":1,\"difficulty\":0.7857142857142857,\"difficultyWeight\":28},\"Goldkette\":{\"count\":6,\"lastSeenTime\":1586896854975,\"difficulty\":1,\"difficultyWeight\":11},\"Kissen\":{\"count\":9,\"lastSeenTime\":1586958794944},\"Sechserpack\":{\"count\":6,\"lastSeenTime\":1586921241738},\"Keks\":{\"count\":5,\"lastSeenTime\":1586956166526,\"difficulty\":1,\"difficultyWeight\":8},\"Kettenkarussell\":{\"count\":5,\"lastSeenTime\":1586913518787,\"difficulty\":1,\"difficultyWeight\":6},\"Zeus\":{\"count\":10,\"lastSeenTime\":1586919337853,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":24},\"Leuchtstab\":{\"count\":8,\"lastSeenTime\":1586919423610,\"difficulty\":1,\"difficultyWeight\":6},\"Eisen\":{\"count\":7,\"lastSeenTime\":1586955877308,\"publicGameCount\":1,\"difficulty\":0.5714285714285714,\"difficultyWeight\":14},\"Fee\":{\"count\":5,\"lastSeenTime\":1586832498107},\"Seilspringen\":{\"count\":4,\"lastSeenTime\":1586805458421,\"difficulty\":1,\"difficultyWeight\":11},\"Kopfschmerzen\":{\"count\":6,\"lastSeenTime\":1586908757151},\"Feuerwerk\":{\"count\":2,\"lastSeenTime\":1586706242194,\"difficulty\":0.6666666666666667,\"difficultyWeight\":9},\"Snoopy\":{\"count\":7,\"lastSeenTime\":1586959401878,\"difficulty\":1,\"difficultyWeight\":6},\"Waschbecken\":{\"count\":5,\"lastSeenTime\":1586955923939,\"difficulty\":0.75,\"difficultyWeight\":4},\"Karotte\":{\"count\":9,\"lastSeenTime\":1586900941854,\"difficulty\":1,\"difficultyWeight\":11},\"Dachboden\":{\"count\":5,\"lastSeenTime\":1586875174443,\"difficulty\":1,\"difficultyWeight\":24},\"Löffel\":{\"count\":16,\"lastSeenTime\":1586959570753,\"difficulty\":0.625,\"difficultyWeight\":24},\"Pups\":{\"count\":10,\"lastSeenTime\":1586919522211,\"difficulty\":1,\"difficultyWeight\":3},\"Stuhl\":{\"count\":5,\"lastSeenTime\":1586956504597,\"difficulty\":0.11111111111111116,\"difficultyWeight\":9},\"Vorhang\":{\"count\":8,\"lastSeenTime\":1586955862348},\"Abschleppwagen\":{\"count\":3,\"lastSeenTime\":1586957989157},\"Geier\":{\"count\":9,\"lastSeenTime\":1586955209647},\"rülpsen\":{\"count\":5,\"lastSeenTime\":1586955138676,\"difficulty\":0.8974358974358975,\"difficultyWeight\":39},\"Venusfliegenfalle\":{\"count\":6,\"lastSeenTime\":1586958769937},\"Klebeband\":{\"count\":9,\"lastSeenTime\":1586891163944},\"Tomate\":{\"count\":9,\"lastSeenTime\":1586915529401},\"Morse Code\":{\"count\":5,\"lastSeenTime\":1586814103524,\"difficulty\":1,\"difficultyWeight\":16},\"Morgan Freeman\":{\"count\":6,\"lastSeenTime\":1586897139972,\"difficulty\":0.14285714285714293,\"difficultyWeight\":7},\"sanft\":{\"count\":3,\"lastSeenTime\":1586727828851},\"Affe\":{\"count\":7,\"lastSeenTime\":1586907839176},\"Sieg\":{\"count\":1,\"lastSeenTime\":1586567404446},\"Feder\":{\"count\":8,\"lastSeenTime\":1586901511433,\"difficulty\":0.8260869565217391,\"difficultyWeight\":23,\"publicGameCount\":1},\"niedlich\":{\"count\":5,\"lastSeenTime\":1586860007509},\"Bücherregal\":{\"count\":5,\"lastSeenTime\":1586915417224,\"difficulty\":1,\"difficultyWeight\":8},\"Frost\":{\"count\":6,\"lastSeenTime\":1586959608297},\"Melone\":{\"count\":4,\"lastSeenTime\":1586828046616,\"difficulty\":0.24999999999999997,\"difficultyWeight\":12},\"Gummiwürmchen\":{\"count\":4,\"lastSeenTime\":1586834124544},\"laden\":{\"count\":6,\"lastSeenTime\":1586956253026},\"Kokon\":{\"count\":3,\"lastSeenTime\":1586651382688},\"kalt\":{\"count\":5,\"lastSeenTime\":1586958510664},\"Talentshow\":{\"count\":6,\"lastSeenTime\":1586916048294,\"difficulty\":0.9722222222222222,\"difficultyWeight\":36},\"Asteroid\":{\"count\":7,\"lastSeenTime\":1586913452717,\"difficulty\":0.9565217391304348,\"difficultyWeight\":23},\"Spanien\":{\"count\":7,\"lastSeenTime\":1586908646355},\"Gitarre\":{\"count\":9,\"lastSeenTime\":1586955532027,\"difficulty\":0.4444444444444444,\"difficultyWeight\":9},\"Kohle\":{\"count\":6,\"lastSeenTime\":1586817852869,\"difficulty\":0.8461538461538461,\"difficultyWeight\":13},\"Pauke\":{\"count\":8,\"lastSeenTime\":1586890654439,\"difficulty\":1,\"difficultyWeight\":11},\"Festival\":{\"count\":5,\"lastSeenTime\":1586920932924},\"Orbit\":{\"count\":4,\"lastSeenTime\":1586826458119,\"difficulty\":1,\"difficultyWeight\":2},\"London\":{\"count\":5,\"lastSeenTime\":1586901786675},\"Wirbelsäule\":{\"count\":4,\"lastSeenTime\":1586903543797},\"Essen\":{\"count\":3,\"lastSeenTime\":1586722986815},\"Publikum\":{\"count\":8,\"lastSeenTime\":1586900387786},\"Fassade\":{\"count\":9,\"lastSeenTime\":1586915731157,\"difficulty\":0.7954545454545454,\"difficultyWeight\":44},\"Tiramisu\":{\"count\":5,\"lastSeenTime\":1586955503431,\"difficulty\":0.7777777777777778,\"difficultyWeight\":9},\"Eierschachtel\":{\"count\":4,\"lastSeenTime\":1586955310334},\"Schlagsahne\":{\"count\":5,\"lastSeenTime\":1586959508307},\"Laubsäge\":{\"count\":4,\"lastSeenTime\":1586890704484,\"difficulty\":1,\"difficultyWeight\":7},\"Discord\":{\"count\":7,\"lastSeenTime\":1586958582243,\"difficulty\":0.42857142857142855,\"difficultyWeight\":14},\"Bombe\":{\"count\":6,\"lastSeenTime\":1586908304826,\"difficulty\":0.6666666666666666,\"difficultyWeight\":12},\"Gold\":{\"count\":4,\"lastSeenTime\":1586915503496},\"Risiko\":{\"count\":5,\"lastSeenTime\":1586955609964,\"difficulty\":0.6,\"difficultyWeight\":10},\"Vampir\":{\"count\":5,\"lastSeenTime\":1586958794944,\"difficulty\":1,\"difficultyWeight\":8},\"McDonalds\":{\"count\":5,\"lastSeenTime\":1586839555615},\"Big Ben\":{\"count\":2,\"lastSeenTime\":1586568977728},\"Nussknacker\":{\"count\":7,\"lastSeenTime\":1586860031219,\"difficulty\":0.125,\"difficultyWeight\":8},\"Mutter\":{\"count\":5,\"lastSeenTime\":1586909094851,\"difficulty\":0.7931034482758621,\"difficultyWeight\":29},\"Huhn\":{\"count\":6,\"lastSeenTime\":1586909201701,\"difficulty\":0.9545454545454546,\"difficultyWeight\":22},\"Presslufthammer\":{\"count\":5,\"lastSeenTime\":1586908368588},\"Albtraum\":{\"count\":5,\"lastSeenTime\":1586859971727,\"difficulty\":0.6666666666666666,\"difficultyWeight\":9},\"Moskau\":{\"count\":7,\"lastSeenTime\":1586903572367,\"difficulty\":1,\"difficultyWeight\":8},\"Silo\":{\"count\":6,\"lastSeenTime\":1586920397655,\"difficulty\":1,\"difficultyWeight\":10},\"Otter\":{\"count\":6,\"lastSeenTime\":1586816739369},\"Untergrund\":{\"count\":8,\"lastSeenTime\":1586900087077},\"Antarktis\":{\"count\":10,\"lastSeenTime\":1586955948209,\"publicGameCount\":1,\"difficulty\":0.875,\"difficultyWeight\":8},\"Königin\":{\"count\":4,\"lastSeenTime\":1586880790147},\"Brecheisen\":{\"count\":4,\"lastSeenTime\":1586727600390,\"difficulty\":0.6,\"difficultyWeight\":10},\"Rentner\":{\"count\":6,\"lastSeenTime\":1586874242781},\"Tretmühle\":{\"count\":4,\"lastSeenTime\":1586723037365,\"difficulty\":1,\"difficultyWeight\":6},\"Luftschiff\":{\"count\":7,\"lastSeenTime\":1586858614527},\"Gewitter\":{\"count\":6,\"lastSeenTime\":1586907654631,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Fingerhut\":{\"count\":5,\"lastSeenTime\":1586881031416},\"Tierhandlung\":{\"count\":5,\"lastSeenTime\":1586915503496},\"Ägypten\":{\"count\":3,\"lastSeenTime\":1586868093681},\"schwitzen\":{\"count\":12,\"lastSeenTime\":1586955010181},\"John Cena\":{\"count\":9,\"lastSeenTime\":1586900016201},\"Türklinke\":{\"count\":7,\"lastSeenTime\":1586909296939},\"Garnele\":{\"count\":7,\"lastSeenTime\":1586833778222,\"difficulty\":1,\"difficultyWeight\":3},\"Gepard\":{\"count\":9,\"lastSeenTime\":1586908165354},\"Meteorit\":{\"count\":3,\"lastSeenTime\":1586569956865},\"stricken\":{\"count\":7,\"lastSeenTime\":1586908541127},\"predigen\":{\"count\":5,\"lastSeenTime\":1586959767498},\"Hello Kitty\":{\"count\":9,\"lastSeenTime\":1586901067015,\"difficulty\":0.33333333333333337,\"difficultyWeight\":9},\"Wunschliste\":{\"count\":11,\"lastSeenTime\":1586891326336,\"difficulty\":0.2857142857142857,\"difficultyWeight\":7},\"Stacheldraht\":{\"count\":6,\"lastSeenTime\":1586890854897},\"Fingerspitze\":{\"count\":8,\"lastSeenTime\":1586899916722,\"difficulty\":0.8333333333333334,\"difficultyWeight\":6},\"Orang-Utan\":{\"count\":5,\"lastSeenTime\":1586873319498,\"publicGameCount\":1,\"difficulty\":0.45714285714285713,\"difficultyWeight\":35},\"Minion\":{\"count\":6,\"lastSeenTime\":1586858650110,\"difficulty\":1,\"difficultyWeight\":44},\"anzeigen\":{\"count\":6,\"lastSeenTime\":1586901225801,\"difficulty\":1,\"difficultyWeight\":10},\"Ballett\":{\"count\":3,\"lastSeenTime\":1586817809043,\"difficulty\":1,\"difficultyWeight\":11},\"Neuseeland\":{\"count\":5,\"lastSeenTime\":1586921241738},\"Schamesröte\":{\"count\":4,\"lastSeenTime\":1586826573783},\"Interview\":{\"count\":7,\"lastSeenTime\":1586874880231,\"difficulty\":0.7857142857142857,\"difficultyWeight\":14},\"Krankenschwester\":{\"count\":8,\"lastSeenTime\":1586959218404,\"difficulty\":1,\"difficultyWeight\":2},\"Kugelfisch\":{\"count\":4,\"lastSeenTime\":1586900785753,\"publicGameCount\":1,\"difficulty\":0.8181818181818182,\"difficultyWeight\":22},\"Glück\":{\"count\":3,\"lastSeenTime\":1586813998210},\"Dexter\":{\"count\":11,\"lastSeenTime\":1586913556716},\"Schuh\":{\"count\":4,\"lastSeenTime\":1586916116567},\"gähnen\":{\"count\":7,\"lastSeenTime\":1586919433115},\"Socken\":{\"count\":8,\"lastSeenTime\":1586914270411},\"Dach\":{\"count\":6,\"lastSeenTime\":1586914699787,\"difficulty\":1,\"difficultyWeight\":4},\"Falte\":{\"count\":4,\"lastSeenTime\":1586839830482},\"Oscar\":{\"count\":5,\"lastSeenTime\":1586914526456},\"kauen\":{\"count\":7,\"lastSeenTime\":1586897264698,\"difficulty\":0.75,\"difficultyWeight\":12},\"Flughafen\":{\"count\":8,\"lastSeenTime\":1586920446574,\"difficulty\":1,\"difficultyWeight\":4},\"Chewbacca\":{\"count\":4,\"lastSeenTime\":1586958471219},\"Klimaanlage\":{\"count\":5,\"lastSeenTime\":1586806917088},\"Drama\":{\"count\":8,\"lastSeenTime\":1586955238992,\"difficulty\":0.8181818181818182,\"difficultyWeight\":11},\"Luigi\":{\"count\":7,\"lastSeenTime\":1586920108914},\"Teelicht\":{\"count\":7,\"lastSeenTime\":1586920982151,\"publicGameCount\":1},\"Gießkanne\":{\"count\":3,\"lastSeenTime\":1586958350172,\"difficulty\":0.7666666666666667,\"difficultyWeight\":60},\"Spule\":{\"count\":8,\"lastSeenTime\":1586913581904},\"Papier\":{\"count\":6,\"lastSeenTime\":1586900349607},\"Kokosnuss\":{\"count\":4,\"lastSeenTime\":1586859513029,\"difficulty\":0.3333333333333333,\"difficultyWeight\":6},\"Cowboy\":{\"count\":4,\"lastSeenTime\":1586904308260},\"Community\":{\"count\":4,\"lastSeenTime\":1586784190547},\"Bodybuilding\":{\"count\":14,\"lastSeenTime\":1586919954168,\"difficulty\":1,\"difficultyWeight\":7},\"Vene\":{\"count\":3,\"lastSeenTime\":1586718507669},\"schreiben\":{\"count\":7,\"lastSeenTime\":1586818118151,\"difficulty\":0.375,\"difficultyWeight\":8},\"Medizin\":{\"count\":8,\"lastSeenTime\":1586833955534},\"Minecraft\":{\"count\":5,\"lastSeenTime\":1586901346838},\"gemütlich\":{\"count\":3,\"lastSeenTime\":1586896791819,\"difficulty\":0.7777777777777778,\"difficultyWeight\":18},\"Glockenspiel\":{\"count\":5,\"lastSeenTime\":1586858799129,\"difficulty\":0.5833333333333334,\"difficultyWeight\":36},\"Trommel\":{\"count\":4,\"lastSeenTime\":1586921180981},\"Notizblock\":{\"count\":1,\"lastSeenTime\":1586568332043},\"Knast\":{\"count\":5,\"lastSeenTime\":1586916590016},\"besuchen\":{\"count\":9,\"lastSeenTime\":1586920722806,\"publicGameCount\":1,\"difficulty\":0.8333333333333334,\"difficultyWeight\":6},\"Kolibri\":{\"count\":5,\"lastSeenTime\":1586914729019},\"Amor\":{\"count\":7,\"lastSeenTime\":1586839459663,\"difficulty\":0.9523809523809523,\"difficultyWeight\":21},\"Windbeutel\":{\"count\":9,\"lastSeenTime\":1586958100659,\"difficulty\":0.875,\"difficultyWeight\":8},\"Joghurt\":{\"count\":8,\"lastSeenTime\":1586915517726,\"difficulty\":1,\"difficultyWeight\":23},\"sauber\":{\"count\":9,\"lastSeenTime\":1586959714261,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Etagenbett\":{\"count\":6,\"lastSeenTime\":1586915795632,\"difficulty\":1,\"difficultyWeight\":3},\"Looping\":{\"count\":5,\"lastSeenTime\":1586859083000},\"Arzt\":{\"count\":4,\"lastSeenTime\":1586958299322,\"publicGameCount\":1,\"difficulty\":0.5,\"difficultyWeight\":4},\"Handschuh\":{\"count\":8,\"lastSeenTime\":1586901346838,\"difficulty\":0.5555555555555556,\"difficultyWeight\":9},\"Tee\":{\"count\":8,\"lastSeenTime\":1586896252833,\"difficulty\":0.9375,\"difficultyWeight\":64},\"Gong\":{\"count\":6,\"lastSeenTime\":1586897506792},\"Jeans\":{\"count\":4,\"lastSeenTime\":1586890675024,\"difficulty\":0.9558823529411765,\"difficultyWeight\":68},\"Sonnenfinsternis\":{\"count\":6,\"lastSeenTime\":1586921156587,\"difficulty\":0.2,\"difficultyWeight\":5},\"Murmeltier\":{\"count\":4,\"lastSeenTime\":1586807799590},\"Pinsel\":{\"count\":9,\"lastSeenTime\":1586958187063},\"Angry Birds\":{\"count\":4,\"lastSeenTime\":1586879770813},\"Euter\":{\"count\":5,\"lastSeenTime\":1586839296530,\"difficulty\":0.7777777777777778,\"difficultyWeight\":9},\"Verband\":{\"count\":9,\"lastSeenTime\":1586907522819,\"difficulty\":1,\"difficultyWeight\":7},\"zusammenbrechen\":{\"count\":4,\"lastSeenTime\":1586916116567},\"Stein\":{\"count\":11,\"lastSeenTime\":1586915846579},\"Sekunde\":{\"count\":7,\"lastSeenTime\":1586920883005,\"difficulty\":0.6521739130434783,\"difficultyWeight\":23},\"Tupperdose\":{\"count\":6,\"lastSeenTime\":1586895427458},\"Hashtag\":{\"count\":5,\"lastSeenTime\":1586920069685},\"Fässchen\":{\"count\":5,\"lastSeenTime\":1586920666083},\"Roller\":{\"count\":3,\"lastSeenTime\":1586956582710,\"difficulty\":1,\"difficultyWeight\":3},\"zupfen\":{\"count\":4,\"lastSeenTime\":1586874143406,\"difficulty\":1,\"difficultyWeight\":29},\"Eidechse\":{\"count\":11,\"lastSeenTime\":1586879622531},\"Aufhänger\":{\"count\":6,\"lastSeenTime\":1586920751201,\"difficulty\":1,\"difficultyWeight\":10},\"Bohnenstange\":{\"count\":3,\"lastSeenTime\":1586806443319,\"difficulty\":1,\"difficultyWeight\":12},\"Eierbecher\":{\"count\":6,\"lastSeenTime\":1586891038128},\"Schiffstaufe\":{\"count\":3,\"lastSeenTime\":1586879583717},\"Pegasus\":{\"count\":6,\"lastSeenTime\":1586955838030,\"difficulty\":0.5555555555555556,\"difficultyWeight\":9},\"Kartoffelbrei\":{\"count\":10,\"lastSeenTime\":1586897125781},\"Nähmaschine\":{\"count\":8,\"lastSeenTime\":1586900660239,\"difficulty\":1,\"difficultyWeight\":3},\"Dusche\":{\"count\":9,\"lastSeenTime\":1586908028334},\"Zahnfee\":{\"count\":7,\"lastSeenTime\":1586901812091,\"difficulty\":0.8444444444444444,\"difficultyWeight\":45},\"Regenbogen\":{\"count\":9,\"lastSeenTime\":1586954627819,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"King Kong\":{\"count\":8,\"lastSeenTime\":1586954798445},\"Pause\":{\"count\":7,\"lastSeenTime\":1586914716657,\"difficulty\":0.5,\"difficultyWeight\":8},\"Helikopter\":{\"count\":12,\"lastSeenTime\":1586956033779},\"Windsack\":{\"count\":6,\"lastSeenTime\":1586909226093},\"Titanic\":{\"count\":5,\"lastSeenTime\":1586901692884,\"difficulty\":0.9130434782608695,\"difficultyWeight\":23},\"Gitter\":{\"count\":8,\"lastSeenTime\":1586959031017},\"Schinken\":{\"count\":3,\"lastSeenTime\":1586873772670},\"Yin Yang\":{\"count\":11,\"lastSeenTime\":1586958859906,\"publicGameCount\":1,\"difficulty\":0.75,\"difficultyWeight\":4},\"Biene\":{\"count\":8,\"lastSeenTime\":1586921094172,\"publicGameCount\":1,\"difficulty\":0.8333333333333334,\"difficultyWeight\":6},\"Mr. Bean\":{\"count\":3,\"lastSeenTime\":1586718534191,\"difficulty\":1,\"difficultyWeight\":1},\"Regal\":{\"count\":7,\"lastSeenTime\":1586920397655},\"Dämon\":{\"count\":8,\"lastSeenTime\":1586958212167,\"difficulty\":1,\"difficultyWeight\":10},\"Harpune\":{\"count\":3,\"lastSeenTime\":1586879479650},\"Schoß\":{\"count\":9,\"lastSeenTime\":1586958897546},\"Kaugummi\":{\"count\":6,\"lastSeenTime\":1586903915052,\"difficulty\":0.847457627118644,\"difficultyWeight\":59},\"Ninja\":{\"count\":10,\"lastSeenTime\":1586914699787,\"difficulty\":1,\"difficultyWeight\":8},\"Tentakel\":{\"count\":4,\"lastSeenTime\":1586867988600},\"Sonnenbrille\":{\"count\":4,\"lastSeenTime\":1586897178546},\"Abflussrohr\":{\"count\":3,\"lastSeenTime\":1586651439627},\"Reißverschluss\":{\"count\":7,\"lastSeenTime\":1586955456078,\"difficulty\":1,\"difficultyWeight\":9},\"Spaghettimonster\":{\"count\":8,\"lastSeenTime\":1586908028334,\"difficulty\":1,\"difficultyWeight\":28,\"publicGameCount\":1},\"Koch\":{\"count\":12,\"lastSeenTime\":1586919858412},\"Kuckuck\":{\"count\":10,\"lastSeenTime\":1586914792295,\"difficulty\":1,\"difficultyWeight\":10},\"Rohr\":{\"count\":3,\"lastSeenTime\":1586955409372,\"difficulty\":0.5384615384615384,\"difficultyWeight\":13},\"Spargel\":{\"count\":5,\"lastSeenTime\":1586956238875,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":5},\"Bäcker\":{\"count\":8,\"lastSeenTime\":1586919983033},\"Skateboardfahrer\":{\"count\":9,\"lastSeenTime\":1586959728501},\"Nagellack\":{\"count\":3,\"lastSeenTime\":1586908470256},\"Nashorn\":{\"count\":4,\"lastSeenTime\":1586826260649,\"difficulty\":0.25,\"difficultyWeight\":4},\"Scooby Doo\":{\"count\":7,\"lastSeenTime\":1586915806469,\"publicGameCount\":1,\"difficulty\":0.9642857142857143,\"difficultyWeight\":28},\"Dumbo\":{\"count\":3,\"lastSeenTime\":1586633389254},\"Tablette\":{\"count\":4,\"lastSeenTime\":1586812594958,\"difficulty\":0.75,\"difficultyWeight\":16},\"Brot\":{\"count\":8,\"lastSeenTime\":1586959142159},\"Brille\":{\"count\":6,\"lastSeenTime\":1586817023533},\"Taxi\":{\"count\":7,\"lastSeenTime\":1586914080489,\"difficulty\":1,\"difficultyWeight\":8},\"Croissant\":{\"count\":6,\"lastSeenTime\":1586958748793,\"difficulty\":1,\"difficultyWeight\":30},\"Zwillinge\":{\"count\":7,\"lastSeenTime\":1586874360889,\"publicGameCount\":1,\"difficulty\":0.16666666666666663,\"difficultyWeight\":6},\"Minotaurus\":{\"count\":7,\"lastSeenTime\":1586901274634,\"difficulty\":1,\"difficultyWeight\":10},\"Supermarkt\":{\"count\":7,\"lastSeenTime\":1586908816075,\"difficulty\":1,\"difficultyWeight\":5},\"Schwert\":{\"count\":7,\"lastSeenTime\":1586900311185},\"Xerox\":{\"count\":8,\"lastSeenTime\":1586840371821},\"Möwe\":{\"count\":3,\"lastSeenTime\":1586920407752},\"Wolf\":{\"count\":7,\"lastSeenTime\":1586957888650,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Lebkuchenhaus\":{\"count\":4,\"lastSeenTime\":1586909046293},\"Reinheit\":{\"count\":6,\"lastSeenTime\":1586914742004},\"Saftpresse\":{\"count\":3,\"lastSeenTime\":1586718309085},\"Heiße Schokolade\":{\"count\":3,\"lastSeenTime\":1586900534749},\"glücklich\":{\"count\":7,\"lastSeenTime\":1586889682224,\"difficulty\":1,\"difficultyWeight\":32},\"Drache\":{\"count\":8,\"lastSeenTime\":1586955138676},\"Rahmen\":{\"count\":5,\"lastSeenTime\":1586859593426},\"Malkasten\":{\"count\":6,\"lastSeenTime\":1586920858569},\"Seeigel\":{\"count\":5,\"lastSeenTime\":1586879384676,\"publicGameCount\":1,\"difficulty\":0.30000000000000004,\"difficultyWeight\":10},\"drehen\":{\"count\":4,\"lastSeenTime\":1586919312988},\"Apfelkuchen\":{\"count\":6,\"lastSeenTime\":1586813030635,\"publicGameCount\":2,\"difficulty\":0.8823529411764706,\"difficultyWeight\":34},\"Zwiebel\":{\"count\":5,\"lastSeenTime\":1586915021163},\"Gebiss\":{\"count\":8,\"lastSeenTime\":1586955344691,\"difficulty\":1,\"difficultyWeight\":12},\"Didgeridoo\":{\"count\":10,\"lastSeenTime\":1586903543797},\"gebrochenes Herz\":{\"count\":4,\"lastSeenTime\":1586954975722,\"difficulty\":1,\"difficultyWeight\":2},\"Falltür\":{\"count\":7,\"lastSeenTime\":1586901521530,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Schlucht\":{\"count\":8,\"lastSeenTime\":1586955503431,\"difficulty\":0.7333333333333333,\"difficultyWeight\":15},\"Gewinner\":{\"count\":5,\"lastSeenTime\":1586957855578},\"Bestrafung\":{\"count\":5,\"lastSeenTime\":1586902728303},\"Dienstag\":{\"count\":6,\"lastSeenTime\":1586806009929},\"Vakuum\":{\"count\":6,\"lastSeenTime\":1586959076238},\"Wolkenkratzer\":{\"count\":3,\"lastSeenTime\":1586859907934,\"difficulty\":0.9090909090909091,\"difficultyWeight\":22,\"publicGameCount\":1},\"Feierabend\":{\"count\":6,\"lastSeenTime\":1586915985961},\"Wirbel\":{\"count\":9,\"lastSeenTime\":1586913768003},\"Anhängerkupplung\":{\"count\":7,\"lastSeenTime\":1586955899639},\"Mikrowelle\":{\"count\":5,\"lastSeenTime\":1586881081098,\"publicGameCount\":1},\"Kappe\":{\"count\":5,\"lastSeenTime\":1586818561318,\"difficulty\":0.7692307692307693,\"difficultyWeight\":13},\"Schweiß\":{\"count\":8,\"lastSeenTime\":1586915406529},\"Slinky\":{\"count\":3,\"lastSeenTime\":1586869537106},\"Bagel\":{\"count\":4,\"lastSeenTime\":1586713516288},\"Lehrer\":{\"count\":6,\"lastSeenTime\":1586914918478},\"Kreditkarte\":{\"count\":8,\"lastSeenTime\":1586920872823},\"Wetter\":{\"count\":6,\"lastSeenTime\":1586920421902},\"Polizei\":{\"count\":6,\"lastSeenTime\":1586916575467,\"difficulty\":1,\"difficultyWeight\":11},\"Pfau\":{\"count\":4,\"lastSeenTime\":1586907788446},\"Gras\":{\"count\":8,\"lastSeenTime\":1586959344881},\"Maßstab\":{\"count\":6,\"lastSeenTime\":1586920576642},\"Kontinent\":{\"count\":4,\"lastSeenTime\":1586913816802},\"Religion\":{\"count\":5,\"lastSeenTime\":1586716941543},\"Family Guy\":{\"count\":3,\"lastSeenTime\":1586840180011},\"Skydiving\":{\"count\":6,\"lastSeenTime\":1586832445534},\"Bergkette\":{\"count\":4,\"lastSeenTime\":1586833456845},\"Waschbär\":{\"count\":7,\"lastSeenTime\":1586896816116},\"Erbsen\":{\"count\":3,\"lastSeenTime\":1586807947102},\"Usain Bolt\":{\"count\":9,\"lastSeenTime\":1586908597667},\"Berg\":{\"count\":3,\"lastSeenTime\":1586914683667},\"Krebs\":{\"count\":5,\"lastSeenTime\":1586957863554,\"difficulty\":0.375,\"difficultyWeight\":8},\"Las Vegas\":{\"count\":5,\"lastSeenTime\":1586860284075},\"Finger\":{\"count\":4,\"lastSeenTime\":1586903070812},\"Pfeil\":{\"count\":7,\"lastSeenTime\":1586869144958,\"difficulty\":0.7727272727272727,\"difficultyWeight\":22},\"Gefrierschrank\":{\"count\":2,\"lastSeenTime\":1586920226877},\"Frühstück\":{\"count\":3,\"lastSeenTime\":1586833915389},\"Maske\":{\"count\":4,\"lastSeenTime\":1586889552321,\"difficulty\":0.85,\"difficultyWeight\":20},\"rasieren\":{\"count\":4,\"lastSeenTime\":1586869412000,\"publicGameCount\":1,\"difficulty\":0.631578947368421,\"difficultyWeight\":19},\"Punktestand\":{\"count\":8,\"lastSeenTime\":1586909030886},\"Honig\":{\"count\":6,\"lastSeenTime\":1586896569941,\"difficulty\":0.5,\"difficultyWeight\":8},\"Haarspange\":{\"count\":4,\"lastSeenTime\":1586874324510},\"Sarg\":{\"count\":6,\"lastSeenTime\":1586921071907,\"difficulty\":0.375,\"difficultyWeight\":8},\"Der Rosarote Panther\":{\"count\":6,\"lastSeenTime\":1586827465786},\"Park\":{\"count\":2,\"lastSeenTime\":1586880262858,\"difficulty\":0.8181818181818182,\"difficultyWeight\":11},\"Rettungsweste\":{\"count\":6,\"lastSeenTime\":1586907351001},\"träumen\":{\"count\":4,\"lastSeenTime\":1586873278128,\"difficulty\":1,\"difficultyWeight\":1},\"Mopp\":{\"count\":4,\"lastSeenTime\":1586827202213},\"Jimmy Neutron\":{\"count\":7,\"lastSeenTime\":1586920954248},\"Wall-e\":{\"count\":7,\"lastSeenTime\":1586903447898,\"difficulty\":0.5,\"difficultyWeight\":8},\"Monster\":{\"count\":10,\"lastSeenTime\":1586959131863,\"difficulty\":0.7368421052631579,\"difficultyWeight\":57},\"Quadrat\":{\"count\":6,\"lastSeenTime\":1586890615582,\"difficulty\":0.782608695652174,\"difficultyWeight\":23},\"Limonade\":{\"count\":9,\"lastSeenTime\":1586956166526},\"Kaugummikugel\":{\"count\":10,\"lastSeenTime\":1586913783574,\"difficulty\":0.875,\"difficultyWeight\":8},\"reparieren\":{\"count\":7,\"lastSeenTime\":1586914727219},\"Adler\":{\"count\":9,\"lastSeenTime\":1586954886360,\"difficulty\":0.6666666666666666,\"difficultyWeight\":3},\"Aquarium\":{\"count\":7,\"lastSeenTime\":1586909046293},\"Teekanne\":{\"count\":9,\"lastSeenTime\":1586958187063},\"tanzen\":{\"count\":5,\"lastSeenTime\":1586783155447},\"Pinocchio\":{\"count\":4,\"lastSeenTime\":1586955620355},\"Hähnchen\":{\"count\":7,\"lastSeenTime\":1586959608297},\"Profi\":{\"count\":5,\"lastSeenTime\":1586916469958},\"Luftschloss\":{\"count\":4,\"lastSeenTime\":1586717552913,\"publicGameCount\":1,\"difficulty\":0.8888888888888888,\"difficultyWeight\":9},\"Dänemark\":{\"count\":7,\"lastSeenTime\":1586817683501},\"Frucht\":{\"count\":8,\"lastSeenTime\":1586915186679},\"Gefängnis\":{\"count\":6,\"lastSeenTime\":1586880581425},\"Mammut\":{\"count\":3,\"lastSeenTime\":1586919511658},\"Durst\":{\"count\":3,\"lastSeenTime\":1586880834242,\"publicGameCount\":1,\"difficulty\":0.875,\"difficultyWeight\":8},\"Lippenstift\":{\"count\":3,\"lastSeenTime\":1586956336636},\"Schweinchen Dick\":{\"count\":8,\"lastSeenTime\":1586903726114},\"Erdmännchen\":{\"count\":4,\"lastSeenTime\":1586955848155},\"Zelle\":{\"count\":7,\"lastSeenTime\":1586915392140},\"Krähe\":{\"count\":2,\"lastSeenTime\":1586832774449,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":9},\"Sonnenblume\":{\"count\":3,\"lastSeenTime\":1586903736584,\"difficulty\":0.4,\"difficultyWeight\":5},\"Hawaii\":{\"count\":8,\"lastSeenTime\":1586956166526},\"essen\":{\"count\":5,\"lastSeenTime\":1586920957237},\"Gefahr\":{\"count\":4,\"lastSeenTime\":1586718488883},\"Cyborg\":{\"count\":7,\"lastSeenTime\":1586914600906,\"difficulty\":1,\"difficultyWeight\":4},\"Italien\":{\"count\":2,\"lastSeenTime\":1586707253394,\"difficulty\":0.7000000000000001,\"difficultyWeight\":10},\"Türschloss\":{\"count\":6,\"lastSeenTime\":1586916415277,\"difficulty\":0.9285714285714286,\"difficultyWeight\":28},\"aufnehmen\":{\"count\":6,\"lastSeenTime\":1586901486180},\"Yoshi\":{\"count\":6,\"lastSeenTime\":1586899955403},\"Leiter\":{\"count\":11,\"lastSeenTime\":1586958525123},\"Vollkornbrot\":{\"count\":5,\"lastSeenTime\":1586902983849},\"Arbeitszimmer\":{\"count\":5,\"lastSeenTime\":1586904322754,\"difficulty\":0.9,\"difficultyWeight\":10},\"Turban\":{\"count\":6,\"lastSeenTime\":1586873614695},\"Landschaft\":{\"count\":5,\"lastSeenTime\":1586958897546},\"Rührei\":{\"count\":4,\"lastSeenTime\":1586956552197,\"difficulty\":0.8,\"difficultyWeight\":5},\"Steam\":{\"count\":6,\"lastSeenTime\":1586916328101},\"schlagen\":{\"count\":8,\"lastSeenTime\":1586909296939},\"Gleichgewicht\":{\"count\":9,\"lastSeenTime\":1586955862348},\"Bratsche\":{\"count\":5,\"lastSeenTime\":1586868707935},\"Herkules\":{\"count\":8,\"lastSeenTime\":1586959850831,\"difficulty\":1,\"difficultyWeight\":8},\"überwintern\":{\"count\":7,\"lastSeenTime\":1586873642917},\"Anubis\":{\"count\":6,\"lastSeenTime\":1586902587809},\"Känguru\":{\"count\":9,\"lastSeenTime\":1586914904157,\"difficulty\":1,\"difficultyWeight\":53},\"Erde\":{\"count\":6,\"lastSeenTime\":1586916690790,\"publicGameCount\":1,\"difficulty\":0.30000000000000004,\"difficultyWeight\":10},\"Tiegel\":{\"count\":5,\"lastSeenTime\":1586868982986},\"Steinzeit\":{\"count\":8,\"lastSeenTime\":1586956489403},\"Brett\":{\"count\":8,\"lastSeenTime\":1586959031017},\"Puder\":{\"count\":7,\"lastSeenTime\":1586859727901},\"Räucherstäbchen\":{\"count\":5,\"lastSeenTime\":1586959218404},\"ausruhen\":{\"count\":3,\"lastSeenTime\":1586782238298,\"difficulty\":0.8,\"difficultyWeight\":10},\"Anwalt\":{\"count\":4,\"lastSeenTime\":1586904135139,\"difficulty\":1,\"difficultyWeight\":3},\"Indien\":{\"count\":8,\"lastSeenTime\":1586814402764},\"Wasserfarbkasten\":{\"count\":6,\"lastSeenTime\":1586955948209},\"Finnland\":{\"count\":5,\"lastSeenTime\":1586955634694},\"Susan Wojcicki\":{\"count\":10,\"lastSeenTime\":1586921043126},\"Handtuch\":{\"count\":7,\"lastSeenTime\":1586957940022,\"difficulty\":0.4444444444444444,\"difficultyWeight\":9},\"Antilope\":{\"count\":6,\"lastSeenTime\":1586916415277},\"Schleifpapier\":{\"count\":4,\"lastSeenTime\":1586899930998},\"Bart Simpson\":{\"count\":6,\"lastSeenTime\":1586901606974},\"Thaddäus Tentakel\":{\"count\":4,\"lastSeenTime\":1586958848321,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"riechen\":{\"count\":7,\"lastSeenTime\":1586903587379},\"Cupcake\":{\"count\":3,\"lastSeenTime\":1586839889181},\"Verlies\":{\"count\":6,\"lastSeenTime\":1586858765870},\"Maurer\":{\"count\":11,\"lastSeenTime\":1586955429782,\"difficulty\":1,\"difficultyWeight\":7},\"Phineas und Ferb\":{\"count\":11,\"lastSeenTime\":1586880631457},\"Zoo\":{\"count\":3,\"lastSeenTime\":1586833481600},\"Schiedsrichter\":{\"count\":8,\"lastSeenTime\":1586889725951},\"Vlogger\":{\"count\":4,\"lastSeenTime\":1586833392800},\"erröten\":{\"count\":5,\"lastSeenTime\":1586816678295,\"difficulty\":1,\"difficultyWeight\":1},\"John Lennon\":{\"count\":5,\"lastSeenTime\":1586833992491},\"Protest\":{\"count\":5,\"lastSeenTime\":1586907461933},\"Pedal\":{\"count\":6,\"lastSeenTime\":1586896644364},\"Stadion\":{\"count\":8,\"lastSeenTime\":1586955098414,\"difficulty\":0.75,\"difficultyWeight\":8},\"Pfad\":{\"count\":9,\"lastSeenTime\":1586919327173},\"Nagelfeile\":{\"count\":9,\"lastSeenTime\":1586916430600},\"Kleiderbügel\":{\"count\":8,\"lastSeenTime\":1586959391653,\"difficulty\":0.45454545454545453,\"difficultyWeight\":11},\"Kleinbus\":{\"count\":5,\"lastSeenTime\":1586879867638},\"Anhalter\":{\"count\":8,\"lastSeenTime\":1586869459522},\"Puzzle\":{\"count\":8,\"lastSeenTime\":1586955595532},\"Fächer\":{\"count\":4,\"lastSeenTime\":1586895604165},\"Bienenstock\":{\"count\":10,\"lastSeenTime\":1586921298152},\"Türstopper\":{\"count\":9,\"lastSeenTime\":1586959508307,\"difficulty\":1,\"difficultyWeight\":1},\"Honigwabe\":{\"count\":8,\"lastSeenTime\":1586900549029},\"dünn\":{\"count\":3,\"lastSeenTime\":1586609722124,\"difficulty\":0.875,\"difficultyWeight\":24},\"Japan\":{\"count\":5,\"lastSeenTime\":1586839151208},\"Mitfahrgelegenheit\":{\"count\":6,\"lastSeenTime\":1586891149686},\"Trauben\":{\"count\":5,\"lastSeenTime\":1586879608242},\"Schwertfisch\":{\"count\":4,\"lastSeenTime\":1586915299932,\"difficulty\":1,\"difficultyWeight\":7},\"Osterhase\":{\"count\":11,\"lastSeenTime\":1586916164227,\"difficulty\":1,\"difficultyWeight\":15},\"Elster\":{\"count\":3,\"lastSeenTime\":1586901572201},\"Bart\":{\"count\":4,\"lastSeenTime\":1586901672587,\"difficulty\":0.6363636363636364,\"difficultyWeight\":11},\"Bibliothekar\":{\"count\":10,\"lastSeenTime\":1586955691477},\"Olivenöl\":{\"count\":5,\"lastSeenTime\":1586868185306},\"Krug\":{\"count\":5,\"lastSeenTime\":1586913893763},\"Motte\":{\"count\":4,\"lastSeenTime\":1586915129381,\"difficulty\":1,\"difficultyWeight\":4},\"Meister\":{\"count\":6,\"lastSeenTime\":1586900650119},\"Südafrika\":{\"count\":8,\"lastSeenTime\":1586919687264},\"Pfund\":{\"count\":7,\"lastSeenTime\":1586915985961},\"Schimmel\":{\"count\":7,\"lastSeenTime\":1586903359622,\"publicGameCount\":1,\"difficulty\":0.8181818181818182,\"difficultyWeight\":11},\"Decke\":{\"count\":5,\"lastSeenTime\":1586914465537},\"Superkraft\":{\"count\":4,\"lastSeenTime\":1586874652224,\"difficulty\":0.8571428571428571,\"difficultyWeight\":14},\"Blaubeere\":{\"count\":7,\"lastSeenTime\":1586914515993},\"Nerd\":{\"count\":4,\"lastSeenTime\":1586890454038},\"Pfeffersalami\":{\"count\":6,\"lastSeenTime\":1586873383077},\"Mount Rushmore\":{\"count\":6,\"lastSeenTime\":1586890816340,\"difficulty\":1,\"difficultyWeight\":4},\"Kamera\":{\"count\":7,\"lastSeenTime\":1586915566245},\"Reisender\":{\"count\":3,\"lastSeenTime\":1586874966390},\"Manege\":{\"count\":7,\"lastSeenTime\":1586896030801},\"Linse\":{\"count\":5,\"lastSeenTime\":1586880201224},\"Spieler\":{\"count\":7,\"lastSeenTime\":1586901500696},\"übersetzen\":{\"count\":6,\"lastSeenTime\":1586890714906,\"difficulty\":1,\"difficultyWeight\":6},\"Verkehr\":{\"count\":4,\"lastSeenTime\":1586818927139},\"Lachs\":{\"count\":7,\"lastSeenTime\":1586958496125,\"difficulty\":1,\"difficultyWeight\":4},\"Truhe\":{\"count\":6,\"lastSeenTime\":1586858897962,\"difficulty\":0.625,\"difficultyWeight\":16},\"Zuckerwatte\":{\"count\":3,\"lastSeenTime\":1586958658325},\"Oberfläche\":{\"count\":6,\"lastSeenTime\":1586914893907},\"William Shakespeare\":{\"count\":4,\"lastSeenTime\":1586904147395},\"Zitteraal\":{\"count\":7,\"lastSeenTime\":1586839545523,\"publicGameCount\":1,\"difficulty\":0.5555555555555556,\"difficultyWeight\":9},\"Schweinestall\":{\"count\":4,\"lastSeenTime\":1586959753084,\"difficulty\":1,\"difficultyWeight\":4},\"Mars\":{\"count\":5,\"lastSeenTime\":1586908982317,\"publicGameCount\":1,\"difficulty\":0,\"difficultyWeight\":8},\"Kürbis\":{\"count\":3,\"lastSeenTime\":1586907386047},\"Fahrbahn\":{\"count\":6,\"lastSeenTime\":1586956477794},\"Knie\":{\"count\":7,\"lastSeenTime\":1586956016971},\"Stiefel\":{\"count\":9,\"lastSeenTime\":1586956181125,\"difficulty\":0.9047619047619048,\"difficultyWeight\":21},\"Hunger\":{\"count\":13,\"lastSeenTime\":1586957925802,\"difficulty\":1,\"difficultyWeight\":60},\"Konsole\":{\"count\":3,\"lastSeenTime\":1586724124838,\"difficulty\":1,\"difficultyWeight\":6},\"Magier\":{\"count\":13,\"lastSeenTime\":1586889696772},\"Badekappe\":{\"count\":3,\"lastSeenTime\":1586826659168},\"Sommer\":{\"count\":6,\"lastSeenTime\":1586874622713,\"difficulty\":1,\"difficultyWeight\":4},\"abheben\":{\"count\":4,\"lastSeenTime\":1586903771458},\"Weintrauben\":{\"count\":8,\"lastSeenTime\":1586908721968,\"publicGameCount\":1,\"difficulty\":0,\"difficultyWeight\":8},\"Band\":{\"count\":5,\"lastSeenTime\":1586916352907},\"Tablett\":{\"count\":10,\"lastSeenTime\":1586907743895},\"Fahrwerk\":{\"count\":4,\"lastSeenTime\":1586908470256},\"Dattel\":{\"count\":6,\"lastSeenTime\":1586916493492},\"Darwin\":{\"count\":4,\"lastSeenTime\":1586833367687},\"Festung\":{\"count\":2,\"lastSeenTime\":1586914221389},\"Haltestelle\":{\"count\":5,\"lastSeenTime\":1586908763208,\"difficulty\":1,\"difficultyWeight\":6},\"Kaktus\":{\"count\":6,\"lastSeenTime\":1586889576969,\"difficulty\":0.45454545454545453,\"difficultyWeight\":11},\"Nachos\":{\"count\":6,\"lastSeenTime\":1586959714261,\"publicGameCount\":1,\"difficulty\":0.9090909090909091,\"difficultyWeight\":11},\"Stoßstange\":{\"count\":6,\"lastSeenTime\":1586955848155},\"Wattestäbchen\":{\"count\":3,\"lastSeenTime\":1586913962978,\"difficulty\":0.9111111111111111,\"difficultyWeight\":45},\"Ratatouille\":{\"count\":4,\"lastSeenTime\":1586880239561},\"Wonder Woman\":{\"count\":7,\"lastSeenTime\":1586920947128},\"Wanze\":{\"count\":6,\"lastSeenTime\":1586920566543},\"Vater\":{\"count\":7,\"lastSeenTime\":1586890353925,\"difficulty\":1,\"difficultyWeight\":7},\"Pappe\":{\"count\":11,\"lastSeenTime\":1586919858412},\"Augenbinde\":{\"count\":8,\"lastSeenTime\":1586956263288},\"Bank\":{\"count\":4,\"lastSeenTime\":1586833496863},\"Blume\":{\"count\":6,\"lastSeenTime\":1586959547988,\"difficulty\":1,\"difficultyWeight\":9},\"Mercedes\":{\"count\":5,\"lastSeenTime\":1586880609937,\"publicGameCount\":1,\"difficulty\":0.9,\"difficultyWeight\":10},\"gehen\":{\"count\":6,\"lastSeenTime\":1586895808940},\"Angelina Jolie\":{\"count\":6,\"lastSeenTime\":1586919711626},\"Versicherung\":{\"count\":5,\"lastSeenTime\":1586955877308},\"Straße\":{\"count\":12,\"lastSeenTime\":1586920627218},\"USB\":{\"count\":8,\"lastSeenTime\":1586904234099},\"Aristokrat\":{\"count\":2,\"lastSeenTime\":1586901089526},\"Fischer\":{\"count\":5,\"lastSeenTime\":1586959121500,\"difficulty\":1,\"difficultyWeight\":10},\"Pavian\":{\"count\":6,\"lastSeenTime\":1586907743895},\"Wunderland\":{\"count\":4,\"lastSeenTime\":1586958077398,\"difficulty\":1,\"difficultyWeight\":1},\"Glut\":{\"count\":5,\"lastSeenTime\":1586915215166},\"Grenze\":{\"count\":8,\"lastSeenTime\":1586907436625},\"Gabel\":{\"count\":9,\"lastSeenTime\":1586839654737,\"difficulty\":0.4,\"difficultyWeight\":15},\"Cat Woman\":{\"count\":2,\"lastSeenTime\":1586907707534},\"Skyline\":{\"count\":5,\"lastSeenTime\":1586954603172,\"difficulty\":1,\"difficultyWeight\":5},\"Erdbeere\":{\"count\":7,\"lastSeenTime\":1586915186679,\"publicGameCount\":1,\"difficulty\":0.7352941176470589,\"difficultyWeight\":34},\"Finn und Jake\":{\"count\":4,\"lastSeenTime\":1586958572090},\"Mel Gibson\":{\"count\":7,\"lastSeenTime\":1586958658325},\"Hausnummer\":{\"count\":7,\"lastSeenTime\":1586908204031,\"difficulty\":0.5,\"difficultyWeight\":6},\"Spitzhacke\":{\"count\":6,\"lastSeenTime\":1586956019428},\"Bajonett\":{\"count\":9,\"lastSeenTime\":1586958141882},\"Sumo\":{\"count\":5,\"lastSeenTime\":1586895467027},\"gelangweilt\":{\"count\":6,\"lastSeenTime\":1586920947128},\"Ziegenbart\":{\"count\":4,\"lastSeenTime\":1586896444515,\"difficulty\":0.8333333333333334,\"difficultyWeight\":24},\"Tetra Pak\":{\"count\":9,\"lastSeenTime\":1586915821415,\"difficulty\":1,\"difficultyWeight\":7},\"ringen\":{\"count\":5,\"lastSeenTime\":1586813390059},\"Salzwasser\":{\"count\":4,\"lastSeenTime\":1586783782593,\"difficulty\":1,\"difficultyWeight\":7},\"Zeitung\":{\"count\":2,\"lastSeenTime\":1586916230527,\"difficulty\":0.6,\"difficultyWeight\":10},\"Rad\":{\"count\":3,\"lastSeenTime\":1586840557813,\"difficulty\":0.9545454545454546,\"difficultyWeight\":44},\"Scheidung\":{\"count\":3,\"lastSeenTime\":1586958755749},\"Schneesturm\":{\"count\":7,\"lastSeenTime\":1586955088291,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Lexikon\":{\"count\":4,\"lastSeenTime\":1586897164255},\"Haken\":{\"count\":2,\"lastSeenTime\":1586784919921},\"Mechaniker\":{\"count\":6,\"lastSeenTime\":1586896926779},\"Skulptur\":{\"count\":6,\"lastSeenTime\":1586880423720,\"difficulty\":1,\"difficultyWeight\":8},\"Server\":{\"count\":4,\"lastSeenTime\":1586726377611},\"Bademantel\":{\"count\":7,\"lastSeenTime\":1586895639777,\"publicGameCount\":1,\"difficulty\":0.8709677419354839,\"difficultyWeight\":31},\"Griechenland\":{\"count\":3,\"lastSeenTime\":1586902926018,\"publicGameCount\":1,\"difficulty\":0.9285714285714286,\"difficultyWeight\":14},\"trinken\":{\"count\":7,\"lastSeenTime\":1586914631184},\"schlecht\":{\"count\":6,\"lastSeenTime\":1586896595013,\"publicGameCount\":1},\"vergessen\":{\"count\":7,\"lastSeenTime\":1586955559002},\"Muffin\":{\"count\":8,\"lastSeenTime\":1586913798295},\"Halbkreis\":{\"count\":3,\"lastSeenTime\":1586899902236},\"Schreibfeder\":{\"count\":2,\"lastSeenTime\":1586816295247},\"Tierarzt\":{\"count\":4,\"lastSeenTime\":1586916441133},\"Navy\":{\"count\":11,\"lastSeenTime\":1586958897546},\"Ferkel\":{\"count\":5,\"lastSeenTime\":1586913467503,\"difficulty\":1,\"difficultyWeight\":5},\"Patronenhülse\":{\"count\":6,\"lastSeenTime\":1586873513174,\"difficulty\":0.9166666666666666,\"difficultyWeight\":12},\"Bibel\":{\"count\":6,\"lastSeenTime\":1586839953759},\"geizig\":{\"count\":3,\"lastSeenTime\":1586889892808},\"Minze\":{\"count\":5,\"lastSeenTime\":1586957855578},\"Wolle\":{\"count\":8,\"lastSeenTime\":1586916731964},\"Cappuccino\":{\"count\":4,\"lastSeenTime\":1586955517665},\"Krankenwagen\":{\"count\":5,\"lastSeenTime\":1586920982151},\"Lüfter\":{\"count\":4,\"lastSeenTime\":1586895847874},\"Wal\":{\"count\":4,\"lastSeenTime\":1586896080519,\"difficulty\":1,\"difficultyWeight\":3},\"Ufer\":{\"count\":6,\"lastSeenTime\":1586873419448},\"chemisch\":{\"count\":12,\"lastSeenTime\":1586959342619,\"difficulty\":0.375,\"difficultyWeight\":8},\"Lisa Simpson\":{\"count\":10,\"lastSeenTime\":1586903158426},\"zurückspulen\":{\"count\":8,\"lastSeenTime\":1586955300241},\"Garfield\":{\"count\":8,\"lastSeenTime\":1586869383090},\"Schal\":{\"count\":7,\"lastSeenTime\":1586958858535,\"difficulty\":1,\"difficultyWeight\":1},\"Tischtennisschläger\":{\"count\":4,\"lastSeenTime\":1586889489199},\"Flagge\":{\"count\":5,\"lastSeenTime\":1586915442369},\"E-Gitarre\":{\"count\":7,\"lastSeenTime\":1586903097380,\"difficulty\":1,\"difficultyWeight\":2},\"einkaufen\":{\"count\":9,\"lastSeenTime\":1586889566614,\"difficulty\":0.8333333333333334,\"difficultyWeight\":6},\"Beerdigung\":{\"count\":5,\"lastSeenTime\":1586904002117,\"difficulty\":1,\"difficultyWeight\":3},\"Zylinder\":{\"count\":3,\"lastSeenTime\":1586873715364},\"Toast\":{\"count\":4,\"lastSeenTime\":1586915478982},\"Kompass\":{\"count\":5,\"lastSeenTime\":1586832545576},\"Schnellstraße\":{\"count\":8,\"lastSeenTime\":1586919736561},\"Sonnensystem\":{\"count\":6,\"lastSeenTime\":1586955063993},\"Liebe\":{\"count\":6,\"lastSeenTime\":1586920421902},\"Windsurfer\":{\"count\":5,\"lastSeenTime\":1586920446574},\"Fingerpuppe\":{\"count\":2,\"lastSeenTime\":1586712445503},\"Frisbee\":{\"count\":5,\"lastSeenTime\":1586880408576,\"difficulty\":1,\"difficultyWeight\":1},\"Rune\":{\"count\":6,\"lastSeenTime\":1586915456714},\"Mistgabel\":{\"count\":5,\"lastSeenTime\":1586919664805},\"Komiker\":{\"count\":4,\"lastSeenTime\":1586915960185},\"Floh\":{\"count\":6,\"lastSeenTime\":1586870018417,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Pinienkerne\":{\"count\":1,\"lastSeenTime\":1586580794838},\"Puppe\":{\"count\":5,\"lastSeenTime\":1586958154127},\"Aktion\":{\"count\":5,\"lastSeenTime\":1586896095108},\"Amsel\":{\"count\":8,\"lastSeenTime\":1586959738785},\"Cockpit\":{\"count\":10,\"lastSeenTime\":1586919477051,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"Patenonkel\":{\"count\":7,\"lastSeenTime\":1586915924921},\"Sandkasten\":{\"count\":4,\"lastSeenTime\":1586914806527},\"Ampelmännchen\":{\"count\":4,\"lastSeenTime\":1586955063993,\"difficulty\":0.8823529411764706,\"difficultyWeight\":34},\"voll\":{\"count\":4,\"lastSeenTime\":1586915806469},\"Ostern\":{\"count\":3,\"lastSeenTime\":1586879394962,\"difficulty\":0.5,\"difficultyWeight\":8},\"feuerfest\":{\"count\":8,\"lastSeenTime\":1586954774095},\"Geige\":{\"count\":7,\"lastSeenTime\":1586920872823,\"difficulty\":0.8571428571428571,\"difficultyWeight\":28},\"Kiwi\":{\"count\":10,\"lastSeenTime\":1586919501543,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":33},\"Getränk\":{\"count\":7,\"lastSeenTime\":1586919722216},\"Ingenieur\":{\"count\":3,\"lastSeenTime\":1586903281878,\"difficulty\":1,\"difficultyWeight\":3},\"Tetris\":{\"count\":8,\"lastSeenTime\":1586914932818},\"Ast\":{\"count\":3,\"lastSeenTime\":1586868143512,\"difficulty\":1,\"difficultyWeight\":38},\"Dinosaurier\":{\"count\":4,\"lastSeenTime\":1586915099808,\"difficulty\":0.33333333333333337,\"difficultyWeight\":9},\"Spritze\":{\"count\":3,\"lastSeenTime\":1586954763962,\"publicGameCount\":1,\"difficulty\":0.42857142857142855,\"difficultyWeight\":7},\"Schaukelstuhl\":{\"count\":7,\"lastSeenTime\":1586881119264},\"Google\":{\"count\":6,\"lastSeenTime\":1586959443697},\"Tukan\":{\"count\":6,\"lastSeenTime\":1586900941854,\"difficulty\":1,\"difficultyWeight\":6},\"Hackbraten\":{\"count\":4,\"lastSeenTime\":1586919434514},\"Trainer\":{\"count\":6,\"lastSeenTime\":1586914465537},\"arbeiten\":{\"count\":7,\"lastSeenTime\":1586902658307},\"Streichholz\":{\"count\":5,\"lastSeenTime\":1586896595013,\"difficulty\":1,\"difficultyWeight\":20},\"Lüftung\":{\"count\":2,\"lastSeenTime\":1586817610330,\"difficulty\":0.75,\"difficultyWeight\":8},\"Erfindung\":{\"count\":5,\"lastSeenTime\":1586902587810},\"Origami\":{\"count\":5,\"lastSeenTime\":1586913757766},\"Armband\":{\"count\":6,\"lastSeenTime\":1586955324504},\"Hügel\":{\"count\":5,\"lastSeenTime\":1586920552243},\"Bestatter\":{\"count\":10,\"lastSeenTime\":1586874409884,\"publicGameCount\":1,\"difficulty\":0.8,\"difficultyWeight\":10},\"Wissenschaftler\":{\"count\":5,\"lastSeenTime\":1586920324660},\"Grafiktablett\":{\"count\":6,\"lastSeenTime\":1586879298099,\"difficulty\":0.8181818181818182,\"difficultyWeight\":11},\"Sand\":{\"count\":5,\"lastSeenTime\":1586916153776},\"Lady\":{\"count\":6,\"lastSeenTime\":1586913893763},\"Kazoo\":{\"count\":2,\"lastSeenTime\":1586915737415},\"toter Winkel\":{\"count\":6,\"lastSeenTime\":1586891099195},\"Omelett\":{\"count\":5,\"lastSeenTime\":1586880936347},\"Pluto\":{\"count\":3,\"lastSeenTime\":1586859933316,\"difficulty\":1,\"difficultyWeight\":7},\"Schornstein\":{\"count\":5,\"lastSeenTime\":1586920265574,\"difficulty\":1,\"difficultyWeight\":7},\"Mottenkugel\":{\"count\":5,\"lastSeenTime\":1586955249129},\"Zaubertrank\":{\"count\":5,\"lastSeenTime\":1586958027091},\"Gully\":{\"count\":2,\"lastSeenTime\":1586955838030},\"Pobacken\":{\"count\":3,\"lastSeenTime\":1586908597667,\"difficulty\":1,\"difficultyWeight\":1},\"Stewardess\":{\"count\":5,\"lastSeenTime\":1586907472056},\"Klaviersaite\":{\"count\":8,\"lastSeenTime\":1586920895382},\"Organ\":{\"count\":9,\"lastSeenTime\":1586959767498},\"Fußball\":{\"count\":7,\"lastSeenTime\":1586901146209},\"Bedienung\":{\"count\":3,\"lastSeenTime\":1586909030886},\"Grafik\":{\"count\":3,\"lastSeenTime\":1586920153587},\"Teufel\":{\"count\":6,\"lastSeenTime\":1586818535737,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":11},\"Linie\":{\"count\":6,\"lastSeenTime\":1586890443871},\"Jupiter\":{\"count\":5,\"lastSeenTime\":1586860123492},\"Lanze\":{\"count\":10,\"lastSeenTime\":1586913962978},\"Ring\":{\"count\":2,\"lastSeenTime\":1586724556569,\"publicGameCount\":1,\"difficulty\":0.6538461538461539,\"difficultyWeight\":26},\"High Five\":{\"count\":6,\"lastSeenTime\":1586896166029,\"publicGameCount\":1,\"difficulty\":0.8235294117647058,\"difficultyWeight\":17},\"Wimper\":{\"count\":6,\"lastSeenTime\":1586913497512,\"difficulty\":0.9428571428571428,\"difficultyWeight\":35},\"zoomen\":{\"count\":5,\"lastSeenTime\":1586921094172},\"Rechen\":{\"count\":4,\"lastSeenTime\":1586958253918},\"Amboss\":{\"count\":4,\"lastSeenTime\":1586889697457,\"difficulty\":1,\"difficultyWeight\":7},\"Zickzack\":{\"count\":12,\"lastSeenTime\":1586954688633},\"Ohrhörer\":{\"count\":7,\"lastSeenTime\":1586914243836,\"difficulty\":1,\"difficultyWeight\":3},\"Parfüm\":{\"count\":3,\"lastSeenTime\":1586915021163},\"Rollschuhe\":{\"count\":6,\"lastSeenTime\":1586908103784,\"difficulty\":0.8636363636363636,\"difficultyWeight\":44},\"Hippie\":{\"count\":4,\"lastSeenTime\":1586718322766},\"Kuba\":{\"count\":5,\"lastSeenTime\":1586900776963},\"Rolltreppe\":{\"count\":9,\"lastSeenTime\":1586903048902},\"Schlange\":{\"count\":7,\"lastSeenTime\":1586920751201},\"Ellbogen\":{\"count\":4,\"lastSeenTime\":1586904161945,\"difficulty\":1,\"difficultyWeight\":1},\"Donut\":{\"count\":6,\"lastSeenTime\":1586958289143,\"difficulty\":1,\"difficultyWeight\":21},\"Zeppelin\":{\"count\":10,\"lastSeenTime\":1586955419506,\"difficulty\":1,\"difficultyWeight\":46},\"reinigen\":{\"count\":6,\"lastSeenTime\":1586858960624},\"Wasserpfeife\":{\"count\":4,\"lastSeenTime\":1586916637868},\"beizen\":{\"count\":8,\"lastSeenTime\":1586908996510},\"Comicbuch\":{\"count\":5,\"lastSeenTime\":1586915624112,\"difficulty\":1,\"difficultyWeight\":10},\"Palast\":{\"count\":7,\"lastSeenTime\":1586908204031},\"Yoda\":{\"count\":3,\"lastSeenTime\":1586955010181,\"difficulty\":1,\"difficultyWeight\":2},\"Mixer\":{\"count\":6,\"lastSeenTime\":1586915339348,\"publicGameCount\":1,\"difficulty\":0.5,\"difficultyWeight\":8},\"Hosenstall\":{\"count\":4,\"lastSeenTime\":1586956336636,\"publicGameCount\":1,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Chinchilla\":{\"count\":4,\"lastSeenTime\":1586908945942},\"Briefkasten\":{\"count\":5,\"lastSeenTime\":1586881205453},\"The Beatles\":{\"count\":6,\"lastSeenTime\":1586959232575},\"Birke\":{\"count\":8,\"lastSeenTime\":1586902687551},\"Brunnen\":{\"count\":4,\"lastSeenTime\":1586826911367},\"Reifen\":{\"count\":5,\"lastSeenTime\":1586873308659},\"Dosenöffner\":{\"count\":6,\"lastSeenTime\":1586891228286},\"Ordner\":{\"count\":8,\"lastSeenTime\":1586958278719,\"difficulty\":1,\"difficultyWeight\":3},\"Müllabfuhr\":{\"count\":3,\"lastSeenTime\":1586900240367},\"Mais\":{\"count\":3,\"lastSeenTime\":1586900866878,\"publicGameCount\":1,\"difficulty\":0.8,\"difficultyWeight\":10},\"Galaxie\":{\"count\":6,\"lastSeenTime\":1586907754016,\"publicGameCount\":1,\"difficulty\":0.75,\"difficultyWeight\":4},\"Tweety\":{\"count\":9,\"lastSeenTime\":1586908757151},\"Kirschblüte\":{\"count\":5,\"lastSeenTime\":1586920690415},\"Anhänger\":{\"count\":4,\"lastSeenTime\":1586916074772},\"Milchshake\":{\"count\":6,\"lastSeenTime\":1586913988149},\"Irokesenfrisur\":{\"count\":5,\"lastSeenTime\":1586958944806,\"difficulty\":0.6666666666666667,\"difficultyWeight\":9},\"Sohn\":{\"count\":1,\"lastSeenTime\":1586589989733,\"difficulty\":1,\"difficultyWeight\":1},\"Schneeballschlacht\":{\"count\":3,\"lastSeenTime\":1586954910317},\"sabbern\":{\"count\":6,\"lastSeenTime\":1586954939261},\"Tintenpatrone\":{\"count\":5,\"lastSeenTime\":1586959142159},\"Essig\":{\"count\":7,\"lastSeenTime\":1586907754016},\"Lilie\":{\"count\":6,\"lastSeenTime\":1586955370991,\"difficulty\":1,\"difficultyWeight\":6},\"Ferse\":{\"count\":3,\"lastSeenTime\":1586916540283,\"difficulty\":0.42857142857142855,\"difficultyWeight\":7},\"föhnen\":{\"count\":7,\"lastSeenTime\":1586959131863},\"Akne\":{\"count\":4,\"lastSeenTime\":1586880759383},\"Prinz\":{\"count\":6,\"lastSeenTime\":1586889638222},\"Ampel\":{\"count\":6,\"lastSeenTime\":1586889591248,\"publicGameCount\":2,\"difficulty\":0.7333333333333333,\"difficultyWeight\":45},\"Patrick Star\":{\"count\":8,\"lastSeenTime\":1586954967541,\"publicGameCount\":1,\"difficulty\":0.875,\"difficultyWeight\":8},\"Einrad\":{\"count\":6,\"lastSeenTime\":1586890806055,\"difficulty\":0.9,\"difficultyWeight\":10},\"Schwalbe\":{\"count\":5,\"lastSeenTime\":1586901274634},\"Postbote\":{\"count\":6,\"lastSeenTime\":1586954603173,\"difficulty\":0.7,\"difficultyWeight\":10},\"Korkenzieher\":{\"count\":3,\"lastSeenTime\":1586814402764},\"Heiligenschein\":{\"count\":6,\"lastSeenTime\":1586859642077},\"Rennauto\":{\"count\":3,\"lastSeenTime\":1586874409884,\"difficulty\":0.9,\"difficultyWeight\":10},\"Schüssel\":{\"count\":6,\"lastSeenTime\":1586959207698,\"difficulty\":1,\"difficultyWeight\":1},\"Leck\":{\"count\":6,\"lastSeenTime\":1586958668588},\"prallen\":{\"count\":6,\"lastSeenTime\":1586916493492,\"difficulty\":1,\"difficultyWeight\":36},\"Schweißer\":{\"count\":8,\"lastSeenTime\":1586921283836},\"Köcher\":{\"count\":7,\"lastSeenTime\":1586958239433},\"Rote Beete\":{\"count\":6,\"lastSeenTime\":1586920237009},\"Hollywood\":{\"count\":4,\"lastSeenTime\":1586880759383},\"Bob Ross\":{\"count\":6,\"lastSeenTime\":1586914515993},\"Donnerstag\":{\"count\":3,\"lastSeenTime\":1586826344267,\"difficulty\":0.4117647058823529,\"difficultyWeight\":17},\"Fallschirm\":{\"count\":9,\"lastSeenTime\":1586908583500,\"difficulty\":1,\"difficultyWeight\":11},\"Gorilla\":{\"count\":7,\"lastSeenTime\":1586956033779},\"Orchester\":{\"count\":6,\"lastSeenTime\":1586956336636},\"Lagerhaus\":{\"count\":5,\"lastSeenTime\":1586859907934},\"Bienenkönigin\":{\"count\":4,\"lastSeenTime\":1586901397893,\"difficulty\":0.7878787878787878,\"difficultyWeight\":33},\"Mayonnaise\":{\"count\":5,\"lastSeenTime\":1586955716758},\"Reptil\":{\"count\":12,\"lastSeenTime\":1586915059551},\"Lichtschwert\":{\"count\":4,\"lastSeenTime\":1586896127512,\"difficulty\":1,\"difficultyWeight\":6},\"Sandburg\":{\"count\":3,\"lastSeenTime\":1586807745991},\"Brathering\":{\"count\":2,\"lastSeenTime\":1586895949288},\"Leonardo da Vinci\":{\"count\":5,\"lastSeenTime\":1586900226190},\"U-Bahn\":{\"count\":6,\"lastSeenTime\":1586916574944},\"Echo\":{\"count\":5,\"lastSeenTime\":1586897250506,\"publicGameCount\":1,\"difficulty\":0.8333333333333334,\"difficultyWeight\":6},\"Biss\":{\"count\":1,\"lastSeenTime\":1586590631736},\"Fernbedienung\":{\"count\":3,\"lastSeenTime\":1586913648704},\"Vodka\":{\"count\":6,\"lastSeenTime\":1586919711626},\"Captain America\":{\"count\":4,\"lastSeenTime\":1586916038112},\"Pfeffer\":{\"count\":7,\"lastSeenTime\":1586920926700,\"difficulty\":0.7428571428571429,\"difficultyWeight\":35,\"publicGameCount\":1},\"Gummibärchen\":{\"count\":4,\"lastSeenTime\":1586916063451},\"Beethoven\":{\"count\":4,\"lastSeenTime\":1586954900699},\"Rasierklinge\":{\"count\":7,\"lastSeenTime\":1586958264090},\"Seiltänzer\":{\"count\":5,\"lastSeenTime\":1586900749260},\"Zucchini\":{\"count\":5,\"lastSeenTime\":1586955542167,\"difficulty\":0.6666666666666666,\"difficultyWeight\":24},\"Sandsturm\":{\"count\":3,\"lastSeenTime\":1586959547988},\"Fliegenpilz\":{\"count\":8,\"lastSeenTime\":1586881220427,\"difficulty\":0.8888888888888888,\"difficultyWeight\":9},\"Zügel\":{\"count\":7,\"lastSeenTime\":1586915176554},\"Barack Obama\":{\"count\":7,\"lastSeenTime\":1586839026220},\"Schleife\":{\"count\":4,\"lastSeenTime\":1586913868342},\"Mahlzeit\":{\"count\":6,\"lastSeenTime\":1586880019286,\"difficulty\":1,\"difficultyWeight\":1},\"Autoradio\":{\"count\":8,\"lastSeenTime\":1586902787660,\"publicGameCount\":1,\"difficulty\":0.75,\"difficultyWeight\":4},\"lernen\":{\"count\":5,\"lastSeenTime\":1586897039497},\"Matsch\":{\"count\":3,\"lastSeenTime\":1586815745247},\"seekrank\":{\"count\":3,\"lastSeenTime\":1586908382794,\"difficulty\":0.25,\"difficultyWeight\":8},\"Olaf\":{\"count\":6,\"lastSeenTime\":1586915919352},\"Schaf\":{\"count\":8,\"lastSeenTime\":1586890490289,\"publicGameCount\":1},\"Spiegel\":{\"count\":4,\"lastSeenTime\":1586881220427,\"difficulty\":1,\"difficultyWeight\":14},\"positiv\":{\"count\":3,\"lastSeenTime\":1586956363582,\"difficulty\":0.8305084745762712,\"difficultyWeight\":59},\"Cheeseburger\":{\"count\":5,\"lastSeenTime\":1586958561895},\"Liechtenstein\":{\"count\":5,\"lastSeenTime\":1586896569941},\"fabelhaft\":{\"count\":5,\"lastSeenTime\":1586909006610},\"Winzer\":{\"count\":2,\"lastSeenTime\":1586908395891},\"kopieren\":{\"count\":7,\"lastSeenTime\":1586959242580,\"difficulty\":1,\"difficultyWeight\":50},\"Doritos\":{\"count\":6,\"lastSeenTime\":1586919423610},\"gehorchen\":{\"count\":6,\"lastSeenTime\":1586920836680},\"Niederlande\":{\"count\":2,\"lastSeenTime\":1586903158426},\"WhatsApp\":{\"count\":7,\"lastSeenTime\":1586914491372,\"difficulty\":0.5,\"difficultyWeight\":4},\"Fernseher\":{\"count\":4,\"lastSeenTime\":1586919811805,\"difficulty\":0.9333333333333333,\"difficultyWeight\":15},\"Geld\":{\"count\":2,\"lastSeenTime\":1586726008015},\"Wrestling\":{\"count\":5,\"lastSeenTime\":1586900650119},\"tot\":{\"count\":11,\"lastSeenTime\":1586958212167},\"Kuhglocke\":{\"count\":10,\"lastSeenTime\":1586901321700},\"Gehirn\":{\"count\":7,\"lastSeenTime\":1586958859906,\"difficulty\":1,\"difficultyWeight\":5},\"New York\":{\"count\":9,\"lastSeenTime\":1586914373601},\"Gepäck\":{\"count\":10,\"lastSeenTime\":1586956016971,\"difficulty\":1,\"difficultyWeight\":16},\"Spartacus\":{\"count\":7,\"lastSeenTime\":1586890454038},\"Kabel\":{\"count\":7,\"lastSeenTime\":1586806153755},\"Armaturenbrett\":{\"count\":5,\"lastSeenTime\":1586954674416},\"Wein\":{\"count\":7,\"lastSeenTime\":1586955923939,\"difficulty\":0.36363636363636365,\"difficultyWeight\":11},\"Michael Jackson\":{\"count\":3,\"lastSeenTime\":1586920375356},\"Videospiel\":{\"count\":9,\"lastSeenTime\":1586913482555},\"Curry\":{\"count\":10,\"lastSeenTime\":1586955532027},\"Kitesurfen\":{\"count\":1,\"lastSeenTime\":1586591460245},\"Reis\":{\"count\":8,\"lastSeenTime\":1586907764126},\"Jenga\":{\"count\":9,\"lastSeenTime\":1586915089601},\"massieren\":{\"count\":3,\"lastSeenTime\":1586840060848},\"Zündschnur\":{\"count\":4,\"lastSeenTime\":1586954999969,\"difficulty\":1,\"difficultyWeight\":7},\"Eigelb\":{\"count\":4,\"lastSeenTime\":1586708871882},\"Wurm\":{\"count\":7,\"lastSeenTime\":1586858975693},\"unsichtbar\":{\"count\":7,\"lastSeenTime\":1586920922732},\"gut\":{\"count\":4,\"lastSeenTime\":1586817823665},\"Schottenrock\":{\"count\":5,\"lastSeenTime\":1586900254522},\"Kopfende\":{\"count\":5,\"lastSeenTime\":1586903572367,\"difficulty\":1,\"difficultyWeight\":6},\"Fischgräte\":{\"count\":4,\"lastSeenTime\":1586833356919},\"nichts\":{\"count\":5,\"lastSeenTime\":1586955823724},\"Braut\":{\"count\":14,\"lastSeenTime\":1586916680436},\"Mischpult\":{\"count\":6,\"lastSeenTime\":1586860406384},\"Lehm\":{\"count\":7,\"lastSeenTime\":1586889638222},\"Erdnuss\":{\"count\":7,\"lastSeenTime\":1586958887354},\"Briefträger\":{\"count\":4,\"lastSeenTime\":1586959269543,\"difficulty\":0.9375,\"difficultyWeight\":16},\"Miniclip\":{\"count\":7,\"lastSeenTime\":1586913998392},\"Blumenstrauß\":{\"count\":4,\"lastSeenTime\":1586916013387},\"Ziegelstein\":{\"count\":6,\"lastSeenTime\":1586840420314},\"Öl\":{\"count\":4,\"lastSeenTime\":1586958212167},\"Aprikose\":{\"count\":5,\"lastSeenTime\":1586891163944,\"publicGameCount\":1,\"difficulty\":0.6666666666666667,\"difficultyWeight\":9},\"Taube\":{\"count\":6,\"lastSeenTime\":1586901052765},\"Wissenschaft\":{\"count\":6,\"lastSeenTime\":1586916237094},\"Champagnersorbet\":{\"count\":6,\"lastSeenTime\":1586896666647},\"fallen\":{\"count\":2,\"lastSeenTime\":1586805561130},\"Israel\":{\"count\":4,\"lastSeenTime\":1586827800087,\"difficulty\":1,\"difficultyWeight\":4},\"Milchstraße\":{\"count\":8,\"lastSeenTime\":1586900660239},\"Wippe\":{\"count\":4,\"lastSeenTime\":1586955726995,\"difficulty\":1,\"difficultyWeight\":5},\"Kaviar\":{\"count\":6,\"lastSeenTime\":1586959622590},\"Hafen\":{\"count\":7,\"lastSeenTime\":1586958171361,\"publicGameCount\":1,\"difficulty\":0.7931034482758621,\"difficultyWeight\":29},\"Minute\":{\"count\":8,\"lastSeenTime\":1586897516933},\"Zuckerguss\":{\"count\":2,\"lastSeenTime\":1586707490326},\"Bock\":{\"count\":3,\"lastSeenTime\":1586806457936},\"Fleisch\":{\"count\":6,\"lastSeenTime\":1586903122787,\"difficulty\":0.875,\"difficultyWeight\":8},\"Schnabel\":{\"count\":7,\"lastSeenTime\":1586958456673},\"Erdbeben\":{\"count\":5,\"lastSeenTime\":1586900724985},\"Zwerg\":{\"count\":1,\"lastSeenTime\":1586595084509},\"Außerirdischer\":{\"count\":4,\"lastSeenTime\":1586902687551},\"Zunge\":{\"count\":4,\"lastSeenTime\":1586920922732},\"Harz\":{\"count\":5,\"lastSeenTime\":1586915312713},\"Nasa\":{\"count\":5,\"lastSeenTime\":1586896902340},\"LKW\":{\"count\":7,\"lastSeenTime\":1586956009184},\"Salz\":{\"count\":6,\"lastSeenTime\":1586896095108},\"Schicksal\":{\"count\":7,\"lastSeenTime\":1586920326688},\"arm\":{\"count\":7,\"lastSeenTime\":1586919522211,\"difficulty\":1,\"difficultyWeight\":1},\"Schmetterling\":{\"count\":4,\"lastSeenTime\":1586958289143},\"Mäusefalle\":{\"count\":10,\"lastSeenTime\":1586956504597,\"difficulty\":0.9444444444444444,\"difficultyWeight\":36},\"Hals\":{\"count\":3,\"lastSeenTime\":1586826301547},\"Teddybär\":{\"count\":6,\"lastSeenTime\":1586955370991,\"difficulty\":0.8235294117647058,\"difficultyWeight\":17},\"Biber\":{\"count\":7,\"lastSeenTime\":1586916461517,\"difficulty\":1,\"difficultyWeight\":16},\"Eminem\":{\"count\":3,\"lastSeenTime\":1586904308260},\"Nasenring\":{\"count\":6,\"lastSeenTime\":1586955823724,\"difficulty\":1,\"difficultyWeight\":9},\"Daffy Duck\":{\"count\":4,\"lastSeenTime\":1586873936206},\"Darm\":{\"count\":8,\"lastSeenTime\":1586959255115},\"kleiner Finger\":{\"count\":2,\"lastSeenTime\":1586651151122,\"publicGameCount\":1,\"difficulty\":0.4666666666666667,\"difficultyWeight\":15},\"Mütze\":{\"count\":3,\"lastSeenTime\":1586815197615,\"difficulty\":1,\"difficultyWeight\":8},\"Sitzbank\":{\"count\":9,\"lastSeenTime\":1586958471219,\"publicGameCount\":1,\"difficulty\":0.9655172413793104,\"difficultyWeight\":29},\"Schiffswrack\":{\"count\":2,\"lastSeenTime\":1586596602460},\"Archäologe\":{\"count\":3,\"lastSeenTime\":1586840929412},\"Duell\":{\"count\":8,\"lastSeenTime\":1586907557164,\"difficulty\":0.5,\"difficultyWeight\":12},\"Kröte\":{\"count\":8,\"lastSeenTime\":1586908626057},\"Punkte\":{\"count\":3,\"lastSeenTime\":1586904287692,\"difficulty\":0.6666666666666666,\"difficultyWeight\":3},\"Kojote\":{\"count\":6,\"lastSeenTime\":1586956570180},\"Reddit\":{\"count\":9,\"lastSeenTime\":1586958052113,\"difficulty\":0.8333333333333334,\"difficultyWeight\":18},\"iPad\":{\"count\":6,\"lastSeenTime\":1586896714278},\"Katapult\":{\"count\":3,\"lastSeenTime\":1586919983033},\"Leiterwagen\":{\"count\":6,\"lastSeenTime\":1586901191898},\"Schalter\":{\"count\":6,\"lastSeenTime\":1586833150052},\"Lotterie\":{\"count\":3,\"lastSeenTime\":1586955644811,\"difficulty\":0.9583333333333334,\"difficultyWeight\":24},\"China\":{\"count\":3,\"lastSeenTime\":1586915856980,\"difficulty\":1,\"difficultyWeight\":7},\"Anführer\":{\"count\":4,\"lastSeenTime\":1586815327708},\"Waschstraße\":{\"count\":4,\"lastSeenTime\":1586874562516},\"Seetang\":{\"count\":4,\"lastSeenTime\":1586955542167,\"difficulty\":1,\"difficultyWeight\":11},\"Tasmanischer Teufel\":{\"count\":3,\"lastSeenTime\":1586916368116},\"bauchpinseln\":{\"count\":5,\"lastSeenTime\":1586879160227,\"publicGameCount\":1},\"Filter\":{\"count\":3,\"lastSeenTime\":1586859018427},\"Bett\":{\"count\":9,\"lastSeenTime\":1586955409372,\"difficulty\":1,\"difficultyWeight\":7},\"Schlüsselanhänger\":{\"count\":4,\"lastSeenTime\":1586916461517,\"difficulty\":1,\"difficultyWeight\":6},\"Giraffe\":{\"count\":2,\"lastSeenTime\":1586874945892,\"difficulty\":1,\"difficultyWeight\":9},\"Wildschwein\":{\"count\":6,\"lastSeenTime\":1586956130879},\"Kino\":{\"count\":3,\"lastSeenTime\":1586921170819},\"Chirurg\":{\"count\":9,\"lastSeenTime\":1586889475038,\"difficulty\":0.8,\"difficultyWeight\":5},\"Lampenschirm\":{\"count\":6,\"lastSeenTime\":1586914094806},\"schwach\":{\"count\":6,\"lastSeenTime\":1586889917123},\"Leonardo DiCaprio\":{\"count\":4,\"lastSeenTime\":1586827438446},\"Pringles\":{\"count\":2,\"lastSeenTime\":1586915417224},\"Terrasse\":{\"count\":5,\"lastSeenTime\":1586840254824,\"difficulty\":0.8787878787878788,\"difficultyWeight\":33},\"rauchen\":{\"count\":7,\"lastSeenTime\":1586873988685},\"Kerze\":{\"count\":2,\"lastSeenTime\":1586717755995,\"difficulty\":0.7,\"difficultyWeight\":10},\"gelb\":{\"count\":3,\"lastSeenTime\":1586908541127},\"Bitcoin\":{\"count\":5,\"lastSeenTime\":1586920180037},\"Homer Simpson\":{\"count\":6,\"lastSeenTime\":1586840216366},\"Patrone\":{\"count\":4,\"lastSeenTime\":1586889725951},\"Kuh\":{\"count\":7,\"lastSeenTime\":1586956324955},\"Mülleimer\":{\"count\":11,\"lastSeenTime\":1586959020405},\"Sushi\":{\"count\":6,\"lastSeenTime\":1586896805974},\"Poker\":{\"count\":3,\"lastSeenTime\":1586859615003},\"Waffel\":{\"count\":7,\"lastSeenTime\":1586958794944},\"Gazelle\":{\"count\":4,\"lastSeenTime\":1586908518895,\"difficulty\":0.7857142857142857,\"difficultyWeight\":14},\"Morty\":{\"count\":2,\"lastSeenTime\":1586785081909},\"Waldbrand\":{\"count\":7,\"lastSeenTime\":1586959344881},\"Delle\":{\"count\":3,\"lastSeenTime\":1586805672921},\"Virus\":{\"count\":5,\"lastSeenTime\":1586907788446},\"Veganer\":{\"count\":3,\"lastSeenTime\":1586868461473,\"difficulty\":0.7142857142857143,\"difficultyWeight\":21},\"nähen\":{\"count\":4,\"lastSeenTime\":1586727015282},\"Sandwich\":{\"count\":5,\"lastSeenTime\":1586901361357},\"Ozean\":{\"count\":6,\"lastSeenTime\":1586956570180,\"difficulty\":0.5555555555555556,\"difficultyWeight\":9},\"Stern\":{\"count\":5,\"lastSeenTime\":1586901461723},\"Jahreszeit\":{\"count\":8,\"lastSeenTime\":1586958499761},\"Mozart\":{\"count\":5,\"lastSeenTime\":1586832383649,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Schornsteinfeger\":{\"count\":7,\"lastSeenTime\":1586879670490,\"difficulty\":1,\"difficultyWeight\":9},\"Magazin\":{\"count\":5,\"lastSeenTime\":1586916415277,\"difficulty\":0.6666666666666666,\"difficultyWeight\":6},\"schmelzen\":{\"count\":6,\"lastSeenTime\":1586890729326},\"Silvester\":{\"count\":7,\"lastSeenTime\":1586958375030,\"difficulty\":0.9411764705882353,\"difficultyWeight\":17},\"Eintopf\":{\"count\":6,\"lastSeenTime\":1586921071907},\"Lidschatten\":{\"count\":5,\"lastSeenTime\":1586955503431},\"Traum\":{\"count\":5,\"lastSeenTime\":1586959804291},\"Kruste\":{\"count\":4,\"lastSeenTime\":1586920432273},\"pfeifen\":{\"count\":3,\"lastSeenTime\":1586896458746,\"difficulty\":0.4,\"difficultyWeight\":10},\"zertrümmern\":{\"count\":7,\"lastSeenTime\":1586889393401},\"chaotisch\":{\"count\":8,\"lastSeenTime\":1586908175585},\"Schmerz\":{\"count\":5,\"lastSeenTime\":1586920119062},\"Limbo\":{\"count\":4,\"lastSeenTime\":1586879298099,\"difficulty\":0.7684210526315789,\"difficultyWeight\":95},\"Baumwolle\":{\"count\":3,\"lastSeenTime\":1586915099808},\"Schneebesen\":{\"count\":5,\"lastSeenTime\":1586813662034},\"Balkon\":{\"count\":4,\"lastSeenTime\":1586896769426,\"difficulty\":0.5,\"difficultyWeight\":8},\"Freibad\":{\"count\":7,\"lastSeenTime\":1586913827190},\"kriechen\":{\"count\":7,\"lastSeenTime\":1586958887354},\"Model\":{\"count\":5,\"lastSeenTime\":1586889489199},\"Grillen\":{\"count\":7,\"lastSeenTime\":1586956048018},\"Schreibtisch\":{\"count\":9,\"lastSeenTime\":1586959290196},\"Leder\":{\"count\":4,\"lastSeenTime\":1586920361074},\"Osten\":{\"count\":2,\"lastSeenTime\":1586634009548},\"Rezeption\":{\"count\":6,\"lastSeenTime\":1586913827190},\"Madagaskar\":{\"count\":2,\"lastSeenTime\":1586914309641},\"rutschen\":{\"count\":7,\"lastSeenTime\":1586919811805,\"difficulty\":1,\"difficultyWeight\":12},\"Punkt\":{\"count\":3,\"lastSeenTime\":1586868381050},\"Frosch\":{\"count\":4,\"lastSeenTime\":1586814181157},\"Tennisschläger\":{\"count\":3,\"lastSeenTime\":1586954603173},\"Tragfläche\":{\"count\":3,\"lastSeenTime\":1586889719019},\"spielen\":{\"count\":4,\"lastSeenTime\":1586904147395},\"Australien\":{\"count\":3,\"lastSeenTime\":1586817485337},\"Schwan\":{\"count\":4,\"lastSeenTime\":1586868119871},\"Seekuh\":{\"count\":2,\"lastSeenTime\":1586817081429},\"stampfen\":{\"count\":5,\"lastSeenTime\":1586900361272},\"Vegetarier\":{\"count\":2,\"lastSeenTime\":1586713274267},\"Streichholzschachtel\":{\"count\":4,\"lastSeenTime\":1586913648704,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":4},\"Eimer\":{\"count\":5,\"lastSeenTime\":1586959633128,\"difficulty\":0.6,\"difficultyWeight\":10},\"Telefon\":{\"count\":5,\"lastSeenTime\":1586919434514,\"difficulty\":0.65,\"difficultyWeight\":20},\"Onkel\":{\"count\":4,\"lastSeenTime\":1586897484538},\"Warnweste\":{\"count\":9,\"lastSeenTime\":1586916013387,\"difficulty\":1,\"difficultyWeight\":6},\"Dompteur\":{\"count\":9,\"lastSeenTime\":1586908931787},\"Mittwoch\":{\"count\":9,\"lastSeenTime\":1586955113604},\"pink\":{\"count\":6,\"lastSeenTime\":1586914080489,\"difficulty\":0.5,\"difficultyWeight\":12},\"Krake\":{\"count\":4,\"lastSeenTime\":1586958944806},\"goldener Apfel\":{\"count\":7,\"lastSeenTime\":1586895761615},\"Maisfeld\":{\"count\":7,\"lastSeenTime\":1586903711780},\"Holzfäller\":{\"count\":2,\"lastSeenTime\":1586727362775,\"difficulty\":0.6571428571428571,\"difficultyWeight\":35},\"Familie\":{\"count\":6,\"lastSeenTime\":1586920538046},\"Paintball\":{\"count\":1,\"lastSeenTime\":1586608344685},\"Kuchen\":{\"count\":4,\"lastSeenTime\":1586955263523},\"Tauchgang\":{\"count\":7,\"lastSeenTime\":1586904234099},\"Filmriss\":{\"count\":5,\"lastSeenTime\":1586915731157},\"Kristall\":{\"count\":4,\"lastSeenTime\":1586896530203},\"Straßensperre\":{\"count\":3,\"lastSeenTime\":1586859787263},\"Jagdziel\":{\"count\":6,\"lastSeenTime\":1586914258463,\"publicGameCount\":1},\"Zimmermann\":{\"count\":5,\"lastSeenTime\":1586914792295},\"Erkältung\":{\"count\":8,\"lastSeenTime\":1586959344881},\"Blase\":{\"count\":5,\"lastSeenTime\":1586919413397},\"Moos\":{\"count\":4,\"lastSeenTime\":1586900318835,\"difficulty\":1,\"difficultyWeight\":7},\"Einsiedler\":{\"count\":4,\"lastSeenTime\":1586896040899,\"publicGameCount\":1},\"Kanada\":{\"count\":2,\"lastSeenTime\":1586710340067,\"difficulty\":0.8333333333333334,\"difficultyWeight\":6},\"Glühwürmchen\":{\"count\":3,\"lastSeenTime\":1586833885395},\"Sonnenschirm\":{\"count\":7,\"lastSeenTime\":1586914428482},\"Brieföffner\":{\"count\":7,\"lastSeenTime\":1586957925802},\"Orgel\":{\"count\":5,\"lastSeenTime\":1586859816236},\"Seifenblase\":{\"count\":4,\"lastSeenTime\":1586920043786,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Notenschlüssel\":{\"count\":5,\"lastSeenTime\":1586916118321},\"Kroatien\":{\"count\":10,\"lastSeenTime\":1586959728501},\"Snowboard\":{\"count\":4,\"lastSeenTime\":1586954577957},\"Zahn\":{\"count\":3,\"lastSeenTime\":1586890131974,\"difficulty\":1,\"difficultyWeight\":31},\"Zugbrücke\":{\"count\":5,\"lastSeenTime\":1586916717644},\"Distanz\":{\"count\":4,\"lastSeenTime\":1586907361110},\"Dreieck\":{\"count\":9,\"lastSeenTime\":1586955681359,\"difficulty\":0.6,\"difficultyWeight\":5},\"Flaschenöffner\":{\"count\":6,\"lastSeenTime\":1586874409884},\"Roman\":{\"count\":2,\"lastSeenTime\":1586839953759},\"Nase\":{\"count\":6,\"lastSeenTime\":1586916637868},\"Regentropfen\":{\"count\":4,\"lastSeenTime\":1586958141882,\"difficulty\":1,\"difficultyWeight\":10},\"Statue\":{\"count\":7,\"lastSeenTime\":1586920034941},\"Studio\":{\"count\":5,\"lastSeenTime\":1586889446349},\"Portrait\":{\"count\":6,\"lastSeenTime\":1586919399142,\"difficulty\":1,\"difficultyWeight\":32},\"kabellos\":{\"count\":7,\"lastSeenTime\":1586920034941,\"difficulty\":1,\"difficultyWeight\":6},\"Zimmerpflanze\":{\"count\":2,\"lastSeenTime\":1586919501543},\"Prinzessin\":{\"count\":2,\"lastSeenTime\":1586921008446},\"Vollmond\":{\"count\":5,\"lastSeenTime\":1586908395891,\"difficulty\":0.9565217391304348,\"difficultyWeight\":23},\"Kupfer\":{\"count\":4,\"lastSeenTime\":1586816578375},\"Biologie\":{\"count\":3,\"lastSeenTime\":1586954727368},\"Papst\":{\"count\":5,\"lastSeenTime\":1586840892251},\"rutschig\":{\"count\":3,\"lastSeenTime\":1586955113604},\"Zyklop\":{\"count\":4,\"lastSeenTime\":1586881056350,\"publicGameCount\":1,\"difficulty\":1,\"difficultyWeight\":12},\"Grotte\":{\"count\":4,\"lastSeenTime\":1586915236139},\"Stachelschwein\":{\"count\":3,\"lastSeenTime\":1586839250104,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7,\"publicGameCount\":1},\"Smaragd\":{\"count\":3,\"lastSeenTime\":1586812763441},\"Kriegsschiff\":{\"count\":5,\"lastSeenTime\":1586858883401},\"Dürre\":{\"count\":6,\"lastSeenTime\":1586908276050},\"Puma\":{\"count\":5,\"lastSeenTime\":1586896290835},\"Symphonie\":{\"count\":4,\"lastSeenTime\":1586908315438},\"ClickBait\":{\"count\":7,\"lastSeenTime\":1586900856713,\"difficulty\":0.8181818181818182,\"difficultyWeight\":11},\"Kuppel\":{\"count\":4,\"lastSeenTime\":1586875034252},\"applaudieren\":{\"count\":6,\"lastSeenTime\":1586915821415},\"Flügel\":{\"count\":5,\"lastSeenTime\":1586907814926,\"difficulty\":0.5833333333333333,\"difficultyWeight\":12},\"Frieden\":{\"count\":6,\"lastSeenTime\":1586955224835,\"difficulty\":0.6896551724137931,\"difficultyWeight\":29},\"Wort\":{\"count\":8,\"lastSeenTime\":1586920456841},\"Teller\":{\"count\":3,\"lastSeenTime\":1586907682972,\"difficulty\":0.4,\"difficultyWeight\":10},\"Teppich\":{\"count\":5,\"lastSeenTime\":1586875186652,\"difficulty\":1,\"difficultyWeight\":8},\"Schraube\":{\"count\":3,\"lastSeenTime\":1586873383077},\"Tag\":{\"count\":6,\"lastSeenTime\":1586903370090},\"Kopf\":{\"count\":13,\"lastSeenTime\":1586920143399},\"Ferien\":{\"count\":5,\"lastSeenTime\":1586890156350},\"Fischernetz\":{\"count\":2,\"lastSeenTime\":1586782926490,\"difficulty\":0.5555555555555556,\"difficultyWeight\":9},\"Wurst\":{\"count\":4,\"lastSeenTime\":1586904367956,\"difficulty\":1,\"difficultyWeight\":3},\"Triebwerk\":{\"count\":4,\"lastSeenTime\":1586827603168},\"Robbe\":{\"count\":7,\"lastSeenTime\":1586921156587},\"Wald\":{\"count\":3,\"lastSeenTime\":1586712987795},\"Netz\":{\"count\":8,\"lastSeenTime\":1586920666083,\"difficulty\":0.2857142857142857,\"difficultyWeight\":7},\"Fehler\":{\"count\":3,\"lastSeenTime\":1586868805974},\"Kastagnetten\":{\"count\":4,\"lastSeenTime\":1586903148142},\"Aladdin\":{\"count\":2,\"lastSeenTime\":1586957874303,\"difficulty\":1,\"difficultyWeight\":13},\"Scharfschütze\":{\"count\":3,\"lastSeenTime\":1586826372203},\"Korken\":{\"count\":8,\"lastSeenTime\":1586916237094,\"difficulty\":0.875,\"difficultyWeight\":8},\"Atlantis\":{\"count\":3,\"lastSeenTime\":1586958572090},\"Wüste\":{\"count\":5,\"lastSeenTime\":1586859799165,\"publicGameCount\":1,\"difficulty\":0.8888888888888888,\"difficultyWeight\":9},\"Fernsehturm\":{\"count\":5,\"lastSeenTime\":1586908382794},\"Lautsprecher\":{\"count\":3,\"lastSeenTime\":1586869993172,\"difficulty\":0.8,\"difficultyWeight\":5},\"binden\":{\"count\":8,\"lastSeenTime\":1586919773316,\"difficulty\":1,\"difficultyWeight\":2},\"Pinguin\":{\"count\":4,\"lastSeenTime\":1586901166652},\"Gier\":{\"count\":6,\"lastSeenTime\":1586902813258},\"sterben\":{\"count\":6,\"lastSeenTime\":1586915200929},\"versagen\":{\"count\":6,\"lastSeenTime\":1586956384816},\"Unterschrift\":{\"count\":3,\"lastSeenTime\":1586812458521},\"Vuvuzela\":{\"count\":5,\"lastSeenTime\":1586900861532},\"Geografie\":{\"count\":6,\"lastSeenTime\":1586896730722},\"Oval\":{\"count\":1,\"lastSeenTime\":1586618468051},\"Marke\":{\"count\":5,\"lastSeenTime\":1586914554202,\"difficulty\":0.6666666666666666,\"difficultyWeight\":15},\"Observatorium\":{\"count\":2,\"lastSeenTime\":1586909094851,\"difficulty\":1,\"difficultyWeight\":6},\"Lesezeichen\":{\"count\":8,\"lastSeenTime\":1586959455308,\"difficulty\":1,\"difficultyWeight\":7},\"Pogo Stick\":{\"count\":6,\"lastSeenTime\":1586902943577},\"Zikade\":{\"count\":5,\"lastSeenTime\":1586814522290},\"Bulldozer\":{\"count\":5,\"lastSeenTime\":1586955532027},\"Gummi\":{\"count\":7,\"lastSeenTime\":1586954678504},\"Zuma\":{\"count\":5,\"lastSeenTime\":1586908504643},\"Saturn\":{\"count\":6,\"lastSeenTime\":1586956352310,\"difficulty\":1,\"difficultyWeight\":7},\"Tower Bridge\":{\"count\":7,\"lastSeenTime\":1586914475739},\"Zelt\":{\"count\":8,\"lastSeenTime\":1586907327679,\"difficulty\":1,\"difficultyWeight\":23},\"Darts\":{\"count\":3,\"lastSeenTime\":1586650835510,\"difficulty\":0.75,\"difficultyWeight\":12},\"Karaoke\":{\"count\":4,\"lastSeenTime\":1586904384265},\"Mitternacht\":{\"count\":5,\"lastSeenTime\":1586955025294,\"difficulty\":1,\"difficultyWeight\":25},\"Sechseck\":{\"count\":8,\"lastSeenTime\":1586914157190},\"Afrika\":{\"count\":2,\"lastSeenTime\":1586895919376,\"difficulty\":0.8,\"difficultyWeight\":15,\"publicGameCount\":1},\"Arztkoffer\":{\"count\":5,\"lastSeenTime\":1586889432199,\"difficulty\":0.8,\"difficultyWeight\":5},\"Niere\":{\"count\":9,\"lastSeenTime\":1586958385310},\"Windrad\":{\"count\":4,\"lastSeenTime\":1586869955906},\"Baumkuchen\":{\"count\":4,\"lastSeenTime\":1586900534749,\"difficulty\":1,\"difficultyWeight\":5},\"Rasenmäher\":{\"count\":6,\"lastSeenTime\":1586955691477},\"Schiefer Turm von Pisa\":{\"count\":6,\"lastSeenTime\":1586834077836},\"Messer\":{\"count\":12,\"lastSeenTime\":1586958636395},\"Rechteck\":{\"count\":6,\"lastSeenTime\":1586916744663},\"behindert\":{\"count\":8,\"lastSeenTime\":1586901239971,\"publicGameCount\":1,\"difficulty\":0.8333333333333334,\"difficultyWeight\":6},\"Hitze\":{\"count\":1,\"lastSeenTime\":1586619376532,\"difficulty\":0.6521739130434783,\"difficultyWeight\":23},\"König\":{\"count\":6,\"lastSeenTime\":1586920604951,\"publicGameCount\":1,\"difficulty\":0.42857142857142855,\"difficultyWeight\":7},\"Akkordeon\":{\"count\":6,\"lastSeenTime\":1586954577957},\"Autogramm\":{\"count\":6,\"lastSeenTime\":1586914716657,\"publicGameCount\":1},\"Dalmatiner\":{\"count\":7,\"lastSeenTime\":1586955263523},\"Fata Morgana\":{\"count\":4,\"lastSeenTime\":1586958973713},\"Meerschweinchen\":{\"count\":10,\"lastSeenTime\":1586839691166,\"publicGameCount\":1,\"difficulty\":0.2857142857142857,\"difficultyWeight\":7},\"Pudel\":{\"count\":6,\"lastSeenTime\":1586955310334},\"Asien\":{\"count\":3,\"lastSeenTime\":1586816712958,\"difficulty\":0.625,\"difficultyWeight\":8},\"Haut\":{\"count\":5,\"lastSeenTime\":1586900573287},\"brünett\":{\"count\":4,\"lastSeenTime\":1586920858569,\"difficulty\":1,\"difficultyWeight\":3},\"Mohn\":{\"count\":3,\"lastSeenTime\":1586889591248},\"Aufnahme\":{\"count\":1,\"lastSeenTime\":1586619614046},\"Zuckerstange\":{\"count\":6,\"lastSeenTime\":1586832545576},\"Floß\":{\"count\":6,\"lastSeenTime\":1586814801167},\"Gips\":{\"count\":7,\"lastSeenTime\":1586958719765},\"rückgängig\":{\"count\":4,\"lastSeenTime\":1586915456714,\"difficulty\":1,\"difficultyWeight\":9},\"Schaltknüppel\":{\"count\":8,\"lastSeenTime\":1586916288751,\"difficulty\":0.6,\"difficultyWeight\":5},\"Poseidon\":{\"count\":10,\"lastSeenTime\":1586956516194,\"difficulty\":0.75,\"difficultyWeight\":4},\"Helm\":{\"count\":4,\"lastSeenTime\":1586959106188},\"Hütte\":{\"count\":4,\"lastSeenTime\":1586832859836},\"Tintenfisch\":{\"count\":3,\"lastSeenTime\":1586901572201},\"Skittles\":{\"count\":8,\"lastSeenTime\":1586920722806},\"Freddie Faulig\":{\"count\":5,\"lastSeenTime\":1586921195186},\"Bildhauer\":{\"count\":5,\"lastSeenTime\":1586896885306},\"Hund\":{\"count\":8,\"lastSeenTime\":1586959142159,\"difficulty\":1,\"difficultyWeight\":3},\"Dachfenster\":{\"count\":4,\"lastSeenTime\":1586956197682,\"difficulty\":1,\"difficultyWeight\":1},\"Postkarte\":{\"count\":3,\"lastSeenTime\":1586896214025,\"difficulty\":0.8545454545454545,\"difficultyWeight\":55},\"Großmutter\":{\"count\":5,\"lastSeenTime\":1586903760979,\"difficulty\":1,\"difficultyWeight\":7},\"Tochter\":{\"count\":4,\"lastSeenTime\":1586920771641},\"Motherboard\":{\"count\":2,\"lastSeenTime\":1586724278124},\"Panther\":{\"count\":2,\"lastSeenTime\":1586908672662,\"difficulty\":1,\"difficultyWeight\":8},\"Küstenwache\":{\"count\":4,\"lastSeenTime\":1586813867768},\"Chuck Norris\":{\"count\":5,\"lastSeenTime\":1586914903455},\"Hammer\":{\"count\":6,\"lastSeenTime\":1586880115013,\"publicGameCount\":1,\"difficulty\":0.7272727272727273,\"difficultyWeight\":11},\"Apfelsaft\":{\"count\":7,\"lastSeenTime\":1586903344033},\"Kameramann\":{\"count\":5,\"lastSeenTime\":1586956302197},\"Gebäude\":{\"count\":4,\"lastSeenTime\":1586816998752,\"difficulty\":1,\"difficultyWeight\":8},\"Nickel\":{\"count\":4,\"lastSeenTime\":1586879731749},\"Schnuller\":{\"count\":5,\"lastSeenTime\":1586891340621,\"difficulty\":0.8928571428571429,\"difficultyWeight\":28},\"wählen\":{\"count\":6,\"lastSeenTime\":1586916441133},\"Pikachu\":{\"count\":5,\"lastSeenTime\":1586958959180},\"wiederholen\":{\"count\":7,\"lastSeenTime\":1586874577908},\"Amerika\":{\"count\":5,\"lastSeenTime\":1586914615571,\"difficulty\":1,\"difficultyWeight\":3},\"Zeh\":{\"count\":6,\"lastSeenTime\":1586840668869,\"difficulty\":0.5,\"difficultyWeight\":8},\"Skelett\":{\"count\":6,\"lastSeenTime\":1586907814926},\"Box\":{\"count\":6,\"lastSeenTime\":1586956570180},\"Hängebrücke\":{\"count\":7,\"lastSeenTime\":1586903975283,\"difficulty\":0.4,\"difficultyWeight\":10},\"Kätzchen\":{\"count\":2,\"lastSeenTime\":1586891134706},\"Bandscheibenvorfall\":{\"count\":9,\"lastSeenTime\":1586900301076},\"Pfeife\":{\"count\":2,\"lastSeenTime\":1586900162376,\"difficulty\":0.4,\"difficultyWeight\":5},\"Tauchen\":{\"count\":5,\"lastSeenTime\":1586815355269},\"Maschine\":{\"count\":8,\"lastSeenTime\":1586915493381,\"publicGameCount\":1,\"difficulty\":0.75,\"difficultyWeight\":4},\"Sandalen\":{\"count\":7,\"lastSeenTime\":1586896912568},\"Sichel\":{\"count\":8,\"lastSeenTime\":1586874931565},\"Atombombe\":{\"count\":7,\"lastSeenTime\":1586955457642},\"Wachs\":{\"count\":3,\"lastSeenTime\":1586958456673},\"England\":{\"count\":7,\"lastSeenTime\":1586957950175},\"Temperatur\":{\"count\":5,\"lastSeenTime\":1586958062580,\"difficulty\":0.8888888888888888,\"difficultyWeight\":9},\"Gärtner\":{\"count\":6,\"lastSeenTime\":1586907729754},\"Nadelkissen\":{\"count\":5,\"lastSeenTime\":1586902602080,\"difficulty\":0.75,\"difficultyWeight\":4},\"Geschlecht\":{\"count\":3,\"lastSeenTime\":1586806009929},\"sitzen\":{\"count\":5,\"lastSeenTime\":1586915924921},\"Spaghettieis\":{\"count\":4,\"lastSeenTime\":1586920375356},\"Viertel\":{\"count\":5,\"lastSeenTime\":1586901042640},\"Nudel\":{\"count\":3,\"lastSeenTime\":1586805458421,\"difficulty\":1,\"difficultyWeight\":8},\"Maulwurf\":{\"count\":5,\"lastSeenTime\":1586914157190,\"difficulty\":0.6666666666666666,\"difficultyWeight\":3},\"Ferrari\":{\"count\":4,\"lastSeenTime\":1586955823724,\"difficulty\":0.95,\"difficultyWeight\":20},\"Cello\":{\"count\":2,\"lastSeenTime\":1586711665898,\"difficulty\":0.75,\"difficultyWeight\":8},\"Regisseur\":{\"count\":6,\"lastSeenTime\":1586954953467},\"Schuhkarton\":{\"count\":5,\"lastSeenTime\":1586909286837},\"Passwort\":{\"count\":6,\"lastSeenTime\":1586958413299,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"Markt\":{\"count\":5,\"lastSeenTime\":1586826599494,\"difficulty\":0.5,\"difficultyWeight\":10},\"Teleskop\":{\"count\":3,\"lastSeenTime\":1586958485799,\"difficulty\":0.875,\"difficultyWeight\":8},\"Töne\":{\"count\":2,\"lastSeenTime\":1586868568396,\"difficulty\":0.9285714285714286,\"difficultyWeight\":14},\"Schwarzes Loch\":{\"count\":5,\"lastSeenTime\":1586955025293,\"difficulty\":1,\"difficultyWeight\":7},\"Rumänien\":{\"count\":5,\"lastSeenTime\":1586914501681},\"Generator\":{\"count\":3,\"lastSeenTime\":1586880812768,\"difficulty\":1,\"difficultyWeight\":9},\"Leidenschaft\":{\"count\":5,\"lastSeenTime\":1586958012186,\"difficulty\":0.75,\"difficultyWeight\":4},\"Parkuhr\":{\"count\":4,\"lastSeenTime\":1586958385310},\"Universität\":{\"count\":4,\"lastSeenTime\":1586814778569},\"Rentier\":{\"count\":7,\"lastSeenTime\":1586958525123},\"Magie\":{\"count\":4,\"lastSeenTime\":1586959242580},\"Pumba\":{\"count\":5,\"lastSeenTime\":1586959533143},\"Zombie\":{\"count\":6,\"lastSeenTime\":1586958547642,\"publicGameCount\":1,\"difficulty\":0.36363636363636365,\"difficultyWeight\":11},\"Maus\":{\"count\":4,\"lastSeenTime\":1586920069685},\"Darsteller\":{\"count\":8,\"lastSeenTime\":1586959492934,\"difficulty\":0.7857142857142857,\"difficultyWeight\":14},\"Norden\":{\"count\":3,\"lastSeenTime\":1586817033855,\"publicGameCount\":1},\"Rasiermesser\":{\"count\":4,\"lastSeenTime\":1586913973573},\"Liane\":{\"count\":5,\"lastSeenTime\":1586955457642,\"difficulty\":0.8,\"difficultyWeight\":5},\"Ruhe\":{\"count\":3,\"lastSeenTime\":1586813181137},\"Kanone\":{\"count\":3,\"lastSeenTime\":1586859826495},\"Konversation\":{\"count\":4,\"lastSeenTime\":1586826301547},\"Windows\":{\"count\":4,\"lastSeenTime\":1586955209647,\"difficulty\":0.9852941176470589,\"difficultyWeight\":68},\"Villa\":{\"count\":3,\"lastSeenTime\":1586919374724},\"Papiertüte\":{\"count\":6,\"lastSeenTime\":1586959304612},\"rechts\":{\"count\":5,\"lastSeenTime\":1586959608297},\"Tornado\":{\"count\":4,\"lastSeenTime\":1586874513513,\"difficulty\":0.9354838709677419,\"difficultyWeight\":31},\"Kondenswasser\":{\"count\":6,\"lastSeenTime\":1586890429362},\"Sprühfarbe\":{\"count\":4,\"lastSeenTime\":1586813950788,\"difficulty\":1,\"difficultyWeight\":10},\"Ziel\":{\"count\":3,\"lastSeenTime\":1586826637533,\"difficulty\":1,\"difficultyWeight\":10},\"Sombrero\":{\"count\":7,\"lastSeenTime\":1586958062580,\"publicGameCount\":1},\"Bushaltestelle\":{\"count\":3,\"lastSeenTime\":1586783233936},\"Purzelbaum\":{\"count\":3,\"lastSeenTime\":1586915757073,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Haare\":{\"count\":1,\"lastSeenTime\":1586634491034,\"difficulty\":1,\"difficultyWeight\":10},\"Zypresse\":{\"count\":7,\"lastSeenTime\":1586958809891},\"Amsterdam\":{\"count\":4,\"lastSeenTime\":1586920627218},\"Makkaroni\":{\"count\":6,\"lastSeenTime\":1586959830012},\"taub\":{\"count\":4,\"lastSeenTime\":1586880907839},\"Bill Gates\":{\"count\":4,\"lastSeenTime\":1586915129381},\"provozieren\":{\"count\":5,\"lastSeenTime\":1586896840770},\"Raumanzug\":{\"count\":8,\"lastSeenTime\":1586956019428,\"difficulty\":1,\"difficultyWeight\":82},\"Punker\":{\"count\":4,\"lastSeenTime\":1586959255115},\"Thor\":{\"count\":4,\"lastSeenTime\":1586880911950},\"Globus\":{\"count\":5,\"lastSeenTime\":1586889772751},\"Tischplatte\":{\"count\":3,\"lastSeenTime\":1586889906994},\"hypnotisieren\":{\"count\":4,\"lastSeenTime\":1586959401878},\"Schnabeltier\":{\"count\":7,\"lastSeenTime\":1586908611825},\"Kreuzotter\":{\"count\":5,\"lastSeenTime\":1586920957237,\"publicGameCount\":1,\"difficulty\":0.45454545454545453,\"difficultyWeight\":11},\"Sauna\":{\"count\":9,\"lastSeenTime\":1586956363582},\"Planke\":{\"count\":5,\"lastSeenTime\":1586903323590},\"bezaubernd\":{\"count\":5,\"lastSeenTime\":1586889746364},\"Nonne\":{\"count\":4,\"lastSeenTime\":1586955958335},\"Bücherei\":{\"count\":5,\"lastSeenTime\":1586903231734},\"Kakerlake\":{\"count\":3,\"lastSeenTime\":1586827501149,\"difficulty\":1,\"difficultyWeight\":13},\"Traubensaft\":{\"count\":5,\"lastSeenTime\":1586881168379},\"Wohnung\":{\"count\":6,\"lastSeenTime\":1586839175430},\"Fussel\":{\"count\":10,\"lastSeenTime\":1586908054437},\"Perücke\":{\"count\":6,\"lastSeenTime\":1586955334605},\"Querflöte\":{\"count\":5,\"lastSeenTime\":1586921170820},\"Vogelspinne\":{\"count\":7,\"lastSeenTime\":1586908090329},\"Kinn\":{\"count\":5,\"lastSeenTime\":1586916063451,\"difficulty\":0.8666666666666667,\"difficultyWeight\":15},\"Spinat\":{\"count\":6,\"lastSeenTime\":1586959255115},\"Glocke\":{\"count\":7,\"lastSeenTime\":1586903888016},\"Bäckerei\":{\"count\":5,\"lastSeenTime\":1586921231641,\"difficulty\":1,\"difficultyWeight\":10},\"Seehund\":{\"count\":5,\"lastSeenTime\":1586959547988},\"Konfetti\":{\"count\":4,\"lastSeenTime\":1586919927137,\"difficulty\":1,\"difficultyWeight\":3},\"Pfote\":{\"count\":4,\"lastSeenTime\":1586869599214},\"Nordkorea\":{\"count\":5,\"lastSeenTime\":1586858711737},\"Schlittschuh\":{\"count\":5,\"lastSeenTime\":1586874687834},\"Wolverine\":{\"count\":6,\"lastSeenTime\":1586959429213},\"Drucker\":{\"count\":2,\"lastSeenTime\":1586713676145},\"Elektriker\":{\"count\":6,\"lastSeenTime\":1586959533143,\"difficulty\":1,\"difficultyWeight\":5},\"Hausmeister\":{\"count\":5,\"lastSeenTime\":1586958873120},\"Schneeball\":{\"count\":9,\"lastSeenTime\":1586920005337},\"Zebra\":{\"count\":4,\"lastSeenTime\":1586879903131,\"difficulty\":0.25,\"difficultyWeight\":8},\"Ladebalken\":{\"count\":6,\"lastSeenTime\":1586959218404,\"difficulty\":0.875,\"difficultyWeight\":8},\"Blutegel\":{\"count\":10,\"lastSeenTime\":1586920265574},\"Feuerwehrauto\":{\"count\":7,\"lastSeenTime\":1586873974505,\"difficulty\":0.8974358974358975,\"difficultyWeight\":39},\"Architekt\":{\"count\":2,\"lastSeenTime\":1586879685669,\"difficulty\":1,\"difficultyWeight\":4},\"Kabine\":{\"count\":4,\"lastSeenTime\":1586959850831},\"Waffe\":{\"count\":3,\"lastSeenTime\":1586895782227},\"Heizungskessel\":{\"count\":5,\"lastSeenTime\":1586913998392},\"Recycling\":{\"count\":1,\"lastSeenTime\":1586652085658},\"Narwal\":{\"count\":9,\"lastSeenTime\":1586920043786},\"Würfel\":{\"count\":5,\"lastSeenTime\":1586913696698},\"tropisch\":{\"count\":4,\"lastSeenTime\":1586908931787},\"Bügeleisen\":{\"count\":3,\"lastSeenTime\":1586955984837,\"difficulty\":1,\"difficultyWeight\":4},\"Militär\":{\"count\":2,\"lastSeenTime\":1586833977662},\"Motor\":{\"count\":5,\"lastSeenTime\":1586916288751},\"Diagramm\":{\"count\":4,\"lastSeenTime\":1586873676367},\"Katamaran\":{\"count\":5,\"lastSeenTime\":1586880408576},\"Windschutzscheibe\":{\"count\":3,\"lastSeenTime\":1586900587471},\"Bob\":{\"count\":6,\"lastSeenTime\":1586959279701,\"publicGameCount\":1,\"difficulty\":0.4166666666666667,\"difficultyWeight\":12},\"Scheibenwelt\":{\"count\":5,\"lastSeenTime\":1586908191616},\"Höhle\":{\"count\":7,\"lastSeenTime\":1586956253026,\"difficulty\":0.9090909090909091,\"difficultyWeight\":11},\"Werwolf\":{\"count\":5,\"lastSeenTime\":1586916430600,\"difficulty\":1,\"difficultyWeight\":14},\"Grapefruit\":{\"count\":3,\"lastSeenTime\":1586833416769},\"Waschmaschine\":{\"count\":7,\"lastSeenTime\":1586909094851},\"salto schlagen\":{\"count\":9,\"lastSeenTime\":1586958496125},\"Totenkopf\":{\"count\":4,\"lastSeenTime\":1586900436732,\"difficulty\":0.7391304347826086,\"difficultyWeight\":23},\"Gandalf\":{\"count\":6,\"lastSeenTime\":1586916690790},\"Spaten\":{\"count\":5,\"lastSeenTime\":1586915788288,\"difficulty\":0.7777777777777778,\"difficultyWeight\":9},\"Schlagzeug\":{\"count\":5,\"lastSeenTime\":1586920771641},\"Person\":{\"count\":7,\"lastSeenTime\":1586954914968,\"difficulty\":0.7586206896551724,\"difficultyWeight\":29},\"Büro\":{\"count\":5,\"lastSeenTime\":1586838842778},\"Ameise\":{\"count\":4,\"lastSeenTime\":1586959314784,\"difficulty\":0.7,\"difficultyWeight\":10},\"Nilpferd\":{\"count\":8,\"lastSeenTime\":1586958821795,\"difficulty\":0.9565217391304348,\"difficultyWeight\":46},\"Krabbe\":{\"count\":5,\"lastSeenTime\":1586954798444},\"Granatapfel\":{\"count\":8,\"lastSeenTime\":1586919460885},\"Tumor\":{\"count\":7,\"lastSeenTime\":1586908480352},\"Pi\":{\"count\":6,\"lastSeenTime\":1586915129381},\"Pferd\":{\"count\":2,\"lastSeenTime\":1586858562011},\"Textmarker\":{\"count\":2,\"lastSeenTime\":1586709415728,\"difficulty\":1,\"difficultyWeight\":12},\"Student\":{\"count\":4,\"lastSeenTime\":1586955542167},\"schwanger\":{\"count\":5,\"lastSeenTime\":1586955701781,\"difficulty\":1,\"difficultyWeight\":6},\"Gymnastik\":{\"count\":6,\"lastSeenTime\":1586955195086,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"Fackel\":{\"count\":4,\"lastSeenTime\":1586859593426},\"Essstäbchen\":{\"count\":4,\"lastSeenTime\":1586897115648,\"difficulty\":1,\"difficultyWeight\":3},\"Wellensittich\":{\"count\":7,\"lastSeenTime\":1586956070276},\"Wildnis\":{\"count\":3,\"lastSeenTime\":1586889432199},\"Strumpfhose\":{\"count\":5,\"lastSeenTime\":1586958934411,\"difficulty\":0.75,\"difficultyWeight\":12},\"Laktoseintoleranz\":{\"count\":4,\"lastSeenTime\":1586879349367},\"Knallfrosch\":{\"count\":3,\"lastSeenTime\":1586713746274},\"suchen\":{\"count\":4,\"lastSeenTime\":1586957960523},\"Eichel\":{\"count\":8,\"lastSeenTime\":1586903939910,\"difficulty\":0.9166666666666666,\"difficultyWeight\":48},\"Hose\":{\"count\":8,\"lastSeenTime\":1586959178759,\"difficulty\":0.45,\"difficultyWeight\":40},\"Brokkoli\":{\"count\":4,\"lastSeenTime\":1586955063993},\"Blitz\":{\"count\":8,\"lastSeenTime\":1586959522880,\"difficulty\":1,\"difficultyWeight\":5},\"Excalibur\":{\"count\":3,\"lastSeenTime\":1586908207834,\"difficulty\":0.75,\"difficultyWeight\":8},\"Creeper\":{\"count\":6,\"lastSeenTime\":1586833067061,\"difficulty\":0.7272727272727273,\"difficultyWeight\":11},\"Röstaroma\":{\"count\":7,\"lastSeenTime\":1586958335993},\"Sahne\":{\"count\":7,\"lastSeenTime\":1586959557107},\"abstrakt\":{\"count\":7,\"lastSeenTime\":1586915788288},\"Bagger\":{\"count\":8,\"lastSeenTime\":1586916579758},\"Dorf\":{\"count\":5,\"lastSeenTime\":1586955419506,\"difficulty\":0.92,\"difficultyWeight\":25},\"Mineralwasser\":{\"count\":6,\"lastSeenTime\":1586901647547,\"difficulty\":0.9166666666666666,\"difficultyWeight\":12},\"Regenwald\":{\"count\":3,\"lastSeenTime\":1586860432423},\"Frühlingsrolle\":{\"count\":5,\"lastSeenTime\":1586903034208},\"Abonnement\":{\"count\":5,\"lastSeenTime\":1586900318835,\"difficulty\":0.375,\"difficultyWeight\":8},\"Stubenhocker\":{\"count\":6,\"lastSeenTime\":1586895895138},\"berühren\":{\"count\":4,\"lastSeenTime\":1586958360375},\"Schraubenschlüssel\":{\"count\":1,\"lastSeenTime\":1586707602434},\"Kurzschluss\":{\"count\":4,\"lastSeenTime\":1586900212280},\"Jacke\":{\"count\":5,\"lastSeenTime\":1586955098414},\"Samen\":{\"count\":3,\"lastSeenTime\":1586868411733},\"Narr\":{\"count\":2,\"lastSeenTime\":1586895651423},\"Kronkorken\":{\"count\":3,\"lastSeenTime\":1586869743912},\"Blüte\":{\"count\":4,\"lastSeenTime\":1586827737429},\"Ladegerät\":{\"count\":5,\"lastSeenTime\":1586914932818},\"weinen\":{\"count\":6,\"lastSeenTime\":1586956070276,\"difficulty\":1,\"difficultyWeight\":3},\"Sau\":{\"count\":7,\"lastSeenTime\":1586920143399},\"obdachlos\":{\"count\":5,\"lastSeenTime\":1586879940075},\"Einbahnstraße\":{\"count\":3,\"lastSeenTime\":1586956384816},\"Stangenbrot\":{\"count\":1,\"lastSeenTime\":1586708591047},\"Odysseus\":{\"count\":4,\"lastSeenTime\":1586959492934},\"London Eye\":{\"count\":4,\"lastSeenTime\":1586955620355,\"difficulty\":0.75,\"difficultyWeight\":4},\"Hundehütte\":{\"count\":4,\"lastSeenTime\":1586913545993},\"Eisberg\":{\"count\":5,\"lastSeenTime\":1586915639271,\"difficulty\":0.7272727272727273,\"difficultyWeight\":11},\"Evolution\":{\"count\":4,\"lastSeenTime\":1586815367180,\"difficulty\":0.7857142857142857,\"difficultyWeight\":14},\"Beziehung\":{\"count\":9,\"lastSeenTime\":1586900559143},\"Koffer\":{\"count\":5,\"lastSeenTime\":1586954698858,\"difficulty\":0.8,\"difficultyWeight\":30},\"Meerenge\":{\"count\":8,\"lastSeenTime\":1586908583500,\"difficulty\":1,\"difficultyWeight\":8},\"Posaune\":{\"count\":4,\"lastSeenTime\":1586806917088},\"Sturm\":{\"count\":2,\"lastSeenTime\":1586920133284},\"Lächeln\":{\"count\":1,\"lastSeenTime\":1586708983645},\"Star Wars\":{\"count\":4,\"lastSeenTime\":1586919917033,\"difficulty\":0.42857142857142855,\"difficultyWeight\":7},\"Halskette\":{\"count\":5,\"lastSeenTime\":1586916655791},\"Spore\":{\"count\":4,\"lastSeenTime\":1586890203054,\"difficulty\":1,\"difficultyWeight\":7},\"Ass\":{\"count\":6,\"lastSeenTime\":1586916655791},\"Böller\":{\"count\":3,\"lastSeenTime\":1586919511658,\"difficulty\":1,\"difficultyWeight\":6},\"Flohmarkt\":{\"count\":5,\"lastSeenTime\":1586957837428},\"Einkaufszentrum\":{\"count\":4,\"lastSeenTime\":1586909133282,\"difficulty\":1,\"difficultyWeight\":7},\"Locher\":{\"count\":3,\"lastSeenTime\":1586889772751},\"Fliege\":{\"count\":4,\"lastSeenTime\":1586827275317,\"difficulty\":0.75,\"difficultyWeight\":8},\"Kastanie\":{\"count\":5,\"lastSeenTime\":1586921057562},\"Kernkraftwerk\":{\"count\":5,\"lastSeenTime\":1586915354278},\"Wäschespinne\":{\"count\":4,\"lastSeenTime\":1586907778315},\"Strohhalm\":{\"count\":6,\"lastSeenTime\":1586901264460},\"Räuber\":{\"count\":5,\"lastSeenTime\":1586958596468},\"Mönch\":{\"count\":5,\"lastSeenTime\":1586868078333},\"Deutschland\":{\"count\":7,\"lastSeenTime\":1586921231641,\"difficulty\":0.75,\"difficultyWeight\":8},\"Schleuder\":{\"count\":3,\"lastSeenTime\":1586903624140,\"difficulty\":0.5625,\"difficultyWeight\":32},\"Terminator\":{\"count\":5,\"lastSeenTime\":1586959090713},\"Beatbox\":{\"count\":4,\"lastSeenTime\":1586956273734,\"difficulty\":0.8333333333333334,\"difficultyWeight\":12},\"Miss Piggy\":{\"count\":6,\"lastSeenTime\":1586920153587},\"Facebook\":{\"count\":6,\"lastSeenTime\":1586816946669},\"Schreibschrift\":{\"count\":3,\"lastSeenTime\":1586920326688,\"publicGameCount\":1,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Katalog\":{\"count\":3,\"lastSeenTime\":1586921008446},\"Gasmaske\":{\"count\":4,\"lastSeenTime\":1586901500696},\"Arbeiter\":{\"count\":2,\"lastSeenTime\":1586913698511},\"Mädchen\":{\"count\":7,\"lastSeenTime\":1586958510664},\"Restaurant\":{\"count\":3,\"lastSeenTime\":1586954953467},\"Achsel\":{\"count\":7,\"lastSeenTime\":1586955923939,\"difficulty\":0.5,\"difficultyWeight\":6},\"Burrito\":{\"count\":6,\"lastSeenTime\":1586908686991,\"difficulty\":0.9411764705882353,\"difficultyWeight\":34},\"Lederhose\":{\"count\":2,\"lastSeenTime\":1586891124151},\"UFO\":{\"count\":2,\"lastSeenTime\":1586867998752,\"difficulty\":0.5,\"difficultyWeight\":14},\"See\":{\"count\":9,\"lastSeenTime\":1586955310334,\"difficulty\":1,\"difficultyWeight\":13},\"Vogelbeere\":{\"count\":5,\"lastSeenTime\":1586903221605},\"Gipfelkreuz\":{\"count\":6,\"lastSeenTime\":1586954989864},\"Hai\":{\"count\":6,\"lastSeenTime\":1586954808666},\"grinsen\":{\"count\":6,\"lastSeenTime\":1586916288751,\"difficulty\":0.3333333333333333,\"difficultyWeight\":6},\"Youtube\":{\"count\":5,\"lastSeenTime\":1586954641977},\"Aufzug\":{\"count\":4,\"lastSeenTime\":1586921156587},\"Internet\":{\"count\":3,\"lastSeenTime\":1586869993172},\"Apfelkern\":{\"count\":2,\"lastSeenTime\":1586727732259},\"Leiterbahn\":{\"count\":2,\"lastSeenTime\":1586956504597,\"difficulty\":1,\"difficultyWeight\":6},\"Stephen Hawking\":{\"count\":3,\"lastSeenTime\":1586907532918},\"Topf\":{\"count\":7,\"lastSeenTime\":1586902587809},\"Degen\":{\"count\":5,\"lastSeenTime\":1586897394573},\"Zahnbürste\":{\"count\":12,\"lastSeenTime\":1586914806527,\"difficulty\":0.8518518518518519,\"difficultyWeight\":27},\"knien\":{\"count\":3,\"lastSeenTime\":1586955195086},\"Geschäft\":{\"count\":5,\"lastSeenTime\":1586959804291,\"difficulty\":0.8571428571428571,\"difficultyWeight\":7},\"Marge Simpson\":{\"count\":8,\"lastSeenTime\":1586956516194,\"difficulty\":0.5,\"difficultyWeight\":6},\"Stoppschild\":{\"count\":6,\"lastSeenTime\":1586901606974},\"CO2\":{\"count\":3,\"lastSeenTime\":1586957989157,\"difficulty\":1,\"difficultyWeight\":3},\"Schlacht\":{\"count\":5,\"lastSeenTime\":1586957863554},\"Wurzel\":{\"count\":2,\"lastSeenTime\":1586903877862},\"Jazz\":{\"count\":3,\"lastSeenTime\":1586901284755},\"Margarine\":{\"count\":4,\"lastSeenTime\":1586813965844},\"asymmetrisch\":{\"count\":4,\"lastSeenTime\":1586891113896},\"Natur\":{\"count\":3,\"lastSeenTime\":1586839235965,\"difficulty\":1,\"difficultyWeight\":7},\"Kamin\":{\"count\":3,\"lastSeenTime\":1586903750797},\"Vulkan\":{\"count\":3,\"lastSeenTime\":1586815464569,\"difficulty\":0.75,\"difficultyWeight\":52},\"read\":{\"count\":1,\"lastSeenTime\":1586711191040,\"difficulty\":0.9333333333333333,\"difficultyWeight\":15},\"verschwinden\":{\"count\":8,\"lastSeenTime\":1586904051087},\"skull\":{\"count\":1,\"lastSeenTime\":1586711214119,\"difficulty\":0.8666666666666667,\"difficultyWeight\":15},\"Vermieter\":{\"count\":3,\"lastSeenTime\":1586838964600},\"tennis\":{\"count\":1,\"lastSeenTime\":1586711276270,\"difficulty\":0.6470588235294117,\"difficultyWeight\":17},\"axe\":{\"count\":1,\"lastSeenTime\":1586711304408,\"difficulty\":0.8823529411764706,\"difficultyWeight\":17},\"book\":{\"count\":1,\"lastSeenTime\":1586711308520},\"glass\":{\"count\":1,\"lastSeenTime\":1586711308520},\"Sprungturm\":{\"count\":6,\"lastSeenTime\":1586955074091},\"Professor\":{\"count\":5,\"lastSeenTime\":1586880438207},\"Spion\":{\"count\":2,\"lastSeenTime\":1586859922496},\"Säure\":{\"count\":5,\"lastSeenTime\":1586916717644},\"Sonntag\":{\"count\":2,\"lastSeenTime\":1586915048330},\"Kendama\":{\"count\":6,\"lastSeenTime\":1586921057562},\"Montag\":{\"count\":6,\"lastSeenTime\":1586954688633},\"Brusthaare\":{\"count\":7,\"lastSeenTime\":1586879731749},\"Brause\":{\"count\":6,\"lastSeenTime\":1586916600438},\"verletzt\":{\"count\":7,\"lastSeenTime\":1586919511658,\"difficulty\":1,\"difficultyWeight\":17},\"Specht\":{\"count\":5,\"lastSeenTime\":1586827905301},\"Nuss\":{\"count\":2,\"lastSeenTime\":1586840446597,\"difficulty\":1,\"difficultyWeight\":7},\"Skype\":{\"count\":4,\"lastSeenTime\":1586958611285},\"Rasensprenger\":{\"count\":6,\"lastSeenTime\":1586914526456,\"difficulty\":0.875,\"difficultyWeight\":8},\"Indianer\":{\"count\":2,\"lastSeenTime\":1586718330257},\"Geschenk\":{\"count\":6,\"lastSeenTime\":1586903400691,\"difficulty\":0.8181818181818182,\"difficultyWeight\":11},\"Einstein\":{\"count\":1,\"lastSeenTime\":1586712023064,\"difficulty\":1,\"difficultyWeight\":5},\"Kennzeichen\":{\"count\":3,\"lastSeenTime\":1586955644812,\"difficulty\":1,\"difficultyWeight\":13},\"Baby\":{\"count\":4,\"lastSeenTime\":1586920843703},\"Pasta\":{\"count\":2,\"lastSeenTime\":1586839545523},\"Pistazie\":{\"count\":4,\"lastSeenTime\":1586915741689},\"niesen\":{\"count\":5,\"lastSeenTime\":1586903059681,\"difficulty\":0.9807692307692307,\"difficultyWeight\":52},\"Nadel\":{\"count\":3,\"lastSeenTime\":1586921022722},\"Biotonne\":{\"count\":2,\"lastSeenTime\":1586896127512},\"Pinzette\":{\"count\":4,\"lastSeenTime\":1586869906740},\"Notizbuch\":{\"count\":3,\"lastSeenTime\":1586833628220},\"krank\":{\"count\":6,\"lastSeenTime\":1586908611825},\"Klavier\":{\"count\":4,\"lastSeenTime\":1586908707244},\"Salat\":{\"count\":3,\"lastSeenTime\":1586813485208},\"Geologe\":{\"count\":6,\"lastSeenTime\":1586919640209,\"difficulty\":1,\"difficultyWeight\":6},\"Trampolin\":{\"count\":2,\"lastSeenTime\":1586813624926,\"difficulty\":0.8,\"difficultyWeight\":5},\"Iron Giant\":{\"count\":5,\"lastSeenTime\":1586890368170},\"sinken\":{\"count\":4,\"lastSeenTime\":1586908079268,\"difficulty\":0.625,\"difficultyWeight\":8},\"Schaufel\":{\"count\":3,\"lastSeenTime\":1586958062580},\"Soße\":{\"count\":5,\"lastSeenTime\":1586869017466},\"Stöpsel\":{\"count\":3,\"lastSeenTime\":1586827250323},\"Operation\":{\"count\":2,\"lastSeenTime\":1586958755749},\"Litfaßsäule\":{\"count\":5,\"lastSeenTime\":1586812468912},\"Soldat\":{\"count\":6,\"lastSeenTime\":1586903634298,\"difficulty\":0.7272727272727273,\"difficultyWeight\":11},\"Karneval\":{\"count\":7,\"lastSeenTime\":1586908518895},\"Küche\":{\"count\":7,\"lastSeenTime\":1586916063451,\"difficulty\":1,\"difficultyWeight\":9},\"Olive\":{\"count\":2,\"lastSeenTime\":1586900473463,\"difficulty\":1,\"difficultyWeight\":14},\"Regenschirm\":{\"count\":2,\"lastSeenTime\":1586901225801,\"difficulty\":0.631578947368421,\"difficultyWeight\":19},\"Rückgrat\":{\"count\":5,\"lastSeenTime\":1586897383053},\"Eisverkäufer\":{\"count\":2,\"lastSeenTime\":1586900763534,\"difficulty\":0.6818181818181818,\"difficultyWeight\":22},\"Sicherheitsnadel\":{\"count\":1,\"lastSeenTime\":1586713732056},\"Merkur\":{\"count\":6,\"lastSeenTime\":1586954641977},\"Buntstift\":{\"count\":8,\"lastSeenTime\":1586958200965,\"difficulty\":1,\"difficultyWeight\":9},\"Achteck\":{\"count\":5,\"lastSeenTime\":1586900212280,\"publicGameCount\":1,\"difficulty\":0.5833333333333333,\"difficultyWeight\":12},\"Gurke\":{\"count\":9,\"lastSeenTime\":1586955037756},\"Zitrone\":{\"count\":3,\"lastSeenTime\":1586826941060},\"Nacken\":{\"count\":3,\"lastSeenTime\":1586913816802,\"difficulty\":0.7,\"difficultyWeight\":10},\"Film\":{\"count\":6,\"lastSeenTime\":1586959622590},\"Kind\":{\"count\":6,\"lastSeenTime\":1586920771641},\"weiß\":{\"count\":5,\"lastSeenTime\":1586907500591,\"difficulty\":0.5,\"difficultyWeight\":6},\"Totem\":{\"count\":4,\"lastSeenTime\":1586913962978,\"difficulty\":0.3333333333333333,\"difficultyWeight\":3},\"trainieren\":{\"count\":10,\"lastSeenTime\":1586958200965},\"Sturz\":{\"count\":4,\"lastSeenTime\":1586919522211},\"Cheerleader\":{\"count\":5,\"lastSeenTime\":1586916277356},\"Adidas\":{\"count\":4,\"lastSeenTime\":1586869335019,\"publicGameCount\":1},\"Fritten\":{\"count\":3,\"lastSeenTime\":1586955344691},\"kiffen\":{\"count\":7,\"lastSeenTime\":1586896912568},\"Schweden\":{\"count\":3,\"lastSeenTime\":1586921059401},\"Gelee\":{\"count\":6,\"lastSeenTime\":1586915478982},\"Gentleman\":{\"count\":2,\"lastSeenTime\":1586869144958},\"Kobra\":{\"count\":6,\"lastSeenTime\":1586913497512,\"difficulty\":0.5517241379310345,\"difficultyWeight\":29},\"BMW\":{\"count\":3,\"lastSeenTime\":1586908017512,\"difficulty\":1,\"difficultyWeight\":14},\"Feld\":{\"count\":6,\"lastSeenTime\":1586955569169},\"Athlet\":{\"count\":3,\"lastSeenTime\":1586859853848},\"Würfelqualle\":{\"count\":4,\"lastSeenTime\":1586901839909},\"Gekritzel\":{\"count\":5,\"lastSeenTime\":1586920954248},\"Birne\":{\"count\":7,\"lastSeenTime\":1586908763208},\"Wespe\":{\"count\":4,\"lastSeenTime\":1586908432802,\"difficulty\":0.75,\"difficultyWeight\":24},\"Karussell\":{\"count\":5,\"lastSeenTime\":1586909155516},\"Schwein\":{\"count\":4,\"lastSeenTime\":1586921043126},\"Hochzeit\":{\"count\":5,\"lastSeenTime\":1586958299322},\"Äffchen\":{\"count\":2,\"lastSeenTime\":1586827841092},\"Inlineskates\":{\"count\":4,\"lastSeenTime\":1586919487290,\"difficulty\":0.9,\"difficultyWeight\":10},\"Wetterfrosch\":{\"count\":4,\"lastSeenTime\":1586904262976},\"Taxifahrer\":{\"count\":8,\"lastSeenTime\":1586955999033},\"Einschränkung\":{\"count\":5,\"lastSeenTime\":1586959522880},\"verwirrt\":{\"count\":2,\"lastSeenTime\":1586900387786},\"flüssig\":{\"count\":2,\"lastSeenTime\":1586875135071},\"Schauspieler\":{\"count\":6,\"lastSeenTime\":1586900278764},\"U-Boot\":{\"count\":3,\"lastSeenTime\":1586834009704},\"Mandel\":{\"count\":1,\"lastSeenTime\":1586723339566},\"Dynamit\":{\"count\":6,\"lastSeenTime\":1586908165354},\"Weihnachtsmann\":{\"count\":7,\"lastSeenTime\":1586915609902,\"difficulty\":0.25,\"difficultyWeight\":8},\"Mantel\":{\"count\":6,\"lastSeenTime\":1586919610641,\"difficulty\":0.125,\"difficultyWeight\":8},\"Zahnstein\":{\"count\":3,\"lastSeenTime\":1586899955403},\"tauchen\":{\"count\":3,\"lastSeenTime\":1586915089601},\"Westen\":{\"count\":7,\"lastSeenTime\":1586954939261,\"difficulty\":0.55,\"difficultyWeight\":20},\"Zwischendecke\":{\"count\":6,\"lastSeenTime\":1586959429213},\"Pepsi\":{\"count\":3,\"lastSeenTime\":1586908646355},\"Busfahrer\":{\"count\":4,\"lastSeenTime\":1586858858134},\"Ringelschwanz\":{\"count\":3,\"lastSeenTime\":1586896203705},\"aufwerten\":{\"count\":5,\"lastSeenTime\":1586956130879},\"Efeu\":{\"count\":7,\"lastSeenTime\":1586921256075},\"Knoblauch\":{\"count\":3,\"lastSeenTime\":1586916717644},\"Meteorologe\":{\"count\":5,\"lastSeenTime\":1586818368744,\"difficulty\":1,\"difficultyWeight\":6},\"Nachtisch\":{\"count\":5,\"lastSeenTime\":1586958037635},\"Warze\":{\"count\":3,\"lastSeenTime\":1586904186629,\"difficulty\":1,\"difficultyWeight\":7},\"Pu der Bär\":{\"count\":2,\"lastSeenTime\":1586726449700},\"Bauarbeiter\":{\"count\":7,\"lastSeenTime\":1586956384816},\"Programmierer\":{\"count\":4,\"lastSeenTime\":1586915985961},\"Angebot\":{\"count\":5,\"lastSeenTime\":1586903048902},\"Stau\":{\"count\":4,\"lastSeenTime\":1586916579758},\"Antivirus\":{\"count\":2,\"lastSeenTime\":1586805694894},\"Anzeige\":{\"count\":8,\"lastSeenTime\":1586916141879},\"Museum\":{\"count\":2,\"lastSeenTime\":1586914491372,\"difficulty\":0.8809523809523809,\"difficultyWeight\":42},\"Anakonda\":{\"count\":6,\"lastSeenTime\":1586954763962},\"Suezkanal\":{\"count\":4,\"lastSeenTime\":1586868821062},\"Terrarium\":{\"count\":3,\"lastSeenTime\":1586840867744},\"Äquator\":{\"count\":3,\"lastSeenTime\":1586919413397},\"Zecke\":{\"count\":3,\"lastSeenTime\":1586889746630},\"Haarspray\":{\"count\":4,\"lastSeenTime\":1586916252219},\"Golf\":{\"count\":2,\"lastSeenTime\":1586959232575},\"Island\":{\"count\":4,\"lastSeenTime\":1586956215415},\"Simon and Garfunkel\":{\"count\":3,\"lastSeenTime\":1586832474075},\"Zebrastreifen\":{\"count\":4,\"lastSeenTime\":1586880491865},\"spülen\":{\"count\":4,\"lastSeenTime\":1586955249129,\"difficulty\":0.625,\"difficultyWeight\":8},\"Mundharmonika\":{\"count\":6,\"lastSeenTime\":1586909211843},\"fliegen\":{\"count\":3,\"lastSeenTime\":1586921283836,\"difficulty\":0.8571428571428571,\"difficultyWeight\":14},\"begrüßen\":{\"count\":4,\"lastSeenTime\":1586920029620,\"difficulty\":1,\"difficultyWeight\":6},\"Vanille\":{\"count\":3,\"lastSeenTime\":1586812607253},\"Emu\":{\"count\":3,\"lastSeenTime\":1586873739947},\"Gangster\":{\"count\":4,\"lastSeenTime\":1586815888370},\"Krümelmonster\":{\"count\":5,\"lastSeenTime\":1586868628439,\"difficulty\":0.8666666666666667,\"difficultyWeight\":15},\"Skilift\":{\"count\":5,\"lastSeenTime\":1586913545993},\"Verlierer\":{\"count\":5,\"lastSeenTime\":1586869966082},\"Gumball\":{\"count\":4,\"lastSeenTime\":1586958668588},\"Uhr\":{\"count\":4,\"lastSeenTime\":1586958907689,\"difficulty\":0.33333333333333337,\"difficultyWeight\":9},\"Kebab\":{\"count\":6,\"lastSeenTime\":1586919750850,\"difficulty\":1,\"difficultyWeight\":4},\"Tiger\":{\"count\":4,\"lastSeenTime\":1586907863533},\"Journalist\":{\"count\":4,\"lastSeenTime\":1586896644364},\"Finn\":{\"count\":2,\"lastSeenTime\":1586914991061},\"Salami\":{\"count\":6,\"lastSeenTime\":1586907900355},\"Pendel\":{\"count\":6,\"lastSeenTime\":1586957974879},\"Wettervorhersage\":{\"count\":6,\"lastSeenTime\":1586919664805},\"Stempel\":{\"count\":3,\"lastSeenTime\":1586879283630},\"Bettdecke\":{\"count\":6,\"lastSeenTime\":1586916168548,\"difficulty\":0.8461538461538461,\"difficultyWeight\":13},\"Halskrause\":{\"count\":5,\"lastSeenTime\":1586904384265},\"Albatros\":{\"count\":4,\"lastSeenTime\":1586956552197},\"Bücherwurm\":{\"count\":1,\"lastSeenTime\":1586727461944},\"Mikroskop\":{\"count\":5,\"lastSeenTime\":1586958012186},\"Läufer\":{\"count\":6,\"lastSeenTime\":1586959767498},\"Creme\":{\"count\":6,\"lastSeenTime\":1586901152323},\"Libelle\":{\"count\":4,\"lastSeenTime\":1586839691166,\"difficulty\":1,\"difficultyWeight\":8},\"Segelboot\":{\"count\":3,\"lastSeenTime\":1586840135568,\"difficulty\":1,\"difficultyWeight\":39},\"Hängebauchschwein\":{\"count\":4,\"lastSeenTime\":1586908395891},\"Radiergummi\":{\"count\":5,\"lastSeenTime\":1586916252219},\"Bumerang\":{\"count\":3,\"lastSeenTime\":1586873278128},\"schwindelig\":{\"count\":6,\"lastSeenTime\":1586920108914},\"Ohrwurm\":{\"count\":2,\"lastSeenTime\":1586814854011},\"Schwamm\":{\"count\":4,\"lastSeenTime\":1586920926700},\"flüstern\":{\"count\":3,\"lastSeenTime\":1586903447898},\"Modedesigner\":{\"count\":5,\"lastSeenTime\":1586958239433},\"Hip Hop\":{\"count\":2,\"lastSeenTime\":1586813888653,\"difficulty\":0.8,\"difficultyWeight\":10},\"Cocktail\":{\"count\":5,\"lastSeenTime\":1586915139518},\"sperren\":{\"count\":3,\"lastSeenTime\":1586839270292},\"Mount Everest\":{\"count\":4,\"lastSeenTime\":1586957925802},\"Puppenhaus\":{\"count\":3,\"lastSeenTime\":1586879335186},\"Jetski\":{\"count\":3,\"lastSeenTime\":1586904223932},\"Holzscheit\":{\"count\":6,\"lastSeenTime\":1586890178799},\"Zahnspange\":{\"count\":3,\"lastSeenTime\":1586915974465,\"difficulty\":1,\"difficultyWeight\":5},\"Florida\":{\"count\":3,\"lastSeenTime\":1586896941227,\"difficulty\":0.8,\"difficultyWeight\":5},\"Lorbeeren\":{\"count\":3,\"lastSeenTime\":1586890464755},\"Zirkusdirektor\":{\"count\":3,\"lastSeenTime\":1586817544108,\"difficulty\":0.5555555555555556,\"difficultyWeight\":9},\"Steuergerät\":{\"count\":2,\"lastSeenTime\":1586784694118},\"Shrek\":{\"count\":6,\"lastSeenTime\":1586916342434},\"copy\":{\"count\":1,\"lastSeenTime\":1586783576683,\"difficulty\":0.5,\"difficultyWeight\":8},\"blood\":{\"count\":1,\"lastSeenTime\":1586783594582,\"difficulty\":0.6,\"difficultyWeight\":5},\"Farn\":{\"count\":5,\"lastSeenTime\":1586919722216},\"eclipse\":{\"count\":1,\"lastSeenTime\":1586783732447,\"difficulty\":0.9411764705882353,\"difficultyWeight\":34},\"palm tree\":{\"count\":1,\"lastSeenTime\":1586783812435,\"difficulty\":0.5,\"difficultyWeight\":12},\"AC/DC\":{\"count\":5,\"lastSeenTime\":1586958154127},\"Schlafanzug\":{\"count\":2,\"lastSeenTime\":1586813334338},\"Teig\":{\"count\":8,\"lastSeenTime\":1586919287618},\"Kegel\":{\"count\":3,\"lastSeenTime\":1586954910317},\"Hamburger\":{\"count\":4,\"lastSeenTime\":1586914590565,\"difficulty\":0.8928571428571429,\"difficultyWeight\":28},\"Stecknadel\":{\"count\":6,\"lastSeenTime\":1586907609327},\"Invasion\":{\"count\":3,\"lastSeenTime\":1586873772670},\"klebrig\":{\"count\":3,\"lastSeenTime\":1586895452509},\"Flamingo\":{\"count\":4,\"lastSeenTime\":1586908104595,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Orange\":{\"count\":4,\"lastSeenTime\":1586890743822,\"difficulty\":0.9,\"difficultyWeight\":40},\"Ball\":{\"count\":2,\"lastSeenTime\":1586840879616},\"Becken\":{\"count\":5,\"lastSeenTime\":1586958547642,\"difficulty\":1,\"difficultyWeight\":8},\"Verpackung\":{\"count\":3,\"lastSeenTime\":1586815146910},\"Bogenschütze\":{\"count\":3,\"lastSeenTime\":1586920143399},\"versöhnen\":{\"count\":6,\"lastSeenTime\":1586959830012},\"Rampe\":{\"count\":3,\"lastSeenTime\":1586903111992},\"Bronze\":{\"count\":5,\"lastSeenTime\":1586959585641},\"Wohlstand\":{\"count\":4,\"lastSeenTime\":1586914991061},\"Dessert\":{\"count\":3,\"lastSeenTime\":1586903011803},\"Bowling\":{\"count\":4,\"lastSeenTime\":1586914615571},\"Animation\":{\"count\":4,\"lastSeenTime\":1586840045031},\"Fitness Trainer\":{\"count\":6,\"lastSeenTime\":1586956462502},\"Hydrant\":{\"count\":4,\"lastSeenTime\":1586959342619,\"difficulty\":1,\"difficultyWeight\":1},\"Alligator\":{\"count\":6,\"lastSeenTime\":1586919958324},\"Atom\":{\"count\":5,\"lastSeenTime\":1586959076238},\"farbenblind\":{\"count\":2,\"lastSeenTime\":1586814501266},\"erfrieren\":{\"count\":1,\"lastSeenTime\":1586805684110},\"Tails\":{\"count\":1,\"lastSeenTime\":1586805694893},\"Staudamm\":{\"count\":2,\"lastSeenTime\":1586901547884},\"Pfütze\":{\"count\":3,\"lastSeenTime\":1586895782227},\"Engel\":{\"count\":2,\"lastSeenTime\":1586956582710},\"Wunderlampe\":{\"count\":4,\"lastSeenTime\":1586869345288,\"difficulty\":1,\"difficultyWeight\":7},\"Fechten\":{\"count\":4,\"lastSeenTime\":1586954989864},\"Gas\":{\"count\":5,\"lastSeenTime\":1586920226877},\"Kunde\":{\"count\":4,\"lastSeenTime\":1586955456078},\"Zelda\":{\"count\":2,\"lastSeenTime\":1586880631457},\"Atomuhr\":{\"count\":3,\"lastSeenTime\":1586873715364},\"Realität\":{\"count\":4,\"lastSeenTime\":1586839250104},\"Feuerwache\":{\"count\":5,\"lastSeenTime\":1586959304612},\"Schnee\":{\"count\":5,\"lastSeenTime\":1586958769937,\"difficulty\":0.7777777777777778,\"difficultyWeight\":9},\"Altweibersommer\":{\"count\":3,\"lastSeenTime\":1586859631642},\"Asterix\":{\"count\":4,\"lastSeenTime\":1586959557107},\"Bingo\":{\"count\":7,\"lastSeenTime\":1586954925078},\"Rosine\":{\"count\":5,\"lastSeenTime\":1586919750850},\"Koala\":{\"count\":5,\"lastSeenTime\":1586958350172},\"Propeller\":{\"count\":6,\"lastSeenTime\":1586915200929},\"hüpfen\":{\"count\":6,\"lastSeenTime\":1586959753084},\"Blatt\":{\"count\":2,\"lastSeenTime\":1586920407752},\"Asche\":{\"count\":2,\"lastSeenTime\":1586958413299},\"Tau\":{\"count\":4,\"lastSeenTime\":1586908368588},\"Seewolf\":{\"count\":2,\"lastSeenTime\":1586955999033},\"Minigolf\":{\"count\":2,\"lastSeenTime\":1586815692372},\"smell\":{\"count\":1,\"lastSeenTime\":1586813203038,\"difficulty\":0.45454545454545453,\"difficultyWeight\":11},\"sunglasses\":{\"count\":1,\"lastSeenTime\":1586813258085,\"difficulty\":0.7272727272727273,\"difficultyWeight\":11},\"waist\":{\"count\":1,\"lastSeenTime\":1586813304541,\"difficulty\":0.2222222222222222,\"difficultyWeight\":9},\"compass\":{\"count\":1,\"lastSeenTime\":1586813320650,\"difficulty\":1,\"difficultyWeight\":9},\"drinnen\":{\"count\":3,\"lastSeenTime\":1586874931565},\"Sprecher\":{\"count\":3,\"lastSeenTime\":1586890093454},\"flashlight\":{\"count\":1,\"lastSeenTime\":1586813394246,\"difficulty\":0.4444444444444444,\"difficultyWeight\":9},\"Fußende\":{\"count\":5,\"lastSeenTime\":1586915406529},\"Rasierer\":{\"count\":3,\"lastSeenTime\":1586901284755,\"difficulty\":0.9375,\"difficultyWeight\":32},\"Turm\":{\"count\":1,\"lastSeenTime\":1586813676447},\"Bürgermeister\":{\"count\":2,\"lastSeenTime\":1586816602699,\"difficulty\":1,\"difficultyWeight\":5},\"Esel\":{\"count\":4,\"lastSeenTime\":1586958350172,\"difficulty\":1,\"difficultyWeight\":8},\"Meme\":{\"count\":2,\"lastSeenTime\":1586833304748,\"difficulty\":0.625,\"difficultyWeight\":16},\"Horizont\":{\"count\":2,\"lastSeenTime\":1586914638481},\"schnorcheln\":{\"count\":4,\"lastSeenTime\":1586903429291},\"Abschluss\":{\"count\":2,\"lastSeenTime\":1586868207231},\"Belgien\":{\"count\":4,\"lastSeenTime\":1586909070561,\"difficulty\":0.5555555555555556,\"difficultyWeight\":9},\"Grille\":{\"count\":1,\"lastSeenTime\":1586814301944},\"Meeresfrüchte\":{\"count\":7,\"lastSeenTime\":1586904308260},\"sea\":{\"count\":1,\"lastSeenTime\":1586814732814,\"difficulty\":1,\"difficultyWeight\":2},\"Jesus Christ\":{\"count\":1,\"lastSeenTime\":1586814734854},\"cell\":{\"count\":1,\"lastSeenTime\":1586814734854},\"Schach\":{\"count\":5,\"lastSeenTime\":1586959443697,\"difficulty\":0.8484848484848485,\"difficultyWeight\":33},\"Schädel\":{\"count\":3,\"lastSeenTime\":1586880722993,\"difficulty\":0.7333333333333333,\"difficultyWeight\":15},\"Delfin\":{\"count\":1,\"lastSeenTime\":1586815327708,\"difficulty\":0.7142857142857143,\"difficultyWeight\":7},\"mother\":{\"count\":1,\"lastSeenTime\":1586815477720,\"difficulty\":0.8444444444444444,\"difficultyWeight\":45},\"wart\":{\"count\":1,\"lastSeenTime\":1586815533308,\"difficulty\":1,\"difficultyWeight\":10},\"cone\":{\"count\":1,\"lastSeenTime\":1586815591945,\"difficulty\":0.9,\"difficultyWeight\":10},\"sneeze\":{\"count\":1,\"lastSeenTime\":1586815651308,\"difficulty\":0.6923076923076923,\"difficultyWeight\":13},\"rice\":{\"count\":1,\"lastSeenTime\":1586815683909,\"difficulty\":0.6923076923076923,\"difficultyWeight\":13},\"Anfänger\":{\"count\":3,\"lastSeenTime\":1586955999033},\"kochen\":{\"count\":2,\"lastSeenTime\":1586955569169,\"difficulty\":1,\"difficultyWeight\":3},\"westlich\":{\"count\":1,\"lastSeenTime\":1586816279864},\"Burgruine\":{\"count\":1,\"lastSeenTime\":1586816334630},\"Gandhi\":{\"count\":3,\"lastSeenTime\":1586955334605},\"Haarschnitt\":{\"count\":5,\"lastSeenTime\":1586914820916},\"Planet\":{\"count\":3,\"lastSeenTime\":1586909201701,\"difficulty\":0.8,\"difficultyWeight\":20},\"Nessie\":{\"count\":2,\"lastSeenTime\":1586839320824},\"Kim Kardashian\":{\"count\":3,\"lastSeenTime\":1586859216557},\"Widerstand\":{\"count\":2,\"lastSeenTime\":1586839211738},\"Lebkuchen\":{\"count\":3,\"lastSeenTime\":1586897469693},\"Genie\":{\"count\":3,\"lastSeenTime\":1586900436732},\"Tyrannosaurus Rex\":{\"count\":2,\"lastSeenTime\":1586956352310},\"grün\":{\"count\":4,\"lastSeenTime\":1586907557164},\"Flash\":{\"count\":2,\"lastSeenTime\":1586909155516},\"Zorro\":{\"count\":3,\"lastSeenTime\":1586859604461},\"Kommunismus\":{\"count\":3,\"lastSeenTime\":1586915919352},\"Camping\":{\"count\":3,\"lastSeenTime\":1586900977668,\"difficulty\":1,\"difficultyWeight\":9},\"Vogelhaus\":{\"count\":2,\"lastSeenTime\":1586890938315,\"difficulty\":0.5714285714285714,\"difficultyWeight\":7},\"Ritter\":{\"count\":3,\"lastSeenTime\":1586915741689},\"Brocken\":{\"count\":5,\"lastSeenTime\":1586958253918},\"Krankheit\":{\"count\":3,\"lastSeenTime\":1586914119532,\"difficulty\":1,\"difficultyWeight\":8},\"Teelöffel\":{\"count\":5,\"lastSeenTime\":1586921104275,\"difficulty\":1,\"difficultyWeight\":3},\"Kaltwachsstreifen\":{\"count\":4,\"lastSeenTime\":1586916127462},\"Keim\":{\"count\":2,\"lastSeenTime\":1586909311071},\"Jahrbuch\":{\"count\":1,\"lastSeenTime\":1586827501149,\"difficulty\":1,\"difficultyWeight\":1},\"verrückt\":{\"count\":1,\"lastSeenTime\":1586827603168},\"Gewalt\":{\"count\":4,\"lastSeenTime\":1586916540283},\"Hüpfkästchen\":{\"count\":3,\"lastSeenTime\":1586870007658},\"Kerzenständer\":{\"count\":3,\"lastSeenTime\":1586860109145},\"Zauberstab\":{\"count\":4,\"lastSeenTime\":1586956324955},\"Telefonkabel\":{\"count\":3,\"lastSeenTime\":1586915048330},\"Filmemacher\":{\"count\":3,\"lastSeenTime\":1586958611285,\"difficulty\":1,\"difficultyWeight\":2},\"Spielplatz\":{\"count\":2,\"lastSeenTime\":1586904412233},\"Ohrenschmalz\":{\"count\":1,\"lastSeenTime\":1586839211738,\"difficulty\":0.8888888888888888,\"difficultyWeight\":9},\"Kerzenleuchter\":{\"count\":2,\"lastSeenTime\":1586958572090},\"Winter\":{\"count\":2,\"lastSeenTime\":1586915225560,\"difficulty\":0.6153846153846154,\"difficultyWeight\":13},\"Chef\":{\"count\":5,\"lastSeenTime\":1586920932924},\"iPhone\":{\"count\":5,\"lastSeenTime\":1586958596468},\"Chrome\":{\"count\":1,\"lastSeenTime\":1586840244704,\"difficulty\":0.75,\"difficultyWeight\":8},\"Speichel\":{\"count\":2,\"lastSeenTime\":1586873812676},\"Ratte\":{\"count\":2,\"lastSeenTime\":1586889601390},\"Grill\":{\"count\":2,\"lastSeenTime\":1586896066306},\"Prisma\":{\"count\":2,\"lastSeenTime\":1586920346900},\"Orca\":{\"count\":1,\"lastSeenTime\":1586859539297},\"Sicherung\":{\"count\":5,\"lastSeenTime\":1586920397655},\"Sandbank\":{\"count\":2,\"lastSeenTime\":1586869853196},\"Nachthemd\":{\"count\":1,\"lastSeenTime\":1586868911645},\"Bauch\":{\"count\":1,\"lastSeenTime\":1586869237926,\"difficulty\":0.8421052631578947,\"difficultyWeight\":19},\"Johnny Bravo\":{\"count\":2,\"lastSeenTime\":1586874716360},\"Stachelrochen\":{\"count\":3,\"lastSeenTime\":1586956215415},\"Dreck\":{\"count\":1,\"lastSeenTime\":1586874073864},\"Taser\":{\"count\":2,\"lastSeenTime\":1586907375887,\"difficulty\":1,\"difficultyWeight\":9},\"Metall\":{\"count\":4,\"lastSeenTime\":1586955010181},\"Doktor\":{\"count\":3,\"lastSeenTime\":1586955763543},\"Schriftsteller\":{\"count\":6,\"lastSeenTime\":1586958934411},\"laufen\":{\"count\":1,\"lastSeenTime\":1586880438207},\"Alarm\":{\"count\":2,\"lastSeenTime\":1586959269543},\"Bankier\":{\"count\":2,\"lastSeenTime\":1586916756124},\"Stinktier\":{\"count\":3,\"lastSeenTime\":1586920275708},\"Tresorraum\":{\"count\":1,\"lastSeenTime\":1586890625702},\"Nichtschwimmer\":{\"count\":1,\"lastSeenTime\":1586890743822},\"Opernhaus Sydney\":{\"count\":2,\"lastSeenTime\":1586907532918},\"jagen\":{\"count\":2,\"lastSeenTime\":1586902702172},\"Autor\":{\"count\":2,\"lastSeenTime\":1586959840559},\"Jackie Chan\":{\"count\":1,\"lastSeenTime\":1586900412247},\"Reflexion\":{\"count\":2,\"lastSeenTime\":1586919650407},\"Zweig\":{\"count\":2,\"lastSeenTime\":1586955899639},\"Experiment\":{\"count\":1,\"lastSeenTime\":1586908921510},\"Badezimmer\":{\"count\":3,\"lastSeenTime\":1586959738785},\"Spüllappen\":{\"count\":1,\"lastSeenTime\":1586915543878},\"Magnet\":{\"count\":1,\"lastSeenTime\":1586915703672},\"Fühler\":{\"count\":2,\"lastSeenTime\":1586955098414},\"Eisbär\":{\"count\":1,\"lastSeenTime\":1586920361074},\"Grabmal\":{\"count\":1,\"lastSeenTime\":1586958636395}}\n"
  },
  {
    "path": "tools/skribbliohintsconverter/main.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n)\n\nfunc main() {\n\tlanguageFile, err := os.Open(os.Args[len(os.Args)-1])\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdata, err := io.ReadAll(languageFile)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tvar words map[string]json.RawMessage\n\terr = json.Unmarshal(data, &words)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfor word := range words {\n\t\tfmt.Println(word)\n\t}\n}\n"
  },
  {
    "path": "tools/statcollector/main.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"flag\"\n\t\"io\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"time\"\n)\n\ntype Stat struct {\n\tTime time.Time\n\tData string\n}\n\nfunc main() {\n\tduration := flag.Duration(\"duration\", (7*24)*time.Hour, \"the duration for which we'll collect stats.\")\n\tinterval := flag.Duration(\"interval\", 5*time.Minute, \"interval in which we'll send requests.\")\n\tpage := flag.String(\"page\", \"https://scribblers-official.herokuapp.com\", \"page on which we'll call /v1/stats\")\n\toutput := flag.String(\"output\", \"output.json\", \"output file for retrieved data\")\n\tflag.Parse()\n\n\turl := *page + \"/v1/stats\"\n\toutputFile, err := os.OpenFile(*output, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0o644)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tencoder := json.NewEncoder(outputFile)\n\tshutdownTimer := time.NewTimer(*duration)\n\tcollectionTicker := time.Tick(*interval)\n\tfor {\n\t\tselect {\n\t\tcase <-collectionTicker:\n\t\t\t{\n\t\t\t\tresponse, err := http.Get(url)\n\t\t\t\tif err == nil {\n\t\t\t\t\tdata, err := io.ReadAll(response.Body)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlog.Printf(\"Error reading response: %s\\n\", err)\n\t\t\t\t\t}\n\t\t\t\t\tstat := &Stat{\n\t\t\t\t\t\tTime: time.Now(),\n\t\t\t\t\t\tData: string(data),\n\t\t\t\t\t}\n\t\t\t\t\tencodeError := encoder.Encode(stat)\n\t\t\t\t\tif encodeError != nil {\n\t\t\t\t\t\tlog.Printf(\"Error writing data to hard-drive: %s\\n\", encodeError)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlog.Printf(\"Error retrieving stats: %s\\n\", err)\n\t\t\t\t}\n\t\t\t}\n\t\tcase <-shutdownTimer.C:\n\t\t\t{\n\t\t\t\tos.Exit(0)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "tools/translate.sh",
    "content": "#!/usr/bin/env bash\n\nif [ -z ${FROM+x} ]; then echo \"FROM is unset\"; exit 1; fi\nif [ -z ${TO+x} ]; then echo \"TO is unset\"; exit 1; fi\n\nSOURCE_FILE=\"../resources/words/${FROM}\"\nDESTINATION_FILE=\"../resources/words/${TO}\"\n\nif [ ! -f ${SOURCE_FILE} ]; then echo \"file: ${SOURCE_FILE} does not exist\"; fi;\nif [ -f ${DESTINATION_FILE} ]; then\n    echo \"WARNING! file: ${DESTINATION_FILE} already exist!\";\n    echo \"Do you want to override it? [yes/no]\"\n    read -r choice\n    if [[ \"${choice}\" != \"yes\" ]]; then\n        echo \"Aborting\"\n        exit 1;\n    fi\n\n    rm -f ${DESTINATION_FILE}\nfi;\n\ntouch ${DESTINATION_FILE}\n\nwhile read sourceWord; do\n  cleanWord=$(echo \"$sourceWord\" | sed -En \"s/(.*)\\#.*/\\1/p\")\n  tag=$(echo \"$sourceWord\" | sed -En \"s/.*\\#(.*)/\\1/p\")\n\n  echo -n \"Translating '${cleanWord}'... \"\n\n  # Wanna exclude some words based on a tag?\n  # Just un-comment and edit the following lines\n  if [[ ${tag} == \"i\" ]]; then\n    echo \"❌ Skipping due to tag setting.\"\n    continue;\n  fi\n\n  # non-optimized AWS call\n  # Must use a translation-job here\n  translation=$(aws translate translate-text --text \"${cleanWord}\" --source-language-code \"${FROM}\" --target-language-code \"${TO}\" | jq -r .TranslatedText)\n\n  echo \"${translation}\" >> ${DESTINATION_FILE}\n  echo \"✅\"\ndone <${SOURCE_FILE}\n\necho \"Done!\"\n"
  },
  {
    "path": "windows.Dockerfile",
    "content": "#\n# Builder for Golang\n#\n# We explicitly use a certain major version of go, to make sure we don't build\n# with a newer verison than we are using for CI tests, as we don't directly\n# test the produced binary but from source code directly.\nFROM docker.io/golang:1.25.5-nanoserver-ltsc2022 AS builder\nWORKDIR /app\n\n# This causes caching of the downloaded go modules and makes repeated local\n# builds much faster. We must not copy the code first though, as a change in\n# the code causes a redownload.\nCOPY go.mod go.sum ./\nRUN go mod download -x\n\n# Import that this comes after mod download, as it breaks caching.\nARG VERSION=\"dev\"\n\n# Copy actual codebase, since we only have the go.mod and go.sum so far.\nCOPY . /app/\nENV CGO_ENABLED=0\nRUN go build -trimpath -ldflags \"-w -s -X 'github.com/scribble-rs/scribble.rs/internal/version.Version=$VERSION'\" -tags timetzdata -o ./scribblers ./cmd/scribblers\n\n#\n# Runner\n#\nFROM mcr.microsoft.com/windows/nanoserver:ltsc2022\n\nCOPY --from=builder /app/scribblers /scribblers\n\nENTRYPOINT [\"/scribblers\"]\n"
  }
]