::::
                        ::::::
                        ::::::
          ##  ######    ::::::
          ##  ##  ##    ::::::
        ##    ##  ##    ::::::
        ##    ##  ##    ::::::
      ##      ##  ##    ::::::
      ##      ######    ::::::
                        ::::::
                        ::::::
    ::::::::::::::::::::::::::
  ::::::::::::::::::::::::::::
  ::::::::::::::::::::::::::