888    888        888888                  d8888 .d8888b.  .d8888b.88888888888888 
888    888        888888                 d88888d88P  Y88bd88P  Y88b 888    888   
888    888        888888                d88P888Y88b.     888    888 888    888   
8888888888 .d88b. 888888 .d88b.        d88P 888 "Y888b.  888        888    888   
888    888d8P  Y8b888888d88""88b      d88P  888    "Y88b.888        888    888   
888    88888888888888888888  888     d88P   888      "888888    888 888    888   
888    888Y8b.    888888Y88..88P    d8888888888Y88b  d88PY88b  d88P 888    888   
888    888 "Y8888 888888 "Y88P"    d88P     888 "Y8888P"  "Y8888P"88888888888888