contract Manager is SpecialManager {
	
	// Managers addresses
	mapping ( address => bool ) public managerAddressMap;
	// Manager Address/Number Mapping
	mapping ( address => uint256 ) public managerAddressNumberMap;
	// Managers` List
	mapping ( uint256 => address ) public managerListMap;
	// Amount of managers
	uint256 public managerCountInt = 0;
	
	// Modifier - Manager Or Owner
	modifier isManagerOrOwner {
        require( managerAddressMap[msg.sender]==true || ownerAddressMap[msg.sender]==true );
        _;
    }
	
	// Owner Creation/Activation
	function managerOn( address _onManagerAddress ) external isOwner returns (bool retrnVal) {
		// Check if it's a non-zero address
		require( _onManagerAddress != address(0) );
		// If this special manager exists
		if ( managerAddressNumberMap[ _onManagerAddress ]>0 )
		{
			// If this special manager disabled, activate him again
			if ( !managerAddressMap[ _onManagerAddress ] )
			{
				managerAddressMap[ _onManagerAddress ] = true;
				retrnVal = true;
			}
			else
			{
				retrnVal = false;
			}
		}
		// If this special manager doesn`t exist
		else
		{
			managerAddressMap[ _onManagerAddress ] = true;
			managerAddressNumberMap[ _onManagerAddress ] = managerCountInt;
			managerListMap[ managerCountInt ] = _onManagerAddress;
			managerCountInt++;
			retrnVal = true;
		}
	}
	
	// Manager disactivation
	function managerOff( address _offManagerAddress ) external isOwner returns (bool retrnVal) {
		// if it's a non-zero manager and already exists and active
		// 0-number manager can`t be disactivated
		if ( managerAddressNumberMap[ _offManagerAddress ]>0 && managerAddressMap[ _offManagerAddress ] )
		{
			managerAddressMap[ _offManagerAddress ] = false;
			retrnVal = true;
		}
		else
		{
			retrnVal = false;
		}
	}


	// Constructor adds owner to manager list 
	function Manager() public {
		// manager creation
		managerAddressMap[ msg.sender ] = true;
		managerAddressNumberMap[ msg.sender ] = managerCountInt;
		managerListMap[ managerCountInt ] = msg.sender;
		managerCountInt++;
	}
}
function Manager() public {
	// manager creation
	managerAddressMap[ msg.sender ] = true;
	managerAddressNumberMap[ msg.sender ] = managerCountInt;
	managerListMap[ managerCountInt ] = msg.sender;
	managerCountInt++;
}

// Constructor adds owner to manager list 