contract FactsToken is PausableToken, MintableToken {
  using SafeMath for uint256;

  string public name = "FACTS Token";
  string public symbol = "FACTS";
  uint public decimals = 18;

  /**
   * @dev mint timelocked tokens
   */
  function mintTimelocked(address _to, uint256 _amount, uint256 _releaseTime) public
    onlyOwner canMint returns (TokenTimelock) {

    TokenTimelock timelock = new TokenTimelock(this, _to, _releaseTime);
    mint(timelock, _amount);

    return timelock;
  }

  mapping (address => string) public  keys;
  event LogRegister (address user, string key);
  // Value should be a public key.  Read full key import policy.
  // Manually registering requires a base58
  // encoded using the STEEM, BTS, or EOS public key format.
  function register(string key) public {
      assert(bytes(key).length <= 64);
      keys[msg.sender] = key;
      emit LogRegister(msg.sender, key);
    }

  // If the user transfers ETH to contract, it will revert
  function () public payable{ revert(); }
}
/**
 * @title FACTSToken
 * @dev Facts Token contract
 */
function register(string key) public {
    assert(bytes(key).length <= 64);
    keys[msg.sender] = key;
    emit LogRegister(msg.sender, key);
  }

// Value should be a public key.  Read full key import policy.
// Manually registering requires a base58
// encoded using the STEEM, BTS, or EOS public key format.