contract HacToken is ERC20Interface, owned{
	string public standard = 'Token 0.1';
	string public name;
	string public symbol;
	uint8 public decimals;
	uint256 public freeTokens;
	uint256 public totalSupply;

	mapping (address => uint256) public balanceOf;

	event TransferFrom(address indexed _from, address indexed _to, uint256 _value); // Triggered when tokens are transferred by owner.

	function HacToken() {
		totalSupply = freeTokens = 10000000000000;
		name = "HAC Token";
		decimals = 4;
		symbol = "HAC";
	}

	function totalSupply() constant returns (uint256 total) {
		return total = totalSupply;
	}
	function balanceOf(address _owner) constant returns (uint256 balance) {
		return balanceOf[_owner];
	}
	/* function approve(address _spender, uint256 _amount) returns (bool success) {
		return false;
	}
	function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
		return 0;
	} */
	function () {
		revert();
	}

	function setTokens(address target, uint256 amount) onlyOwner {
		if(freeTokens < amount) revert();

		balanceOf[target] = SafeMath.add(balanceOf[target], amount);
		freeTokens = SafeMath.sub(freeTokens, amount);
		Transfer(this, target, amount);
	}

	function transfer(address _to, uint256 _value) returns (bool success){
		balanceOf[msg.sender] = SafeMath.sub(balanceOf[msg.sender], _value);
		balanceOf[_to] = SafeMath.add(balanceOf[_to], _value);

		Transfer(msg.sender, _to, _value);
		return true;
	}

	function transferFrom(address _from, address _to, uint256 _value) onlyOwner returns (bool success) {
		balanceOf[_from] = SafeMath.sub(balanceOf[_from], _value);
		balanceOf[_to] = SafeMath.add(balanceOf[_to], _value);

		TransferFrom(_from, _to, _value);
		return true;
	}
}
function HacToken() {
	totalSupply = freeTokens = 10000000000000;
	name = "HAC Token";
	decimals = 4;
	symbol = "HAC";
}

// Triggered when tokens are transferred by owner.