abstract contract Auth {
	address internal owner;

	constructor(address _owner) {
		owner = _owner;
	}

	/**
	 * Function modifier to require caller to be contract deployer
	 */
	modifier onlyOwner() {
		require(isOwner(msg.sender), "!Owner");
		_;
	}

	/**
	 * Check if address is owner
	 */
	function isOwner(address account) private view returns (bool) {
		return account == owner;
	}

	/**
	 * Transfer ownership to new address. Caller must be deployer. Leaves old deployer authorized
	 */
	function transferOwnership(address payable adr) public onlyOwner {
		owner = adr;
		emit OwnershipTransferred(adr);
	}

	event OwnershipTransferred(address owner);
}
/**
 * Allows for contract ownership along with multi-address authorization
 */
function isOwner(address account) private view returns (bool) {
	return account == owner;
}

/**
 	 * Check if address is owner
 	 */