contract manager {
    address public admin; //Admin address is public
    
    /**
    * @dev This contructor takes the msg.sender as the first administer
    */
    constructor() internal {
        admin = msg.sender; //Set initial admin to contract creator
        emit Manager(admin);
    }

    /**
    * @dev This modifier limits function execution to the admin
    */
    modifier onlyAdmin() { //A modifier to define admin-only functions
        require(msg.sender == admin);
        _;
    }

    /**
    * @notice This function transfer the adminship of the contract to _newAdmin
    * @param _newAdmin The new admin of the contract
    */
    function transferAdminship(address _newAdmin) onlyAdmin public { //Admin can be transfered
        admin = _newAdmin;
        emit TransferAdminship(admin);
    }

    /**
    * @dev Log Events
    */
    event TransferAdminship(address newAdminister);
    event Manager(address administer);

}
/**
 * @title manager
 * @notice This contract have some manager-only functions
 */
function transferAdminship(address _newAdmin) onlyAdmin public { //Admin can be transfered
    admin = _newAdmin;
    emit TransferAdminship(admin);
}

/**
 * @notice This function transfer the adminship of the contract to _newAdmin
 * @param _newAdmin The new admin of the contract
 */