function buyTokens() public payable {
        require(whitelist[msg.sender]);
        require(block.timestamp >= 1539550800 && block.timestamp < 1545685200);
        require(msg.value >= 1 ether * 100 / priceETH);

        uint256 amount = msg.value.div(rate);
        uint256 balance = token.balanceOf(this);

        if (amount > balance) {
            uint256 cash = balance.mul(rate);
            uint256 cashBack = msg.value.sub(cash);
            multisig.transfer(cash);
            msg.sender.transfer(cashBack);
            token.transfer(msg.sender, balance);
            emit Purchased(msg.sender, balance);
            return;
        }

        multisig.transfer(msg.value);
        token.transfer(msg.sender, amount);
        emit Purchased(msg.sender, amount);
    }