contract PPTokenControllerFactory {
  event NewPPTokenController(address indexed token, address controller);

  // USER INTERFACE

  function build(
    IPPGlobalRegistry _globalRegistry,
    IPPToken _tokenContract,
    uint256 _defaultBurnTimeoutDuration
  )
    external
    returns (PPTokenController)
  {
    PPTokenController ppTokenController = new PPTokenController(
      _globalRegistry,
      _tokenContract,
      _defaultBurnTimeoutDuration
    );

    ppTokenController.transferOwnership(msg.sender);

    emit NewPPTokenController(address(_tokenContract), address(ppTokenController));

    return ppTokenController;
  }
}
function build(
  IPPGlobalRegistry _globalRegistry,
  IPPToken _tokenContract,
  uint256 _defaultBurnTimeoutDuration
)
  external
  returns (PPTokenController)
{
  PPTokenController ppTokenController = new PPTokenController(
    _globalRegistry,
    _tokenContract,
    _defaultBurnTimeoutDuration
  );

  ppTokenController.transferOwnership(msg.sender);

  emit NewPPTokenController(address(_tokenContract), address(ppTokenController));

  return ppTokenController;
}

// USER INTERFACE