pragma solidity 0.5.0;


contract AddressRegistry {
    event AddressSet(string name, address addr);
    mapping(bytes32 => address) registry;

    constructor() public {
        registry[keccak256(abi.encodePacked("admin"))] = msg.sender;
    }

    function getAddr(string memory name) public view returns (address) {
        return registry[keccak256(abi.encodePacked(name))];
    }

    function setAddr(string memory name, address addr) public {
        require(msg.sender == getAddr("admin") || msg.sender == getAddr("owner"), "Permission Denied");
        registry[keccak256(abi.encodePacked(name))] = addr;
        emit AddressSet(name, addr);
    }

}