contract AdminableProxy is AdminUpgradeabilityProxy {

  /**
   * Contract constructor.
   */
  constructor(address _implementation, bytes memory _data) 
  AdminUpgradeabilityProxy(_implementation, _data) public payable {
  }

  /**
   * @dev apply proposal.
   */
  function applyProposal(bytes calldata data) external ifAdmin returns (bool) {
    bool rv;
    (rv, ) = _implementation().delegatecall(data);
    return rv;
  }

}
/**
 * @title AdminUpgradeabilityProxy
 * @dev This contract combines an upgradeability proxy with an authorization
 * mechanism for administrative tasks.
 * All external functions in this contract must be guarded by the
 * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity
 * feature proposal that would enable this to be done automatically.
 */
function applyProposal(bytes calldata data) external ifAdmin returns (bool) {
  bool rv;
  (rv, ) = _implementation().delegatecall(data);
  return rv;
}

/**
 * @dev apply proposal.
 */