address public implementation;
function setAddress(address a) external {
function () external payable {
address impl = implementation;
calldatacopy(ptr, 0, calldatasize)
let result := delegatecall(gas, impl, ptr, calldatasize, 0, 0)
let size := returndatasize
returndatacopy(ptr, 0, size)
case 0 { revert(ptr, size) }
default { return(ptr, size) }