----+++++-----+++++-++--+----++-++-++-++------------+--++--+++-+-+-+-+-+--+++---+++--+-+++--+++-+-++-+-++-+-++-+-++