# Copyright 2015 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

require 'date'
require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module DisplayvideoV1
      
      # Configuration for custom Active View video viewability metrics.
      class ActiveViewVideoViewabilityMetricConfig
        include Google::Apis::Core::Hashable
      
        # Required. The display name of the custom metric.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # The minimum visible video duration required (in seconds) in order for an
        # impression to be recorded.
        # You must specify
        # minimum_duration,
        # minimum_quartile
        # or both. If both are specified, an impression meets the metric criteria if
        # either requirement is met (whichever happens first).
        # Corresponds to the JSON property `minimumDuration`
        # @return [String]
        attr_accessor :minimum_duration
      
        # The minimum visible video duration required, based on the video quartiles,
        # in order for an impression to be recorded.
        # You must specify
        # minimum_duration,
        # minimum_quartile
        # or both. If both are specified, an impression meets the metric criteria if
        # either requirement is met (whichever happens first).
        # Corresponds to the JSON property `minimumQuartile`
        # @return [String]
        attr_accessor :minimum_quartile
      
        # Required. The minimum percentage of the video ad's pixels visible on the
        # screen in
        # order for an impression to be recorded.
        # Corresponds to the JSON property `minimumViewability`
        # @return [String]
        attr_accessor :minimum_viewability
      
        # Required. The minimum percentage of the video ad's volume required in order
        # for an
        # impression to be recorded.
        # Corresponds to the JSON property `minimumVolume`
        # @return [String]
        attr_accessor :minimum_volume
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @minimum_duration = args[:minimum_duration] if args.key?(:minimum_duration)
          @minimum_quartile = args[:minimum_quartile] if args.key?(:minimum_quartile)
          @minimum_viewability = args[:minimum_viewability] if args.key?(:minimum_viewability)
          @minimum_volume = args[:minimum_volume] if args.key?(:minimum_volume)
        end
      end
      
      # Details of Adloox settings.
      class Adloox
        include Google::Apis::Core::Hashable
      
        # Adloox's brand safety settings.
        # Corresponds to the JSON property `excludedAdlooxCategories`
        # @return [Array<String>]
        attr_accessor :excluded_adloox_categories
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @excluded_adloox_categories = args[:excluded_adloox_categories] if args.key?(:excluded_adloox_categories)
        end
      end
      
      # A single advertiser in Display & Video 360 (DV360).
      class Advertiser
        include Google::Apis::Core::Hashable
      
        # Ad server related settings of an advertiser.
        # Corresponds to the JSON property `adServerConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserAdServerConfig]
        attr_accessor :ad_server_config
      
        # Output only. The unique ID of the advertiser. Assigned by the system.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Creatives related settings of an advertiser.
        # Corresponds to the JSON property `creativeConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserCreativeConfig]
        attr_accessor :creative_config
      
        # Settings that control how advertiser related data may be accessed.
        # Corresponds to the JSON property `dataAccessConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserDataAccessConfig]
        attr_accessor :data_access_config
      
        # Required. The display name of the advertiser.
        # Must be UTF-8 encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Required. Controls whether or not insertion orders and line items of the
        # advertiser can spend their budgets and bid on inventory.
        # * Accepted values are `ENTITY_STATUS_ACTIVE` and
        # `ENTITY_STATUS_SCHEDULED_FOR_DELETION`.
        # * If set to
        # `ENTITY_STATUS_SCHEDULED_FOR_DELETION`, the advertiser will be deleted 30
        # days from when it was first scheduled for deletion.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # General settings of an advertiser.
        # Corresponds to the JSON property `generalConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserGeneralConfig]
        attr_accessor :general_config
      
        # Integration details of an entry.
        # Corresponds to the JSON property `integrationDetails`
        # @return [Google::Apis::DisplayvideoV1::IntegrationDetails]
        attr_accessor :integration_details
      
        # Output only. The resource name of the advertiser.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Required. Immutable. The unique ID of the partner that the advertiser belongs
        # to.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        # Output only. The timestamp when the advertiser was last updated. Assigned by
        # the system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ad_server_config = args[:ad_server_config] if args.key?(:ad_server_config)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @creative_config = args[:creative_config] if args.key?(:creative_config)
          @data_access_config = args[:data_access_config] if args.key?(:data_access_config)
          @display_name = args[:display_name] if args.key?(:display_name)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @general_config = args[:general_config] if args.key?(:general_config)
          @integration_details = args[:integration_details] if args.key?(:integration_details)
          @name = args[:name] if args.key?(:name)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Ad server related settings of an advertiser.
      class AdvertiserAdServerConfig
        include Google::Apis::Core::Hashable
      
        # Settings for advertisers that use both Campaign Manager (CM) and third-party
        # ad servers.
        # Corresponds to the JSON property `cmHybridConfig`
        # @return [Google::Apis::DisplayvideoV1::CmHybridConfig]
        attr_accessor :cm_hybrid_config
      
        # Settings for advertisers that use third-party ad servers only.
        # Corresponds to the JSON property `thirdPartyOnlyConfig`
        # @return [Google::Apis::DisplayvideoV1::ThirdPartyOnlyConfig]
        attr_accessor :third_party_only_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cm_hybrid_config = args[:cm_hybrid_config] if args.key?(:cm_hybrid_config)
          @third_party_only_config = args[:third_party_only_config] if args.key?(:third_party_only_config)
        end
      end
      
      # Creatives related settings of an advertiser.
      class AdvertiserCreativeConfig
        include Google::Apis::Core::Hashable
      
        # Whether or not the advertiser is enabled for dynamic creatives.
        # Corresponds to the JSON property `dynamicCreativeEnabled`
        # @return [Boolean]
        attr_accessor :dynamic_creative_enabled
        alias_method :dynamic_creative_enabled?, :dynamic_creative_enabled
      
        # An ID for configuring campaign monitoring provided by Integral Ad Service
        # (IAS). The DV360 system will append an IAS "Campaign Monitor" tag
        # containing this ID to the creative tag.
        # Corresponds to the JSON property `iasClientId`
        # @return [Fixnum]
        attr_accessor :ias_client_id
      
        # Whether or not to use DV360's Online Behavioral Advertising (OBA)
        # compliance.
        # Warning: Changing OBA settings may cause the audit status of your creatives
        # to be reset by some ad exchanges, making them ineligible to serve until
        # they are re-approved.
        # Corresponds to the JSON property `obaComplianceDisabled`
        # @return [Boolean]
        attr_accessor :oba_compliance_disabled
        alias_method :oba_compliance_disabled?, :oba_compliance_disabled
      
        # By setting this field to `true`, you, on behalf of your company,
        # authorize Google to use video creatives associated with this Display &
        # Video 360 advertiser to provide reporting and features related to the
        # advertiser's television campaigns.
        # Applicable only when the advertiser has a
        # CM hybrid ad server
        # configuration.
        # Corresponds to the JSON property `videoCreativeDataSharingAuthorized`
        # @return [Boolean]
        attr_accessor :video_creative_data_sharing_authorized
        alias_method :video_creative_data_sharing_authorized?, :video_creative_data_sharing_authorized
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dynamic_creative_enabled = args[:dynamic_creative_enabled] if args.key?(:dynamic_creative_enabled)
          @ias_client_id = args[:ias_client_id] if args.key?(:ias_client_id)
          @oba_compliance_disabled = args[:oba_compliance_disabled] if args.key?(:oba_compliance_disabled)
          @video_creative_data_sharing_authorized = args[:video_creative_data_sharing_authorized] if args.key?(:video_creative_data_sharing_authorized)
        end
      end
      
      # Settings that control how advertiser related data may be accessed.
      class AdvertiserDataAccessConfig
        include Google::Apis::Core::Hashable
      
        # Structured Data Files (SDF) settings of an advertiser.
        # Corresponds to the JSON property `sdfConfig`
        # @return [Google::Apis::DisplayvideoV1::AdvertiserSdfConfig]
        attr_accessor :sdf_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @sdf_config = args[:sdf_config] if args.key?(:sdf_config)
        end
      end
      
      # General settings of an advertiser.
      class AdvertiserGeneralConfig
        include Google::Apis::Core::Hashable
      
        # Required. Immutable. Advertiser's currency in ISO 4217 format.
        # Accepted codes and the currencies they represent are:
        # Currency Code : Currency Name
        # * `ARS` : Argentine Peso
        # * `AUD` : Australian Dollar
        # * `BRL` : Brazilian Real
        # * `CAD` : Canadian Dollar
        # * `CHF` : Swiss Franc
        # * `CLP` : Chilean Peso
        # * `CNY` : Chinese Yuan
        # * `COP` : Colombian Peso
        # * `CZK` : Czech Koruna
        # * `DKK` : Danish Krone
        # * `EGP` : Egyption Pound
        # * `EUR` : Euro
        # * `GBP` : British Pound
        # * `HKD` : Hong Kong Dollar
        # * `HUF` : Hungarian Forint
        # * `IDR` : Indonesian Rupiah
        # * `ILS` : Israeli Shekel
        # * `INR` : Indian Rupee
        # * `JPY` : Japanese Yen
        # * `KRW` : South Korean Won
        # * `MXN` : Mexican Pesos
        # * `MYR` : Malaysian Ringgit
        # * `NGN` : Nigerian Naira
        # * `NOK` : Norwegian Krone
        # * `NZD` : New Zealand Dollar
        # * `PEN` : Peruvian Nuevo Sol
        # * `PLN` : Polish Zloty
        # * `RON` : New Romanian Leu
        # * `RUB` : Russian Ruble
        # * `SEK` : Swedish Krona
        # * `TRY` : Turkish Lira
        # * `TWD` : New Taiwan Dollar
        # * `USD` : US Dollar
        # * `ZAR` : South African Rand
        # Corresponds to the JSON property `currencyCode`
        # @return [String]
        attr_accessor :currency_code
      
        # Required. The domain URL of the advertiser's primary website.
        # The system will send this information to publishers that require website
        # URL to associate a campaign with an advertiser.
        # Provide a URL with no path or query string, beginning with `http:` or
        # `https:`.
        # For example, http://www.example.com
        # Corresponds to the JSON property `domainUrl`
        # @return [String]
        attr_accessor :domain_url
      
        # Output only. The standard TZ database name of the advertiser's time zone.
        # For example, `America/New_York`.
        # See more at:
        # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
        # For CM hybrid advertisers, the time zone is the same as that of the
        # associated CM account; for third-party only advertisers, the time zone is
        # the same as that of the parent partner.
        # Corresponds to the JSON property `timeZone`
        # @return [String]
        attr_accessor :time_zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @currency_code = args[:currency_code] if args.key?(:currency_code)
          @domain_url = args[:domain_url] if args.key?(:domain_url)
          @time_zone = args[:time_zone] if args.key?(:time_zone)
        end
      end
      
      # Structured Data Files (SDF) settings of an advertiser.
      class AdvertiserSdfConfig
        include Google::Apis::Core::Hashable
      
        # Whether or not this advertiser overrides the SDF configuration of its
        # parent partner.
        # By default, an advertiser inherits the SDF configuration from the parent
        # partner. To override the partner configuration, set this field to `true`
        # and provide the new configuration in
        # sdfConfig.
        # Corresponds to the JSON property `overridePartnerSdfConfig`
        # @return [Boolean]
        attr_accessor :override_partner_sdf_config
        alias_method :override_partner_sdf_config?, :override_partner_sdf_config
      
        # Structured Data File (SDF) related settings.
        # Corresponds to the JSON property `sdfConfig`
        # @return [Google::Apis::DisplayvideoV1::SdfConfig]
        attr_accessor :sdf_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @override_partner_sdf_config = args[:override_partner_sdf_config] if args.key?(:override_partner_sdf_config)
          @sdf_config = args[:sdf_config] if args.key?(:sdf_config)
        end
      end
      
      # Represents a targetable age range. This will be populated in the details
      # field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_AGE_RANGE`.
      class AgeRangeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The age range of an audience. We only support targeting a
        # continuous age
        # range of an audience. Thus, the age range represented in this field can be
        # 1) targeted solely, or, 2) part of a larger continuous age range. The reach
        # of a continuous age range targeting can be expanded by also targeting an
        # audience of an unknown age.
        # Corresponds to the JSON property `ageRange`
        # @return [String]
        attr_accessor :age_range
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_AGE_RANGE`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @age_range = args[:age_range] if args.key?(:age_range)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable age range. This will be populated in the
      # age_range_details field when
      # targeting_type is
      # `TARGETING_TYPE_AGE_RANGE`.
      class AgeRangeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The age range of an audience.
        # Corresponds to the JSON property `ageRange`
        # @return [String]
        attr_accessor :age_range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @age_range = args[:age_range] if args.key?(:age_range)
        end
      end
      
      # Details for assigned app targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_APP`.
      class AppAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The ID of the app.
        # Android's Play store app uses bundle ID, for example
        # `com.google.android.gm`. Apple's App store app ID uses 9 digit string, for
        # example `422689480`.
        # Corresponds to the JSON property `appId`
        # @return [String]
        attr_accessor :app_id
      
        # Output only. The display name of the app.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @app_id = args[:app_id] if args.key?(:app_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
        end
      end
      
      # Details for assigned app category targeting option. This will be
      # populated in the
      # app_category_details field of
      # an AssignedTargetingOption when
      # targeting_type
      # is `TARGETING_TYPE_APP_CATEGORY`.
      class AppCategoryAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the app category.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id field when
        # targeting_type is
        # `TARGETING_TYPE_APP_CATEGORY`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable collection of apps. A collection lets you target
      # dynamic groups of related apps that are maintained by the platform, for
      # example `All Apps/Google Play/Games`. This will be populated in the
      # app_category_details field when
      # targeting_type is
      # `TARGETING_TYPE_APP_CATEGORY`.
      class AppCategoryTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The name of the app collection.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # A single asset.
      class Asset
        include Google::Apis::Core::Hashable
      
        # The asset content.
        # For uploaded assets, the content is the serving path.
        # Corresponds to the JSON property `content`
        # @return [String]
        attr_accessor :content
      
        # Media ID of the uploaded asset. This is a unique identifier for the asset.
        # This ID can be passed to other API calls, e.g.
        # CreateCreative to associate
        # the asset with a creative.
        # Corresponds to the JSON property `mediaId`
        # @return [Fixnum]
        attr_accessor :media_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content = args[:content] if args.key?(:content)
          @media_id = args[:media_id] if args.key?(:media_id)
        end
      end
      
      # Asset association for the creative.
      class AssetAssociation
        include Google::Apis::Core::Hashable
      
        # A single asset.
        # Corresponds to the JSON property `asset`
        # @return [Google::Apis::DisplayvideoV1::Asset]
        attr_accessor :asset
      
        # The role of this asset for the creative.
        # Corresponds to the JSON property `role`
        # @return [String]
        attr_accessor :role
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @asset = args[:asset] if args.key?(:asset)
          @role = args[:role] if args.key?(:role)
        end
      end
      
      # A single assigned targeting option, which defines the state of a targeting
      # option for an entity with targeting settings, such as a Line Item or
      # Insertion Order.
      class AssignedTargetingOption
        include Google::Apis::Core::Hashable
      
        # Represents a targetable age range. This will be populated in the details
        # field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_AGE_RANGE`.
        # Corresponds to the JSON property `ageRangeDetails`
        # @return [Google::Apis::DisplayvideoV1::AgeRangeAssignedTargetingOptionDetails]
        attr_accessor :age_range_details
      
        # Details for assigned app category targeting option. This will be
        # populated in the
        # app_category_details field of
        # an AssignedTargetingOption when
        # targeting_type
        # is `TARGETING_TYPE_APP_CATEGORY`.
        # Corresponds to the JSON property `appCategoryDetails`
        # @return [Google::Apis::DisplayvideoV1::AppCategoryAssignedTargetingOptionDetails]
        attr_accessor :app_category_details
      
        # Details for assigned app targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_APP`.
        # Corresponds to the JSON property `appDetails`
        # @return [Google::Apis::DisplayvideoV1::AppAssignedTargetingOptionDetails]
        attr_accessor :app_details
      
        # Output only. The unique ID of the assigned targeting option. The ID is only
        # unique
        # within a given line item and targeting type. It may be reused in other
        # contexts.
        # Corresponds to the JSON property `assignedTargetingOptionId`
        # @return [String]
        attr_accessor :assigned_targeting_option_id
      
        # Assigned audience group targeting option details. This will be populated in
        # the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_AUDIENCE_GROUP`.
        # The relation between each group is UNION, except for
        # excluded_first_and_third_party_audience_group and
        # excluded_google_audience_group, of which COMPLEMENT is UNION'ed with other
        # groups.
        # Corresponds to the JSON property `audienceGroupDetails`
        # @return [Google::Apis::DisplayvideoV1::AudienceGroupAssignedTargetingOptionDetails]
        attr_accessor :audience_group_details
      
        # Represents an assigned authorized seller status. This will be populated in
        # the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_AUTHORIZED_SELLER_STATUS`.
        # Corresponds to the JSON property `authorizedSellerStatusDetails`
        # @return [Google::Apis::DisplayvideoV1::AuthorizedSellerStatusAssignedTargetingOptionDetails]
        attr_accessor :authorized_seller_status_details
      
        # Details for assigned browser targeting option. This will be populated in
        # the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_BROWSER`.
        # Corresponds to the JSON property `browserDetails`
        # @return [Google::Apis::DisplayvideoV1::BrowserAssignedTargetingOptionDetails]
        attr_accessor :browser_details
      
        # Details for assigned carrier and ISP targeting option. This will be populated
        # in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_CARRIER_AND_ISP`.
        # Corresponds to the JSON property `carrierAndIspDetails`
        # @return [Google::Apis::DisplayvideoV1::CarrierAndIspAssignedTargetingOptionDetails]
        attr_accessor :carrier_and_isp_details
      
        # Assigned category targeting option details. This will be populated in the
        # category_details field when
        # targeting_type is
        # `TARGETING_TYPE_CATEGORY`.
        # Corresponds to the JSON property `categoryDetails`
        # @return [Google::Apis::DisplayvideoV1::CategoryAssignedTargetingOptionDetails]
        attr_accessor :category_details
      
        # Details for assigned channel targeting option. This will be populated in
        # the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_CHANNEL`.
        # Corresponds to the JSON property `channelDetails`
        # @return [Google::Apis::DisplayvideoV1::ChannelAssignedTargetingOptionDetails]
        attr_accessor :channel_details
      
        # Assigned content instream position targeting option details. This will be
        # populated in the
        # content_instream_position_details
        # field when
        # targeting_type is
        # `TARGETING_TYPE_CONTENT_INSTREAM_POSITION`.
        # Corresponds to the JSON property `contentInstreamPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::ContentInstreamPositionAssignedTargetingOptionDetails]
        attr_accessor :content_instream_position_details
      
        # Assigned content outstream position targeting option details. This will be
        # populated in the
        # content_outstream_position_details
        # field when
        # targeting_type is
        # `TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION`.
        # Corresponds to the JSON property `contentOutstreamPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::ContentOutstreamPositionAssignedTargetingOptionDetails]
        attr_accessor :content_outstream_position_details
      
        # Representation of a segment of time defined on a specific day of the week and
        # with a start and end time.
        # The time represented by `start_hour` must be before the time represented by
        # `end_hour`.
        # Corresponds to the JSON property `dayAndTimeDetails`
        # @return [Google::Apis::DisplayvideoV1::DayAndTimeAssignedTargetingOptionDetails]
        attr_accessor :day_and_time_details
      
        # Assigned device make and model targeting option details. This will be
        # populated in the
        # device_make_model_details
        # field when
        # targeting_type is
        # `TARGETING_TYPE_DEVICE_MAKE_MODEL`.
        # Corresponds to the JSON property `deviceMakeModelDetails`
        # @return [Google::Apis::DisplayvideoV1::DeviceMakeModelAssignedTargetingOptionDetails]
        attr_accessor :device_make_model_details
      
        # Targeting details for device type. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_DEVICE_TYPE`.
        # Corresponds to the JSON property `deviceTypeDetails`
        # @return [Google::Apis::DisplayvideoV1::DeviceTypeAssignedTargetingOptionDetails]
        attr_accessor :device_type_details
      
        # Targeting details for digital content label. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION`.
        # Corresponds to the JSON property `digitalContentLabelExclusionDetails`
        # @return [Google::Apis::DisplayvideoV1::DigitalContentLabelAssignedTargetingOptionDetails]
        attr_accessor :digital_content_label_exclusion_details
      
        # Assigned environment targeting option details. This will be populated
        # in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_ENVIRONMENT`.
        # Corresponds to the JSON property `environmentDetails`
        # @return [Google::Apis::DisplayvideoV1::EnvironmentAssignedTargetingOptionDetails]
        attr_accessor :environment_details
      
        # Details for assigned exchange targeting option. This will be populated in
        # the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_EXCHANGE`.
        # Corresponds to the JSON property `exchangeDetails`
        # @return [Google::Apis::DisplayvideoV1::ExchangeAssignedTargetingOptionDetails]
        attr_accessor :exchange_details
      
        # Details for assigned gender targeting option. This will be populated in
        # the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARTGETING_TYPE_GENDER`.
        # Corresponds to the JSON property `genderDetails`
        # @return [Google::Apis::DisplayvideoV1::GenderAssignedTargetingOptionDetails]
        attr_accessor :gender_details
      
        # Details for assigned geographic region targeting option. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_GEO_REGION`.
        # Corresponds to the JSON property `geoRegionDetails`
        # @return [Google::Apis::DisplayvideoV1::GeoRegionAssignedTargetingOptionDetails]
        attr_accessor :geo_region_details
      
        # Details for assigned household income targeting option. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_HOUSEHOLD_INCOME`.
        # Corresponds to the JSON property `householdIncomeDetails`
        # @return [Google::Apis::DisplayvideoV1::HouseholdIncomeAssignedTargetingOptionDetails]
        attr_accessor :household_income_details
      
        # Output only. The inheritance status of the assigned targeting option.
        # Corresponds to the JSON property `inheritance`
        # @return [String]
        attr_accessor :inheritance
      
        # Targeting details for inventory source. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_INVENTORY_SOURCE`.
        # Corresponds to the JSON property `inventorySourceDetails`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceAssignedTargetingOptionDetails]
        attr_accessor :inventory_source_details
      
        # Targeting details for inventory source group. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_INVENTORY_SOURCE_GROUP`.
        # Corresponds to the JSON property `inventorySourceGroupDetails`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceGroupAssignedTargetingOptionDetails]
        attr_accessor :inventory_source_group_details
      
        # Details for assigned keyword targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_KEYWORD`.
        # Corresponds to the JSON property `keywordDetails`
        # @return [Google::Apis::DisplayvideoV1::KeywordAssignedTargetingOptionDetails]
        attr_accessor :keyword_details
      
        # Details for assigned language targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_LANGUAGE`.
        # Corresponds to the JSON property `languageDetails`
        # @return [Google::Apis::DisplayvideoV1::LanguageAssignedTargetingOptionDetails]
        attr_accessor :language_details
      
        # Output only. The resource name for this assigned targeting option.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Targeting details for negative keyword list. This will be populated in the
        # details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_NEGATIVE_KEYWORD_LIST`.
        # Corresponds to the JSON property `negativeKeywordListDetails`
        # @return [Google::Apis::DisplayvideoV1::NegativeKeywordListAssignedTargetingOptionDetails]
        attr_accessor :negative_keyword_list_details
      
        # On screen position targeting option details. This will be
        # populated in the
        # on_screen_position_details
        # field when
        # targeting_type is
        # `TARGETING_TYPE_ON_SCREEN_POSITION`.
        # Corresponds to the JSON property `onScreenPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::OnScreenPositionAssignedTargetingOptionDetails]
        attr_accessor :on_screen_position_details
      
        # Assigned operating system targeting option details. This will be
        # populated in the
        # operating_system_details
        # field when
        # targeting_type is
        # `TARGETING_TYPE_OPERATING_SYSTEM`.
        # Corresponds to the JSON property `operatingSystemDetails`
        # @return [Google::Apis::DisplayvideoV1::OperatingSystemAssignedTargetingOptionDetails]
        attr_accessor :operating_system_details
      
        # Details for assigned parental status targeting option. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARTGETING_TYPE_PARENTAL_STATUS`.
        # Corresponds to the JSON property `parentalStatusDetails`
        # @return [Google::Apis::DisplayvideoV1::ParentalStatusAssignedTargetingOptionDetails]
        attr_accessor :parental_status_details
      
        # Targeting details for proximity location list. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_PROXIMITY_LOCATION_LIST`.
        # Corresponds to the JSON property `proximityLocationListDetails`
        # @return [Google::Apis::DisplayvideoV1::ProximityLocationListAssignedTargetingOptionDetails]
        attr_accessor :proximity_location_list_details
      
        # Targeting details for regional location list. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_REGIONAL_LOCATION_LIST`.
        # Corresponds to the JSON property `regionalLocationListDetails`
        # @return [Google::Apis::DisplayvideoV1::RegionalLocationListAssignedTargetingOptionDetails]
        attr_accessor :regional_location_list_details
      
        # Targeting details for sensitive category. This will be populated in the
        # details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION`.
        # Corresponds to the JSON property `sensitiveCategoryExclusionDetails`
        # @return [Google::Apis::DisplayvideoV1::SensitiveCategoryAssignedTargetingOptionDetails]
        attr_accessor :sensitive_category_exclusion_details
      
        # Details for assigned sub-exchange targeting option. This will be populated in
        # the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_SUB_EXCHANGE`.
        # Corresponds to the JSON property `subExchangeDetails`
        # @return [Google::Apis::DisplayvideoV1::SubExchangeAssignedTargetingOptionDetails]
        attr_accessor :sub_exchange_details
      
        # Output only. Identifies the type of this assigned targeting option.
        # Corresponds to the JSON property `targetingType`
        # @return [String]
        attr_accessor :targeting_type
      
        # Assigned third party verifier targeting option details. This will be
        # populated in the details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_THIRD_PARTY_VERIFIER`.
        # Corresponds to the JSON property `thirdPartyVerifierDetails`
        # @return [Google::Apis::DisplayvideoV1::ThirdPartyVerifierAssignedTargetingOptionDetails]
        attr_accessor :third_party_verifier_details
      
        # Details for assigned URL targeting option. This will be populated in the
        # details field of an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_URL`.
        # Corresponds to the JSON property `urlDetails`
        # @return [Google::Apis::DisplayvideoV1::UrlAssignedTargetingOptionDetails]
        attr_accessor :url_details
      
        # User rewarded content targeting option details. This will be populated in
        # the
        # user_rewarded_content_details
        # field when
        # targeting_type is
        # `TARGETING_TYPE_USER_REWARDED_CONTENT`.
        # Corresponds to the JSON property `userRewardedContentDetails`
        # @return [Google::Apis::DisplayvideoV1::UserRewardedContentAssignedTargetingOptionDetails]
        attr_accessor :user_rewarded_content_details
      
        # Video player size targeting option details. This will be populated in the
        # video_player_size_details
        # field when targeting_type is
        # `TARGETING_TYPE_VIDEO_PLAYER_SIZE`.
        # Explicitly targeting all options is not supported. Remove all video player
        # size targeting options to achieve this effect.
        # Corresponds to the JSON property `videoPlayerSizeDetails`
        # @return [Google::Apis::DisplayvideoV1::VideoPlayerSizeAssignedTargetingOptionDetails]
        attr_accessor :video_player_size_details
      
        # Assigned viewability targeting option details. This will be populated in the
        # viewability_details field of
        # an AssignedTargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_VIEWABILITY`.
        # Corresponds to the JSON property `viewabilityDetails`
        # @return [Google::Apis::DisplayvideoV1::ViewabilityAssignedTargetingOptionDetails]
        attr_accessor :viewability_details
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @age_range_details = args[:age_range_details] if args.key?(:age_range_details)
          @app_category_details = args[:app_category_details] if args.key?(:app_category_details)
          @app_details = args[:app_details] if args.key?(:app_details)
          @assigned_targeting_option_id = args[:assigned_targeting_option_id] if args.key?(:assigned_targeting_option_id)
          @audience_group_details = args[:audience_group_details] if args.key?(:audience_group_details)
          @authorized_seller_status_details = args[:authorized_seller_status_details] if args.key?(:authorized_seller_status_details)
          @browser_details = args[:browser_details] if args.key?(:browser_details)
          @carrier_and_isp_details = args[:carrier_and_isp_details] if args.key?(:carrier_and_isp_details)
          @category_details = args[:category_details] if args.key?(:category_details)
          @channel_details = args[:channel_details] if args.key?(:channel_details)
          @content_instream_position_details = args[:content_instream_position_details] if args.key?(:content_instream_position_details)
          @content_outstream_position_details = args[:content_outstream_position_details] if args.key?(:content_outstream_position_details)
          @day_and_time_details = args[:day_and_time_details] if args.key?(:day_and_time_details)
          @device_make_model_details = args[:device_make_model_details] if args.key?(:device_make_model_details)
          @device_type_details = args[:device_type_details] if args.key?(:device_type_details)
          @digital_content_label_exclusion_details = args[:digital_content_label_exclusion_details] if args.key?(:digital_content_label_exclusion_details)
          @environment_details = args[:environment_details] if args.key?(:environment_details)
          @exchange_details = args[:exchange_details] if args.key?(:exchange_details)
          @gender_details = args[:gender_details] if args.key?(:gender_details)
          @geo_region_details = args[:geo_region_details] if args.key?(:geo_region_details)
          @household_income_details = args[:household_income_details] if args.key?(:household_income_details)
          @inheritance = args[:inheritance] if args.key?(:inheritance)
          @inventory_source_details = args[:inventory_source_details] if args.key?(:inventory_source_details)
          @inventory_source_group_details = args[:inventory_source_group_details] if args.key?(:inventory_source_group_details)
          @keyword_details = args[:keyword_details] if args.key?(:keyword_details)
          @language_details = args[:language_details] if args.key?(:language_details)
          @name = args[:name] if args.key?(:name)
          @negative_keyword_list_details = args[:negative_keyword_list_details] if args.key?(:negative_keyword_list_details)
          @on_screen_position_details = args[:on_screen_position_details] if args.key?(:on_screen_position_details)
          @operating_system_details = args[:operating_system_details] if args.key?(:operating_system_details)
          @parental_status_details = args[:parental_status_details] if args.key?(:parental_status_details)
          @proximity_location_list_details = args[:proximity_location_list_details] if args.key?(:proximity_location_list_details)
          @regional_location_list_details = args[:regional_location_list_details] if args.key?(:regional_location_list_details)
          @sensitive_category_exclusion_details = args[:sensitive_category_exclusion_details] if args.key?(:sensitive_category_exclusion_details)
          @sub_exchange_details = args[:sub_exchange_details] if args.key?(:sub_exchange_details)
          @targeting_type = args[:targeting_type] if args.key?(:targeting_type)
          @third_party_verifier_details = args[:third_party_verifier_details] if args.key?(:third_party_verifier_details)
          @url_details = args[:url_details] if args.key?(:url_details)
          @user_rewarded_content_details = args[:user_rewarded_content_details] if args.key?(:user_rewarded_content_details)
          @video_player_size_details = args[:video_player_size_details] if args.key?(:video_player_size_details)
          @viewability_details = args[:viewability_details] if args.key?(:viewability_details)
        end
      end
      
      # Assigned audience group targeting option details. This will be populated in
      # the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_AUDIENCE_GROUP`.
      # The relation between each group is UNION, except for
      # excluded_first_and_third_party_audience_group and
      # excluded_google_audience_group, of which COMPLEMENT is UNION'ed with other
      # groups.
      class AudienceGroupAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Details of first and third party audience group.
        # All first and third party audience targeting settings are logically ‘OR’ of
        # each other.
        # Corresponds to the JSON property `excludedFirstAndThirdPartyAudienceGroup`
        # @return [Google::Apis::DisplayvideoV1::FirstAndThirdPartyAudienceGroup]
        attr_accessor :excluded_first_and_third_party_audience_group
      
        # Details of Google audience group.
        # All Google audience targeting settings are logically ‘OR’ of each other.
        # Corresponds to the JSON property `excludedGoogleAudienceGroup`
        # @return [Google::Apis::DisplayvideoV1::GoogleAudienceGroup]
        attr_accessor :excluded_google_audience_group
      
        # Details of combined audience group.
        # All combined audience targeting settings are logically ‘OR’ of each other.
        # Corresponds to the JSON property `includedCombinedAudienceGroup`
        # @return [Google::Apis::DisplayvideoV1::CombinedAudienceGroup]
        attr_accessor :included_combined_audience_group
      
        # Details of custom list group.
        # All custom list targeting settings are logically ‘OR’ of each other.
        # Corresponds to the JSON property `includedCustomListGroup`
        # @return [Google::Apis::DisplayvideoV1::CustomListGroup]
        attr_accessor :included_custom_list_group
      
        # The first and third party audience ids and recencies of included first
        # and third party audience groups. Each first and third party audience group
        # contains first and third party audience ids only.
        # The relation between each first and third party audience group is
        # INTERSECTION, and the result is UNION'ed with other audience groups.
        # Repeated groups with same settings will be ignored.
        # Corresponds to the JSON property `includedFirstAndThirdPartyAudienceGroups`
        # @return [Array<Google::Apis::DisplayvideoV1::FirstAndThirdPartyAudienceGroup>]
        attr_accessor :included_first_and_third_party_audience_groups
      
        # Details of Google audience group.
        # All Google audience targeting settings are logically ‘OR’ of each other.
        # Corresponds to the JSON property `includedGoogleAudienceGroup`
        # @return [Google::Apis::DisplayvideoV1::GoogleAudienceGroup]
        attr_accessor :included_google_audience_group
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @excluded_first_and_third_party_audience_group = args[:excluded_first_and_third_party_audience_group] if args.key?(:excluded_first_and_third_party_audience_group)
          @excluded_google_audience_group = args[:excluded_google_audience_group] if args.key?(:excluded_google_audience_group)
          @included_combined_audience_group = args[:included_combined_audience_group] if args.key?(:included_combined_audience_group)
          @included_custom_list_group = args[:included_custom_list_group] if args.key?(:included_custom_list_group)
          @included_first_and_third_party_audience_groups = args[:included_first_and_third_party_audience_groups] if args.key?(:included_first_and_third_party_audience_groups)
          @included_google_audience_group = args[:included_google_audience_group] if args.key?(:included_google_audience_group)
        end
      end
      
      # The length an audio or a video has been played.
      class AudioVideoOffset
        include Google::Apis::Core::Hashable
      
        # The offset in percentage of the audio or video duration.
        # Corresponds to the JSON property `percentage`
        # @return [Fixnum]
        attr_accessor :percentage
      
        # The offset in seconds from the start of the audio or video.
        # Corresponds to the JSON property `seconds`
        # @return [Fixnum]
        attr_accessor :seconds
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @percentage = args[:percentage] if args.key?(:percentage)
          @seconds = args[:seconds] if args.key?(:seconds)
        end
      end
      
      # Represents an assigned authorized seller status. This will be populated in
      # the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_AUTHORIZED_SELLER_STATUS`.
      class AuthorizedSellerStatusAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The authorized seller status to target.
        # Corresponds to the JSON property `authorizedSellerStatus`
        # @return [String]
        attr_accessor :authorized_seller_status
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_AUTHORIZED_SELLER_STATUS`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @authorized_seller_status = args[:authorized_seller_status] if args.key?(:authorized_seller_status)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable authorized seller status. This will be populated in
      # the
      # authorized_seller_status_details
      # field when targeting_type is
      # `TARGETING_TYPE_AUTHORIZED_SELLER_STATUS`.
      class AuthorizedSellerStatusTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The authorized seller status.
        # Corresponds to the JSON property `authorizedSellerStatus`
        # @return [String]
        attr_accessor :authorized_seller_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @authorized_seller_status = args[:authorized_seller_status] if args.key?(:authorized_seller_status)
        end
      end
      
      # Settings that control the bid strategy.
      # Bid strategy determines the bid price.
      class BiddingStrategy
        include Google::Apis::Core::Hashable
      
        # A strategy that uses a fixed bidding price.
        # Corresponds to the JSON property `fixedBid`
        # @return [Google::Apis::DisplayvideoV1::FixedBidStrategy]
        attr_accessor :fixed_bid
      
        # A strategy that automatically adjusts the bid to optimize a specified
        # performance goal while spending the full budget.
        # Corresponds to the JSON property `maximizeSpendAutoBid`
        # @return [Google::Apis::DisplayvideoV1::MaximizeSpendBidStrategy]
        attr_accessor :maximize_spend_auto_bid
      
        # A strategy that automatically adjusts the bid to meet or beat a specified
        # performance goal.
        # Corresponds to the JSON property `performanceGoalAutoBid`
        # @return [Google::Apis::DisplayvideoV1::PerformanceGoalBidStrategy]
        attr_accessor :performance_goal_auto_bid
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fixed_bid = args[:fixed_bid] if args.key?(:fixed_bid)
          @maximize_spend_auto_bid = args[:maximize_spend_auto_bid] if args.key?(:maximize_spend_auto_bid)
          @performance_goal_auto_bid = args[:performance_goal_auto_bid] if args.key?(:performance_goal_auto_bid)
        end
      end
      
      # Details for assigned browser targeting option. This will be populated in
      # the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_BROWSER`.
      class BrowserAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the browser.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted. All assigned browser
        # targeting options on the same line item must have the same value for this
        # field.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_BROWSER`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable browser. This will be populated in the
      # browser_details field when
      # targeting_type is
      # `TARGETING_TYPE_BROWSER`.
      class BrowserTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the browser.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # Request message for
      # BulkEditLineItemAssignedTargetingOptions.
      class BulkEditLineItemAssignedTargetingOptionsRequest
        include Google::Apis::Core::Hashable
      
        # The assigned targeting options to create in batch, specified as a list of
        # `CreateAssignedTargetingOptionsRequest`.
        # Corresponds to the JSON property `createRequests`
        # @return [Array<Google::Apis::DisplayvideoV1::CreateAssignedTargetingOptionsRequest>]
        attr_accessor :create_requests
      
        # The assigned targeting options to delete in batch, specified as a list of
        # `DeleteAssignedTargetingOptionsRequest`.
        # Corresponds to the JSON property `deleteRequests`
        # @return [Array<Google::Apis::DisplayvideoV1::DeleteAssignedTargetingOptionsRequest>]
        attr_accessor :delete_requests
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_requests = args[:create_requests] if args.key?(:create_requests)
          @delete_requests = args[:delete_requests] if args.key?(:delete_requests)
        end
      end
      
      # 
      class BulkEditLineItemAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options that have been successfully created.
        # This list will be absent if empty.
        # Corresponds to the JSON property `createdAssignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :created_assigned_targeting_options
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @created_assigned_targeting_options = args[:created_assigned_targeting_options] if args.key?(:created_assigned_targeting_options)
        end
      end
      
      # 
      class BulkListLineItemAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options.
        # This list will be absent if empty.
        # Corresponds to the JSON property `assignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :assigned_targeting_options
      
        # A token identifying the next page of results. This value should be
        # specified as the
        # pageToken in
        # a subsequent BulkListLineItemAssignedTargetingOptionsRequest to fetch
        # the next page of results. This token will be absent if there are no more
        # assigned_targeting_options
        # to return.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_options = args[:assigned_targeting_options] if args.key?(:assigned_targeting_options)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # A single campaign.
      class Campaign
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the advertiser the campaign belongs to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Settings that track the planned spend and duration of a campaign.
        # Corresponds to the JSON property `campaignFlight`
        # @return [Google::Apis::DisplayvideoV1::CampaignFlight]
        attr_accessor :campaign_flight
      
        # Settings that control the goal of a campaign.
        # Corresponds to the JSON property `campaignGoal`
        # @return [Google::Apis::DisplayvideoV1::CampaignGoal]
        attr_accessor :campaign_goal
      
        # Output only. The unique ID of the campaign. Assigned by the system.
        # Corresponds to the JSON property `campaignId`
        # @return [Fixnum]
        attr_accessor :campaign_id
      
        # Required. The display name of the campaign.
        # Must be UTF-8 encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Required. Controls whether or not the insertion orders under this campaign
        # can spend their budgets and bid on inventory.
        # * Accepted values are `ENTITY_STATUS_ACTIVE`, `ENTITY_STATUS_ARCHIVED`, and
        # `ENTITY_STATUS_PAUSED`.
        # * For
        # CreateCampaign method,
        # `ENTITY_STATUS_ARCHIVED` is not allowed.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Settings that control the number of times a user may be shown with the same
        # ad during a given time period.
        # Corresponds to the JSON property `frequencyCap`
        # @return [Google::Apis::DisplayvideoV1::FrequencyCap]
        attr_accessor :frequency_cap
      
        # Output only. The resource name of the campaign.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. The timestamp when the campaign was last updated. Assigned by the
        # system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @campaign_flight = args[:campaign_flight] if args.key?(:campaign_flight)
          @campaign_goal = args[:campaign_goal] if args.key?(:campaign_goal)
          @campaign_id = args[:campaign_id] if args.key?(:campaign_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @frequency_cap = args[:frequency_cap] if args.key?(:frequency_cap)
          @name = args[:name] if args.key?(:name)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Settings that track the planned spend and duration of a campaign.
      class CampaignFlight
        include Google::Apis::Core::Hashable
      
        # A date range.
        # Corresponds to the JSON property `plannedDates`
        # @return [Google::Apis::DisplayvideoV1::DateRange]
        attr_accessor :planned_dates
      
        # The amount the campaign is expected to spend for its given
        # planned_dates. This will not limit serving,
        # but will be used for tracking spend in the DV360 UI.
        # The amount is in micros. Must be greater than or equal to 0. For example,
        # 500000000 represents 500 standard units of the currency.
        # Corresponds to the JSON property `plannedSpendAmountMicros`
        # @return [Fixnum]
        attr_accessor :planned_spend_amount_micros
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @planned_dates = args[:planned_dates] if args.key?(:planned_dates)
          @planned_spend_amount_micros = args[:planned_spend_amount_micros] if args.key?(:planned_spend_amount_micros)
        end
      end
      
      # Settings that control the goal of a campaign.
      class CampaignGoal
        include Google::Apis::Core::Hashable
      
        # Required. The type of the campaign goal.
        # Corresponds to the JSON property `campaignGoalType`
        # @return [String]
        attr_accessor :campaign_goal_type
      
        # Settings that control the performance goal of a campaign or insertion order.
        # Corresponds to the JSON property `performanceGoal`
        # @return [Google::Apis::DisplayvideoV1::PerformanceGoal]
        attr_accessor :performance_goal
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @campaign_goal_type = args[:campaign_goal_type] if args.key?(:campaign_goal_type)
          @performance_goal = args[:performance_goal] if args.key?(:performance_goal)
        end
      end
      
      # Details for assigned carrier and ISP targeting option. This will be populated
      # in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_CARRIER_AND_ISP`.
      class CarrierAndIspAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the carrier or ISP.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted. All assigned carrier
        # and ISP targeting options on the same line item must have the same value
        # for this field.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_CARRIER_AND_ISP`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable carrier or ISP. This will be populated in the
      # carrier_and_isp_details field of
      # a TargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_CARRIER_AND_ISP`.
      class CarrierAndIspTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the carrier or ISP.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The type indicating if it's carrier or ISP.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Assigned category targeting option details. This will be populated in the
      # category_details field when
      # targeting_type is
      # `TARGETING_TYPE_CATEGORY`.
      class CategoryAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the category.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id field when
        # targeting_type is
        # `TARGETING_TYPE_CATEGORY`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable category. This will be populated in the
      # category_details field of a
      # TargetingOption when targeting_type is
      # `TARGETING_TYPE_CATEGORY`.
      class CategoryTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the category.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # A single channel. Channels are custom groups of related websites and apps.
      class Channel
        include Google::Apis::Core::Hashable
      
        # The ID of the advertiser that owns the channel.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Output only. The unique ID of the channel. Assigned by the system.
        # Corresponds to the JSON property `channelId`
        # @return [Fixnum]
        attr_accessor :channel_id
      
        # Required. The display name of the channel.
        # Must be UTF-8 encoded with a maximum length of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The resource name of the channel.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The ID of the partner that owns the channel.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @channel_id = args[:channel_id] if args.key?(:channel_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
        end
      end
      
      # Details for assigned channel targeting option. This will be populated in
      # the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_CHANNEL`.
      class ChannelAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the channel. Should refer to the channel ID
        # field on a
        # [Partner-owned channel](partners.channels#Channel.FIELDS.channel_id) or
        # [advertiser-owned channel](advertisers.channels#Channel.FIELDS.channel_id)
        # resource.
        # Corresponds to the JSON property `channelId`
        # @return [Fixnum]
        attr_accessor :channel_id
      
        # Indicates if this option is being negatively targeted. For advertiser
        # level assigned targeting option, this field must be true.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @channel_id = args[:channel_id] if args.key?(:channel_id)
          @negative = args[:negative] if args.key?(:negative)
        end
      end
      
      # Settings for advertisers that use both Campaign Manager (CM) and third-party
      # ad servers.
      class CmHybridConfig
        include Google::Apis::Core::Hashable
      
        # Required. Immutable. Account ID of the CM Floodlight configuration linked with
        # the DV360
        # advertiser.
        # Corresponds to the JSON property `cmAccountId`
        # @return [Fixnum]
        attr_accessor :cm_account_id
      
        # Required. Immutable. ID of the CM Floodlight configuration linked with the
        # DV360 advertiser.
        # Corresponds to the JSON property `cmFloodlightConfigId`
        # @return [Fixnum]
        attr_accessor :cm_floodlight_config_id
      
        # Required. Immutable. By setting this field to `true`, you, on behalf of your
        # company,
        # authorize the sharing of information from the given Floodlight
        # configuration to this Display & Video 360 advertiser.
        # Corresponds to the JSON property `cmFloodlightLinkingAuthorized`
        # @return [Boolean]
        attr_accessor :cm_floodlight_linking_authorized
        alias_method :cm_floodlight_linking_authorized?, :cm_floodlight_linking_authorized
      
        # A list of CM sites whose placements will be synced to DV360 as creatives.
        # If absent or empty in
        # CreateAdvertiser method, the system
        # will automatically create a CM site.
        # Removing sites from this list may cause DV360 creatives synced from CM to
        # be deleted. At least one site must be specified.
        # Corresponds to the JSON property `cmSyncableSiteIds`
        # @return [Array<Fixnum>]
        attr_accessor :cm_syncable_site_ids
      
        # Whether or not to report DV360 cost to CM.
        # Corresponds to the JSON property `dv360ToCmCostReportingEnabled`
        # @return [Boolean]
        attr_accessor :dv360_to_cm_cost_reporting_enabled
        alias_method :dv360_to_cm_cost_reporting_enabled?, :dv360_to_cm_cost_reporting_enabled
      
        # Whether or not to include DV360 data in CM data transfer reports.
        # Corresponds to the JSON property `dv360ToCmDataSharingEnabled`
        # @return [Boolean]
        attr_accessor :dv360_to_cm_data_sharing_enabled
        alias_method :dv360_to_cm_data_sharing_enabled?, :dv360_to_cm_data_sharing_enabled
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cm_account_id = args[:cm_account_id] if args.key?(:cm_account_id)
          @cm_floodlight_config_id = args[:cm_floodlight_config_id] if args.key?(:cm_floodlight_config_id)
          @cm_floodlight_linking_authorized = args[:cm_floodlight_linking_authorized] if args.key?(:cm_floodlight_linking_authorized)
          @cm_syncable_site_ids = args[:cm_syncable_site_ids] if args.key?(:cm_syncable_site_ids)
          @dv360_to_cm_cost_reporting_enabled = args[:dv360_to_cm_cost_reporting_enabled] if args.key?(:dv360_to_cm_cost_reporting_enabled)
          @dv360_to_cm_data_sharing_enabled = args[:dv360_to_cm_data_sharing_enabled] if args.key?(:dv360_to_cm_data_sharing_enabled)
        end
      end
      
      # A Campaign Manager tracking ad.
      class CmTrackingAd
        include Google::Apis::Core::Hashable
      
        # The ad ID of the campaign manager tracking Ad.
        # Corresponds to the JSON property `cmAdId`
        # @return [Fixnum]
        attr_accessor :cm_ad_id
      
        # The creative ID of the campaign manager tracking Ad.
        # Corresponds to the JSON property `cmCreativeId`
        # @return [Fixnum]
        attr_accessor :cm_creative_id
      
        # The placement ID of the campaign manager tracking Ad.
        # Corresponds to the JSON property `cmPlacementId`
        # @return [Fixnum]
        attr_accessor :cm_placement_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cm_ad_id = args[:cm_ad_id] if args.key?(:cm_ad_id)
          @cm_creative_id = args[:cm_creative_id] if args.key?(:cm_creative_id)
          @cm_placement_id = args[:cm_placement_id] if args.key?(:cm_placement_id)
        end
      end
      
      # Describes a combined audience resource.
      class CombinedAudience
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the combined audience. Assigned by the system.
        # Corresponds to the JSON property `combinedAudienceId`
        # @return [Fixnum]
        attr_accessor :combined_audience_id
      
        # Output only. The display name of the combined audience.
        # .
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The resource name of the combined audience.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @combined_audience_id = args[:combined_audience_id] if args.key?(:combined_audience_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Details of combined audience group.
      # All combined audience targeting settings are logically ‘OR’ of each other.
      class CombinedAudienceGroup
        include Google::Apis::Core::Hashable
      
        # Required. All combined audience targeting settings in combined audience group.
        # Repeated settings with same id will be ignored.
        # The number of combined audience settings should be no more than five, error
        # will be thrown otherwise.
        # Corresponds to the JSON property `settings`
        # @return [Array<Google::Apis::DisplayvideoV1::CombinedAudienceTargetingSetting>]
        attr_accessor :settings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @settings = args[:settings] if args.key?(:settings)
        end
      end
      
      # Details of combined audience targeting setting.
      class CombinedAudienceTargetingSetting
        include Google::Apis::Core::Hashable
      
        # Required. Combined audience id of combined audience targeting setting.
        # This id is combined_audience_id.
        # Corresponds to the JSON property `combinedAudienceId`
        # @return [Fixnum]
        attr_accessor :combined_audience_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @combined_audience_id = args[:combined_audience_id] if args.key?(:combined_audience_id)
        end
      end
      
      # Assigned content instream position targeting option details. This will be
      # populated in the
      # content_instream_position_details
      # field when
      # targeting_type is
      # `TARGETING_TYPE_CONTENT_INSTREAM_POSITION`.
      class ContentInstreamPositionAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The content instream position for video or audio ads.
        # Corresponds to the JSON property `contentInstreamPosition`
        # @return [String]
        attr_accessor :content_instream_position
      
        # Required. The targeting_option_id field when
        # targeting_type is
        # `TARGETING_TYPE_CONTENT_INSTREAM_POSITION`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_instream_position = args[:content_instream_position] if args.key?(:content_instream_position)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable content instream position, which could be used by
      # video and audio ads. This will be populated in the
      # content_instream_position_details
      # field when targeting_type is
      # `TARGETING_TYPE_CONTENT_INSTREAM_POSITION`.
      class ContentInstreamPositionTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The content instream position.
        # Corresponds to the JSON property `contentInstreamPosition`
        # @return [String]
        attr_accessor :content_instream_position
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_instream_position = args[:content_instream_position] if args.key?(:content_instream_position)
        end
      end
      
      # Assigned content outstream position targeting option details. This will be
      # populated in the
      # content_outstream_position_details
      # field when
      # targeting_type is
      # `TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION`.
      class ContentOutstreamPositionAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The content outstream position.
        # Corresponds to the JSON property `contentOutstreamPosition`
        # @return [String]
        attr_accessor :content_outstream_position
      
        # Required. The targeting_option_id field when
        # targeting_type is
        # `TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_outstream_position = args[:content_outstream_position] if args.key?(:content_outstream_position)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable content outstream position, which could be used by
      # display and video ads. This will be populated in the
      # content_outstream_position_details
      # field when targeting_type is
      # `TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION`.
      class ContentOutstreamPositionTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The content outstream position.
        # Corresponds to the JSON property `contentOutstreamPosition`
        # @return [String]
        attr_accessor :content_outstream_position
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_outstream_position = args[:content_outstream_position] if args.key?(:content_outstream_position)
        end
      end
      
      # Settings that control how conversions are counted.
      # All post-click conversions will be counted. A percentage value can be set
      # for post-view conversions counting.
      class ConversionCountingConfig
        include Google::Apis::Core::Hashable
      
        # The Floodlight activity configs used to track conversions.
        # The number of conversions counted is the sum of all of the conversions
        # counted by all of the Floodlight activity IDs specified in this field.
        # Corresponds to the JSON property `floodlightActivityConfigs`
        # @return [Array<Google::Apis::DisplayvideoV1::TrackingFloodlightActivityConfig>]
        attr_accessor :floodlight_activity_configs
      
        # The percentage of post-view conversions to count, in millis (1/1000 of a
        # percent). Must be between 0 and 100000 inclusive.
        # For example, to track 50% of the post-click conversions, set a value of
        # 50000.
        # Corresponds to the JSON property `postViewCountPercentageMillis`
        # @return [Fixnum]
        attr_accessor :post_view_count_percentage_millis
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @floodlight_activity_configs = args[:floodlight_activity_configs] if args.key?(:floodlight_activity_configs)
          @post_view_count_percentage_millis = args[:post_view_count_percentage_millis] if args.key?(:post_view_count_percentage_millis)
        end
      end
      
      # Counter event of the creative.
      class CounterEvent
        include Google::Apis::Core::Hashable
      
        # Required. The name of the counter event.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Required. The name used to identify this counter event in reports.
        # Corresponds to the JSON property `reportingName`
        # @return [String]
        attr_accessor :reporting_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @reporting_name = args[:reporting_name] if args.key?(:reporting_name)
        end
      end
      
      # A request message for CreateAsset.
      class CreateAssetRequest
        include Google::Apis::Core::Hashable
      
        # Required. The filename of the asset, including the file extension.
        # The filename must be UTF-8 encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `filename`
        # @return [String]
        attr_accessor :filename
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @filename = args[:filename] if args.key?(:filename)
        end
      end
      
      # A response message for CreateAsset.
      class CreateAssetResponse
        include Google::Apis::Core::Hashable
      
        # A single asset.
        # Corresponds to the JSON property `asset`
        # @return [Google::Apis::DisplayvideoV1::Asset]
        attr_accessor :asset
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @asset = args[:asset] if args.key?(:asset)
        end
      end
      
      # A request listing which assigned targeting options of a given targeting type
      # should be created and added.
      class CreateAssignedTargetingOptionsRequest
        include Google::Apis::Core::Hashable
      
        # Required. The assigned targeting options to create and add.
        # Corresponds to the JSON property `assignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :assigned_targeting_options
      
        # Required. Identifies the type of this assigned targeting option.
        # Corresponds to the JSON property `targetingType`
        # @return [String]
        attr_accessor :targeting_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_options = args[:assigned_targeting_options] if args.key?(:assigned_targeting_options)
          @targeting_type = args[:targeting_type] if args.key?(:targeting_type)
        end
      end
      
      # Request message for [SdfDownloadTaskService.CreateSdfDownloadTask].
      class CreateSdfDownloadTaskRequest
        include Google::Apis::Core::Hashable
      
        # The ID of the advertiser to download SDF for.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # A filtering option that filters entities by their entity IDs.
        # Corresponds to the JSON property `idFilter`
        # @return [Google::Apis::DisplayvideoV1::IdFilter]
        attr_accessor :id_filter
      
        # A filtering option for filtering on Inventory Source entities.
        # Corresponds to the JSON property `inventorySourceFilter`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceFilter]
        attr_accessor :inventory_source_filter
      
        # A filtering option that filters on selected file types belonging to a chosen
        # set of filter entities.
        # Corresponds to the JSON property `parentEntityFilter`
        # @return [Google::Apis::DisplayvideoV1::ParentEntityFilter]
        attr_accessor :parent_entity_filter
      
        # The ID of the partner to download SDF for.
        # Corresponds to the JSON property `partnerId`
        # @return [Fixnum]
        attr_accessor :partner_id
      
        # Required. The SDF version of the downloaded file. If set to
        # `SDF_VERSION_UNSPECIFIED`, this will default to the version specified by
        # the advertiser or partner identified by `root_id`. An advertiser inherits
        # its SDF version from its partner unless configured otherwise.
        # Corresponds to the JSON property `version`
        # @return [String]
        attr_accessor :version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @id_filter = args[:id_filter] if args.key?(:id_filter)
          @inventory_source_filter = args[:inventory_source_filter] if args.key?(:inventory_source_filter)
          @parent_entity_filter = args[:parent_entity_filter] if args.key?(:parent_entity_filter)
          @partner_id = args[:partner_id] if args.key?(:partner_id)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # A single Creative.
      class Creative
        include Google::Apis::Core::Hashable
      
        # Additional dimensions.
        # Applicable when creative_type is one of:
        # * `CREATIVE_TYPE_STANDARD`
        # * `CREATIVE_TYPE_EXPANDABLE`
        # * `CREATIVE_TYPE_NATIVE`
        # * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL`
        # * `CREATIVE_TYPE_NATIVE_SITE_SQUARE`
        # * `CREATIVE_TYPE_LIGHTBOX`
        # * `CREATIVE_TYPE_NATIVE_APP_INSTALL`
        # * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE`
        # * `CREATIVE_TYPE_PUBLISHER_HOSTED`
        # If this field is specified, width_pixels and
        # height_pixels are both required and must be
        # greater than or equal to 0.
        # Corresponds to the JSON property `additionalDimensions`
        # @return [Array<Google::Apis::DisplayvideoV1::Dimensions>]
        attr_accessor :additional_dimensions
      
        # Output only. The unique ID of the advertiser the creative belongs to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Third-party HTML tracking tag to be appended to the creative tag.
        # Corresponds to the JSON property `appendedTag`
        # @return [String]
        attr_accessor :appended_tag
      
        # Required. Assets associated to this creative.
        # Assets can be associated to the creative in one of following roles:
        # * `ASSET_ROLE_UNSPECIFIED`
        # * `ASSET_ROLE_MAIN`
        # * `ASSET_ROLE_BACKUP`
        # * `ASSET_ROLE_POLITE_LOAD`
        # Corresponds to the JSON property `assets`
        # @return [Array<Google::Apis::DisplayvideoV1::AssetAssociation>]
        attr_accessor :assets
      
        # Output only. The unique ID of the Campaign Manager placement associated with
        # the
        # creative.
        # This field is only applicable for creatives that are synced from Campaign
        # Manager.
        # Corresponds to the JSON property `cmPlacementId`
        # @return [Fixnum]
        attr_accessor :cm_placement_id
      
        # A Campaign Manager tracking ad.
        # Corresponds to the JSON property `cmTrackingAd`
        # @return [Google::Apis::DisplayvideoV1::CmTrackingAd]
        attr_accessor :cm_tracking_ad
      
        # The IDs of companion creatives for a video creative.
        # You can assign existing display creatives (with image or HTML5 assets)
        # to serve surrounding the publisher's video player. Companions display
        # around the video player while the video is playing and remain after the
        # video has completed.
        # Creatives contain additional dimensions
        # can not be companion creatives.
        # This field is only supported for following
        # creative_type:
        # * `CREATIVE_TYPE_AUDIO`
        # * `CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `companionCreativeIds`
        # @return [Array<Fixnum>]
        attr_accessor :companion_creative_ids
      
        # Counter events for a rich media creative.
        # Counters track the number of times that a user interacts with any part of a
        # rich media creative in a specified way (mouse-overs, mouse-outs, clicks,
        # taps, data loading, keyboard entries, etc.).
        # Any event that can be captured in the creative can be recorded as a
        # counter.
        # Leave it empty or unset for creatives containing image assets only.
        # Corresponds to the JSON property `counterEvents`
        # @return [Array<Google::Apis::DisplayvideoV1::CounterEvent>]
        attr_accessor :counter_events
      
        # Output only. The timestamp when the creative was created. Assigned by
        # the system.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # Output only. A list of attributes of the creative that is generated by the
        # system.
        # Corresponds to the JSON property `creativeAttributes`
        # @return [Array<String>]
        attr_accessor :creative_attributes
      
        # Output only. The unique ID of the creative. Assigned by the system.
        # Corresponds to the JSON property `creativeId`
        # @return [Fixnum]
        attr_accessor :creative_id
      
        # Required. Immutable. The type of the creative.
        # Corresponds to the JSON property `creativeType`
        # @return [String]
        attr_accessor :creative_type
      
        # Dimensions.
        # Corresponds to the JSON property `dimensions`
        # @return [Google::Apis::DisplayvideoV1::Dimensions]
        attr_accessor :dimensions
      
        # Required. The display name of the creative.
        # Must be UTF-8 encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. Indicates whether the creative is dynamic.
        # Corresponds to the JSON property `dynamic`
        # @return [Boolean]
        attr_accessor :dynamic
        alias_method :dynamic?, :dynamic
      
        # Required. Controls whether or not the creative can serve.
        # Accepted values are:
        # * `ENTITY_STATUS_ACTIVE`
        # * `ENTITY_STATUS_ARCHIVED`
        # * `ENTITY_STATUS_PAUSED`
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Required. Exit events for this creative.
        # An exit (also known as a click tag) is any area in your creative that
        # someone can click or tap to open an advertiser's landing page.
        # Every creative must include at least one exit.
        # You can add an exit to your creative in any of the following ways:
        # * Use Google Web Designer's tap area.
        # * Define a JavaScript variable called "clickTag".
        # * Use the Enabler (Enabler.exit()) to track exits in rich media formats.
        # Corresponds to the JSON property `exitEvents`
        # @return [Array<Google::Apis::DisplayvideoV1::ExitEvent>]
        attr_accessor :exit_events
      
        # Optional. Indicates the creative will automatically expand on hover.
        # Optional and only valid for third-party expandable creatives.
        # Third-party expandable creatives are creatives with following hosting
        # source:
        # * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type:
        # * `CREATIVE_TYPE_EXPANDABLE`
        # Corresponds to the JSON property `expandOnHover`
        # @return [Boolean]
        attr_accessor :expand_on_hover
        alias_method :expand_on_hover?, :expand_on_hover
      
        # Optional. Specifies the expanding direction of the creative.
        # Required and only valid for third-party expandable creatives.
        # Third-party expandable creatives are creatives with following hosting
        # source:
        # * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type:
        # * `CREATIVE_TYPE_EXPANDABLE`
        # Corresponds to the JSON property `expandingDirection`
        # @return [String]
        attr_accessor :expanding_direction
      
        # Required. Indicates where the creative is hosted.
        # Corresponds to the JSON property `hostingSource`
        # @return [String]
        attr_accessor :hosting_source
      
        # Output only. Indicates the third-party VAST tag creative requires HTML5 Video
        # support.
        # Output only and only valid for third-party VAST tag creatives.
        # Third-party VAST tag creatives are creatives with following
        # hosting_source:
        # * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type:
        # * `CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `html5Video`
        # @return [Boolean]
        attr_accessor :html5_video
        alias_method :html5_video?, :html5_video
      
        # Indicates whether Integral Ad Science (IAS) campaign monitoring is enabled.
        # To enable this for the creative, make sure the
        # Advertiser.creative_config.ias_client_id
        # has been set to your IAS client ID.
        # Corresponds to the JSON property `iasCampaignMonitoring`
        # @return [Boolean]
        attr_accessor :ias_campaign_monitoring
        alias_method :ias_campaign_monitoring?, :ias_campaign_monitoring
      
        # ID information used to link this creative to an external system.
        # Must be UTF-8 encoded with a length of no more than 10,000 characters.
        # Corresponds to the JSON property `integrationCode`
        # @return [String]
        attr_accessor :integration_code
      
        # JavaScript measurement URL from supported third-party verification
        # providers (ComScore, DoubleVerify, IAS, Moat). HTML script tags are not
        # supported.
        # This field is only supported in following
        # creative_type:
        # * `CREATIVE_TYPE_NATIVE`
        # * `CREATIVE_TYPE_NATIVE_SITE_SQUARE`
        # * `CREATIVE_TYPE_NATIVE_APP_INSTALL`
        # * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE`
        # * `CREATIVE_TYPE_NATIVE_VIDEO`
        # Corresponds to the JSON property `jsTrackerUrl`
        # @return [String]
        attr_accessor :js_tracker_url
      
        # Output only. Media duration of the creative.
        # Applicable when creative_type
        # is one of:
        # * `CREATIVE_TYPE_VIDEO`
        # * `CREATIVE_TYPE_AUDIO`
        # * `CREATIVE_TYPE_NATIVE_VIDEO`
        # * `CREATIVE_TYPE_PUBLISHER_HOSTED`
        # Corresponds to the JSON property `mediaDuration`
        # @return [String]
        attr_accessor :media_duration
      
        # Output only. The resource name of the creative.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # User notes for this creative.
        # Must be UTF-8 encoded with a length of no more than 20,000 characters.
        # Corresponds to the JSON property `notes`
        # @return [String]
        attr_accessor :notes
      
        # OBA Icon for a Creative
        # Corresponds to the JSON property `obaIcon`
        # @return [Google::Apis::DisplayvideoV1::ObaIcon]
        attr_accessor :oba_icon
      
        # The length an audio or a video has been played.
        # Corresponds to the JSON property `progressOffset`
        # @return [Google::Apis::DisplayvideoV1::AudioVideoOffset]
        attr_accessor :progress_offset
      
        # Optional. Indicates that the creative relies on HTML5 to render properly.
        # Optional and only valid for third-party tag creatives.
        # Third-party tag creatives are creatives with following
        # hosting_source:
        # * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type:
        # * `CREATIVE_TYPE_STANDARD`
        # * `CREATIVE_TYPE_EXPANDABLE`
        # Corresponds to the JSON property `requireHtml5`
        # @return [Boolean]
        attr_accessor :require_html5
        alias_method :require_html5?, :require_html5
      
        # Optional. Indicates that the creative requires MRAID (Mobile Rich Media Ad
        # Interface
        # Definitions system).
        # Set this if the creative relies on mobile gestures for interactivity, such
        # as swiping or tapping.
        # Optional and only valid for third-party tag creatives.
        # Third-party tag creatives are creatives with following
        # hosting_source:
        # * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type:
        # * `CREATIVE_TYPE_STANDARD`
        # * `CREATIVE_TYPE_EXPANDABLE`
        # Corresponds to the JSON property `requireMraid`
        # @return [Boolean]
        attr_accessor :require_mraid
        alias_method :require_mraid?, :require_mraid
      
        # Optional. Indicates that the creative will wait for a return ping for
        # attribution.
        # Only valid when using a Campaign Manager tracking ad with a third-party ad
        # server parameter and the $`DC_DBM_TOKEN` macro.
        # Optional and only valid for third-party tag creatives or third-party VAST
        # tag creatives.
        # Third-party tag creatives are creatives with following
        # hosting_source:
        # * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type:
        # * `CREATIVE_TYPE_STANDARD`
        # * `CREATIVE_TYPE_EXPANDABLE`
        # Third-party VAST tag creatives are creatives with following
        # hosting_source:
        # * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type:
        # * `CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `requirePingForAttribution`
        # @return [Boolean]
        attr_accessor :require_ping_for_attribution
        alias_method :require_ping_for_attribution?, :require_ping_for_attribution
      
        # Review statuses for the creative.
        # Corresponds to the JSON property `reviewStatus`
        # @return [Google::Apis::DisplayvideoV1::ReviewStatusInfo]
        attr_accessor :review_status
      
        # The length an audio or a video has been played.
        # Corresponds to the JSON property `skipOffset`
        # @return [Google::Apis::DisplayvideoV1::AudioVideoOffset]
        attr_accessor :skip_offset
      
        # Whether the user can choose to skip a video creative.
        # This field is only supported for the following
        # creative_type:
        # * `CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `skippable`
        # @return [Boolean]
        attr_accessor :skippable
        alias_method :skippable?, :skippable
      
        # Optional. The original third-party tag used for the creative.
        # Required and only valid for third-party tag creatives.
        # Third-party tag creatives are creatives with following
        # hosting_source:
        # * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type:
        # * `CREATIVE_TYPE_STANDARD`
        # * `CREATIVE_TYPE_EXPANDABLE`
        # Corresponds to the JSON property `thirdPartyTag`
        # @return [String]
        attr_accessor :third_party_tag
      
        # Tracking URLs from third parties to track interactions with a video
        # creative.
        # This field is only supported for the following
        # creative_type:
        # * `CREATIVE_TYPE_AUDIO`
        # * `CREATIVE_TYPE_VIDEO`
        # * `CREATIVE_TYPE_NATIVE_VIDEO`
        # Corresponds to the JSON property `thirdPartyUrls`
        # @return [Array<Google::Apis::DisplayvideoV1::ThirdPartyUrl>]
        attr_accessor :third_party_urls
      
        # Timer custom events for a rich media creative.
        # Timers track the time during which a user views and interacts with a
        # specified part of a rich media creative.
        # A creative can have multiple timer events, each timed independently.
        # Leave it empty or unset for creatives containing image assets only.
        # Corresponds to the JSON property `timerEvents`
        # @return [Array<Google::Apis::DisplayvideoV1::TimerEvent>]
        attr_accessor :timer_events
      
        # Tracking URLs for analytics providers or third-party ad technology vendors.
        # The URLs must start with https (except on inventory that doesn't require
        # SSL compliance).
        # If using macros in your URL, use only macros supported by Display & Video
        # 360.
        # Standard URLs only, no IMG or SCRIPT tags.
        # This field is only supported in following
        # creative_type:
        # * `CREATIVE_TYPE_NATIVE`
        # * `CREATIVE_TYPE_NATIVE_SITE_SQUARE`
        # * `CREATIVE_TYPE_NATIVE_APP_INSTALL`
        # * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE`
        # * `CREATIVE_TYPE_NATIVE_VIDEO`
        # Corresponds to the JSON property `trackerUrls`
        # @return [Array<String>]
        attr_accessor :tracker_urls
      
        # Output only. Audio/Video transcodes.
        # Display & Video 360 transcodes the main asset into a number of alternative
        # versions that use different file formats or have different properties
        # (resolution, audio bit rate, and video bit rate), each designed for
        # specific video players or bandwidths.
        # These transcodes give a publisher's system more options to choose from for
        # each impression on your video and ensures that the appropriate file serves
        # based on the viewer’s connection and screen size.
        # This field is only supported in following
        # creative_type:
        # * `CREATIVE_TYPE_VIDEO`
        # * `CREATIVE_TYPE_NATIVE_VIDEO`
        # * `CREATIVE_TYPE_AUDIO`
        # Corresponds to the JSON property `transcodes`
        # @return [Array<Google::Apis::DisplayvideoV1::Transcode>]
        attr_accessor :transcodes
      
        # A creative identifier provided by a registry that is unique across all
        # platforms. This is part of the VAST 4.0 standard.
        # Corresponds to the JSON property `universalAdId`
        # @return [Google::Apis::DisplayvideoV1::UniversalAdId]
        attr_accessor :universal_ad_id
      
        # Output only. The timestamp when the creative was last updated. Assigned by
        # the system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        # Optional. The URL of the VAST tag for a third-party VAST tag creative.
        # Required and only valid for third-party VAST tag creatives.
        # Third-party VAST tag creatives are creatives with following
        # hosting_source:
        # * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type:
        # * `CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `vastTagUrl`
        # @return [String]
        attr_accessor :vast_tag_url
      
        # Output only. Indicates the third-party VAST tag creative requires VPAID (
        # Digital Video
        # Player-Ad Interface).
        # Output only and only valid for third-party VAST tag creatives.
        # Third-party VAST tag creatives are creatives with following
        # hosting_source:
        # * `HOSTING_SOURCE_THIRD_PARTY`
        # combined with following creative_type:
        # * `CREATIVE_TYPE_VIDEO`
        # Corresponds to the JSON property `vpaid`
        # @return [Boolean]
        attr_accessor :vpaid
        alias_method :vpaid?, :vpaid
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @additional_dimensions = args[:additional_dimensions] if args.key?(:additional_dimensions)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @appended_tag = args[:appended_tag] if args.key?(:appended_tag)
          @assets = args[:assets] if args.key?(:assets)
          @cm_placement_id = args[:cm_placement_id] if args.key?(:cm_placement_id)
          @cm_tracking_ad = args[:cm_tracking_ad] if args.key?(:cm_tracking_ad)
          @companion_creative_ids = args[:companion_creative_ids] if args.key?(:companion_creative_ids)
          @counter_events = args[:counter_events] if args.key?(:counter_events)
          @create_time = args[:create_time] if args.key?(:create_time)
          @creative_attributes = args[:creative_attributes] if args.key?(:creative_attributes)
          @creative_id = args[:creative_id] if args.key?(:creative_id)
          @creative_type = args[:creative_type] if args.key?(:creative_type)
          @dimensions = args[:dimensions] if args.key?(:dimensions)
          @display_name = args[:display_name] if args.key?(:display_name)
          @dynamic = args[:dynamic] if args.key?(:dynamic)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @exit_events = args[:exit_events] if args.key?(:exit_events)
          @expand_on_hover = args[:expand_on_hover] if args.key?(:expand_on_hover)
          @expanding_direction = args[:expanding_direction] if args.key?(:expanding_direction)
          @hosting_source = args[:hosting_source] if args.key?(:hosting_source)
          @html5_video = args[:html5_video] if args.key?(:html5_video)
          @ias_campaign_monitoring = args[:ias_campaign_monitoring] if args.key?(:ias_campaign_monitoring)
          @integration_code = args[:integration_code] if args.key?(:integration_code)
          @js_tracker_url = args[:js_tracker_url] if args.key?(:js_tracker_url)
          @media_duration = args[:media_duration] if args.key?(:media_duration)
          @name = args[:name] if args.key?(:name)
          @notes = args[:notes] if args.key?(:notes)
          @oba_icon = args[:oba_icon] if args.key?(:oba_icon)
          @progress_offset = args[:progress_offset] if args.key?(:progress_offset)
          @require_html5 = args[:require_html5] if args.key?(:require_html5)
          @require_mraid = args[:require_mraid] if args.key?(:require_mraid)
          @require_ping_for_attribution = args[:require_ping_for_attribution] if args.key?(:require_ping_for_attribution)
          @review_status = args[:review_status] if args.key?(:review_status)
          @skip_offset = args[:skip_offset] if args.key?(:skip_offset)
          @skippable = args[:skippable] if args.key?(:skippable)
          @third_party_tag = args[:third_party_tag] if args.key?(:third_party_tag)
          @third_party_urls = args[:third_party_urls] if args.key?(:third_party_urls)
          @timer_events = args[:timer_events] if args.key?(:timer_events)
          @tracker_urls = args[:tracker_urls] if args.key?(:tracker_urls)
          @transcodes = args[:transcodes] if args.key?(:transcodes)
          @universal_ad_id = args[:universal_ad_id] if args.key?(:universal_ad_id)
          @update_time = args[:update_time] if args.key?(:update_time)
          @vast_tag_url = args[:vast_tag_url] if args.key?(:vast_tag_url)
          @vpaid = args[:vpaid] if args.key?(:vpaid)
        end
      end
      
      # Creative requirements configuration for the inventory source.
      class CreativeConfig
        include Google::Apis::Core::Hashable
      
        # The type of creative that can be assigned to the inventory source.
        # Corresponds to the JSON property `creativeType`
        # @return [String]
        attr_accessor :creative_type
      
        # The configuration for display creatives.
        # Corresponds to the JSON property `displayCreativeConfig`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceDisplayCreativeConfig]
        attr_accessor :display_creative_config
      
        # The configuration for video creatives.
        # Corresponds to the JSON property `videoCreativeConfig`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceVideoCreativeConfig]
        attr_accessor :video_creative_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creative_type = args[:creative_type] if args.key?(:creative_type)
          @display_creative_config = args[:display_creative_config] if args.key?(:display_creative_config)
          @video_creative_config = args[:video_creative_config] if args.key?(:video_creative_config)
        end
      end
      
      # Describes a custom list entity, such as a custom affinity or custom intent
      # audience list.
      class CustomList
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the custom list. Assigned by the system.
        # Corresponds to the JSON property `customListId`
        # @return [Fixnum]
        attr_accessor :custom_list_id
      
        # Output only. The display name of the custom list.
        # .
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The resource name of the custom list.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_list_id = args[:custom_list_id] if args.key?(:custom_list_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Details of custom list group.
      # All custom list targeting settings are logically ‘OR’ of each other.
      class CustomListGroup
        include Google::Apis::Core::Hashable
      
        # Required. All custom list targeting settings in custom list group.
        # Repeated settings with same id will be ignored.
        # Corresponds to the JSON property `settings`
        # @return [Array<Google::Apis::DisplayvideoV1::CustomListTargetingSetting>]
        attr_accessor :settings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @settings = args[:settings] if args.key?(:settings)
        end
      end
      
      # Details of custom list targeting setting.
      class CustomListTargetingSetting
        include Google::Apis::Core::Hashable
      
        # Required. Custom id of custom list targeting setting.
        # This id is custom_list_id.
        # Corresponds to the JSON property `customListId`
        # @return [Fixnum]
        attr_accessor :custom_list_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_list_id = args[:custom_list_id] if args.key?(:custom_list_id)
        end
      end
      
      # Represents a whole or partial calendar date, e.g. a birthday. The time of day
      # and time zone are either specified elsewhere or are not significant. The date
      # is relative to the Proleptic Gregorian Calendar. This can represent:
      # * A full date, with non-zero year, month and day values
      # * A month and day value, with a zero year, e.g. an anniversary
      # * A year on its own, with zero month and day values
      # * A year and month value, with a zero day, e.g. a credit card expiration date
      # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      class Date
        include Google::Apis::Core::Hashable
      
        # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
        # if specifying a year by itself or a year and month where the day is not
        # significant.
        # Corresponds to the JSON property `day`
        # @return [Fixnum]
        attr_accessor :day
      
        # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
        # month and day.
        # Corresponds to the JSON property `month`
        # @return [Fixnum]
        attr_accessor :month
      
        # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
        # a year.
        # Corresponds to the JSON property `year`
        # @return [Fixnum]
        attr_accessor :year
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @day = args[:day] if args.key?(:day)
          @month = args[:month] if args.key?(:month)
          @year = args[:year] if args.key?(:year)
        end
      end
      
      # A date range.
      class DateRange
        include Google::Apis::Core::Hashable
      
        # Represents a whole or partial calendar date, e.g. a birthday. The time of day
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
        # Corresponds to the JSON property `endDate`
        # @return [Google::Apis::DisplayvideoV1::Date]
        attr_accessor :end_date
      
        # Represents a whole or partial calendar date, e.g. a birthday. The time of day
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
        # Corresponds to the JSON property `startDate`
        # @return [Google::Apis::DisplayvideoV1::Date]
        attr_accessor :start_date
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @end_date = args[:end_date] if args.key?(:end_date)
          @start_date = args[:start_date] if args.key?(:start_date)
        end
      end
      
      # Representation of a segment of time defined on a specific day of the week and
      # with a start and end time.
      # The time represented by `start_hour` must be before the time represented by
      # `end_hour`.
      class DayAndTimeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The day of the week for this day and time targeting setting.
        # Corresponds to the JSON property `dayOfWeek`
        # @return [String]
        attr_accessor :day_of_week
      
        # Required. The end hour for day and time targeting. Must be between 1 (1 hour
        # after
        # start of day) and 24 (end of day).
        # Corresponds to the JSON property `endHour`
        # @return [Fixnum]
        attr_accessor :end_hour
      
        # Required. The start hour for day and time targeting. Must be between 0 (start
        # of day)
        # and 23 (1 hour before end of day).
        # Corresponds to the JSON property `startHour`
        # @return [Fixnum]
        attr_accessor :start_hour
      
        # Required. The mechanism used to determine which timezone to use for this day
        # and time
        # targeting setting.
        # Corresponds to the JSON property `timeZoneResolution`
        # @return [String]
        attr_accessor :time_zone_resolution
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @day_of_week = args[:day_of_week] if args.key?(:day_of_week)
          @end_hour = args[:end_hour] if args.key?(:end_hour)
          @start_hour = args[:start_hour] if args.key?(:start_hour)
          @time_zone_resolution = args[:time_zone_resolution] if args.key?(:time_zone_resolution)
        end
      end
      
      # A request listing which assigned targeting options of a given targeting type
      # should be deleted.
      class DeleteAssignedTargetingOptionsRequest
        include Google::Apis::Core::Hashable
      
        # Required. The assigned targeting option IDs to delete.
        # Corresponds to the JSON property `assignedTargetingOptionIds`
        # @return [Array<String>]
        attr_accessor :assigned_targeting_option_ids
      
        # Required. Identifies the type of this assigned targeting option.
        # Corresponds to the JSON property `targetingType`
        # @return [String]
        attr_accessor :targeting_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_option_ids = args[:assigned_targeting_option_ids] if args.key?(:assigned_targeting_option_ids)
          @targeting_type = args[:targeting_type] if args.key?(:targeting_type)
        end
      end
      
      # Assigned device make and model targeting option details. This will be
      # populated in the
      # device_make_model_details
      # field when
      # targeting_type is
      # `TARGETING_TYPE_DEVICE_MAKE_MODEL`.
      class DeviceMakeModelAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the device make and model.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id field when
        # targeting_type is
        # `TARGETING_TYPE_DEVICE_MAKE_MODEL`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable device make and model. This will be populated in the
      # device_make_model_details
      # field of a TargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_DEVICE_MAKE_MODEL`.
      class DeviceMakeModelTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the device make and model.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # Targeting details for device type. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_DEVICE_TYPE`.
      class DeviceTypeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the device type.
        # Corresponds to the JSON property `deviceType`
        # @return [String]
        attr_accessor :device_type
      
        # Required. ID of the device type.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @device_type = args[:device_type] if args.key?(:device_type)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable device type. This will be populated in the
      # device_type_details field of a
      # TargetingOption when targeting_type is
      # `TARGETING_TYPE_DEVICE_TYPE`.
      class DeviceTypeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The device type that is used to be targeted.
        # Corresponds to the JSON property `deviceType`
        # @return [String]
        attr_accessor :device_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @device_type = args[:device_type] if args.key?(:device_type)
        end
      end
      
      # Targeting details for digital content label. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION`.
      class DigitalContentLabelAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the digital content label rating tier.
        # Corresponds to the JSON property `contentRatingTier`
        # @return [String]
        attr_accessor :content_rating_tier
      
        # Required. ID of the digital content label to be EXCLUDED.
        # Corresponds to the JSON property `excludedTargetingOptionId`
        # @return [String]
        attr_accessor :excluded_targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_rating_tier = args[:content_rating_tier] if args.key?(:content_rating_tier)
          @excluded_targeting_option_id = args[:excluded_targeting_option_id] if args.key?(:excluded_targeting_option_id)
        end
      end
      
      # Represents a targetable digital content label rating tier. This will be
      # populated in the
      # digital_content_label_details
      # field of the TargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION`.
      class DigitalContentLabelTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. An enum for the content label brand safety tiers.
        # Corresponds to the JSON property `contentRatingTier`
        # @return [String]
        attr_accessor :content_rating_tier
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_rating_tier = args[:content_rating_tier] if args.key?(:content_rating_tier)
        end
      end
      
      # Dimensions.
      class Dimensions
        include Google::Apis::Core::Hashable
      
        # The height in pixels.
        # Corresponds to the JSON property `heightPixels`
        # @return [Fixnum]
        attr_accessor :height_pixels
      
        # The width in pixels.
        # Corresponds to the JSON property `widthPixels`
        # @return [Fixnum]
        attr_accessor :width_pixels
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @height_pixels = args[:height_pixels] if args.key?(:height_pixels)
          @width_pixels = args[:width_pixels] if args.key?(:width_pixels)
        end
      end
      
      # Details of DoubleVerify settings.
      class DoubleVerify
        include Google::Apis::Core::Hashable
      
        # Details of DoubleVerify star ratings settings.
        # Corresponds to the JSON property `appStarRating`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerifyAppStarRating]
        attr_accessor :app_star_rating
      
        # Avoid bidding on apps with the age rating.
        # Corresponds to the JSON property `avoidedAgeRatings`
        # @return [Array<String>]
        attr_accessor :avoided_age_ratings
      
        # Settings for brand safety controls.
        # Corresponds to the JSON property `brandSafetyCategories`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerifyBrandSafetyCategories]
        attr_accessor :brand_safety_categories
      
        # Details of DoubleVerify display viewability settings.
        # Corresponds to the JSON property `displayViewability`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerifyDisplayViewability]
        attr_accessor :display_viewability
      
        # DoubleVerify Fraud & Invalid Traffic settings.
        # Corresponds to the JSON property `fraudInvalidTraffic`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerifyFraudInvalidTraffic]
        attr_accessor :fraud_invalid_traffic
      
        # Details of DoubleVerify video viewability settings.
        # Corresponds to the JSON property `videoViewability`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerifyVideoViewability]
        attr_accessor :video_viewability
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @app_star_rating = args[:app_star_rating] if args.key?(:app_star_rating)
          @avoided_age_ratings = args[:avoided_age_ratings] if args.key?(:avoided_age_ratings)
          @brand_safety_categories = args[:brand_safety_categories] if args.key?(:brand_safety_categories)
          @display_viewability = args[:display_viewability] if args.key?(:display_viewability)
          @fraud_invalid_traffic = args[:fraud_invalid_traffic] if args.key?(:fraud_invalid_traffic)
          @video_viewability = args[:video_viewability] if args.key?(:video_viewability)
        end
      end
      
      # Details of DoubleVerify star ratings settings.
      class DoubleVerifyAppStarRating
        include Google::Apis::Core::Hashable
      
        # Avoid bidding on apps with insufficient star ratings.
        # Corresponds to the JSON property `avoidInsufficientStarRating`
        # @return [Boolean]
        attr_accessor :avoid_insufficient_star_rating
        alias_method :avoid_insufficient_star_rating?, :avoid_insufficient_star_rating
      
        # Avoid bidding on apps with the star ratings.
        # Corresponds to the JSON property `avoidedStarRating`
        # @return [String]
        attr_accessor :avoided_star_rating
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @avoid_insufficient_star_rating = args[:avoid_insufficient_star_rating] if args.key?(:avoid_insufficient_star_rating)
          @avoided_star_rating = args[:avoided_star_rating] if args.key?(:avoided_star_rating)
        end
      end
      
      # Settings for brand safety controls.
      class DoubleVerifyBrandSafetyCategories
        include Google::Apis::Core::Hashable
      
        # Unknown or unrateable.
        # Corresponds to the JSON property `avoidUnknownBrandSafetyCategory`
        # @return [Boolean]
        attr_accessor :avoid_unknown_brand_safety_category
        alias_method :avoid_unknown_brand_safety_category?, :avoid_unknown_brand_safety_category
      
        # Brand safety high severity avoidance categories.
        # Corresponds to the JSON property `avoidedHighSeverityCategories`
        # @return [Array<String>]
        attr_accessor :avoided_high_severity_categories
      
        # Brand safety medium severity avoidance categories.
        # Corresponds to the JSON property `avoidedMediumSeverityCategories`
        # @return [Array<String>]
        attr_accessor :avoided_medium_severity_categories
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @avoid_unknown_brand_safety_category = args[:avoid_unknown_brand_safety_category] if args.key?(:avoid_unknown_brand_safety_category)
          @avoided_high_severity_categories = args[:avoided_high_severity_categories] if args.key?(:avoided_high_severity_categories)
          @avoided_medium_severity_categories = args[:avoided_medium_severity_categories] if args.key?(:avoided_medium_severity_categories)
        end
      end
      
      # Details of DoubleVerify display viewability settings.
      class DoubleVerifyDisplayViewability
        include Google::Apis::Core::Hashable
      
        # Target web and app inventory to maximize IAB viewable rate.
        # Corresponds to the JSON property `iab`
        # @return [String]
        attr_accessor :iab
      
        # Target web and app inventory to maximize 100% viewable duration.
        # Corresponds to the JSON property `viewableDuring`
        # @return [String]
        attr_accessor :viewable_during
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @iab = args[:iab] if args.key?(:iab)
          @viewable_during = args[:viewable_during] if args.key?(:viewable_during)
        end
      end
      
      # DoubleVerify Fraud & Invalid Traffic settings.
      class DoubleVerifyFraudInvalidTraffic
        include Google::Apis::Core::Hashable
      
        # Insufficient Historical Fraud & IVT Stats.
        # Corresponds to the JSON property `avoidInsufficientOption`
        # @return [Boolean]
        attr_accessor :avoid_insufficient_option
        alias_method :avoid_insufficient_option?, :avoid_insufficient_option
      
        # Avoid Sites and Apps with historical Fraud & IVT.
        # Corresponds to the JSON property `avoidedFraudOption`
        # @return [String]
        attr_accessor :avoided_fraud_option
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @avoid_insufficient_option = args[:avoid_insufficient_option] if args.key?(:avoid_insufficient_option)
          @avoided_fraud_option = args[:avoided_fraud_option] if args.key?(:avoided_fraud_option)
        end
      end
      
      # Details of DoubleVerify video viewability settings.
      class DoubleVerifyVideoViewability
        include Google::Apis::Core::Hashable
      
        # Target inventory to maximize impressions with 400x300 or greater player
        # size.
        # Corresponds to the JSON property `playerImpressionRate`
        # @return [String]
        attr_accessor :player_impression_rate
      
        # Target web inventory to maximize IAB viewable rate.
        # Corresponds to the JSON property `videoIab`
        # @return [String]
        attr_accessor :video_iab
      
        # Target web inventory to maximize fully viewable rate.
        # Corresponds to the JSON property `videoViewableRate`
        # @return [String]
        attr_accessor :video_viewable_rate
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @player_impression_rate = args[:player_impression_rate] if args.key?(:player_impression_rate)
          @video_iab = args[:video_iab] if args.key?(:video_iab)
          @video_viewable_rate = args[:video_viewable_rate] if args.key?(:video_viewable_rate)
        end
      end
      
      # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      # service Foo `
      # rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      # `
      # The JSON representation for `Empty` is empty JSON object ````.
      class Empty
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Assigned environment targeting option details. This will be populated
      # in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_ENVIRONMENT`.
      class EnvironmentAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The serving environment.
        # Corresponds to the JSON property `environment`
        # @return [String]
        attr_accessor :environment
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_ENVIRONMENT` (e.g., "508010"
        # for targeting the `ENVIRONMENT_WEB_OPTIMIZED` option).
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @environment = args[:environment] if args.key?(:environment)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable environment. This will be populated in the
      # environment_details field of a
      # TargetingOption when targeting_type is
      # `TARGETING_TYPE_ENVIRONMENT`.
      class EnvironmentTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The serving environment.
        # Corresponds to the JSON property `environment`
        # @return [String]
        attr_accessor :environment
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @environment = args[:environment] if args.key?(:environment)
        end
      end
      
      # Details for assigned exchange targeting option. This will be populated in
      # the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_EXCHANGE`.
      class ExchangeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_EXCHANGE`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Exchange review status for the creative.
      class ExchangeReviewStatus
        include Google::Apis::Core::Hashable
      
        # The exchange reviewing the creative.
        # Corresponds to the JSON property `exchange`
        # @return [String]
        attr_accessor :exchange
      
        # Status of the exchange review.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exchange = args[:exchange] if args.key?(:exchange)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # Represents a targetable exchange. This will be populated in the
      # exchange_details field
      # of a TargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_EXCHANGE`.
      class ExchangeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The type of exchange.
        # Corresponds to the JSON property `exchange`
        # @return [String]
        attr_accessor :exchange
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exchange = args[:exchange] if args.key?(:exchange)
        end
      end
      
      # Exit event of the creative.
      class ExitEvent
        include Google::Apis::Core::Hashable
      
        # The name of the click tag of the exit event.
        # The name must be unique within one creative.
        # Leave it empty or unset for creatives containing image assets only.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The name used to identify this event in reports.
        # Leave it empty or unset for creatives containing image assets only.
        # Corresponds to the JSON property `reportingName`
        # @return [String]
        attr_accessor :reporting_name
      
        # Required. The type of the exit event.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # Required. The click through URL of the exit event.
        # This is required when type is:
        # * `EXIT_EVENT_TYPE_DEFAULT`
        # * `EXIT_EVENT_TYPE_BACKUP`
        # Corresponds to the JSON property `url`
        # @return [String]
        attr_accessor :url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @reporting_name = args[:reporting_name] if args.key?(:reporting_name)
          @type = args[:type] if args.key?(:type)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # Describes a first or third party audience list used for targeting.
      # First party audiences are created via usage of client data.
      # Third party audiences are provided by Third Party data providers and can only
      # be licensed to customers.
      class FirstAndThirdPartyAudience
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the first and third party audience.
        # .
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The unique ID of the first and third party audience. Assigned by
        # the
        # system.
        # Corresponds to the JSON property `firstAndThirdPartyAudienceId`
        # @return [Fixnum]
        attr_accessor :first_and_third_party_audience_id
      
        # Output only. Whether the audience is a first or third party audience.
        # .
        # Corresponds to the JSON property `firstAndThirdPartyAudienceType`
        # @return [String]
        attr_accessor :first_and_third_party_audience_type
      
        # Output only. The resource name of the first and third party audience.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @first_and_third_party_audience_id = args[:first_and_third_party_audience_id] if args.key?(:first_and_third_party_audience_id)
          @first_and_third_party_audience_type = args[:first_and_third_party_audience_type] if args.key?(:first_and_third_party_audience_type)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Details of first and third party audience group.
      # All first and third party audience targeting settings are logically ‘OR’ of
      # each other.
      class FirstAndThirdPartyAudienceGroup
        include Google::Apis::Core::Hashable
      
        # Required. All first and third party audience targeting settings in first and
        # third party audience group.
        # Repeated settings with same id are not allowed.
        # Corresponds to the JSON property `settings`
        # @return [Array<Google::Apis::DisplayvideoV1::FirstAndThirdPartyAudienceTargetingSetting>]
        attr_accessor :settings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @settings = args[:settings] if args.key?(:settings)
        end
      end
      
      # Details of first and third party audience targeting setting.
      class FirstAndThirdPartyAudienceTargetingSetting
        include Google::Apis::Core::Hashable
      
        # Required. First and third party audience id of the first and third party
        # audience
        # targeting setting. This id is
        # first_and_third_party_audience_id.
        # Corresponds to the JSON property `firstAndThirdPartyAudienceId`
        # @return [Fixnum]
        attr_accessor :first_and_third_party_audience_id
      
        # The recency of the first and third party audience targeting setting.
        # Only applicable to first party audiences, otherwise
        # will be ignored. For more info, refer to
        # https://support.google.com/displayvideo/answer/2949947#recency
        # When unspecified, no recency limit will be used.
        # Corresponds to the JSON property `recency`
        # @return [String]
        attr_accessor :recency
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @first_and_third_party_audience_id = args[:first_and_third_party_audience_id] if args.key?(:first_and_third_party_audience_id)
          @recency = args[:recency] if args.key?(:recency)
        end
      end
      
      # A strategy that uses a fixed bidding price.
      class FixedBidStrategy
        include Google::Apis::Core::Hashable
      
        # The fixed bid amount, in micros of the advertiser's currency.
        # For insertion order entity,
        # bid_amount_micros should be set as 0.
        # For line item entity,
        # bid_amount_micros must be greater
        # than or equal to billable unit of the given currency and smaller than or
        # equal to the upper limit 1000000000.
        # For example, 1500000 represents 1.5 standard units of the currency.
        # Corresponds to the JSON property `bidAmountMicros`
        # @return [Fixnum]
        attr_accessor :bid_amount_micros
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bid_amount_micros = args[:bid_amount_micros] if args.key?(:bid_amount_micros)
        end
      end
      
      # A single Floodlight group.
      class FloodlightGroup
        include Google::Apis::Core::Hashable
      
        # Configuration for custom Active View video viewability metrics.
        # Corresponds to the JSON property `activeViewConfig`
        # @return [Google::Apis::DisplayvideoV1::ActiveViewVideoViewabilityMetricConfig]
        attr_accessor :active_view_config
      
        # User-defined custom variables owned by the Floodlight group.
        # Use custom Floodlight variables to create reporting data that is tailored
        # to your unique business needs. Custom Floodlight variables use the keys
        # `U1=`, `U2=`, and so on, and can take any values that you choose to pass to
        # them. You can use them to track virtually any type of data that you collect
        # about your customers, such as the genre of movie that a customer purchases,
        # the country to which the item is shipped, and so on.
        # Custom Floodlight variables may not be used to pass any data that could be
        # used or recognized as personally identifiable information (PII).
        # Example:
        # `custom_variables `
        # fields `
        # "U1": value ` number_value: 123.4 `,
        # "U2": value ` string_value: "MyVariable2" `,
        # "U3": value ` string_value: "MyVariable3" `
        # `
        # ``
        # Acceptable values for keys are "U1" through "U100", inclusive. String
        # values must be less than 64 characters long, and cannot contain the
        # following characters: `"<>`.
        # Corresponds to the JSON property `customVariables`
        # @return [Hash<String,Object>]
        attr_accessor :custom_variables
      
        # Required. The display name of the Floodlight group.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The unique ID of the Floodlight group. Assigned by the system.
        # Corresponds to the JSON property `floodlightGroupId`
        # @return [Fixnum]
        attr_accessor :floodlight_group_id
      
        # Specifies how many days into the past to look when determining whether to
        # record a conversion.
        # Corresponds to the JSON property `lookbackWindow`
        # @return [Google::Apis::DisplayvideoV1::LookbackWindow]
        attr_accessor :lookback_window
      
        # Output only. The resource name of the Floodlight group.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Required. The web tag type enabled for the Floodlight group.
        # Corresponds to the JSON property `webTagType`
        # @return [String]
        attr_accessor :web_tag_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @active_view_config = args[:active_view_config] if args.key?(:active_view_config)
          @custom_variables = args[:custom_variables] if args.key?(:custom_variables)
          @display_name = args[:display_name] if args.key?(:display_name)
          @floodlight_group_id = args[:floodlight_group_id] if args.key?(:floodlight_group_id)
          @lookback_window = args[:lookback_window] if args.key?(:lookback_window)
          @name = args[:name] if args.key?(:name)
          @web_tag_type = args[:web_tag_type] if args.key?(:web_tag_type)
        end
      end
      
      # Settings that control the number of times a user may be shown with the same
      # ad during a given time period.
      class FrequencyCap
        include Google::Apis::Core::Hashable
      
        # The maximum number of times a user may be shown with the same ad
        # during this period. Must be greater than 0.
        # Applicable when unlimited is `false`.
        # Corresponds to the JSON property `maxImpressions`
        # @return [Fixnum]
        attr_accessor :max_impressions
      
        # The time unit in which the frequency cap will be applied.
        # Applicable when unlimited is `false`.
        # Corresponds to the JSON property `timeUnit`
        # @return [String]
        attr_accessor :time_unit
      
        # The number of time_unit the frequency cap will
        # last.
        # Applicable when unlimited is `false`.
        # The following restrictions apply based on the value of
        # time_unit:
        # * `TIME_UNIT_LIFETIME` - this field is output only and will
        # default to 1
        # * `TIME_UNIT_MONTHS` - must be between 1 and 2
        # * `TIME_UNIT_WEEKS` - must be between 1 and 4
        # * `TIME_UNIT_DAYS` - must be between 1 and 6
        # * `TIME_UNIT_HOURS` - must be between 1 and 23
        # * `TIME_UNIT_MINUTES` - must be between 1 and 59
        # Corresponds to the JSON property `timeUnitCount`
        # @return [Fixnum]
        attr_accessor :time_unit_count
      
        # Whether unlimited frequency capping is applied. When this field is set to
        # `true`, the remaining frequency cap fields are not applicable.
        # Corresponds to the JSON property `unlimited`
        # @return [Boolean]
        attr_accessor :unlimited
        alias_method :unlimited?, :unlimited
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_impressions = args[:max_impressions] if args.key?(:max_impressions)
          @time_unit = args[:time_unit] if args.key?(:time_unit)
          @time_unit_count = args[:time_unit_count] if args.key?(:time_unit_count)
          @unlimited = args[:unlimited] if args.key?(:unlimited)
        end
      end
      
      # Details for assigned gender targeting option. This will be populated in
      # the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARTGETING_TYPE_GENDER`.
      class GenderAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The gender of the audience.
        # Corresponds to the JSON property `gender`
        # @return [String]
        attr_accessor :gender
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_GENDER`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @gender = args[:gender] if args.key?(:gender)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable gender. This will be populated in the
      # gender_details field of a TargetingOption
      # when targeting_type is
      # `TARGETING_TYPE_GENDER`.
      class GenderTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The gender of an audience.
        # Corresponds to the JSON property `gender`
        # @return [String]
        attr_accessor :gender
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @gender = args[:gender] if args.key?(:gender)
        end
      end
      
      # Details for assigned geographic region targeting option. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_GEO_REGION`.
      class GeoRegionAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the geographic region (e.g., "Ontario, Canada"
        # ).
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The type of geographic region targeting.
        # Corresponds to the JSON property `geoRegionType`
        # @return [String]
        attr_accessor :geo_region_type
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_GEO_REGION`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @geo_region_type = args[:geo_region_type] if args.key?(:geo_region_type)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable geographic region. This will be populated in the
      # geo_region_details field when
      # targeting_type is
      # `TARGETING_TYPE_GEO_REGION`.
      class GeoRegionTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the geographic region (e.g., "Ontario, Canada"
        # ).
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The type of geographic region targeting.
        # Corresponds to the JSON property `geoRegionType`
        # @return [String]
        attr_accessor :geo_region_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @geo_region_type = args[:geo_region_type] if args.key?(:geo_region_type)
        end
      end
      
      # Describes a Google audience resource.
      # Includes Google audience lists.
      class GoogleAudience
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the Google audience.
        # .
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The unique ID of the Google audience. Assigned by the system.
        # Corresponds to the JSON property `googleAudienceId`
        # @return [Fixnum]
        attr_accessor :google_audience_id
      
        # Output only. The type of Google audience.
        # .
        # Corresponds to the JSON property `googleAudienceType`
        # @return [String]
        attr_accessor :google_audience_type
      
        # Output only. The resource name of the google audience.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @google_audience_id = args[:google_audience_id] if args.key?(:google_audience_id)
          @google_audience_type = args[:google_audience_type] if args.key?(:google_audience_type)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Details of Google audience group.
      # All Google audience targeting settings are logically ‘OR’ of each other.
      class GoogleAudienceGroup
        include Google::Apis::Core::Hashable
      
        # Required. All Google audience targeting settings in Google audience group.
        # Repeated settings with same id will be ignored.
        # Corresponds to the JSON property `settings`
        # @return [Array<Google::Apis::DisplayvideoV1::GoogleAudienceTargetingSetting>]
        attr_accessor :settings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @settings = args[:settings] if args.key?(:settings)
        end
      end
      
      # Details of Google audience targeting setting.
      class GoogleAudienceTargetingSetting
        include Google::Apis::Core::Hashable
      
        # Required. Google audience id of the Google audience targeting setting.
        # This id is google_audience_id.
        # Corresponds to the JSON property `googleAudienceId`
        # @return [Fixnum]
        attr_accessor :google_audience_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @google_audience_id = args[:google_audience_id] if args.key?(:google_audience_id)
        end
      end
      
      # Media resource.
      class GoogleBytestreamMedia
        include Google::Apis::Core::Hashable
      
        # Name of the media resource.
        # Corresponds to the JSON property `resourceName`
        # @return [String]
        attr_accessor :resource_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_name = args[:resource_name] if args.key?(:resource_name)
        end
      end
      
      # Details for assigned household income targeting option. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_HOUSEHOLD_INCOME`.
      class HouseholdIncomeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The household income of the audience.
        # Corresponds to the JSON property `householdIncome`
        # @return [String]
        attr_accessor :household_income
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_HOUSEHOLD_INCOME`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @household_income = args[:household_income] if args.key?(:household_income)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable household income. This will be populated in the
      # household_income_details field of
      # a TargetingOption when targeting_type is
      # `TARGETING_TYPE_HOUSEHOLD_INCOME`.
      class HouseholdIncomeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The household income of an audience.
        # Corresponds to the JSON property `householdIncome`
        # @return [String]
        attr_accessor :household_income
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @household_income = args[:household_income] if args.key?(:household_income)
        end
      end
      
      # A filtering option that filters entities by their entity IDs.
      class IdFilter
        include Google::Apis::Core::Hashable
      
        # TrueView Ads to download by ID. All IDs must belong to the same
        # Advertiser or
        # Partner specified in
        # CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `adGroupAdIds`
        # @return [Array<Fixnum>]
        attr_accessor :ad_group_ad_ids
      
        # TrueView Ad Groups to download by ID. All IDs must belong to the same
        # Advertiser or
        # Partner specified in
        # CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `adGroupIds`
        # @return [Array<Fixnum>]
        attr_accessor :ad_group_ids
      
        # Campaigns to download by ID. All IDs must belong to the same
        # Advertiser or
        # Partner specified in
        # CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `campaignIds`
        # @return [Array<Fixnum>]
        attr_accessor :campaign_ids
      
        # Insertion Orders to download by ID. All IDs must belong to the same
        # Advertiser or
        # Partner specified in
        # CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `insertionOrderIds`
        # @return [Array<Fixnum>]
        attr_accessor :insertion_order_ids
      
        # Line Items to download by ID. All IDs must belong to the same
        # Advertiser or
        # Partner specified in
        # CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `lineItemIds`
        # @return [Array<Fixnum>]
        attr_accessor :line_item_ids
      
        # Media Products to download by ID. All IDs must belong to the same
        # Advertiser or
        # Partner specified in
        # CreateSdfDownloadTaskRequest.
        # Corresponds to the JSON property `mediaProductIds`
        # @return [Array<Fixnum>]
        attr_accessor :media_product_ids
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ad_group_ad_ids = args[:ad_group_ad_ids] if args.key?(:ad_group_ad_ids)
          @ad_group_ids = args[:ad_group_ids] if args.key?(:ad_group_ids)
          @campaign_ids = args[:campaign_ids] if args.key?(:campaign_ids)
          @insertion_order_ids = args[:insertion_order_ids] if args.key?(:insertion_order_ids)
          @line_item_ids = args[:line_item_ids] if args.key?(:line_item_ids)
          @media_product_ids = args[:media_product_ids] if args.key?(:media_product_ids)
        end
      end
      
      # A single insertion order.
      class InsertionOrder
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the advertiser the insertion order belongs to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Settings that control the bid strategy.
        # Bid strategy determines the bid price.
        # Corresponds to the JSON property `bidStrategy`
        # @return [Google::Apis::DisplayvideoV1::BiddingStrategy]
        attr_accessor :bid_strategy
      
        # Settings that control how insertion order budget is allocated.
        # Corresponds to the JSON property `budget`
        # @return [Google::Apis::DisplayvideoV1::InsertionOrderBudget]
        attr_accessor :budget
      
        # Required. Immutable. The unique ID of the campaign that the insertion order
        # belongs to.
        # Corresponds to the JSON property `campaignId`
        # @return [Fixnum]
        attr_accessor :campaign_id
      
        # Required. The display name of the insertion order.
        # Must be UTF-8 encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Required. Controls whether or not the insertion order can spend its budget
        # and bid on inventory.
        # * For
        # CreateInsertionOrder method,
        # only `ENTITY_STATUS_DRAFT` is allowed. To activate an insertion order, use
        # UpdateInsertionOrder method
        # and update the status to `ENTITY_STATUS_ACTIVE` after creation.
        # * An insertion order cannot be changed back to `ENTITY_STATUS_DRAFT` status
        # from any other status.
        # * An insertion order cannot be set to `ENTITY_STATUS_ACTIVE` if its parent
        # campaign is not active.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Settings that control the number of times a user may be shown with the same
        # ad during a given time period.
        # Corresponds to the JSON property `frequencyCap`
        # @return [Google::Apis::DisplayvideoV1::FrequencyCap]
        attr_accessor :frequency_cap
      
        # Output only. The unique ID of the insertion order. Assigned by the system.
        # Corresponds to the JSON property `insertionOrderId`
        # @return [Fixnum]
        attr_accessor :insertion_order_id
      
        # Integration details of an entry.
        # Corresponds to the JSON property `integrationDetails`
        # @return [Google::Apis::DisplayvideoV1::IntegrationDetails]
        attr_accessor :integration_details
      
        # Output only. The resource name of the insertion order.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Settings that control the rate at which a budget is spent.
        # Corresponds to the JSON property `pacing`
        # @return [Google::Apis::DisplayvideoV1::Pacing]
        attr_accessor :pacing
      
        # The partner costs associated with the insertion order.
        # If absent or empty in
        # CreateInsertionOrder
        # method, the newly created insertion order will inherit partner costs from
        # the partner settings.
        # Corresponds to the JSON property `partnerCosts`
        # @return [Array<Google::Apis::DisplayvideoV1::PartnerCost>]
        attr_accessor :partner_costs
      
        # Settings that control the performance goal of a campaign or insertion order.
        # Corresponds to the JSON property `performanceGoal`
        # @return [Google::Apis::DisplayvideoV1::PerformanceGoal]
        attr_accessor :performance_goal
      
        # Output only. The timestamp when the insertion order was last updated.
        # Assigned by the system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @bid_strategy = args[:bid_strategy] if args.key?(:bid_strategy)
          @budget = args[:budget] if args.key?(:budget)
          @campaign_id = args[:campaign_id] if args.key?(:campaign_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @frequency_cap = args[:frequency_cap] if args.key?(:frequency_cap)
          @insertion_order_id = args[:insertion_order_id] if args.key?(:insertion_order_id)
          @integration_details = args[:integration_details] if args.key?(:integration_details)
          @name = args[:name] if args.key?(:name)
          @pacing = args[:pacing] if args.key?(:pacing)
          @partner_costs = args[:partner_costs] if args.key?(:partner_costs)
          @performance_goal = args[:performance_goal] if args.key?(:performance_goal)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Settings that control how insertion order budget is allocated.
      class InsertionOrderBudget
        include Google::Apis::Core::Hashable
      
        # The type of automation used to manage bid and budget for
        # the insertion order.
        # If this field is unspecified in creation, the value defaults to
        # `INSERTION_ORDER_AUTOMATION_TYPE_NONE`.
        # Corresponds to the JSON property `automationType`
        # @return [String]
        attr_accessor :automation_type
      
        # Required. The list of budget segments. Use a budget segment to specify
        # a specific budget for a given period of time an insertion order is running.
        # Corresponds to the JSON property `budgetSegments`
        # @return [Array<Google::Apis::DisplayvideoV1::InsertionOrderBudgetSegment>]
        attr_accessor :budget_segments
      
        # Required. Immutable. The budget unit specifies whether the budget is currency
        # based or
        # impression based.
        # Corresponds to the JSON property `budgetUnit`
        # @return [String]
        attr_accessor :budget_unit
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @automation_type = args[:automation_type] if args.key?(:automation_type)
          @budget_segments = args[:budget_segments] if args.key?(:budget_segments)
          @budget_unit = args[:budget_unit] if args.key?(:budget_unit)
        end
      end
      
      # Settings that control the budget of a single budget segment.
      class InsertionOrderBudgetSegment
        include Google::Apis::Core::Hashable
      
        # Required. The budget amount the insertion order will spend for the given
        # date_range.
        # The amount is in micros. Must be greater than 0. For example, 500000000
        # represents 500 standard units of the currency.
        # Corresponds to the JSON property `budgetAmountMicros`
        # @return [Fixnum]
        attr_accessor :budget_amount_micros
      
        # The ID of the campaign budget linked to this insertion order budget
        # segment.
        # Corresponds to the JSON property `campaignBudgetId`
        # @return [Fixnum]
        attr_accessor :campaign_budget_id
      
        # A date range.
        # Corresponds to the JSON property `dateRange`
        # @return [Google::Apis::DisplayvideoV1::DateRange]
        attr_accessor :date_range
      
        # The budget segment description. It can be used to enter Purchase Order
        # information for each budget segment and have that information printed on
        # the invoices.
        # Must be UTF-8 encoded with a length of no more than 80 characters.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @budget_amount_micros = args[:budget_amount_micros] if args.key?(:budget_amount_micros)
          @campaign_budget_id = args[:campaign_budget_id] if args.key?(:campaign_budget_id)
          @date_range = args[:date_range] if args.key?(:date_range)
          @description = args[:description] if args.key?(:description)
        end
      end
      
      # Details of Integral Ad Science settings.
      class IntegralAdScience
        include Google::Apis::Core::Hashable
      
        # Display Viewability section (applicable to display line items only).
        # Corresponds to the JSON property `displayViewability`
        # @return [String]
        attr_accessor :display_viewability
      
        # Brand Safety - **Unrateable**.
        # Corresponds to the JSON property `excludeUnrateable`
        # @return [Boolean]
        attr_accessor :exclude_unrateable
        alias_method :exclude_unrateable?, :exclude_unrateable
      
        # Ad Fraud settings.
        # Corresponds to the JSON property `excludedAdFraudRisk`
        # @return [String]
        attr_accessor :excluded_ad_fraud_risk
      
        # Brand Safety - **Adult content**.
        # Corresponds to the JSON property `excludedAdultRisk`
        # @return [String]
        attr_accessor :excluded_adult_risk
      
        # Brand Safety - **Alcohol**.
        # Corresponds to the JSON property `excludedAlcoholRisk`
        # @return [String]
        attr_accessor :excluded_alcohol_risk
      
        # Brand Safety - **Drugs**.
        # Corresponds to the JSON property `excludedDrugsRisk`
        # @return [String]
        attr_accessor :excluded_drugs_risk
      
        # Brand Safety - **Gambling**.
        # Corresponds to the JSON property `excludedGamblingRisk`
        # @return [String]
        attr_accessor :excluded_gambling_risk
      
        # Brand Safety - **Hate speech**.
        # Corresponds to the JSON property `excludedHateSpeechRisk`
        # @return [String]
        attr_accessor :excluded_hate_speech_risk
      
        # Brand Safety - **Illegal downloads**.
        # Corresponds to the JSON property `excludedIllegalDownloadsRisk`
        # @return [String]
        attr_accessor :excluded_illegal_downloads_risk
      
        # Brand Safety - **Offensive language**.
        # Corresponds to the JSON property `excludedOffensiveLanguageRisk`
        # @return [String]
        attr_accessor :excluded_offensive_language_risk
      
        # Brand Safety - **Violence**.
        # Corresponds to the JSON property `excludedViolenceRisk`
        # @return [String]
        attr_accessor :excluded_violence_risk
      
        # True advertising quality (applicable to Display line items only).
        # Corresponds to the JSON property `traqScoreOption`
        # @return [String]
        attr_accessor :traq_score_option
      
        # Video Viewability Section (applicable to video line items only).
        # Corresponds to the JSON property `videoViewability`
        # @return [String]
        attr_accessor :video_viewability
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_viewability = args[:display_viewability] if args.key?(:display_viewability)
          @exclude_unrateable = args[:exclude_unrateable] if args.key?(:exclude_unrateable)
          @excluded_ad_fraud_risk = args[:excluded_ad_fraud_risk] if args.key?(:excluded_ad_fraud_risk)
          @excluded_adult_risk = args[:excluded_adult_risk] if args.key?(:excluded_adult_risk)
          @excluded_alcohol_risk = args[:excluded_alcohol_risk] if args.key?(:excluded_alcohol_risk)
          @excluded_drugs_risk = args[:excluded_drugs_risk] if args.key?(:excluded_drugs_risk)
          @excluded_gambling_risk = args[:excluded_gambling_risk] if args.key?(:excluded_gambling_risk)
          @excluded_hate_speech_risk = args[:excluded_hate_speech_risk] if args.key?(:excluded_hate_speech_risk)
          @excluded_illegal_downloads_risk = args[:excluded_illegal_downloads_risk] if args.key?(:excluded_illegal_downloads_risk)
          @excluded_offensive_language_risk = args[:excluded_offensive_language_risk] if args.key?(:excluded_offensive_language_risk)
          @excluded_violence_risk = args[:excluded_violence_risk] if args.key?(:excluded_violence_risk)
          @traq_score_option = args[:traq_score_option] if args.key?(:traq_score_option)
          @video_viewability = args[:video_viewability] if args.key?(:video_viewability)
        end
      end
      
      # Integration details of an entry.
      class IntegrationDetails
        include Google::Apis::Core::Hashable
      
        # Additional details of the entry in string format.
        # Must be UTF-8 encoded with a length of no more than 1000 characters.
        # Corresponds to the JSON property `details`
        # @return [String]
        attr_accessor :details
      
        # An external identifier to be associated with the entry.
        # The integration code will show up together with the entry in many
        # places in the system, for example, reporting.
        # Must be UTF-8 encoded with a length of no more than 500 characters.
        # Corresponds to the JSON property `integrationCode`
        # @return [String]
        attr_accessor :integration_code
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @details = args[:details] if args.key?(:details)
          @integration_code = args[:integration_code] if args.key?(:integration_code)
        end
      end
      
      # An inventory source.
      class InventorySource
        include Google::Apis::Core::Hashable
      
        # Whether the inventory source has a guaranteed or non-guaranteed delivery.
        # Corresponds to the JSON property `commitment`
        # @return [String]
        attr_accessor :commitment
      
        # The creative requirements of the inventory source.
        # Not applicable for auction packages.
        # Corresponds to the JSON property `creativeConfigs`
        # @return [Array<Google::Apis::DisplayvideoV1::CreativeConfig>]
        attr_accessor :creative_configs
      
        # The ID in the exchange space that uniquely identifies the inventory source.
        # Must be unique across buyers within each exchange but not necessarily
        # unique across exchanges.
        # Corresponds to the JSON property `dealId`
        # @return [String]
        attr_accessor :deal_id
      
        # The delivery method of the inventory source.
        # * For non-guaranteed inventory sources, the only acceptable value is
        # `INVENTORY_SOURCE_DELIVERY_METHOD_PROGRAMMATIC`.
        # * For guaranteed inventory sources, acceptable values are
        # `INVENTORY_SOURCE_DELIVERY_METHOD_TAG` and
        # `INVENTORY_SOURCE_DELIVERY_METHOD_PROGRAMMATIC`.
        # Corresponds to the JSON property `deliveryMethod`
        # @return [String]
        attr_accessor :delivery_method
      
        # The display name of the inventory source.
        # Must be UTF-8 encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # The exchange to which the inventory source belongs.
        # Corresponds to the JSON property `exchange`
        # @return [String]
        attr_accessor :exchange
      
        # Output only. The unique ID of the inventory source. Assigned by the system.
        # Corresponds to the JSON property `inventorySourceId`
        # @return [Fixnum]
        attr_accessor :inventory_source_id
      
        # Denotes the type of the inventory source.
        # Corresponds to the JSON property `inventorySourceType`
        # @return [String]
        attr_accessor :inventory_source_type
      
        # Output only. The resource name of the inventory source.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The publisher/seller name of the inventory source.
        # Corresponds to the JSON property `publisherName`
        # @return [String]
        attr_accessor :publisher_name
      
        # The rate related settings of the inventory source.
        # Corresponds to the JSON property `rateDetails`
        # @return [Google::Apis::DisplayvideoV1::RateDetails]
        attr_accessor :rate_details
      
        # The status related settings of the inventory source.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::DisplayvideoV1::InventorySourceStatus]
        attr_accessor :status
      
        # A time range.
        # Corresponds to the JSON property `timeRange`
        # @return [Google::Apis::DisplayvideoV1::TimeRange]
        attr_accessor :time_range
      
        # Output only. The timestamp when the inventory source was last updated.
        # Assigned by the
        # system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @commitment = args[:commitment] if args.key?(:commitment)
          @creative_configs = args[:creative_configs] if args.key?(:creative_configs)
          @deal_id = args[:deal_id] if args.key?(:deal_id)
          @delivery_method = args[:delivery_method] if args.key?(:delivery_method)
          @display_name = args[:display_name] if args.key?(:display_name)
          @exchange = args[:exchange] if args.key?(:exchange)
          @inventory_source_id = args[:inventory_source_id] if args.key?(:inventory_source_id)
          @inventory_source_type = args[:inventory_source_type] if args.key?(:inventory_source_type)
          @name = args[:name] if args.key?(:name)
          @publisher_name = args[:publisher_name] if args.key?(:publisher_name)
          @rate_details = args[:rate_details] if args.key?(:rate_details)
          @status = args[:status] if args.key?(:status)
          @time_range = args[:time_range] if args.key?(:time_range)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Targeting details for inventory source. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_INVENTORY_SOURCE`.
      class InventorySourceAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the inventory source. Should refer to the
        # inventory_source_id field of an
        # InventorySource resource.
        # Corresponds to the JSON property `inventorySourceId`
        # @return [Fixnum]
        attr_accessor :inventory_source_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_source_id = args[:inventory_source_id] if args.key?(:inventory_source_id)
        end
      end
      
      # The configuration for display creatives.
      class InventorySourceDisplayCreativeConfig
        include Google::Apis::Core::Hashable
      
        # Dimensions.
        # Corresponds to the JSON property `creativeSize`
        # @return [Google::Apis::DisplayvideoV1::Dimensions]
        attr_accessor :creative_size
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creative_size = args[:creative_size] if args.key?(:creative_size)
        end
      end
      
      # A filtering option for filtering on Inventory Source entities.
      class InventorySourceFilter
        include Google::Apis::Core::Hashable
      
        # Inventory Sources to download by ID. All IDs must belong to the same
        # Advertiser or
        # Partner specified in
        # CreateSdfDownloadTaskRequest. Leave empty to download all Inventory
        # Sources for the selected Advertiser or Partner.
        # Corresponds to the JSON property `inventorySourceIds`
        # @return [Array<Fixnum>]
        attr_accessor :inventory_source_ids
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_source_ids = args[:inventory_source_ids] if args.key?(:inventory_source_ids)
        end
      end
      
      # A collection of targetable inventory sources.
      class InventorySourceGroup
        include Google::Apis::Core::Hashable
      
        # Required. The display name of the inventory source group.
        # Must be UTF-8 encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The unique ID of the inventory source group. Assigned by the
        # system.
        # Corresponds to the JSON property `inventorySourceGroupId`
        # @return [Fixnum]
        attr_accessor :inventory_source_group_id
      
        # Output only. The resource name of the inventory source group.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @inventory_source_group_id = args[:inventory_source_group_id] if args.key?(:inventory_source_group_id)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Targeting details for inventory source group. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_INVENTORY_SOURCE_GROUP`.
      class InventorySourceGroupAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the inventory source group. Should refer to the
        # inventory_source_group_id
        # field of an InventorySourceGroup resource.
        # Corresponds to the JSON property `inventorySourceGroupId`
        # @return [Fixnum]
        attr_accessor :inventory_source_group_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_source_group_id = args[:inventory_source_group_id] if args.key?(:inventory_source_group_id)
        end
      end
      
      # The status related settings of the inventory source.
      class InventorySourceStatus
        include Google::Apis::Core::Hashable
      
        # Output only. The configuration status of the inventory source.
        # Only applicable for guaranteed inventory sources.
        # Acceptable values are `INVENTORY_SOURCE_CONFIG_STATUS_PENDING` and
        # `INVENTORY_SOURCE_CONFIG_STATUS_COMPLETED`.
        # An inventory source must be configured (fill in the required fields, choose
        # creatives, and select a default campaign) before it can serve.
        # Corresponds to the JSON property `configStatus`
        # @return [String]
        attr_accessor :config_status
      
        # The user-provided reason for pausing this inventory source.
        # Must not exceed 100 characters.
        # Only applicable when entity_status
        # is set to `ENTITY_STATUS_PAUSED`.
        # Corresponds to the JSON property `entityPauseReason`
        # @return [String]
        attr_accessor :entity_pause_reason
      
        # Whether or not the inventory source is servable.
        # Acceptable values are `ENTITY_STATUS_ACTIVE`, `ENTITY_STATUS_ARCHIVED`, and
        # `ENTITY_STATUS_PAUSED`.
        # Default value is `ENTITY_STATUS_ACTIVE`.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Output only. The seller-provided reason for pausing this inventory source.
        # Only applicable for inventory sources synced directly from the
        # publishers and when seller_status
        # is set to `ENTITY_STATUS_PAUSED`.
        # Corresponds to the JSON property `sellerPauseReason`
        # @return [String]
        attr_accessor :seller_pause_reason
      
        # Output only. The status set by the seller for the inventory source.
        # Only applicable for inventory sources synced directly from the
        # publishers.
        # Acceptable values are `ENTITY_STATUS_ACTIVE` and `ENTITY_STATUS_PAUSED`.
        # Corresponds to the JSON property `sellerStatus`
        # @return [String]
        attr_accessor :seller_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @config_status = args[:config_status] if args.key?(:config_status)
          @entity_pause_reason = args[:entity_pause_reason] if args.key?(:entity_pause_reason)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @seller_pause_reason = args[:seller_pause_reason] if args.key?(:seller_pause_reason)
          @seller_status = args[:seller_status] if args.key?(:seller_status)
        end
      end
      
      # The configuration for video creatives.
      class InventorySourceVideoCreativeConfig
        include Google::Apis::Core::Hashable
      
        # The duration requirements for the video creatives that can be assigned to
        # the inventory source.
        # Corresponds to the JSON property `duration`
        # @return [String]
        attr_accessor :duration
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @duration = args[:duration] if args.key?(:duration)
        end
      end
      
      # Details for assigned keyword targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_KEYWORD`.
      class KeywordAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The keyword, for example `car insurance`.
        # Positive keyword cannot be offensive word.
        # Must be UTF-8 encoded with a maximum size of 255 bytes. Maximum number
        # of characters is 80. Maximum number of words is 10.
        # Corresponds to the JSON property `keyword`
        # @return [String]
        attr_accessor :keyword
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @keyword = args[:keyword] if args.key?(:keyword)
          @negative = args[:negative] if args.key?(:negative)
        end
      end
      
      # Details for assigned language targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_LANGUAGE`.
      class LanguageAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the language (e.g., "French").
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted. All assigned
        # language targeting options on the same line item must have the same value
        # for this field.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_LANGUAGE`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable language. This will be populated in the
      # language_details field when
      # targeting_type is
      # `TARGETING_TYPE_LANGUAGE`.
      class LanguageTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the language (e.g., "French").
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # A single line item.
      class LineItem
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the advertiser the line item belongs to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Settings that control the bid strategy.
        # Bid strategy determines the bid price.
        # Corresponds to the JSON property `bidStrategy`
        # @return [Google::Apis::DisplayvideoV1::BiddingStrategy]
        attr_accessor :bid_strategy
      
        # Settings that control how budget is allocated.
        # Corresponds to the JSON property `budget`
        # @return [Google::Apis::DisplayvideoV1::LineItemBudget]
        attr_accessor :budget
      
        # Output only. The unique ID of the campaign that the line item belongs to.
        # Corresponds to the JSON property `campaignId`
        # @return [Fixnum]
        attr_accessor :campaign_id
      
        # Settings that control how conversions are counted.
        # All post-click conversions will be counted. A percentage value can be set
        # for post-view conversions counting.
        # Corresponds to the JSON property `conversionCounting`
        # @return [Google::Apis::DisplayvideoV1::ConversionCountingConfig]
        attr_accessor :conversion_counting
      
        # The IDs of the creatives associated with the line item.
        # Corresponds to the JSON property `creativeIds`
        # @return [Array<Fixnum>]
        attr_accessor :creative_ids
      
        # Required. The display name of the line item.
        # Must be UTF-8 encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Required. Controls whether or not the line item can spend its budget and
        # bid on inventory.
        # * For CreateLineItem method, only
        # `ENTITY_STATUS_DRAFT` is allowed. To activate a line item, use
        # UpdateLineItem method and update the
        # status to `ENTITY_STATUS_ACTIVE` after creation.
        # * A line item cannot be changed back to `ENTITY_STATUS_DRAFT` status from
        # any other status.
        # * If the line item's parent insertion order is not active, the line item
        # can't spend its budget even if its own status is `ENTITY_STATUS_ACTIVE`.
        # Corresponds to the JSON property `entityStatus`
        # @return [String]
        attr_accessor :entity_status
      
        # Settings that control the active duration of a line item.
        # Corresponds to the JSON property `flight`
        # @return [Google::Apis::DisplayvideoV1::LineItemFlight]
        attr_accessor :flight
      
        # Settings that control the number of times a user may be shown with the same
        # ad during a given time period.
        # Corresponds to the JSON property `frequencyCap`
        # @return [Google::Apis::DisplayvideoV1::FrequencyCap]
        attr_accessor :frequency_cap
      
        # Required. Immutable. The unique ID of the insertion order that the line item
        # belongs to.
        # Corresponds to the JSON property `insertionOrderId`
        # @return [Fixnum]
        attr_accessor :insertion_order_id
      
        # Integration details of an entry.
        # Corresponds to the JSON property `integrationDetails`
        # @return [Google::Apis::DisplayvideoV1::IntegrationDetails]
        attr_accessor :integration_details
      
        # The IDs of the private inventory sources assigned to the line item.
        # Corresponds to the JSON property `inventorySourceIds`
        # @return [Array<Fixnum>]
        attr_accessor :inventory_source_ids
      
        # Output only. The unique ID of the line item. Assigned by the system.
        # Corresponds to the JSON property `lineItemId`
        # @return [Fixnum]
        attr_accessor :line_item_id
      
        # Required. Immutable. The type of the line item.
        # Corresponds to the JSON property `lineItemType`
        # @return [String]
        attr_accessor :line_item_type
      
        # Output only. The resource name of the line item.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Settings that control the rate at which a budget is spent.
        # Corresponds to the JSON property `pacing`
        # @return [Google::Apis::DisplayvideoV1::Pacing]
        attr_accessor :pacing
      
        # The partner costs associated with the line item.
        # If absent or empty in CreateLineItem
        # method, the newly created line item will inherit partner costs from its
        # parent insertion order.
        # Corresponds to the JSON property `partnerCosts`
        # @return [Array<Google::Apis::DisplayvideoV1::PartnerCost>]
        attr_accessor :partner_costs
      
        # Settings that control how partner revenue is calculated.
        # Corresponds to the JSON property `partnerRevenueModel`
        # @return [Google::Apis::DisplayvideoV1::PartnerRevenueModel]
        attr_accessor :partner_revenue_model
      
        # Output only. The timestamp when the line item was last updated. Assigned by
        # the system.
        # Corresponds to the JSON property `updateTime`
        # @return [String]
        attr_accessor :update_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @bid_strategy = args[:bid_strategy] if args.key?(:bid_strategy)
          @budget = args[:budget] if args.key?(:budget)
          @campaign_id = args[:campaign_id] if args.key?(:campaign_id)
          @conversion_counting = args[:conversion_counting] if args.key?(:conversion_counting)
          @creative_ids = args[:creative_ids] if args.key?(:creative_ids)
          @display_name = args[:display_name] if args.key?(:display_name)
          @entity_status = args[:entity_status] if args.key?(:entity_status)
          @flight = args[:flight] if args.key?(:flight)
          @frequency_cap = args[:frequency_cap] if args.key?(:frequency_cap)
          @insertion_order_id = args[:insertion_order_id] if args.key?(:insertion_order_id)
          @integration_details = args[:integration_details] if args.key?(:integration_details)
          @inventory_source_ids = args[:inventory_source_ids] if args.key?(:inventory_source_ids)
          @line_item_id = args[:line_item_id] if args.key?(:line_item_id)
          @line_item_type = args[:line_item_type] if args.key?(:line_item_type)
          @name = args[:name] if args.key?(:name)
          @pacing = args[:pacing] if args.key?(:pacing)
          @partner_costs = args[:partner_costs] if args.key?(:partner_costs)
          @partner_revenue_model = args[:partner_revenue_model] if args.key?(:partner_revenue_model)
          @update_time = args[:update_time] if args.key?(:update_time)
        end
      end
      
      # Settings that control how budget is allocated.
      class LineItemBudget
        include Google::Apis::Core::Hashable
      
        # Required. The type of the budget allocation.
        # `LINE_ITEM_BUDGET_ALLOCATION_TYPE_AUTOMATIC` is only applicable when
        # automatic budget allocation is enabled for the parent insertion order.
        # Corresponds to the JSON property `budgetAllocationType`
        # @return [String]
        attr_accessor :budget_allocation_type
      
        # Output only. The budget unit specifies whether the budget is currency based
        # or impression based. This value is inherited from the parent insertion
        # order.
        # Corresponds to the JSON property `budgetUnit`
        # @return [String]
        attr_accessor :budget_unit
      
        # The maximum budget amount the line item will spend. Must be greater than 0.
        # When budget_allocation_type is:
        # * `LINE_ITEM_BUDGET_ALLOCATION_TYPE_AUTOMATIC`, this field is immutable
        # and is set by the system.
        # * `LINE_ITEM_BUDGET_ALLOCATION_TYPE_FIXED`, if
        # budget_unit is:
        # - `BUDGET_UNIT_CURRENCY`, this field represents maximum budget amount
        # to spend, in micros of the advertiser's currency. For example, 1500000
        # represents 1.5 standard units of the currency.
        # - `BUDGET_UNIT_IMPRESSIONS`, this field represents the maximum number
        # of impressions to serve.
        # * `LINE_ITEM_BUDGET_ALLOCATION_TYPE_UNLIMITED`, this field is not
        # applicable and will be ignored by the system.
        # Corresponds to the JSON property `maxAmount`
        # @return [Fixnum]
        attr_accessor :max_amount
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @budget_allocation_type = args[:budget_allocation_type] if args.key?(:budget_allocation_type)
          @budget_unit = args[:budget_unit] if args.key?(:budget_unit)
          @max_amount = args[:max_amount] if args.key?(:max_amount)
        end
      end
      
      # Settings that control the active duration of a line item.
      class LineItemFlight
        include Google::Apis::Core::Hashable
      
        # A date range.
        # Corresponds to the JSON property `dateRange`
        # @return [Google::Apis::DisplayvideoV1::DateRange]
        attr_accessor :date_range
      
        # Required. The type of the line item's flight dates.
        # Corresponds to the JSON property `flightDateType`
        # @return [String]
        attr_accessor :flight_date_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @date_range = args[:date_range] if args.key?(:date_range)
          @flight_date_type = args[:flight_date_type] if args.key?(:flight_date_type)
        end
      end
      
      # 
      class ListAdvertisersResponse
        include Google::Apis::Core::Hashable
      
        # The list of advertisers.
        # This list will be absent if empty.
        # Corresponds to the JSON property `advertisers`
        # @return [Array<Google::Apis::DisplayvideoV1::Advertiser>]
        attr_accessor :advertisers
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListAdvertisers` method to retrieve the
        # next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertisers = args[:advertisers] if args.key?(:advertisers)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListCampaignsResponse
        include Google::Apis::Core::Hashable
      
        # The list of campaigns.
        # This list will be absent if empty.
        # Corresponds to the JSON property `campaigns`
        # @return [Array<Google::Apis::DisplayvideoV1::Campaign>]
        attr_accessor :campaigns
      
        # A token to retrieve the next page of results.
        # Pass this value in the page_token field
        # in the subsequent call to `ListCampaigns` method to retrieve the next page
        # of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @campaigns = args[:campaigns] if args.key?(:campaigns)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListChannelsResponse
        include Google::Apis::Core::Hashable
      
        # The list of channels.
        # This list will be absent if empty.
        # Corresponds to the JSON property `channels`
        # @return [Array<Google::Apis::DisplayvideoV1::Channel>]
        attr_accessor :channels
      
        # A token to retrieve the next page of results.
        # Pass this value in the page_token field
        # in the subsequent call to `ListChannels` method to retrieve the next page
        # of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @channels = args[:channels] if args.key?(:channels)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListCombinedAudiencesResponse
        include Google::Apis::Core::Hashable
      
        # The list of combined audiences.
        # This list will be absent if empty.
        # Corresponds to the JSON property `combinedAudiences`
        # @return [Array<Google::Apis::DisplayvideoV1::CombinedAudience>]
        attr_accessor :combined_audiences
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListCombinedAudiences` method to retrieve
        # the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @combined_audiences = args[:combined_audiences] if args.key?(:combined_audiences)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListCreativesResponse
        include Google::Apis::Core::Hashable
      
        # The list of creatives.
        # This list will be absent if empty.
        # Corresponds to the JSON property `creatives`
        # @return [Array<Google::Apis::DisplayvideoV1::Creative>]
        attr_accessor :creatives
      
        # A token to retrieve the next page of results.
        # Pass this value in the page_token field
        # in the subsequent call to `ListCreativesRequest` method to retrieve the
        # next page of results.
        # If this field is null, it means this is the last page.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creatives = args[:creatives] if args.key?(:creatives)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListCustomListsResponse
        include Google::Apis::Core::Hashable
      
        # The list of custom lists.
        # This list will be absent if empty.
        # Corresponds to the JSON property `customLists`
        # @return [Array<Google::Apis::DisplayvideoV1::CustomList>]
        attr_accessor :custom_lists
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListCustomLists` method to retrieve the
        # next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_lists = args[:custom_lists] if args.key?(:custom_lists)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListFirstAndThirdPartyAudiencesResponse
        include Google::Apis::Core::Hashable
      
        # The list of first and third party audiences. Audience size properties will
        # not be included.
        # This list will be absent if empty.
        # Corresponds to the JSON property `firstAndThirdPartyAudiences`
        # @return [Array<Google::Apis::DisplayvideoV1::FirstAndThirdPartyAudience>]
        attr_accessor :first_and_third_party_audiences
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListFirstAndThirdPartyAudiences` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @first_and_third_party_audiences = args[:first_and_third_party_audiences] if args.key?(:first_and_third_party_audiences)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListGoogleAudiencesResponse
        include Google::Apis::Core::Hashable
      
        # The list of Google audiences.
        # This list will be absent if empty.
        # Corresponds to the JSON property `googleAudiences`
        # @return [Array<Google::Apis::DisplayvideoV1::GoogleAudience>]
        attr_accessor :google_audiences
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListGoogleAudiences` method to retrieve
        # the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @google_audiences = args[:google_audiences] if args.key?(:google_audiences)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListInsertionOrdersResponse
        include Google::Apis::Core::Hashable
      
        # The list of insertion orders.
        # This list will be absent if empty.
        # Corresponds to the JSON property `insertionOrders`
        # @return [Array<Google::Apis::DisplayvideoV1::InsertionOrder>]
        attr_accessor :insertion_orders
      
        # A token to retrieve the next page of results.
        # Pass this value in the page_token
        # field in the subsequent call to `ListInsertionOrders` method to retrieve
        # the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @insertion_orders = args[:insertion_orders] if args.key?(:insertion_orders)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for InventorySourceGroupService.ListInventorySourceGroups.
      class ListInventorySourceGroupsResponse
        include Google::Apis::Core::Hashable
      
        # The list of inventory source groups.
        # This list will be absent if empty.
        # Corresponds to the JSON property `inventorySourceGroups`
        # @return [Array<Google::Apis::DisplayvideoV1::InventorySourceGroup>]
        attr_accessor :inventory_source_groups
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListInventorySourceGroups` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_source_groups = args[:inventory_source_groups] if args.key?(:inventory_source_groups)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListInventorySourcesResponse
        include Google::Apis::Core::Hashable
      
        # The list of inventory sources.
        # This list will be absent if empty.
        # Corresponds to the JSON property `inventorySources`
        # @return [Array<Google::Apis::DisplayvideoV1::InventorySource>]
        attr_accessor :inventory_sources
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListInventorySources` method to retrieve
        # the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_sources = args[:inventory_sources] if args.key?(:inventory_sources)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for
      # ListLineItemAssignedTargetingOptions.
      class ListLineItemAssignedTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # The list of assigned targeting options.
        # This list will be absent if empty.
        # Corresponds to the JSON property `assignedTargetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::AssignedTargetingOption>]
        attr_accessor :assigned_targeting_options
      
        # A token identifying the next page of results. This value should be
        # specified as the
        # pageToken in a
        # subsequent ListLineItemAssignedTargetingOptionsRequest to fetch the
        # next page of results. This token will be absent if there are no more
        # assigned_targeting_options
        # to return.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assigned_targeting_options = args[:assigned_targeting_options] if args.key?(:assigned_targeting_options)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListLineItemsResponse
        include Google::Apis::Core::Hashable
      
        # The list of line items.
        # This list will be absent if empty.
        # Corresponds to the JSON property `lineItems`
        # @return [Array<Google::Apis::DisplayvideoV1::LineItem>]
        attr_accessor :line_items
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListLineItems` method to retrieve the
        # next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @line_items = args[:line_items] if args.key?(:line_items)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class ListLocationListsResponse
        include Google::Apis::Core::Hashable
      
        # The list of location lists.
        # This list will be absent if empty.
        # Corresponds to the JSON property `locationLists`
        # @return [Array<Google::Apis::DisplayvideoV1::LocationList>]
        attr_accessor :location_lists
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListLocationLists` method to retrieve the
        # next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @location_lists = args[:location_lists] if args.key?(:location_lists)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for NegativeKeywordListService.ListNegativeKeywordLists.
      class ListNegativeKeywordListsResponse
        include Google::Apis::Core::Hashable
      
        # The list of negative keyword lists.
        # This list will be absent if empty.
        # Corresponds to the JSON property `negativeKeywordLists`
        # @return [Array<Google::Apis::DisplayvideoV1::NegativeKeywordList>]
        attr_accessor :negative_keyword_lists
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListNegativeKeywordLists` method to
        # retrieve the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @negative_keyword_lists = args[:negative_keyword_lists] if args.key?(:negative_keyword_lists)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for
      # ListTargetingOptions.
      class ListTargetingOptionsResponse
        include Google::Apis::Core::Hashable
      
        # A token to retrieve the next page of results.
        # Pass this value in the
        # page_token
        # field in the subsequent call to `ListTargetingOptions` method to retrieve
        # the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # The list of targeting options.
        # This list will be absent if empty.
        # Corresponds to the JSON property `targetingOptions`
        # @return [Array<Google::Apis::DisplayvideoV1::TargetingOption>]
        attr_accessor :targeting_options
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @targeting_options = args[:targeting_options] if args.key?(:targeting_options)
        end
      end
      
      # A list of locations used for targeting.
      class LocationList
        include Google::Apis::Core::Hashable
      
        # Required. Immutable. The unique ID of the advertiser the location list belongs
        # to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Required. The display name of the location list.
        # Must be UTF-8 encoded with a maximum size of 240 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The unique ID of the location list. Assigned by the system.
        # Corresponds to the JSON property `locationListId`
        # @return [Fixnum]
        attr_accessor :location_list_id
      
        # Required. Immutable. The type of location. All locations in the list will
        # share this type.
        # Corresponds to the JSON property `locationType`
        # @return [String]
        attr_accessor :location_type
      
        # Output only. The resource name of the location list.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @location_list_id = args[:location_list_id] if args.key?(:location_list_id)
          @location_type = args[:location_type] if args.key?(:location_type)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Specifies how many days into the past to look when determining whether to
      # record a conversion.
      class LookbackWindow
        include Google::Apis::Core::Hashable
      
        # Lookback window, in days, from the last time a given user clicked on one of
        # your ads.
        # Corresponds to the JSON property `clickDays`
        # @return [Fixnum]
        attr_accessor :click_days
      
        # Lookback window, in days, from the last time a given user viewed one of
        # your ads.
        # Corresponds to the JSON property `impressionDays`
        # @return [Fixnum]
        attr_accessor :impression_days
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @click_days = args[:click_days] if args.key?(:click_days)
          @impression_days = args[:impression_days] if args.key?(:impression_days)
        end
      end
      
      # A strategy that automatically adjusts the bid to optimize a specified
      # performance goal while spending the full budget.
      class MaximizeSpendBidStrategy
        include Google::Apis::Core::Hashable
      
        # The maximum average CPM that may be bid, in micros of the advertiser's
        # currency. Must be greater than or equal to a billable unit of the given
        # currency.
        # For example, 1500000 represents 1.5 standard units of the currency.
        # Corresponds to the JSON property `maxAverageCpmBidAmountMicros`
        # @return [Fixnum]
        attr_accessor :max_average_cpm_bid_amount_micros
      
        # Required. The type of the performance goal that the bidding strategy
        # tries to minimize while spending the full budget.
        # `BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_VIEWABLE_CPM` is not supported for
        # this strategy.
        # Corresponds to the JSON property `performanceGoalType`
        # @return [String]
        attr_accessor :performance_goal_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_average_cpm_bid_amount_micros = args[:max_average_cpm_bid_amount_micros] if args.key?(:max_average_cpm_bid_amount_micros)
          @performance_goal_type = args[:performance_goal_type] if args.key?(:performance_goal_type)
        end
      end
      
      # Represents an amount of money with its currency type.
      class Money
        include Google::Apis::Core::Hashable
      
        # The 3-letter currency code defined in ISO 4217.
        # Corresponds to the JSON property `currencyCode`
        # @return [String]
        attr_accessor :currency_code
      
        # Number of nano (10^-9) units of the amount.
        # The value must be between -999,999,999 and +999,999,999 inclusive.
        # If `units` is positive, `nanos` must be positive or zero.
        # If `units` is zero, `nanos` can be positive, zero, or negative.
        # If `units` is negative, `nanos` must be negative or zero.
        # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        # Corresponds to the JSON property `nanos`
        # @return [Fixnum]
        attr_accessor :nanos
      
        # The whole units of the amount.
        # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
        # Corresponds to the JSON property `units`
        # @return [Fixnum]
        attr_accessor :units
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @currency_code = args[:currency_code] if args.key?(:currency_code)
          @nanos = args[:nanos] if args.key?(:nanos)
          @units = args[:units] if args.key?(:units)
        end
      end
      
      # A list of negative keywords used for targeting.
      class NegativeKeywordList
        include Google::Apis::Core::Hashable
      
        # Output only. The unique ID of the advertiser the negative keyword list belongs
        # to.
        # Corresponds to the JSON property `advertiserId`
        # @return [Fixnum]
        attr_accessor :advertiser_id
      
        # Required. The display name of the negative keyword list.
        # Must be UTF-8 encoded with a maximum size of 255 bytes.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. The resource name of the negative keyword list.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. The unique ID of the negative keyword list. Assigned by the
        # system.
        # Corresponds to the JSON property `negativeKeywordListId`
        # @return [Fixnum]
        attr_accessor :negative_keyword_list_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
          @negative_keyword_list_id = args[:negative_keyword_list_id] if args.key?(:negative_keyword_list_id)
        end
      end
      
      # Targeting details for negative keyword list. This will be populated in the
      # details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_NEGATIVE_KEYWORD_LIST`.
      class NegativeKeywordListAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the negative keyword list. Should refer to the
        # negative_keyword_list_id
        # field of a NegativeKeywordList resource.
        # Corresponds to the JSON property `negativeKeywordListId`
        # @return [Fixnum]
        attr_accessor :negative_keyword_list_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @negative_keyword_list_id = args[:negative_keyword_list_id] if args.key?(:negative_keyword_list_id)
        end
      end
      
      # OBA Icon for a Creative
      class ObaIcon
        include Google::Apis::Core::Hashable
      
        # Required. The click tracking URL of the OBA icon.
        # Only URLs of the following domains are allowed:
        # * https://info.evidon.com
        # * https://l.betrad.com
        # Corresponds to the JSON property `clickTrackingUrl`
        # @return [String]
        attr_accessor :click_tracking_url
      
        # Dimensions.
        # Corresponds to the JSON property `dimensions`
        # @return [Google::Apis::DisplayvideoV1::Dimensions]
        attr_accessor :dimensions
      
        # Required. The landing page URL of the OBA icon.
        # Only URLs of the following domains are allowed:
        # * https://info.evidon.com
        # * https://l.betrad.com
        # Corresponds to the JSON property `landingPageUrl`
        # @return [String]
        attr_accessor :landing_page_url
      
        # The position of the OBA icon on the creative.
        # Corresponds to the JSON property `position`
        # @return [String]
        attr_accessor :position
      
        # The program of the OBA icon. For example: “AdChoices”.
        # Corresponds to the JSON property `program`
        # @return [String]
        attr_accessor :program
      
        # The MIME type of the OBA icon resource.
        # Corresponds to the JSON property `resourceMimeType`
        # @return [String]
        attr_accessor :resource_mime_type
      
        # The URL of the OBA icon resource.
        # Corresponds to the JSON property `resourceUrl`
        # @return [String]
        attr_accessor :resource_url
      
        # Required. The view tracking URL of the OBA icon.
        # Only URLs of the following domains are allowed:
        # * https://info.evidon.com
        # * https://l.betrad.com
        # Corresponds to the JSON property `viewTrackingUrl`
        # @return [String]
        attr_accessor :view_tracking_url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @click_tracking_url = args[:click_tracking_url] if args.key?(:click_tracking_url)
          @dimensions = args[:dimensions] if args.key?(:dimensions)
          @landing_page_url = args[:landing_page_url] if args.key?(:landing_page_url)
          @position = args[:position] if args.key?(:position)
          @program = args[:program] if args.key?(:program)
          @resource_mime_type = args[:resource_mime_type] if args.key?(:resource_mime_type)
          @resource_url = args[:resource_url] if args.key?(:resource_url)
          @view_tracking_url = args[:view_tracking_url] if args.key?(:view_tracking_url)
        end
      end
      
      # On screen position targeting option details. This will be
      # populated in the
      # on_screen_position_details
      # field when
      # targeting_type is
      # `TARGETING_TYPE_ON_SCREEN_POSITION`.
      class OnScreenPositionAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The on screen position.
        # Corresponds to the JSON property `onScreenPosition`
        # @return [String]
        attr_accessor :on_screen_position
      
        # Required. The targeting_option_id field when
        # targeting_type is
        # `TARGETING_TYPE_ON_SCREEN_POSITION`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @on_screen_position = args[:on_screen_position] if args.key?(:on_screen_position)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable on screen position, which could be used by display
      # and video ads. This will be populated in the
      # on_screen_position_details
      # field when
      # targeting_type is
      # `TARGETING_TYPE_ON_SCREEN_POSITION`.
      class OnScreenPositionTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The on screen position.
        # Corresponds to the JSON property `onScreenPosition`
        # @return [String]
        attr_accessor :on_screen_position
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @on_screen_position = args[:on_screen_position] if args.key?(:on_screen_position)
        end
      end
      
      # Assigned operating system targeting option details. This will be
      # populated in the
      # operating_system_details
      # field when
      # targeting_type is
      # `TARGETING_TYPE_OPERATING_SYSTEM`.
      class OperatingSystemAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the operating system.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The targeting option ID populated in
        # targeting_option_id field when
        # targeting_type is
        # `TARGETING_TYPE_OPERATING_SYSTEM`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @negative = args[:negative] if args.key?(:negative)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable operating system. This will be populated in the
      # operating_system_details field
      # of a TargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_OPERATING_SYSTEM`.
      class OperatingSystemTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the operating system.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # This resource represents a long-running operation that is the result of a
      # network API call.
      class Operation
        include Google::Apis::Core::Hashable
      
        # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
        # Corresponds to the JSON property `done`
        # @return [Boolean]
        attr_accessor :done
        alias_method :done?, :done
      
        # The `Status` type defines a logical error model that is suitable for
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
        # Corresponds to the JSON property `error`
        # @return [Google::Apis::DisplayvideoV1::Status]
        attr_accessor :error
      
        # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
        # Corresponds to the JSON property `metadata`
        # @return [Hash<String,Object>]
        attr_accessor :metadata
      
        # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/`unique_id``.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
        # Corresponds to the JSON property `response`
        # @return [Hash<String,Object>]
        attr_accessor :response
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @done = args[:done] if args.key?(:done)
          @error = args[:error] if args.key?(:error)
          @metadata = args[:metadata] if args.key?(:metadata)
          @name = args[:name] if args.key?(:name)
          @response = args[:response] if args.key?(:response)
        end
      end
      
      # Settings that control the rate at which a budget is spent.
      class Pacing
        include Google::Apis::Core::Hashable
      
        # Maximum number of impressions to serve every day.
        # Applicable when the budget is impression based. Must be greater than 0.
        # Corresponds to the JSON property `dailyMaxImpressions`
        # @return [Fixnum]
        attr_accessor :daily_max_impressions
      
        # Maximum currency amount to spend every day in micros of
        # advertiser's currency.
        # Applicable when the budget is currency based. Must be greater than 0.
        # For example, for 1.5 standard unit of the currency, set this field to
        # 1500000.
        # The value assigned will be rounded to whole billable units for the
        # relevant currency by the following rules: any positive value less than a
        # single billable unit will be rounded up to one billable unit and any
        # value larger than a single billable unit will be rounded down to the
        # nearest billable value. For example, if the currency's billable unit is
        # 0.01, and this field is set to 10257770, it will round down to 10250000,
        # a value of 10.25. If set to 505, it will round up to 10000, a value of
        # 0.01.
        # Corresponds to the JSON property `dailyMaxMicros`
        # @return [Fixnum]
        attr_accessor :daily_max_micros
      
        # Required. The time period in which the pacing budget will be spent.
        # When automatic budget allocation is enabled at the insertion order via
        # auto_budget_allocation, this
        # field is output only and defaults to `PACING_PERIOD_FLIGHT`.
        # Corresponds to the JSON property `pacingPeriod`
        # @return [String]
        attr_accessor :pacing_period
      
        # Required. The type of pacing that defines how the budget amount will be
        # spent across the pacing_period.
        # Corresponds to the JSON property `pacingType`
        # @return [String]
        attr_accessor :pacing_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @daily_max_impressions = args[:daily_max_impressions] if args.key?(:daily_max_impressions)
          @daily_max_micros = args[:daily_max_micros] if args.key?(:daily_max_micros)
          @pacing_period = args[:pacing_period] if args.key?(:pacing_period)
          @pacing_type = args[:pacing_type] if args.key?(:pacing_type)
        end
      end
      
      # A filtering option that filters on selected file types belonging to a chosen
      # set of filter entities.
      class ParentEntityFilter
        include Google::Apis::Core::Hashable
      
        # Required. File types that will be returned.
        # Corresponds to the JSON property `fileType`
        # @return [Array<String>]
        attr_accessor :file_type
      
        # The IDs of the specified filter type. This is used to filter entities to
        # fetch. If filter type is not `FILTER_TYPE_NONE`, at least one ID must be
        # specified.
        # Corresponds to the JSON property `filterIds`
        # @return [Array<Fixnum>]
        attr_accessor :filter_ids
      
        # Required. Filter type used to filter fetched entities.
        # Corresponds to the JSON property `filterType`
        # @return [String]
        attr_accessor :filter_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @file_type = args[:file_type] if args.key?(:file_type)
          @filter_ids = args[:filter_ids] if args.key?(:filter_ids)
          @filter_type = args[:filter_type] if args.key?(:filter_type)
        end
      end
      
      # Details for assigned parental status targeting option. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARTGETING_TYPE_PARENTAL_STATUS`.
      class ParentalStatusAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The parental status of the audience.
        # Corresponds to the JSON property `parentalStatus`
        # @return [String]
        attr_accessor :parental_status
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_PARENTAL_STATUS`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @parental_status = args[:parental_status] if args.key?(:parental_status)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable parental status. This will be populated in the
      # parental_status_details field of a
      # TargetingOption when targeting_type is
      # `TARGETING_TYPE_PARENTAL_STATUS`.
      class ParentalStatusTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The parental status of an audience.
        # Corresponds to the JSON property `parentalStatus`
        # @return [String]
        attr_accessor :parental_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @parental_status = args[:parental_status] if args.key?(:parental_status)
        end
      end
      
      # Settings that control a partner cost.
      # A partner cost is any type of expense involved in running a campaign, other
      # than the costs of purchasing impressions (which is called the media cost)
      # and using third-party audience segment data (data fee). Some examples of
      # partner costs include the fees for using DV360, a third-party ad server,
      # or a third-party ad serving verification service.
      class PartnerCost
        include Google::Apis::Core::Hashable
      
        # Required. The type of the partner cost.
        # Corresponds to the JSON property `costType`
        # @return [String]
        attr_accessor :cost_type
      
        # The CPM fee amount in micros of advertiser's currency.
        # Applicable when the fee_type is
        # `PARTNER_FEE_TYPE_CPM_FEE`. Must be greater than or equal to 0.
        # For example, for 1.5 standard unit of the advertiser's currency, set
        # this field to 1500000.
        # Corresponds to the JSON property `feeAmount`
        # @return [Fixnum]
        attr_accessor :fee_amount
      
        # The media fee percentage in millis (1/1000 of a percent).
        # Applicable when the fee_type is
        # `PARTNER_FEE_TYPE_MEDIA_FEE`. Must be greater than or equal to 0.
        # For example: 100 represents 0.1%.
        # Corresponds to the JSON property `feePercentageMillis`
        # @return [Fixnum]
        attr_accessor :fee_percentage_millis
      
        # Required. The fee type for this partner cost.
        # Corresponds to the JSON property `feeType`
        # @return [String]
        attr_accessor :fee_type
      
        # The invoice type for this partner cost.
        # * Required when cost_type is one of:
        # - `PARTNER_COST_TYPE_ADLOOX`
        # - `PARTNER_COST_TYPE_DOUBLE_VERIFY`
        # - `PARTNER_COST_TYPE_INTEGRAL_AD_SCIENCE`.
        # * Output only for other types.
        # Corresponds to the JSON property `invoiceType`
        # @return [String]
        attr_accessor :invoice_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cost_type = args[:cost_type] if args.key?(:cost_type)
          @fee_amount = args[:fee_amount] if args.key?(:fee_amount)
          @fee_percentage_millis = args[:fee_percentage_millis] if args.key?(:fee_percentage_millis)
          @fee_type = args[:fee_type] if args.key?(:fee_type)
          @invoice_type = args[:invoice_type] if args.key?(:invoice_type)
        end
      end
      
      # Settings that control how partner revenue is calculated.
      class PartnerRevenueModel
        include Google::Apis::Core::Hashable
      
        # Required. The markup amount of the partner revenue model.
        # Must be greater than or equal to 0.
        # * When the markup_type is set to be
        # `PARTNER_REVENUE_MODEL_MARKUP_TYPE_CPM`, this field represents the CPM
        # markup in micros of advertiser's currency. For example, 1500000
        # represents 1.5 standard units of the currency.
        # * When the markup_type is set to be
        # `PARTNER_REVENUE_MODEL_MARKUP_TYPE_MEDIA_COST_MARKUP`, this field
        # represents the media cost percent markup in millis. For example,
        # 100 represents 0.1% (decimal 0.001).
        # * When the markup_type is set to be
        # `PARTNER_REVENUE_MODEL_MARKUP_TYPE_TOTAL_MEDIA_COST_MARKUP`, this field
        # represents the total media cost percent markup in millis. For example,
        # 100 represents 0.1% (decimal 0.001).
        # Corresponds to the JSON property `markupAmount`
        # @return [Fixnum]
        attr_accessor :markup_amount
      
        # Required. The markup type of the partner revenue model.
        # Corresponds to the JSON property `markupType`
        # @return [String]
        attr_accessor :markup_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @markup_amount = args[:markup_amount] if args.key?(:markup_amount)
          @markup_type = args[:markup_type] if args.key?(:markup_type)
        end
      end
      
      # Settings that control the performance goal of a campaign or insertion order.
      class PerformanceGoal
        include Google::Apis::Core::Hashable
      
        # The goal amount, in micros of the advertiser's currency.
        # Applicable when
        # performance_goal_type is one of:
        # * `PERFORMANCE_GOAL_TYPE_CPM`
        # * `PERFORMANCE_GOAL_TYPE_CPC`
        # * `PERFORMANCE_GOAL_TYPE_CPA`
        # * `PERFORMANCE_GOAL_TYPE_CPIAVC`
        # For example 1500000 represents 1.5 standard units of the currency.
        # Corresponds to the JSON property `performanceGoalAmountMicros`
        # @return [Fixnum]
        attr_accessor :performance_goal_amount_micros
      
        # The decimal representation of the goal percentage in micros.
        # Applicable when
        # performance_goal_type is one of:
        # * `PERFORMANCE_GOAL_TYPE_CTR`
        # * `PERFORMANCE_GOAL_TYPE_VIEWABILITY`
        # For example, 70000 represents 7% (decimal 0.07).
        # Corresponds to the JSON property `performanceGoalPercentageMicros`
        # @return [Fixnum]
        attr_accessor :performance_goal_percentage_micros
      
        # A key performance indicator (KPI) string, which can be empty.
        # Must be UTF-8 encoded with a length of no more than 100 characters.
        # Applicable when
        # performance_goal_type is set to
        # `PERFORMANCE_GOAL_TYPE_OTHER`.
        # Corresponds to the JSON property `performanceGoalString`
        # @return [String]
        attr_accessor :performance_goal_string
      
        # Required. The type of the performance goal.
        # Corresponds to the JSON property `performanceGoalType`
        # @return [String]
        attr_accessor :performance_goal_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @performance_goal_amount_micros = args[:performance_goal_amount_micros] if args.key?(:performance_goal_amount_micros)
          @performance_goal_percentage_micros = args[:performance_goal_percentage_micros] if args.key?(:performance_goal_percentage_micros)
          @performance_goal_string = args[:performance_goal_string] if args.key?(:performance_goal_string)
          @performance_goal_type = args[:performance_goal_type] if args.key?(:performance_goal_type)
        end
      end
      
      # A strategy that automatically adjusts the bid to meet or beat a specified
      # performance goal.
      class PerformanceGoalBidStrategy
        include Google::Apis::Core::Hashable
      
        # The maximum average CPM that may be bid, in micros of the advertiser's
        # currency. Must be greater than or equal to a billable unit of the given
        # currency. Not applicable when
        # performance_goal_type
        # is set to `BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_VIEWABLE_CPM`.
        # For example, 1500000 represents 1.5 standard units of the currency.
        # Corresponds to the JSON property `maxAverageCpmBidAmountMicros`
        # @return [Fixnum]
        attr_accessor :max_average_cpm_bid_amount_micros
      
        # Required. The performance goal the bidding strategy will attempt to
        # meet or beat, in micros of the advertiser's currency.
        # Must be greater than or equal to a billable unit of the given currency and
        # smaller or equal to upper bounds. Each
        # performance_goal_type
        # has its upper bound:
        # * when
        # performance_goal_type
        # is `BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CPA`,
        # upper bound is 10000.00 USD.
        # * when
        # performance_goal_type
        # is `BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CPC`,
        # upper bound is 1000.00 USD.
        # * when
        # performance_goal_type
        # is `BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_VIEWABLE_CPM`, upper bound is
        # 1000.00 USD.
        # Example: If set to
        # `BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_VIEWABLE_CPM`, the bid price will
        # be based on the probability that each available impression will be
        # viewable. For example, if viewable CPM target is $2 and an impression is
        # 40% likely to be viewable, the bid price will be $0.80 CPM (40% of $2).
        # For example, 1500000 represents 1.5 standard units of the currency.
        # Corresponds to the JSON property `performanceGoalAmountMicros`
        # @return [Fixnum]
        attr_accessor :performance_goal_amount_micros
      
        # Required. The type of the performance goal that the bidding strategy
        # will try to meet or beat.
        # For line item level usage, the value must be one of:
        # * `BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CPA`
        # * `BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CPC`
        # * `BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_VIEWABLE_CPM`.
        # Corresponds to the JSON property `performanceGoalType`
        # @return [String]
        attr_accessor :performance_goal_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_average_cpm_bid_amount_micros = args[:max_average_cpm_bid_amount_micros] if args.key?(:max_average_cpm_bid_amount_micros)
          @performance_goal_amount_micros = args[:performance_goal_amount_micros] if args.key?(:performance_goal_amount_micros)
          @performance_goal_type = args[:performance_goal_type] if args.key?(:performance_goal_type)
        end
      end
      
      # Targeting details for proximity location list. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_PROXIMITY_LOCATION_LIST`.
      class ProximityLocationListAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the proximity location list. Should refer to the
        # location_list_id field of a
        # LocationList resource whose type is
        # `TARGETING_LOCATION_TYPE_PROXIMITY`.
        # Corresponds to the JSON property `proximityLocationListId`
        # @return [Fixnum]
        attr_accessor :proximity_location_list_id
      
        # Required. Radius range for proximity location list.
        # This represents the size of the area around a chosen location that will be
        # targeted.
        # `All` proximity location targeting under a single line item must have the
        # same radius range value. Set this value to match any existing targeting.
        # If updated, this field will change the radius range for all proximity
        # targeting under the line item.
        # Corresponds to the JSON property `proximityRadiusRange`
        # @return [String]
        attr_accessor :proximity_radius_range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @proximity_location_list_id = args[:proximity_location_list_id] if args.key?(:proximity_location_list_id)
          @proximity_radius_range = args[:proximity_radius_range] if args.key?(:proximity_radius_range)
        end
      end
      
      # Publisher review status for the creative.
      class PublisherReviewStatus
        include Google::Apis::Core::Hashable
      
        # The publisher reviewing the creative.
        # Corresponds to the JSON property `publisherName`
        # @return [String]
        attr_accessor :publisher_name
      
        # Status of the publisher review.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @publisher_name = args[:publisher_name] if args.key?(:publisher_name)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # The rate related settings of the inventory source.
      class RateDetails
        include Google::Apis::Core::Hashable
      
        # The rate type.
        # Acceptable values are `INVENTORY_SOURCE_RATE_TYPE_CPM_FIXED`,
        # `INVENTORY_SOURCE_RATE_TYPE_CPM_FLOOR`, and
        # `INVENTORY_SOURCE_RATE_TYPE_CPD`.
        # Corresponds to the JSON property `inventorySourceRateType`
        # @return [String]
        attr_accessor :inventory_source_rate_type
      
        # Represents an amount of money with its currency type.
        # Corresponds to the JSON property `minimumSpend`
        # @return [Google::Apis::DisplayvideoV1::Money]
        attr_accessor :minimum_spend
      
        # Represents an amount of money with its currency type.
        # Corresponds to the JSON property `rate`
        # @return [Google::Apis::DisplayvideoV1::Money]
        attr_accessor :rate
      
        # Required for guaranteed inventory sources.
        # The number of impressions guaranteed by the seller.
        # Corresponds to the JSON property `unitsPurchased`
        # @return [Fixnum]
        attr_accessor :units_purchased
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inventory_source_rate_type = args[:inventory_source_rate_type] if args.key?(:inventory_source_rate_type)
          @minimum_spend = args[:minimum_spend] if args.key?(:minimum_spend)
          @rate = args[:rate] if args.key?(:rate)
          @units_purchased = args[:units_purchased] if args.key?(:units_purchased)
        end
      end
      
      # Targeting details for regional location list. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_REGIONAL_LOCATION_LIST`.
      class RegionalLocationListAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. ID of the regional location list. Should refer to the
        # location_list_id field of a
        # LocationList resource whose type is `TARGETING_LOCATION_TYPE_REGIONAL`.
        # Corresponds to the JSON property `regionalLocationListId`
        # @return [Fixnum]
        attr_accessor :regional_location_list_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @negative = args[:negative] if args.key?(:negative)
          @regional_location_list_id = args[:regional_location_list_id] if args.key?(:regional_location_list_id)
        end
      end
      
      # Review statuses for the creative.
      class ReviewStatusInfo
        include Google::Apis::Core::Hashable
      
        # Represents the basic approval needed for a creative to begin serving.
        # Summary of
        # creative_and_landing_page_review_status
        # and
        # content_and_policy_review_status.
        # Corresponds to the JSON property `approvalStatus`
        # @return [String]
        attr_accessor :approval_status
      
        # Content and policy review status for the creative.
        # Corresponds to the JSON property `contentAndPolicyReviewStatus`
        # @return [String]
        attr_accessor :content_and_policy_review_status
      
        # Creative and landing page review status for the creative.
        # Corresponds to the JSON property `creativeAndLandingPageReviewStatus`
        # @return [String]
        attr_accessor :creative_and_landing_page_review_status
      
        # Exchange review statuses for the creative.
        # Corresponds to the JSON property `exchangeReviewStatuses`
        # @return [Array<Google::Apis::DisplayvideoV1::ExchangeReviewStatus>]
        attr_accessor :exchange_review_statuses
      
        # Publisher review statuses for the creative.
        # Corresponds to the JSON property `publisherReviewStatuses`
        # @return [Array<Google::Apis::DisplayvideoV1::PublisherReviewStatus>]
        attr_accessor :publisher_review_statuses
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @approval_status = args[:approval_status] if args.key?(:approval_status)
          @content_and_policy_review_status = args[:content_and_policy_review_status] if args.key?(:content_and_policy_review_status)
          @creative_and_landing_page_review_status = args[:creative_and_landing_page_review_status] if args.key?(:creative_and_landing_page_review_status)
          @exchange_review_statuses = args[:exchange_review_statuses] if args.key?(:exchange_review_statuses)
          @publisher_review_statuses = args[:publisher_review_statuses] if args.key?(:publisher_review_statuses)
        end
      end
      
      # Structured Data File (SDF) related settings.
      class SdfConfig
        include Google::Apis::Core::Hashable
      
        # An administrator email address to which the SDF processing status reports
        # will be sent.
        # Corresponds to the JSON property `adminEmail`
        # @return [String]
        attr_accessor :admin_email
      
        # Required. The version of SDF being used.
        # Corresponds to the JSON property `version`
        # @return [String]
        attr_accessor :version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @admin_email = args[:admin_email] if args.key?(:admin_email)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # Type for the response returned
      # by [SdfDownloadTaskService.CreateSdfDownloadTask].
      class SdfDownloadTask
        include Google::Apis::Core::Hashable
      
        # A resource name to be used in
        # media.download to Download the prepared
        # files. Resource names have the format
        # `download/sdfdownloadtasks/media/`media_id``. `media_id` will be made
        # available by the long running operation service once the task status is
        # done.
        # Corresponds to the JSON property `resourceName`
        # @return [String]
        attr_accessor :resource_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_name = args[:resource_name] if args.key?(:resource_name)
        end
      end
      
      # Type for the metadata returned
      # by [SdfDownloadTaskService.CreateSdfDownloadTask].
      class SdfDownloadTaskMetadata
        include Google::Apis::Core::Hashable
      
        # The time when the operation was created.
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # The time when execution was completed.
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # The SDF version used to execute this download task.
        # Corresponds to the JSON property `version`
        # @return [String]
        attr_accessor :version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_time = args[:create_time] if args.key?(:create_time)
          @end_time = args[:end_time] if args.key?(:end_time)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # Targeting details for sensitive category. This will be populated in the
      # details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION`.
      class SensitiveCategoryAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. ID of the sensitive category to be EXCLUDED.
        # Corresponds to the JSON property `excludedTargetingOptionId`
        # @return [String]
        attr_accessor :excluded_targeting_option_id
      
        # Output only. An enum for the DV360 Sensitive category content classifier.
        # Corresponds to the JSON property `sensitiveCategory`
        # @return [String]
        attr_accessor :sensitive_category
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @excluded_targeting_option_id = args[:excluded_targeting_option_id] if args.key?(:excluded_targeting_option_id)
          @sensitive_category = args[:sensitive_category] if args.key?(:sensitive_category)
        end
      end
      
      # Represents a targetable sensitive category. This will be
      # populated in the
      # sensitive_category_details
      # field of the TargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION`.
      class SensitiveCategoryTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. An enum for the DV360 Sensitive category content classifier.
        # Corresponds to the JSON property `sensitiveCategory`
        # @return [String]
        attr_accessor :sensitive_category
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @sensitive_category = args[:sensitive_category] if args.key?(:sensitive_category)
        end
      end
      
      # The `Status` type defines a logical error model that is suitable for
      # different programming environments, including REST APIs and RPC APIs. It is
      # used by [gRPC](https://github.com/grpc). Each `Status` message contains
      # three pieces of data: error code, error message, and error details.
      # You can find out more about this error model and how to work with it in the
      # [API Design Guide](https://cloud.google.com/apis/design/errors).
      class Status
        include Google::Apis::Core::Hashable
      
        # The status code, which should be an enum value of google.rpc.Code.
        # Corresponds to the JSON property `code`
        # @return [Fixnum]
        attr_accessor :code
      
        # A list of messages that carry the error details.  There is a common set of
        # message types for APIs to use.
        # Corresponds to the JSON property `details`
        # @return [Array<Hash<String,Object>>]
        attr_accessor :details
      
        # A developer-facing error message, which should be in English. Any
        # user-facing error message should be localized and sent in the
        # google.rpc.Status.details field, or localized by the client.
        # Corresponds to the JSON property `message`
        # @return [String]
        attr_accessor :message
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @code = args[:code] if args.key?(:code)
          @details = args[:details] if args.key?(:details)
          @message = args[:message] if args.key?(:message)
        end
      end
      
      # Details for assigned sub-exchange targeting option. This will be populated in
      # the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_SUB_EXCHANGE`.
      class SubExchangeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_SUB_EXCHANGE`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
        end
      end
      
      # Represents a targetable sub-exchange. This will be populated in the
      # sub_exchange_details field
      # of a TargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_SUB_EXCHANGE`.
      class SubExchangeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The display name of the sub-exchange.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
        end
      end
      
      # Represents a single targeting option, which is a targetable concept in
      # DV360.
      class TargetingOption
        include Google::Apis::Core::Hashable
      
        # Represents a targetable age range. This will be populated in the
        # age_range_details field when
        # targeting_type is
        # `TARGETING_TYPE_AGE_RANGE`.
        # Corresponds to the JSON property `ageRangeDetails`
        # @return [Google::Apis::DisplayvideoV1::AgeRangeTargetingOptionDetails]
        attr_accessor :age_range_details
      
        # Represents a targetable collection of apps. A collection lets you target
        # dynamic groups of related apps that are maintained by the platform, for
        # example `All Apps/Google Play/Games`. This will be populated in the
        # app_category_details field when
        # targeting_type is
        # `TARGETING_TYPE_APP_CATEGORY`.
        # Corresponds to the JSON property `appCategoryDetails`
        # @return [Google::Apis::DisplayvideoV1::AppCategoryTargetingOptionDetails]
        attr_accessor :app_category_details
      
        # Represents a targetable authorized seller status. This will be populated in
        # the
        # authorized_seller_status_details
        # field when targeting_type is
        # `TARGETING_TYPE_AUTHORIZED_SELLER_STATUS`.
        # Corresponds to the JSON property `authorizedSellerStatusDetails`
        # @return [Google::Apis::DisplayvideoV1::AuthorizedSellerStatusTargetingOptionDetails]
        attr_accessor :authorized_seller_status_details
      
        # Represents a targetable browser. This will be populated in the
        # browser_details field when
        # targeting_type is
        # `TARGETING_TYPE_BROWSER`.
        # Corresponds to the JSON property `browserDetails`
        # @return [Google::Apis::DisplayvideoV1::BrowserTargetingOptionDetails]
        attr_accessor :browser_details
      
        # Represents a targetable carrier or ISP. This will be populated in the
        # carrier_and_isp_details field of
        # a TargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_CARRIER_AND_ISP`.
        # Corresponds to the JSON property `carrierAndIspDetails`
        # @return [Google::Apis::DisplayvideoV1::CarrierAndIspTargetingOptionDetails]
        attr_accessor :carrier_and_isp_details
      
        # Represents a targetable category. This will be populated in the
        # category_details field of a
        # TargetingOption when targeting_type is
        # `TARGETING_TYPE_CATEGORY`.
        # Corresponds to the JSON property `categoryDetails`
        # @return [Google::Apis::DisplayvideoV1::CategoryTargetingOptionDetails]
        attr_accessor :category_details
      
        # Represents a targetable content instream position, which could be used by
        # video and audio ads. This will be populated in the
        # content_instream_position_details
        # field when targeting_type is
        # `TARGETING_TYPE_CONTENT_INSTREAM_POSITION`.
        # Corresponds to the JSON property `contentInstreamPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::ContentInstreamPositionTargetingOptionDetails]
        attr_accessor :content_instream_position_details
      
        # Represents a targetable content outstream position, which could be used by
        # display and video ads. This will be populated in the
        # content_outstream_position_details
        # field when targeting_type is
        # `TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION`.
        # Corresponds to the JSON property `contentOutstreamPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::ContentOutstreamPositionTargetingOptionDetails]
        attr_accessor :content_outstream_position_details
      
        # Represents a targetable device make and model. This will be populated in the
        # device_make_model_details
        # field of a TargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_DEVICE_MAKE_MODEL`.
        # Corresponds to the JSON property `deviceMakeModelDetails`
        # @return [Google::Apis::DisplayvideoV1::DeviceMakeModelTargetingOptionDetails]
        attr_accessor :device_make_model_details
      
        # Represents a targetable device type. This will be populated in the
        # device_type_details field of a
        # TargetingOption when targeting_type is
        # `TARGETING_TYPE_DEVICE_TYPE`.
        # Corresponds to the JSON property `deviceTypeDetails`
        # @return [Google::Apis::DisplayvideoV1::DeviceTypeTargetingOptionDetails]
        attr_accessor :device_type_details
      
        # Represents a targetable digital content label rating tier. This will be
        # populated in the
        # digital_content_label_details
        # field of the TargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION`.
        # Corresponds to the JSON property `digitalContentLabelDetails`
        # @return [Google::Apis::DisplayvideoV1::DigitalContentLabelTargetingOptionDetails]
        attr_accessor :digital_content_label_details
      
        # Represents a targetable environment. This will be populated in the
        # environment_details field of a
        # TargetingOption when targeting_type is
        # `TARGETING_TYPE_ENVIRONMENT`.
        # Corresponds to the JSON property `environmentDetails`
        # @return [Google::Apis::DisplayvideoV1::EnvironmentTargetingOptionDetails]
        attr_accessor :environment_details
      
        # Represents a targetable exchange. This will be populated in the
        # exchange_details field
        # of a TargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_EXCHANGE`.
        # Corresponds to the JSON property `exchangeDetails`
        # @return [Google::Apis::DisplayvideoV1::ExchangeTargetingOptionDetails]
        attr_accessor :exchange_details
      
        # Represents a targetable gender. This will be populated in the
        # gender_details field of a TargetingOption
        # when targeting_type is
        # `TARGETING_TYPE_GENDER`.
        # Corresponds to the JSON property `genderDetails`
        # @return [Google::Apis::DisplayvideoV1::GenderTargetingOptionDetails]
        attr_accessor :gender_details
      
        # Represents a targetable geographic region. This will be populated in the
        # geo_region_details field when
        # targeting_type is
        # `TARGETING_TYPE_GEO_REGION`.
        # Corresponds to the JSON property `geoRegionDetails`
        # @return [Google::Apis::DisplayvideoV1::GeoRegionTargetingOptionDetails]
        attr_accessor :geo_region_details
      
        # Represents a targetable household income. This will be populated in the
        # household_income_details field of
        # a TargetingOption when targeting_type is
        # `TARGETING_TYPE_HOUSEHOLD_INCOME`.
        # Corresponds to the JSON property `householdIncomeDetails`
        # @return [Google::Apis::DisplayvideoV1::HouseholdIncomeTargetingOptionDetails]
        attr_accessor :household_income_details
      
        # Represents a targetable language. This will be populated in the
        # language_details field when
        # targeting_type is
        # `TARGETING_TYPE_LANGUAGE`.
        # Corresponds to the JSON property `languageDetails`
        # @return [Google::Apis::DisplayvideoV1::LanguageTargetingOptionDetails]
        attr_accessor :language_details
      
        # Output only. The resource name for this targeting option.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Represents a targetable on screen position, which could be used by display
        # and video ads. This will be populated in the
        # on_screen_position_details
        # field when
        # targeting_type is
        # `TARGETING_TYPE_ON_SCREEN_POSITION`.
        # Corresponds to the JSON property `onScreenPositionDetails`
        # @return [Google::Apis::DisplayvideoV1::OnScreenPositionTargetingOptionDetails]
        attr_accessor :on_screen_position_details
      
        # Represents a targetable operating system. This will be populated in the
        # operating_system_details field
        # of a TargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_OPERATING_SYSTEM`.
        # Corresponds to the JSON property `operatingSystemDetails`
        # @return [Google::Apis::DisplayvideoV1::OperatingSystemTargetingOptionDetails]
        attr_accessor :operating_system_details
      
        # Represents a targetable parental status. This will be populated in the
        # parental_status_details field of a
        # TargetingOption when targeting_type is
        # `TARGETING_TYPE_PARENTAL_STATUS`.
        # Corresponds to the JSON property `parentalStatusDetails`
        # @return [Google::Apis::DisplayvideoV1::ParentalStatusTargetingOptionDetails]
        attr_accessor :parental_status_details
      
        # Represents a targetable sensitive category. This will be
        # populated in the
        # sensitive_category_details
        # field of the TargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION`.
        # Corresponds to the JSON property `sensitiveCategoryDetails`
        # @return [Google::Apis::DisplayvideoV1::SensitiveCategoryTargetingOptionDetails]
        attr_accessor :sensitive_category_details
      
        # Represents a targetable sub-exchange. This will be populated in the
        # sub_exchange_details field
        # of a TargetingOption when
        # targeting_type is
        # `TARGETING_TYPE_SUB_EXCHANGE`.
        # Corresponds to the JSON property `subExchangeDetails`
        # @return [Google::Apis::DisplayvideoV1::SubExchangeTargetingOptionDetails]
        attr_accessor :sub_exchange_details
      
        # Output only. A unique identifier for this targeting option. The tuple
        # ``targeting_type`, `targeting_option_id`` will be unique.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        # Output only. The type of this targeting option.
        # Corresponds to the JSON property `targetingType`
        # @return [String]
        attr_accessor :targeting_type
      
        # Represents a targetable user rewarded content status for video ads only. This
        # will be populated in the
        # user_rewarded_content_details
        # field when
        # targeting_type is
        # `TARGETING_TYPE_USER_REWARDED_CONTENT`.
        # Corresponds to the JSON property `userRewardedContentDetails`
        # @return [Google::Apis::DisplayvideoV1::UserRewardedContentTargetingOptionDetails]
        attr_accessor :user_rewarded_content_details
      
        # Represents a targetable video player size. This will be populated in the
        # video_player_size_details
        # field when targeting_type is
        # `TARGETING_TYPE_VIDEO_PLAYER_SIZE`.
        # Corresponds to the JSON property `videoPlayerSizeDetails`
        # @return [Google::Apis::DisplayvideoV1::VideoPlayerSizeTargetingOptionDetails]
        attr_accessor :video_player_size_details
      
        # Represents a targetable viewability. This will be populated in the
        # viewability_details field of a
        # TargetingOption when targeting_type is
        # `TARGETING_TYPE_VIEWABILITY`.
        # Corresponds to the JSON property `viewabilityDetails`
        # @return [Google::Apis::DisplayvideoV1::ViewabilityTargetingOptionDetails]
        attr_accessor :viewability_details
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @age_range_details = args[:age_range_details] if args.key?(:age_range_details)
          @app_category_details = args[:app_category_details] if args.key?(:app_category_details)
          @authorized_seller_status_details = args[:authorized_seller_status_details] if args.key?(:authorized_seller_status_details)
          @browser_details = args[:browser_details] if args.key?(:browser_details)
          @carrier_and_isp_details = args[:carrier_and_isp_details] if args.key?(:carrier_and_isp_details)
          @category_details = args[:category_details] if args.key?(:category_details)
          @content_instream_position_details = args[:content_instream_position_details] if args.key?(:content_instream_position_details)
          @content_outstream_position_details = args[:content_outstream_position_details] if args.key?(:content_outstream_position_details)
          @device_make_model_details = args[:device_make_model_details] if args.key?(:device_make_model_details)
          @device_type_details = args[:device_type_details] if args.key?(:device_type_details)
          @digital_content_label_details = args[:digital_content_label_details] if args.key?(:digital_content_label_details)
          @environment_details = args[:environment_details] if args.key?(:environment_details)
          @exchange_details = args[:exchange_details] if args.key?(:exchange_details)
          @gender_details = args[:gender_details] if args.key?(:gender_details)
          @geo_region_details = args[:geo_region_details] if args.key?(:geo_region_details)
          @household_income_details = args[:household_income_details] if args.key?(:household_income_details)
          @language_details = args[:language_details] if args.key?(:language_details)
          @name = args[:name] if args.key?(:name)
          @on_screen_position_details = args[:on_screen_position_details] if args.key?(:on_screen_position_details)
          @operating_system_details = args[:operating_system_details] if args.key?(:operating_system_details)
          @parental_status_details = args[:parental_status_details] if args.key?(:parental_status_details)
          @sensitive_category_details = args[:sensitive_category_details] if args.key?(:sensitive_category_details)
          @sub_exchange_details = args[:sub_exchange_details] if args.key?(:sub_exchange_details)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
          @targeting_type = args[:targeting_type] if args.key?(:targeting_type)
          @user_rewarded_content_details = args[:user_rewarded_content_details] if args.key?(:user_rewarded_content_details)
          @video_player_size_details = args[:video_player_size_details] if args.key?(:video_player_size_details)
          @viewability_details = args[:viewability_details] if args.key?(:viewability_details)
        end
      end
      
      # Settings for advertisers that use third-party ad servers only.
      class ThirdPartyOnlyConfig
        include Google::Apis::Core::Hashable
      
        # Whether or not order ID reporting for pixels is enabled.
        # This value cannot be changed once set to `true`.
        # Corresponds to the JSON property `pixelOrderIdReportingEnabled`
        # @return [Boolean]
        attr_accessor :pixel_order_id_reporting_enabled
        alias_method :pixel_order_id_reporting_enabled?, :pixel_order_id_reporting_enabled
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @pixel_order_id_reporting_enabled = args[:pixel_order_id_reporting_enabled] if args.key?(:pixel_order_id_reporting_enabled)
        end
      end
      
      # Tracking URLs from third parties to track interactions with an audio or a
      # video creative.
      class ThirdPartyUrl
        include Google::Apis::Core::Hashable
      
        # The type of interaction needs to be tracked by the tracking URL
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # Tracking URL used to track the interaction.
        # Provide a URL with optional path or query string, beginning with `https:`.
        # For example, https://www.example.com/path
        # Corresponds to the JSON property `url`
        # @return [String]
        attr_accessor :url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @type = args[:type] if args.key?(:type)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # Assigned third party verifier targeting option details. This will be
      # populated in the details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_THIRD_PARTY_VERIFIER`.
      class ThirdPartyVerifierAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Details of Adloox settings.
        # Corresponds to the JSON property `adloox`
        # @return [Google::Apis::DisplayvideoV1::Adloox]
        attr_accessor :adloox
      
        # Details of DoubleVerify settings.
        # Corresponds to the JSON property `doubleVerify`
        # @return [Google::Apis::DisplayvideoV1::DoubleVerify]
        attr_accessor :double_verify
      
        # Details of Integral Ad Science settings.
        # Corresponds to the JSON property `integralAdScience`
        # @return [Google::Apis::DisplayvideoV1::IntegralAdScience]
        attr_accessor :integral_ad_science
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @adloox = args[:adloox] if args.key?(:adloox)
          @double_verify = args[:double_verify] if args.key?(:double_verify)
          @integral_ad_science = args[:integral_ad_science] if args.key?(:integral_ad_science)
        end
      end
      
      # A time range.
      class TimeRange
        include Google::Apis::Core::Hashable
      
        # Required. The upper bound of a time range, inclusive.
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # Required. The lower bound of a time range, inclusive.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @end_time = args[:end_time] if args.key?(:end_time)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # Timer event of the creative.
      class TimerEvent
        include Google::Apis::Core::Hashable
      
        # Required. The name of the timer event.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Required. The name used to identify this timer event in reports.
        # Corresponds to the JSON property `reportingName`
        # @return [String]
        attr_accessor :reporting_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @reporting_name = args[:reporting_name] if args.key?(:reporting_name)
        end
      end
      
      # Settings that control the behavior of a single Floodlight activity config.
      class TrackingFloodlightActivityConfig
        include Google::Apis::Core::Hashable
      
        # Required. The ID of the Floodlight activity.
        # Corresponds to the JSON property `floodlightActivityId`
        # @return [Fixnum]
        attr_accessor :floodlight_activity_id
      
        # Required. The number of days after an ad has been clicked in which a
        # conversion may be counted.
        # Must be between 0 and 90 inclusive.
        # Corresponds to the JSON property `postClickLookbackWindowDays`
        # @return [Fixnum]
        attr_accessor :post_click_lookback_window_days
      
        # Required. The number of days after an ad has been viewed in which a
        # conversion may be counted.
        # Must be between 0 and 90 inclusive.
        # Corresponds to the JSON property `postViewLookbackWindowDays`
        # @return [Fixnum]
        attr_accessor :post_view_lookback_window_days
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @floodlight_activity_id = args[:floodlight_activity_id] if args.key?(:floodlight_activity_id)
          @post_click_lookback_window_days = args[:post_click_lookback_window_days] if args.key?(:post_click_lookback_window_days)
          @post_view_lookback_window_days = args[:post_view_lookback_window_days] if args.key?(:post_view_lookback_window_days)
        end
      end
      
      # Represents information about the transcoded audio or video file.
      class Transcode
        include Google::Apis::Core::Hashable
      
        # The bit rate for the audio stream of the transcoded video, or the bit rate
        # for the transcoded audio, in kilobits per second.
        # Corresponds to the JSON property `audioBitRateKbps`
        # @return [Fixnum]
        attr_accessor :audio_bit_rate_kbps
      
        # The sample rate for the audio stream of the transcoded video, or the sample
        # rate for the transcoded audio, in hertz.
        # Corresponds to the JSON property `audioSampleRateHz`
        # @return [Fixnum]
        attr_accessor :audio_sample_rate_hz
      
        # The transcoding bit rate of the transcoded video, in kilobits per second.
        # Corresponds to the JSON property `bitRateKbps`
        # @return [Fixnum]
        attr_accessor :bit_rate_kbps
      
        # Dimensions.
        # Corresponds to the JSON property `dimensions`
        # @return [Google::Apis::DisplayvideoV1::Dimensions]
        attr_accessor :dimensions
      
        # The size of the transcoded file, in bytes.
        # Corresponds to the JSON property `fileSizeBytes`
        # @return [Fixnum]
        attr_accessor :file_size_bytes
      
        # The frame rate of the transcoded video, in frames per second.
        # Corresponds to the JSON property `frameRate`
        # @return [Float]
        attr_accessor :frame_rate
      
        # The MIME type of the transcoded file.
        # Corresponds to the JSON property `mimeType`
        # @return [String]
        attr_accessor :mime_type
      
        # The name of the transcoded file.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Indicates if the transcoding was successful.
        # Corresponds to the JSON property `transcoded`
        # @return [Boolean]
        attr_accessor :transcoded
        alias_method :transcoded?, :transcoded
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @audio_bit_rate_kbps = args[:audio_bit_rate_kbps] if args.key?(:audio_bit_rate_kbps)
          @audio_sample_rate_hz = args[:audio_sample_rate_hz] if args.key?(:audio_sample_rate_hz)
          @bit_rate_kbps = args[:bit_rate_kbps] if args.key?(:bit_rate_kbps)
          @dimensions = args[:dimensions] if args.key?(:dimensions)
          @file_size_bytes = args[:file_size_bytes] if args.key?(:file_size_bytes)
          @frame_rate = args[:frame_rate] if args.key?(:frame_rate)
          @mime_type = args[:mime_type] if args.key?(:mime_type)
          @name = args[:name] if args.key?(:name)
          @transcoded = args[:transcoded] if args.key?(:transcoded)
        end
      end
      
      # A creative identifier provided by a registry that is unique across all
      # platforms. This is part of the VAST 4.0 standard.
      class UniversalAdId
        include Google::Apis::Core::Hashable
      
        # The unique creative identifier.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # The registry provides unique creative identifiers.
        # Corresponds to the JSON property `registry`
        # @return [String]
        attr_accessor :registry
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @registry = args[:registry] if args.key?(:registry)
        end
      end
      
      # Details for assigned URL targeting option. This will be populated in the
      # details field of an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_URL`.
      class UrlAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Indicates if this option is being negatively targeted.
        # Corresponds to the JSON property `negative`
        # @return [Boolean]
        attr_accessor :negative
        alias_method :negative?, :negative
      
        # Required. The URL, for example `example.com`.
        # DV360 supports two levels of subdirectory targeting, for example
        # `www.example.com/one-subdirectory-level/second-level`, and five levels of
        # subdomain targeting, for example `five.four.three.two.one.example.com`.
        # Corresponds to the JSON property `url`
        # @return [String]
        attr_accessor :url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @negative = args[:negative] if args.key?(:negative)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # User rewarded content targeting option details. This will be populated in
      # the
      # user_rewarded_content_details
      # field when
      # targeting_type is
      # `TARGETING_TYPE_USER_REWARDED_CONTENT`.
      class UserRewardedContentAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The targeting_option_id field when
        # targeting_type is
        # `TARGETING_TYPE_USER_REWARDED_CONTENT`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        # Output only. User rewarded content status for video ads.
        # Corresponds to the JSON property `userRewardedContent`
        # @return [String]
        attr_accessor :user_rewarded_content
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
          @user_rewarded_content = args[:user_rewarded_content] if args.key?(:user_rewarded_content)
        end
      end
      
      # Represents a targetable user rewarded content status for video ads only. This
      # will be populated in the
      # user_rewarded_content_details
      # field when
      # targeting_type is
      # `TARGETING_TYPE_USER_REWARDED_CONTENT`.
      class UserRewardedContentTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. User rewarded content status for video ads.
        # Corresponds to the JSON property `userRewardedContent`
        # @return [String]
        attr_accessor :user_rewarded_content
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @user_rewarded_content = args[:user_rewarded_content] if args.key?(:user_rewarded_content)
        end
      end
      
      # Video player size targeting option details. This will be populated in the
      # video_player_size_details
      # field when targeting_type is
      # `TARGETING_TYPE_VIDEO_PLAYER_SIZE`.
      # Explicitly targeting all options is not supported. Remove all video player
      # size targeting options to achieve this effect.
      class VideoPlayerSizeAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The targeting_option_id field when
        # targeting_type is
        # `TARGETING_TYPE_VIDEO_PLAYER_SIZE`.
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        # Output only. The video player size.
        # Corresponds to the JSON property `videoPlayerSize`
        # @return [String]
        attr_accessor :video_player_size
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
          @video_player_size = args[:video_player_size] if args.key?(:video_player_size)
        end
      end
      
      # Represents a targetable video player size. This will be populated in the
      # video_player_size_details
      # field when targeting_type is
      # `TARGETING_TYPE_VIDEO_PLAYER_SIZE`.
      class VideoPlayerSizeTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The video player size.
        # Corresponds to the JSON property `videoPlayerSize`
        # @return [String]
        attr_accessor :video_player_size
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @video_player_size = args[:video_player_size] if args.key?(:video_player_size)
        end
      end
      
      # Assigned viewability targeting option details. This will be populated in the
      # viewability_details field of
      # an AssignedTargetingOption when
      # targeting_type is
      # `TARGETING_TYPE_VIEWABILITY`.
      class ViewabilityAssignedTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Required. The targeting_option_id of a
        # TargetingOption of type `TARGETING_TYPE_VIEWABILITY` (e.g., "509010"
        # for targeting the `VIEWABILITY_10_PERCENT_OR_MORE` option).
        # Corresponds to the JSON property `targetingOptionId`
        # @return [String]
        attr_accessor :targeting_option_id
      
        # Output only. The predicted viewability percentage.
        # Corresponds to the JSON property `viewability`
        # @return [String]
        attr_accessor :viewability
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @targeting_option_id = args[:targeting_option_id] if args.key?(:targeting_option_id)
          @viewability = args[:viewability] if args.key?(:viewability)
        end
      end
      
      # Represents a targetable viewability. This will be populated in the
      # viewability_details field of a
      # TargetingOption when targeting_type is
      # `TARGETING_TYPE_VIEWABILITY`.
      class ViewabilityTargetingOptionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. The predicted viewability percentage.
        # Corresponds to the JSON property `viewability`
        # @return [String]
        attr_accessor :viewability
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @viewability = args[:viewability] if args.key?(:viewability)
        end
      end
    end
  end
end
