code: func (b *Block) ContainsSensitive() bool {
  	for _, attrS := range b.Attributes {
  		if attrS.Sensitive {
  			return true
  		}
  	}
  	for _, blockS := range b.BlockTypes {
  		if blockS.ContainsSensitive() {
  			return true
  		}
  	}
  	return false
  }
docs: // ContainsSensitive returns true if any of the attributes of the receiving
  // block or any of its descendent blocks are marked as sensitive.
  //
  // Blocks themselves cannot be sensitive as a whole -- sensitivity is a
  // per-attribute idea -- but sometimes we want to include a whole object
  // decoded from a block in some UI output, and that is safe to do only if
  // none of the contained attributes are sensitive.