contract multiSignatureWallet is Ownable, multiSignatureClient {
    using Address for address;
    constructor(address[2] memory owners,address multiSignature) Ownable(owners) multiSignatureClient(multiSignature) public {
    }
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(uint256 index,address newOwner) public onlyOwner validCall {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        require(index<2, "Ownable: index is overflow");
        emit OwnershipTransferred(_owners[index], newOwner);
        _owners[index] = newOwner;
    }
    receive() payable external {

    }
    function approve(address tokenAddress,address recieptor,uint256 amount) public onlyOwner validCall{
        TransferHelper.safeApprove(tokenAddress,recieptor,amount);
    }
    function transferETH(address payable recieptor,uint256 amount) public onlyOwner validCall{
        TransferHelper.safeTransferETH(recieptor,amount);
    }
    function transferToken(address tokenAddress,address recieptor,uint256 amount) public onlyOwner validCall{
        TransferHelper.safeTransfer(tokenAddress,recieptor,amount);
    }
    function callContract(address contractAddr, bytes memory data) public onlyOwner validCall returns (bytes memory){
        return contractAddr.functionCall(data);
    }
    function callContractPayable(address contractAddr, bytes memory data, uint256 value) public onlyOwner validCall returns (bytes memory){
        return contractAddr.functionCallWithValue(data,value);
    }
}
function transferOwnership(uint256 index,address newOwner) public onlyOwner validCall {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    require(index<2, "Ownable: index is overflow");
    emit OwnershipTransferred(_owners[index], newOwner);
    _owners[index] = newOwner;
}

/**
 * @dev Transfers ownership of the contract to a new account (`newOwner`).
 * Can only be called by the current owner.
 */