protocol def