```\nfunction transferFrom(address _from, address _to, uint _value) public onlyPayloadSize(3 * 32) {\n var _allowance = allowed[_from][msg.sender];\n\n // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met\n // if (_value > _allowance) throw;\n\n uint fee = (_value.mul(basisPointsRate)).div(10000);\n if (fee > maximumFee) {\n  fee = maximumFee;\n }\n if (_allowance < MAX_UINT) {\n  allowed[_from][msg.sender] = _allowance.sub(_value);\n }\n uint sendAmount = _value.sub(fee);\n balances[_from] = balances[_from].sub(_value);\n balances[_to] = balances[_to].add(sendAmount);\n if (fee > 0) {\n  balances[owner] = balances[owner].add(fee);\n  Transfer(_from, owner, fee);\n }\n Transfer(_from, _to, sendAmount);\n}\n```\n