Author: Vladimir IAkovlevich Avarin