Skip to content

Commit

Permalink
add new words
Browse files Browse the repository at this point in the history
Summary: unblock business sdk release

Reviewed By: liliarizona

Differential Revision: D66021719

fbshipit-source-id: 48702414deabf76c4f78ffe6c5be348ea5c4d189
  • Loading branch information
satwikareddy3 authored and facebook-github-bot committed Nov 15, 2024
1 parent ef6338d commit 48a44e2
Show file tree
Hide file tree
Showing 52 changed files with 290 additions and 86 deletions.
2 changes: 1 addition & 1 deletion src/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export default class FacebookAdsApi {
return 'v21.0';
}
static get SDK_VERSION(): string {
return '21.0.3';
return '21.0.4';
}
static get GRAPH(): string {
return 'https://graph.facebook.com';
Expand Down
4 changes: 3 additions & 1 deletion src/bundle.es6
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,6 @@ export { default as AdvertiserVerificationStatus } from './../src/objects/advert
export { default as AgeRange } from './../src/objects/age-range';
export { default as AgencyClientDeclaration } from './../src/objects/agency-client-declaration';
export { default as Album } from './../src/objects/album';
export { default as AnalyticsCohortQueryResult } from './../src/objects/analytics-cohort-query-result';
export { default as AnalyticsConfig } from './../src/objects/analytics-config';
export { default as AnalyticsEntityUserConfig } from './../src/objects/analytics-entity-user-config';
export { default as AnalyticsFunnelQueryResult } from './../src/objects/analytics-funnel-query-result';
Expand Down Expand Up @@ -421,6 +420,7 @@ export { default as CanvasCollectionThumbnail } from './../src/objects/canvas-co
export { default as CanvasDynamicSetting } from './../src/objects/canvas-dynamic-setting';
export { default as CanvasPreview } from './../src/objects/canvas-preview';
export { default as CanvasTemplate } from './../src/objects/canvas-template';
export { default as CatalogAdvertiserInsight } from './../src/objects/catalog-advertiser-insight';
export { default as CatalogBasedTargeting } from './../src/objects/catalog-based-targeting';
export { default as CatalogItemAppLinks } from './../src/objects/catalog-item-app-links';
export { default as CatalogItemChannelsToIntegrityStatus } from './../src/objects/catalog-item-channels-to-integrity-status';
Expand Down Expand Up @@ -571,6 +571,7 @@ export { default as IGUpcomingEvent } from './../src/objects/ig-upcoming-event';
export { default as IGUser } from './../src/objects/ig-user';
export { default as IGUserExportForCAM } from './../src/objects/ig-user-export-for-cam';
export { default as IGUserForIGOnlyAPI } from './../src/objects/ig-user-for-ig-only-api';
export { default as IGUserSubscribedAppsData } from './../src/objects/ig-user-subscribed-apps-data';
export { default as IGVideoCopyrightCheckMatchesInformation } from './../src/objects/ig-video-copyright-check-matches-information';
export { default as IGVideoCopyrightCheckStatus } from './../src/objects/ig-video-copyright-check-status';
export { default as IPObject } from './../src/objects/ip-object';
Expand Down Expand Up @@ -623,6 +624,7 @@ export { default as Link } from './../src/objects/link';
export { default as LinkedInstagramAccountData } from './../src/objects/linked-instagram-account-data';
export { default as LiveVideo } from './../src/objects/live-video';
export { default as LiveVideoAdBreakConfig } from './../src/objects/live-video-ad-break-config';
export { default as LiveVideoAdCampaignConfig } from './../src/objects/live-video-ad-campaign-config';
export { default as LiveVideoError } from './../src/objects/live-video-error';
export { default as LiveVideoInputStream } from './../src/objects/live-video-input-stream';
export { default as LiveVideoRecommendedEncoderSettings } from './../src/objects/live-video-recommended-encoder-settings';
Expand Down
4 changes: 3 additions & 1 deletion src/globals.es6
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,6 @@ import './../src/objects/advertiser-verification-status';
import './../src/objects/age-range';
import './../src/objects/agency-client-declaration';
import './../src/objects/album';
import './../src/objects/analytics-cohort-query-result';
import './../src/objects/analytics-config';
import './../src/objects/analytics-entity-user-config';
import './../src/objects/analytics-funnel-query-result';
Expand Down Expand Up @@ -397,6 +396,7 @@ import './../src/objects/canvas-collection-thumbnail';
import './../src/objects/canvas-dynamic-setting';
import './../src/objects/canvas-preview';
import './../src/objects/canvas-template';
import './../src/objects/catalog-advertiser-insight';
import './../src/objects/catalog-based-targeting';
import './../src/objects/catalog-item-app-links';
import './../src/objects/catalog-item-channels-to-integrity-status';
Expand Down Expand Up @@ -547,6 +547,7 @@ import './../src/objects/ig-upcoming-event';
import './../src/objects/ig-user';
import './../src/objects/ig-user-export-for-cam';
import './../src/objects/ig-user-for-ig-only-api';
import './../src/objects/ig-user-subscribed-apps-data';
import './../src/objects/ig-video-copyright-check-matches-information';
import './../src/objects/ig-video-copyright-check-status';
import './../src/objects/ip-object';
Expand Down Expand Up @@ -599,6 +600,7 @@ import './../src/objects/link';
import './../src/objects/linked-instagram-account-data';
import './../src/objects/live-video';
import './../src/objects/live-video-ad-break-config';
import './../src/objects/live-video-ad-campaign-config';
import './../src/objects/live-video-error';
import './../src/objects/live-video-input-stream';
import './../src/objects/live-video-recommended-encoder-settings';
Expand Down
4 changes: 4 additions & 0 deletions src/objects/ad-account-ad-volume.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,13 @@ export default class AdAccountAdVolume extends AbstractCrudObject {
return Object.freeze({
aac_creation_package: 'AAC_CREATION_PACKAGE',
ab_test: 'AB_TEST',
account_error: 'ACCOUNT_ERROR',
account_needs_credit: 'ACCOUNT_NEEDS_CREDIT',
account_spend_limit: 'ACCOUNT_SPEND_LIMIT',
account_spend_limit_duplication: 'ACCOUNT_SPEND_LIMIT_DUPLICATION',
aco_toggle: 'ACO_TOGGLE',
ads_reporting: 'ADS_REPORTING',
ads_status: 'ADS_STATUS',
advanced_campaign_budget: 'ADVANCED_CAMPAIGN_BUDGET',
advantage_app_campaign: 'ADVANTAGE_APP_CAMPAIGN',
advantage_campaign_budget_duplication: 'ADVANTAGE_CAMPAIGN_BUDGET_DUPLICATION',
Expand Down Expand Up @@ -161,6 +163,7 @@ export default class AdAccountAdVolume extends AbstractCrudObject {
high_cost: 'HIGH_COST',
historical_benchmark: 'HISTORICAL_BENCHMARK',
ig_multi_ads: 'IG_MULTI_ADS',
ig_surfaces_manual_placements: 'IG_SURFACES_MANUAL_PLACEMENTS',
landing_page_view: 'LANDING_PAGE_VIEW',
landing_page_view_optimization_goal: 'LANDING_PAGE_VIEW_OPTIMIZATION_GOAL',
landing_page_view_precreate: 'LANDING_PAGE_VIEW_PRECREATE',
Expand Down Expand Up @@ -234,6 +237,7 @@ export default class AdAccountAdVolume extends AbstractCrudObject {
signals_growth_capi_table: 'SIGNALS_GROWTH_CAPI_TABLE',
signals_growth_capi_v2: 'SIGNALS_GROWTH_CAPI_V2',
similar_advertiser_budget_recommendation: 'SIMILAR_ADVERTISER_BUDGET_RECOMMENDATION',
site_extensions_duplication: 'SITE_EXTENSIONS_DUPLICATION',
six_plus_manual_placements: 'SIX_PLUS_MANUAL_PLACEMENTS',
six_plus_placements_duplication: 'SIX_PLUS_PLACEMENTS_DUPLICATION',
spend_limit: 'SPEND_LIMIT',
Expand Down
1 change: 1 addition & 0 deletions src/objects/ad-account-user-settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ export default class AdAccountUserSettings extends AbstractCrudObject {
should_default_instagram_profile_card_optimization: 'should_default_instagram_profile_card_optimization',
should_default_text_swapping_optimization: 'should_default_text_swapping_optimization',
should_logout_of_3p_sourcing: 'should_logout_of_3p_sourcing',
should_show_shops_ads_metrics_onboarding_tour: 'should_show_shops_ads_metrics_onboarding_tour',
show_archived_data: 'show_archived_data',
show_text_variation_nux_tooltip: 'show_text_variation_nux_tooltip',
syd_campaign_trends_activemetric: 'syd_campaign_trends_activemetric',
Expand Down
1 change: 1 addition & 0 deletions src/objects/ad-account.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ export default class AdAccount extends AbstractCrudObject {
end_advertiser: 'end_advertiser',
end_advertiser_name: 'end_advertiser_name',
existing_customers: 'existing_customers',
expired_funding_source_details: 'expired_funding_source_details',
extended_credit_invoice_group: 'extended_credit_invoice_group',
failed_delivery_checks: 'failed_delivery_checks',
fb_entity: 'fb_entity',
Expand Down
1 change: 1 addition & 0 deletions src/objects/ad-asset-feed-spec-link-url.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export default class AdAssetFeedSpecLinkURL extends AbstractCrudObject {
carousel_see_more_url: 'carousel_see_more_url',
deeplink_url: 'deeplink_url',
display_url: 'display_url',
object_store_urls: 'object_store_urls',
url_tags: 'url_tags',
website_url: 'website_url',
});
Expand Down
1 change: 1 addition & 0 deletions src/objects/ad-creative-features-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ export default class AdCreativeFeaturesSpec extends AbstractCrudObject {
media_liquidity_animated_image: 'media_liquidity_animated_image',
media_order: 'media_order',
media_type_automation: 'media_type_automation',
multi_photo_to_video: 'multi_photo_to_video',
pac_relaxation: 'pac_relaxation',
product_extensions: 'product_extensions',
product_metadata_automation: 'product_metadata_automation',
Expand Down
1 change: 1 addition & 0 deletions src/objects/ad-creative-link-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export default class AdCreativeLinkData extends AbstractCrudObject {
app_link_spec: 'app_link_spec',
attachment_style: 'attachment_style',
automated_product_tags: 'automated_product_tags',
boosted_product_set_id: 'boosted_product_set_id',
branded_content_shared_to_sponsor_status: 'branded_content_shared_to_sponsor_status',
branded_content_sponsor_page_id: 'branded_content_sponsor_page_id',
call_to_action: 'call_to_action',
Expand Down
2 changes: 2 additions & 0 deletions src/objects/ad-creative.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export default class AdCreative extends AbstractCrudObject {
return Object.freeze({
account_id: 'account_id',
actor_id: 'actor_id',
ad_disclaimer_spec: 'ad_disclaimer_spec',
adlabels: 'adlabels',
applink_treatment: 'applink_treatment',
asset_feed_spec: 'asset_feed_spec',
Expand Down Expand Up @@ -78,6 +79,7 @@ export default class AdCreative extends AbstractCrudObject {
platform_customizations: 'platform_customizations',
playable_asset_id: 'playable_asset_id',
portrait_customizations: 'portrait_customizations',
product_data: 'product_data',
product_set_id: 'product_set_id',
recommender_settings: 'recommender_settings',
source_instagram_media_id: 'source_instagram_media_id',
Expand Down
1 change: 0 additions & 1 deletion src/objects/ad-network-analytics-async-query-export.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import {AbstractCrudObject} from './../abstract-crud-object';
export default class AdNetworkAnalyticsAsyncQueryExport extends AbstractCrudObject {
static get Fields (): Object {
return Object.freeze({
error: 'error',
export_link: 'export_link',
query_id: 'query_id',
status: 'status',
Expand Down
1 change: 0 additions & 1 deletion src/objects/ad-network-analytics-async-query-result.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ export default class AdNetworkAnalyticsAsyncQueryResult extends AbstractCrudObje
static get Fields (): Object {
return Object.freeze({
data: 'data',
error: 'error',
omitted_results: 'omitted_results',
query_id: 'query_id',
results: 'results',
Expand Down
2 changes: 2 additions & 0 deletions src/objects/ad-report-run.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@ export default class AdReportRun extends AbstractCrudObject {
return Object.freeze({
account_id: 'account_id',
async_percent_completion: 'async_percent_completion',
async_report_url: 'async_report_url',
async_status: 'async_status',
date_start: 'date_start',
date_stop: 'date_stop',
emails: 'emails',
friendly_name: 'friendly_name',
id: 'id',
is_async_export: 'is_async_export',
is_bookmarked: 'is_bookmarked',
is_running: 'is_running',
schedule_id: 'schedule_id',
Expand Down
1 change: 1 addition & 0 deletions src/objects/ad-rule.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export default class AdRule extends AbstractCrudObject {
am_syd_resolution_flow: 'AM_SYD_RESOLUTION_FLOW',
am_syd_resolution_flow_modal: 'AM_SYD_RESOLUTION_FLOW_MODAL',
am_table_delivery_column_popover: 'AM_TABLE_DELIVERY_COLUMN_POPOVER',
am_table_more_rules_dropdown: 'AM_TABLE_MORE_RULES_DROPDOWN',
am_table_toggle_popover: 'AM_TABLE_TOGGLE_POPOVER',
am_toolbar_create_rule_dropdown: 'AM_TOOLBAR_CREATE_RULE_DROPDOWN',
pe_campaign_structure_menu: 'PE_CAMPAIGN_STRUCTURE_MENU',
Expand Down
1 change: 1 addition & 0 deletions src/objects/ad-set.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,7 @@ export default class AdSet extends AbstractCrudObject {
value_0: '0',
value_1: '1',
value_2: '2',
value_3: '3',
});
}
static get TuneForCategory (): Object {
Expand Down
11 changes: 11 additions & 0 deletions src/objects/ads-insights.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,12 @@ export default class AdsInsights extends AbstractCrudObject {
location: 'location',
marketing_messages_cost_per_delivered: 'marketing_messages_cost_per_delivered',
marketing_messages_cost_per_link_btn_click: 'marketing_messages_cost_per_link_btn_click',
marketing_messages_delivery_rate: 'marketing_messages_delivery_rate',
marketing_messages_link_btn_click_rate: 'marketing_messages_link_btn_click_rate',
marketing_messages_media_view_rate: 'marketing_messages_media_view_rate',
marketing_messages_phone_call_btn_click_rate: 'marketing_messages_phone_call_btn_click_rate',
marketing_messages_quick_reply_btn_click_rate: 'marketing_messages_quick_reply_btn_click_rate',
marketing_messages_read_rate: 'marketing_messages_read_rate',
marketing_messages_spend: 'marketing_messages_spend',
marketing_messages_website_purchase_values: 'marketing_messages_website_purchase_values',
mobile_app_purchase_roas: 'mobile_app_purchase_roas',
Expand Down Expand Up @@ -249,6 +255,11 @@ export default class AdsInsights extends AbstractCrudObject {
skan_campaign_id: 'skan_campaign_id',
skan_conversion_id: 'skan_conversion_id',
skan_version: 'skan_version',
sot_attribution_model_type: 'sot_attribution_model_type',
sot_attribution_window: 'sot_attribution_window',
sot_channel: 'sot_channel',
sot_event_type: 'sot_event_type',
sot_source: 'sot_source',
standard_event_content_type: 'standard_event_content_type',
title_asset: 'title_asset',
user_persona_id: 'user_persona_id',
Expand Down
3 changes: 3 additions & 0 deletions src/objects/ads-user-settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export default class AdsUserSettings extends AbstractCrudObject {
carousel_to_video_opt_in_status: 'carousel_to_video_opt_in_status',
connected_sources_catalog_opt_in_status: 'connected_sources_catalog_opt_in_status',
default_creation_mode: 'default_creation_mode',
enhance_cta_text_extraction_opt_in_status: 'enhance_cta_text_extraction_opt_in_status',
export_format_default: 'export_format_default',
focus_mode_default: 'focus_mode_default',
gen_ai_alpha_test_status: 'gen_ai_alpha_test_status',
Expand Down Expand Up @@ -71,6 +72,8 @@ export default class AdsUserSettings extends AbstractCrudObject {
static_ad_product_extensions_opt_in: 'static_ad_product_extensions_opt_in',
sticky_setting_after_default_on: 'sticky_setting_after_default_on',
syd_campaign_trends_metric: 'syd_campaign_trends_metric',
text_optimizations_text_extraction_opt_in_status: 'text_optimizations_text_extraction_opt_in_status',
text_variations_sticky_opt_in_status: 'text_variations_sticky_opt_in_status',
total_coupon_syd_dismissals: 'total_coupon_syd_dismissals',
total_coupon_upsell_dismissals: 'total_coupon_upsell_dismissals',
url_prefill_removal_timestamp: 'url_prefill_removal_timestamp',
Expand Down
1 change: 1 addition & 0 deletions src/objects/ads-value-adjustment-rule-collection.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export default class AdsValueAdjustmentRuleCollection extends AbstractCrudObject
static get Fields (): Object {
return Object.freeze({
id: 'id',
is_default_setting: 'is_default_setting',
name: 'name',
});
}
Expand Down
2 changes: 0 additions & 2 deletions src/objects/analytics-funnel-query-result.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ import {AbstractCrudObject} from './../abstract-crud-object';
export default class AnalyticsFunnelQueryResult extends AbstractCrudObject {
static get Fields (): Object {
return Object.freeze({
data: 'data',
error: 'error',
query_id: 'query_id',
status: 'status',
});
Expand Down
3 changes: 0 additions & 3 deletions src/objects/analytics-query-result.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@ import {AbstractCrudObject} from './../abstract-crud-object';
export default class AnalyticsQueryResult extends AbstractCrudObject {
static get Fields (): Object {
return Object.freeze({
columns: 'columns',
datapoints: 'datapoints',
error: 'error',
query_id: 'query_id',
status: 'status',
});
Expand Down
1 change: 1 addition & 0 deletions src/objects/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ export default class Application extends AbstractCrudObject {
deauth_callback_url: 'deauth_callback_url',
default_share_mode: 'default_share_mode',
description: 'description',
enigma_config: 'enigma_config',
financial_id: 'financial_id',
gdpv4_chrome_custom_tabs_enabled: 'gdpv4_chrome_custom_tabs_enabled',
gdpv4_enabled: 'gdpv4_enabled',
Expand Down
57 changes: 57 additions & 0 deletions src/objects/business.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,20 @@ export default class Business extends AbstractCrudObject {
});
}

static get VerificationStatus (): Object {
return Object.freeze({
expired: 'expired',
failed: 'failed',
ineligible: 'ineligible',
not_verified: 'not_verified',
pending: 'pending',
pending_need_more_info: 'pending_need_more_info',
pending_submission: 'pending_submission',
rejected: 'rejected',
revoked: 'revoked',
verified: 'verified',
});
}
static get TwoFactorType (): Object {
return Object.freeze({
admin_required: 'admin_required',
Expand Down Expand Up @@ -677,6 +691,39 @@ export default class Business extends AbstractCrudObject {
view_monetization_insights: 'VIEW_MONETIZATION_INSIGHTS',
});
}
static get BusinessVertical (): Object {
return Object.freeze({
adult_products_and_services: 'ADULT_PRODUCTS_AND_SERVICES',
alcohol_and_tobacco: 'ALCOHOL_AND_TOBACCO',
automotive_dealers: 'AUTOMOTIVE_DEALERS',
body_parts_fluids: 'BODY_PARTS_FLUIDS',
business_and_utility: 'BUSINESS_AND_UTILITY',
content_and_apps: 'CONTENT_AND_APPS',
creators_and_celebrities: 'CREATORS_AND_CELEBRITIES',
dating: 'DATING',
drugs: 'DRUGS',
endangered_species: 'ENDANGERED_SPECIES',
firearms: 'FIREARMS',
fraudulent_misleading_offensive: 'FRAUDULENT_MISLEADING_OFFENSIVE',
gambling: 'GAMBLING',
grocery_and_convenience_store: 'GROCERY_AND_CONVENIENCE_STORE',
hazardous_goods_and_materials: 'HAZARDOUS_GOODS_AND_MATERIALS',
home: 'HOME',
home_and_auto_manufacturing: 'HOME_AND_AUTO_MANUFACTURING',
lifestyle: 'LIFESTYLE',
live_non_endangered_species: 'LIVE_NON_ENDANGERED_SPECIES',
loans_debt_collection_bail_bonds: 'LOANS_DEBT_COLLECTION_BAIL_BONDS',
local_events: 'LOCAL_EVENTS',
medical_healthcare: 'MEDICAL_HEALTHCARE',
multilevel_marketing: 'MULTILEVEL_MARKETING',
non_profit_and_religious_orgs: 'NON_PROFIT_AND_RELIGIOUS_ORGS',
professional: 'PROFESSIONAL',
real_virtual_fake_currency: 'REAL_VIRTUAL_FAKE_CURRENCY',
restaurants: 'RESTAURANTS',
retail: 'RETAIL',
transportation_and_accommodation: 'TRANSPORTATION_AND_ACCOMMODATION',
});
}
static get SubverticalV2 (): Object {
return Object.freeze({
accounting_and_tax: 'ACCOUNTING_AND_TAX',
Expand Down Expand Up @@ -1832,6 +1879,16 @@ export default class Business extends AbstractCrudObject {
);
}

createSelfCertifyWhatsAppBusiness (fields: Array<string>, params: Object = {}, pathOverride?: ?string = null): Promise<Business> {
return this.createEdge(
'/self_certify_whatsapp_business',
fields,
params,
Business,
pathOverride,
);
}

createSetupManagedPartnerAdAccount (fields: Array<string>, params: Object = {}, pathOverride?: ?string = null): Promise<Business> {
return this.createEdge(
'/setup_managed_partner_adaccounts',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,15 @@
import {AbstractCrudObject} from './../abstract-crud-object';

/**
* AnalyticsCohortQueryResult
* CatalogAdvertiserInsight
* @extends AbstractCrudObject
* @see {@link https://developers.facebook.com/docs/marketing-api/}
*/
export default class AnalyticsCohortQueryResult extends AbstractCrudObject {
export default class CatalogAdvertiserInsight extends AbstractCrudObject {
static get Fields (): Object {
return Object.freeze({
data: 'data',
error: 'error',
query_id: 'query_id',
status: 'status',
category: 'category',
country: 'country',
});
}

Expand Down
1 change: 1 addition & 0 deletions src/objects/catalog-website-onboarding-settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export default class CatalogWebsiteOnboardingSettings extends AbstractCrudObject
static get Fields (): Object {
return Object.freeze({
id: 'id',
quality_band: 'quality_band',
status: 'status',
});
}
Expand Down
Loading

0 comments on commit 48a44e2

Please sign in to comment.