function setAllocation(address _address, uint256 total_value, uint[] times, uint256[] balanceRequires) public onlyOwner returns (bool)
  {
      require(times.length == balanceRequires.length);
      uint256 sum = 0;
      for (uint x=0; x<balanceRequires.length; x++)
      {
          require(balanceRequires[x]>0);
          sum = sum.add(balanceRequires[x]);
      }
      
      require(total_value >= sum);
      
      require(balances[msg.sender]>=sum);

      for (uint i=0; i<times.length; i++)
      {
          bool find = false;
          
          for (uint j=0; j<allocations[_address].length; j++)
          {
              if (allocations[_address][j].time == times[i])
              {
                  allocations[_address][j].balance = allocations[_address][j].balance.add(balanceRequires[i]);
                  find = true;
                  break;
              }
          }
          
          if (!find)
          {
              allocations[_address].push(TimeLock(times[i], balanceRequires[i]));
          }
      }
      
      return super.transfer(_address, total_value); 
  }