  function releaseToken(address accountAddress) private returns (bool) {
    require(accountAddress != address(0x0), "accountAddress not right");
    Account memory _account = accountMapping[accountAddress];
    if(_account.ownAmount == 0){
      return true;
    }
    if(_account.releasedAmount == _account.ownAmount){
      return true;
    }
    uint256 _releasedAmount = 0;
    uint256 releaseTime;
    uint256 nolockRate;
    uint256 releaseRate;
    (releaseTime,nolockRate,releaseRate) = getRoles(_account.roleType);
    if(nolockRate > 0 && nolockReleasedMapping[accountAddress] != true){
      _releasedAmount = _releasedAmount.add(_account.ownAmount.mul(nolockRate).div(100));
      nolockReleasedMapping[accountAddress] = true;
    }
    if(releaseTime <= now){
      uint256 _momth = now.sub(releaseTime).div(30 days).add(1);
      if(releasedRateMapping[accountAddress] <=  _momth) {
        _releasedAmount = _releasedAmount.add(_account.ownAmount.mul(_momth-releasedRateMapping[accountAddress]).mul(releaseRate).div(100));
        releasedRateMapping[accountAddress] = _momth;
      }
    }
    if(_releasedAmount > 0){
        if(accountMapping[accountAddress].releasedAmount.add(_releasedAmount) <= _account.ownAmount){
            accountMapping[accountAddress].releasedAmount = accountMapping[accountAddress].releasedAmount.add(_releasedAmount);
        }else{
            accountMapping[accountAddress].releasedAmount = _account.ownAmount;
        }
    }
    return true;
  }