import Control.Monad.State
import Data.ByteString (ByteString, unpack, concat, hGet, hPut, take, drop, empty, singleton)
import Data.Bits
import Control.Monad.State
import Data.ByteString (ByteString, unpack, concat, hGet, hPut, take, drop, empty, singleton)
import Data.Bits