message AckNotificationResponse { } message AndroidAppDeliveryData {

optional int64 downloadSize = 1;
optional string signature = 2;
optional string downloadUrl = 3;
repeated AppFileMetadata additionalFile = 4;
repeated HttpCookie downloadAuthCookie = 5;
optional bool forwardLocked = 6;
optional int64 refundTimeout = 7;
optional bool serverInitiated = 8;
optional int64 postInstallRefundWindowMillis = 9;
optional bool immediateStartNeeded = 10;
optional AndroidAppPatchData patchData = 11;
optional EncryptionParams encryptionParams = 12;

} message AndroidAppPatchData {

optional int32 baseVersionCode = 1;
optional string baseSignature = 2;
optional string downloadUrl = 3;
optional int32 patchFormat = 4;
optional int64 maxPatchSize = 5;

} message AppFileMetadata {

optional int32 fileType = 1;
optional int32 versionCode = 2;
optional int64 size = 3;
optional string downloadUrl = 4;

} message EncryptionParams {

optional int32 version = 1;
optional string encryptionKey = 2;
optional string hmacKey = 3;

} message HttpCookie {

optional string name = 1;
optional string value = 2;

} message Address {

optional string name = 1;
optional string addressLine1 = 2;
optional string addressLine2 = 3;
optional string city = 4;
optional string state = 5;
optional string postalCode = 6;
optional string postalCountry = 7;
optional string dependentLocality = 8;
optional string sortingCode = 9;
optional string languageCode = 10;
optional string phoneNumber = 11;
optional bool isReduced = 12;
optional string firstName = 13;
optional string lastName = 14;
optional string email = 15;

} message BookAuthor {

optional string name = 1;
optional string deprecatedQuery = 2;
optional Docid docid = 3;

} message BookDetails {

repeated BookSubject subject = 3;
optional string publisher = 4;
optional string publicationDate = 5;
optional string isbn = 6;
optional int32 numberOfPages = 7;
optional string subtitle = 8;
repeated BookAuthor author = 9;
optional string readerUrl = 10;
optional string downloadEpubUrl = 11;
optional string downloadPdfUrl = 12;
optional string acsEpubTokenUrl = 13;
optional string acsPdfTokenUrl = 14;
optional bool epubAvailable = 15;
optional bool pdfAvailable = 16;
optional string aboutTheAuthor = 17;
repeated group Identifier = 18 {
  optional int32 type = 19;
  optional string identifier = 20;
}

} message BookSubject {

optional string name = 1;
optional string query = 2;
optional string subjectId = 3;

} message BrowseLink {

optional string name = 1;
optional string dataUrl = 3;

} message BrowseResponse {

optional string contentsUrl = 1;
optional string promoUrl = 2;
repeated BrowseLink category = 3;
repeated BrowseLink breadcrumb = 4;

} message AddressChallenge {

optional string responseAddressParam = 1;
optional string responseCheckboxesParam = 2;
optional string title = 3;
optional string descriptionHtml = 4;
repeated FormCheckbox checkbox = 5;
optional Address address = 6;
repeated InputValidationError errorInputField = 7;
optional string errorHtml = 8;
repeated int32 requiredField = 9;

} message AuthenticationChallenge {

optional int32 authenticationType = 1;
optional string responseAuthenticationTypeParam = 2;
optional string responseRetryCountParam = 3;
optional string pinHeaderText = 4;
optional string pinDescriptionTextHtml = 5;
optional string gaiaHeaderText = 6;
optional string gaiaDescriptionTextHtml = 7;

} message BuyResponse {

optional PurchaseNotificationResponse purchaseResponse = 1;
optional group CheckoutInfo = 2 {
  optional LineItem item = 3;
  repeated LineItem subItem = 4;
  repeated group CheckoutOption = 5 {
    optional string formOfPayment = 6;
    optional string encodedAdjustedCart = 7;
    optional string instrumentId = 15;
    repeated LineItem item = 16;
    repeated LineItem subItem = 17;
    optional LineItem total = 18;
    repeated string footerHtml = 19;
    optional int32 instrumentFamily = 29;
    repeated int32 deprecatedInstrumentInapplicableReason = 30;
    optional bool selectedInstrument = 32;
    optional LineItem summary = 33;
    repeated string footnoteHtml = 35;
    optional Instrument instrument = 43;
    optional string purchaseCookie = 45;
    repeated string disabledReason = 48;
  }
  optional string deprecatedCheckoutUrl = 10;
  optional string addInstrumentUrl = 11;
  repeated string footerHtml = 20;
  repeated int32 eligibleInstrumentFamily = 31;
  repeated string footnoteHtml = 36;
  repeated Instrument eligibleInstrument = 44;
}
optional string continueViaUrl = 8;
optional string purchaseStatusUrl = 9;
optional string checkoutServiceId = 12;
optional bool checkoutTokenRequired = 13;
optional string baseCheckoutUrl = 14;
repeated string tosCheckboxHtml = 37;
optional int32 iabPermissionError = 38;
optional PurchaseStatusResponse purchaseStatusResponse = 39;
optional string purchaseCookie = 46;
optional Challenge challenge = 49;

} message Challenge {

optional AddressChallenge addressChallenge = 1;
optional AuthenticationChallenge authenticationChallenge = 2;

} message FormCheckbox {

optional string description = 1;
optional bool checked = 2;
optional bool required = 3;

} message LineItem {

optional string name = 1;
optional string description = 2;
optional Offer offer = 3;
optional Money amount = 4;

} message Money {

optional int64 micros = 1;
optional string currencyCode = 2;
optional string formattedAmount = 3;

} message PurchaseNotificationResponse {

optional int32 status = 1;
optional DebugInfo debugInfo = 2;
optional string localizedErrorMessage = 3;
optional string purchaseId = 4;

} message PurchaseStatusResponse {

optional int32 status = 1;
optional string statusMsg = 2;
optional string statusTitle = 3;
optional string briefMessage = 4;
optional string infoUrl = 5;
optional LibraryUpdate libraryUpdate = 6;
optional Instrument rejectedInstrument = 7;
optional AndroidAppDeliveryData appDeliveryData = 8;

} message CheckInstrumentResponse {

optional bool userHasValidInstrument = 1;
optional bool checkoutTokenRequired = 2;
repeated Instrument instrument = 4;
repeated Instrument eligibleInstrument = 5;

} message UpdateInstrumentRequest {

optional Instrument instrument = 1;
optional string checkoutToken = 2;

} message UpdateInstrumentResponse {

optional int32 result = 1;
optional string instrumentId = 2;
optional string userMessageHtml = 3;
repeated InputValidationError errorInputField = 4;
optional bool checkoutTokenRequired = 5;
optional RedeemedPromoOffer redeemedOffer = 6;

} message InitiateAssociationResponse {

optional string userToken = 1;

} message VerifyAssociationResponse {

optional int32 status = 1;
optional Address billingAddress = 2;
optional CarrierTos carrierTos = 3;

} message AddCreditCardPromoOffer {

optional string headerText = 1;
optional string descriptionHtml = 2;
optional Image image = 3;
optional string introductoryTextHtml = 4;
optional string offerTitle = 5;
optional string noActionDescription = 6;
optional string termsAndConditionsHtml = 7;

} message AvailablePromoOffer {

optional AddCreditCardPromoOffer addCreditCardOffer = 1;

} message CheckPromoOfferResponse {

repeated AvailablePromoOffer availableOffer = 1;
optional RedeemedPromoOffer redeemedOffer = 2;
optional bool checkoutTokenRequired = 3;

} message RedeemedPromoOffer {

optional string headerText = 1;
optional string descriptionHtml = 2;
optional Image image = 3;

} message Docid {

optional string backendDocid = 1;
optional int32 type = 2;
optional int32 backend = 3;

} message Install {

optional fixed64 androidId = 1;
optional int32 version = 2;
optional bool bundled = 3;

} message Offer {

optional int64 micros = 1;
optional string currencyCode = 2;
optional string formattedAmount = 3;
repeated Offer convertedPrice = 4;
optional bool checkoutFlowRequired = 5;
optional int64 fullPriceMicros = 6;
optional string formattedFullAmount = 7;
optional int32 offerType = 8;
optional RentalTerms rentalTerms = 9;
optional int64 onSaleDate = 10;
repeated string promotionLabel = 11;
optional SubscriptionTerms subscriptionTerms = 12;
optional string formattedName = 13;
optional string formattedDescription = 14;

} message OwnershipInfo {

optional int64 initiationTimestampMsec = 1;
optional int64 validUntilTimestampMsec = 2;
optional bool autoRenewing = 3;
optional int64 refundTimeoutTimestampMsec = 4;
optional int64 postDeliveryRefundWindowMsec = 5;

} message RentalTerms {

optional int32 grantPeriodSeconds = 1;
optional int32 activatePeriodSeconds = 2;

} message SubscriptionTerms {

optional TimePeriod recurringPeriod = 1;
optional TimePeriod trialPeriod = 2;

} message TimePeriod {

optional int32 unit = 1;
optional int32 count = 2;

} message BillingAddressSpec {

optional int32 billingAddressType = 1;
repeated int32 requiredField = 2;

} message CarrierBillingCredentials {

optional string value = 1;
optional int64 expiration = 2;

} message CarrierBillingInstrument {

optional string instrumentKey = 1;
optional string accountType = 2;
optional string currencyCode = 3;
optional int64 transactionLimit = 4;
optional string subscriberIdentifier = 5;
optional EncryptedSubscriberInfo encryptedSubscriberInfo = 6;
optional CarrierBillingCredentials credentials = 7;
optional CarrierTos acceptedCarrierTos = 8;

} message CarrierBillingInstrumentStatus {

optional CarrierTos carrierTos = 1;
optional bool associationRequired = 2;
optional bool passwordRequired = 3;
optional PasswordPrompt carrierPasswordPrompt = 4;
optional int32 apiVersion = 5;
optional string name = 6;

} message CarrierTos {

optional CarrierTosEntry dcbTos = 1;
optional CarrierTosEntry piiTos = 2;
optional bool needsDcbTosAcceptance = 3;
optional bool needsPiiTosAcceptance = 4;

} message CarrierTosEntry {

optional string url = 1;
optional string version = 2;

} message CreditCardInstrument {

optional int32 type = 1;
optional string escrowHandle = 2;
optional string lastDigits = 3;
optional int32 expirationMonth = 4;
optional int32 expirationYear = 5;
repeated EfeParam escrowEfeParam = 6;

} message EfeParam {

optional int32 key = 1;
optional string value = 2;

} message InputValidationError {

optional int32 inputField = 1;
optional string errorMessage = 2;

} message Instrument {

optional string instrumentId = 1;
optional Address billingAddress = 2;
optional CreditCardInstrument creditCard = 3;
optional CarrierBillingInstrument carrierBilling = 4;
optional BillingAddressSpec billingAddressSpec = 5;
optional int32 instrumentFamily = 6;
optional CarrierBillingInstrumentStatus carrierBillingStatus = 7;
optional string displayTitle = 8;

} message PasswordPrompt {

optional string prompt = 1;
optional string forgotPasswordUrl = 2;

} message ContainerMetadata {

optional string browseUrl = 1;
optional string nextPageUrl = 2;
optional double relevance = 3;
optional int64 estimatedResults = 4;
optional string analyticsCookie = 5;
optional bool ordered = 6;

} message FlagContentResponse { } message DebugInfo {

repeated string message = 1;
repeated group Timing = 2 {
  optional string name = 3;
  optional double timeInMs = 4;
}

} message DeliveryResponse {

optional int32 status = 1;
optional AndroidAppDeliveryData appDeliveryData = 2;

} message BulkDetailsEntry {

optional DocV2 doc = 1;

} message BulkDetailsRequest {

repeated string docid = 1;
optional bool includeChildDocs = 2;

} message BulkDetailsResponse {

repeated BulkDetailsEntry entry = 1;

} message DetailsResponse {

optional DocV1 docV1 = 1;
optional string analyticsCookie = 2;
optional Review userReview = 3;
optional DocV2 docV2 = 4;
optional string footerHtml = 5;

} message DeviceConfigurationProto {

optional int32 touchScreen = 1;
optional int32 keyboard = 2;
optional int32 navigation = 3;
optional int32 screenLayout = 4;
optional bool hasHardKeyboard = 5;
optional bool hasFiveWayNavigation = 6;
optional int32 screenDensity = 7;
optional int32 glEsVersion = 8;
repeated string systemSharedLibrary = 9;
repeated string systemAvailableFeature = 10;
repeated string nativePlatform = 11;
optional int32 screenWidth = 12;
optional int32 screenHeight = 13;
repeated string systemSupportedLocale = 14;
repeated string glExtension = 15;
optional int32 deviceClass = 16;
optional int32 maxApkDownloadSizeMb = 17;

} message Document {

optional Docid docid = 1;
optional Docid fetchDocid = 2;
optional Docid sampleDocid = 3;
optional string title = 4;
optional string url = 5;
repeated string snippet = 6;
optional Offer priceDeprecated = 7;
optional Availability availability = 9;
repeated Image image = 10;
repeated Document child = 11;
optional AggregateRating aggregateRating = 13;
repeated Offer offer = 14;
repeated TranslatedText translatedSnippet = 15;
repeated DocumentVariant documentVariant = 16;
repeated string categoryId = 17;
repeated Document decoration = 18;
repeated Document parent = 19;
optional string privacyPolicyUrl = 20;

} message DocumentVariant {

optional int32 variationType = 1;
optional Rule rule = 2;
optional string title = 3;
repeated string snippet = 4;
optional string recentChanges = 5;
repeated TranslatedText autoTranslation = 6;
repeated Offer offer = 7;
optional int64 channelId = 9;
repeated Document child = 10;
repeated Document decoration = 11;

} message Image {

optional int32 imageType = 1;
optional group Dimension = 2 {
  optional int32 width = 3;
  optional int32 height = 4;
}
optional string imageUrl = 5;
optional string altTextLocalized = 6;
optional string secureUrl = 7;
optional int32 positionInSequence = 8;
optional bool supportsFifeUrlOptions = 9;
optional group Citation = 10 {
  optional string titleLocalized = 11;
  optional string url = 12;
}

} message TranslatedText {

optional string text = 1;
optional string sourceLocale = 2;
optional string targetLocale = 3;

} message Badge {

optional string title = 1;
repeated Image image = 2;
optional string browseUrl = 3;

} message ContainerWithBanner {

optional string colorThemeArgb = 1;

} message DealOfTheDay {

optional string featuredHeader = 1;
optional string colorThemeArgb = 2;

} message EditorialSeriesContainer {

optional string seriesTitle = 1;
optional string seriesSubtitle = 2;
optional string episodeTitle = 3;
optional string episodeSubtitle = 4;
optional string colorThemeArgb = 5;

} message Link {

optional string uri = 1;

} message PlusOneData {

optional bool setByUser = 1;
optional int64 total = 2;
optional int64 circlesTotal = 3;
repeated PlusPerson circlesPeople = 4;

} message PlusPerson {

optional string displayName = 2;
optional string profileImageUrl = 4;

} message PromotedDoc {

optional string title = 1;
optional string subtitle = 2;
repeated Image image = 3;
optional string descriptionHtml = 4;
optional string detailsUrl = 5;

} message Reason {

optional string briefReason = 1;
optional string detailedReason = 2;
optional string uniqueId = 3;

} message SectionMetadata {

optional string header = 1;
optional string listUrl = 2;
optional string browseUrl = 3;
optional string descriptionHtml = 4;

} message SeriesAntenna {

optional string seriesTitle = 1;
optional string seriesSubtitle = 2;
optional string episodeTitle = 3;
optional string episodeSubtitle = 4;
optional string colorThemeArgb = 5;
optional SectionMetadata sectionTracks = 6;
optional SectionMetadata sectionAlbums = 7;

} message Template {

optional SeriesAntenna seriesAntenna = 1;
optional TileTemplate tileGraphic2X1 = 2;
optional TileTemplate tileGraphic4X2 = 3;
optional TileTemplate tileGraphicColoredTitle2X1 = 4;
optional TileTemplate tileGraphicUpperLeftTitle2X1 = 5;
optional TileTemplate tileDetailsReflectedGraphic2X2 = 6;
optional TileTemplate tileFourBlock4X2 = 7;
optional ContainerWithBanner containerWithBanner = 8;
optional DealOfTheDay dealOfTheDay = 9;
optional TileTemplate tileGraphicColoredTitle4X2 = 10;
optional EditorialSeriesContainer editorialSeriesContainer = 11;

} message TileTemplate {

optional string colorThemeArgb = 1;
optional string colorTextArgb = 2;

} message Warning {

optional string localizedMessage = 1;

} message AlbumDetails {

optional string name = 1;
optional MusicDetails details = 2;
optional ArtistDetails displayArtist = 3;

} message AppDetails {

optional string developerName = 1;
optional int32 majorVersionNumber = 2;
optional int32 versionCode = 3;
optional string versionString = 4;
optional string title = 5;
repeated string appCategory = 7;
optional int32 contentRating = 8;
optional int64 installationSize = 9;
repeated string permission = 10;
optional string developerEmail = 11;
optional string developerWebsite = 12;
optional string numDownloads = 13;
optional string packageName = 14;
optional string recentChangesHtml = 15;
optional string uploadDate = 16;
repeated FileMetadata file = 17;
optional string appType = 18;

} message ArtistDetails {

optional string detailsUrl = 1;
optional string name = 2;
optional ArtistExternalLinks externalLinks = 3;

} message ArtistExternalLinks {

repeated string websiteUrl = 1;
optional string googlePlusProfileUrl = 2;
optional string youtubeChannelUrl = 3;

} message DocumentDetails {

optional AppDetails appDetails = 1;
optional AlbumDetails albumDetails = 2;
optional ArtistDetails artistDetails = 3;
optional SongDetails songDetails = 4;
optional BookDetails bookDetails = 5;
optional VideoDetails videoDetails = 6;
optional SubscriptionDetails subscriptionDetails = 7;
optional MagazineDetails magazineDetails = 8;
optional TvShowDetails tvShowDetails = 9;
optional TvSeasonDetails tvSeasonDetails = 10;
optional TvEpisodeDetails tvEpisodeDetails = 11;

} message FileMetadata {

optional int32 fileType = 1;
optional int32 versionCode = 2;
optional int64 size = 3;

} message MagazineDetails {

optional string parentDetailsUrl = 1;
optional string deviceAvailabilityDescriptionHtml = 2;
optional string psvDescription = 3;
optional string deliveryFrequencyDescription = 4;

} message MusicDetails {

optional int32 censoring = 1;
optional int32 durationSec = 2;
optional string originalReleaseDate = 3;
optional string label = 4;
repeated ArtistDetails artist = 5;
repeated string genre = 6;
optional string releaseDate = 7;
repeated int32 releaseType = 8;

} message SongDetails {

optional string name = 1;
optional MusicDetails details = 2;
optional string albumName = 3;
optional int32 trackNumber = 4;
optional string previewUrl = 5;
optional ArtistDetails displayArtist = 6;

} message SubscriptionDetails {

optional int32 subscriptionPeriod = 1;

} message Trailer {

optional string trailerId = 1;
optional string title = 2;
optional string thumbnailUrl = 3;
optional string watchUrl = 4;
optional string duration = 5;

} message TvEpisodeDetails {

optional string parentDetailsUrl = 1;
optional int32 episodeIndex = 2;
optional string releaseDate = 3;

} message TvSeasonDetails {

optional string parentDetailsUrl = 1;
optional int32 seasonIndex = 2;
optional string releaseDate = 3;
optional string broadcaster = 4;

} message TvShowDetails {

optional int32 seasonCount = 1;
optional int32 startYear = 2;
optional int32 endYear = 3;
optional string broadcaster = 4;

} message VideoCredit {

optional int32 creditType = 1;
optional string credit = 2;
repeated string name = 3;

} message VideoDetails {

repeated VideoCredit credit = 1;
optional string duration = 2;
optional string releaseDate = 3;
optional string contentRating = 4;
optional int64 likes = 5;
optional int64 dislikes = 6;
repeated string genre = 7;
repeated Trailer trailer = 8;
repeated VideoRentalTerm rentalTerm = 9;

} message VideoRentalTerm {

optional int32 offerType = 1;
optional string offerAbbreviation = 2;
optional string rentalHeader = 3;
repeated group Term = 4 {
  optional string header = 5;
  optional string body = 6;
}

} message Bucket {

repeated DocV1 document = 1;
optional bool multiCorpus = 2;
optional string title = 3;
optional string iconUrl = 4;
optional string fullContentsUrl = 5;
optional double relevance = 6;
optional int64 estimatedResults = 7;
optional string analyticsCookie = 8;
optional string fullContentsListUrl = 9;
optional string nextPageUrl = 10;
optional bool ordered = 11;

} message ListResponse {

repeated Bucket bucket = 1;
repeated DocV2 doc = 2;

} message DocV1 {

optional Document finskyDoc = 1;
optional string docid = 2;
optional string detailsUrl = 3;
optional string reviewsUrl = 4;
optional string relatedListUrl = 5;
optional string moreByListUrl = 6;
optional string shareUrl = 7;
optional string creator = 8;
optional DocumentDetails details = 9;
optional string descriptionHtml = 10;
optional string relatedBrowseUrl = 11;
optional string moreByBrowseUrl = 12;
optional string relatedHeader = 13;
optional string moreByHeader = 14;
optional string title = 15;
optional PlusOneData plusOneData = 16;
optional string warningMessage = 17;

} message Annotations {

optional SectionMetadata sectionRelated = 1;
optional SectionMetadata sectionMoreBy = 2;
optional PlusOneData plusOneData = 3;
repeated Warning warning = 4;
optional SectionMetadata sectionBodyOfWork = 5;
optional SectionMetadata sectionCoreContent = 6;
optional Template template = 7;
repeated Badge badgeForCreator = 8;
repeated Badge badgeForDoc = 9;
optional Link link = 10;
optional SectionMetadata sectionCrossSell = 11;
optional SectionMetadata sectionRelatedDocType = 12;
repeated PromotedDoc promotedDoc = 13;
optional string offerNote = 14;
repeated DocV2 subscription = 16;
optional Reason reason = 17;
optional string privacyPolicyUrl = 18;

} message DocV2 {

optional string docid = 1;
optional string backendDocid = 2;
optional int32 docType = 3;
optional int32 backendId = 4;
optional string title = 5;
optional string creator = 6;
optional string descriptionHtml = 7;
repeated Offer offer = 8;
optional Availability availability = 9;
repeated Image image = 10;
repeated DocV2 child = 11;
optional ContainerMetadata containerMetadata = 12;
optional DocumentDetails details = 13;
optional AggregateRating aggregateRating = 14;
optional Annotations annotations = 15;
optional string detailsUrl = 16;
optional string shareUrl = 17;
optional string reviewsUrl = 18;
optional string backendUrl = 19;
optional string purchaseDetailsUrl = 20;
optional bool detailsReusable = 21;
optional string subtitle = 22;

} message EncryptedSubscriberInfo {

optional string data = 1;
optional string encryptedKey = 2;
optional string signature = 3;
optional string initVector = 4;
optional int32 googleKeyVersion = 5;
optional int32 carrierKeyVersion = 6;

} message Availability {

optional int32 restriction = 5;
optional int32 offerType = 6;
optional Rule rule = 7;
repeated group PerDeviceAvailabilityRestriction = 9 {
  optional fixed64 androidId = 10;
  optional int32 deviceRestriction = 11;
  optional int64 channelId = 12;
  optional FilterEvaluationInfo filterInfo = 15;
}
optional bool availableIfOwned = 13;
repeated Install install = 14;
optional FilterEvaluationInfo filterInfo = 16;
optional OwnershipInfo ownershipInfo = 17;

} message FilterEvaluationInfo {

repeated RuleEvaluation ruleEvaluation = 1;

} message Rule {

optional bool negate = 1;
optional int32 operator = 2;
optional int32 key = 3;
repeated string stringArg = 4;
repeated int64 longArg = 5;
repeated double doubleArg = 6;
repeated Rule subrule = 7;
optional int32 responseCode = 8;
optional string comment = 9;
repeated fixed64 stringArgHash = 10;
repeated int32 constArg = 11;

} message RuleEvaluation {

optional Rule rule = 1;
repeated string actualStringValue = 2;
repeated int64 actualLongValue = 3;
repeated bool actualBoolValue = 4;
repeated double actualDoubleValue = 5;

} message LibraryAppDetails {

optional string certificateHash = 2;
optional int64 refundTimeoutTimestampMsec = 3;
optional int64 postDeliveryRefundWindowMsec = 4;

} message LibraryMutation {

optional Docid docid = 1;
optional int32 offerType = 2;
optional int64 documentHash = 3;
optional bool deleted = 4;
optional LibraryAppDetails appDetails = 5;
optional LibrarySubscriptionDetails subscriptionDetails = 6;

} message LibrarySubscriptionDetails {

optional int64 initiationTimestampMsec = 1;
optional int64 validUntilTimestampMsec = 2;
optional bool autoRenewing = 3;
optional int64 trialUntilTimestampMsec = 4;

} message LibraryUpdate {

optional int32 status = 1;
optional int32 corpus = 2;
optional bytes serverToken = 3;
repeated LibraryMutation mutation = 4;
optional bool hasMore = 5;
optional string libraryId = 6;

} message ClientLibraryState {

optional int32 corpus = 1;
optional bytes serverToken = 2;
optional int64 hashCodeSum = 3;
optional int32 librarySize = 4;

} message LibraryReplicationRequest {

repeated ClientLibraryState libraryState = 1;

} message LibraryReplicationResponse {

repeated LibraryUpdate update = 1;

} message ClickLogEvent {

optional int64 eventTime = 1;
optional string url = 2;
optional string listId = 3;
optional string referrerUrl = 4;
optional string referrerListId = 5;

} message LogRequest {

repeated ClickLogEvent clickEvent = 1;

} message LogResponse { } message AndroidAppNotificationData {

optional int32 versionCode = 1;
optional string assetId = 2;

} message InAppNotificationData {

optional string checkoutOrderId = 1;
optional string inAppNotificationId = 2;

} message LibraryDirtyData {

optional int32 backend = 1;

} message Notification {

optional int32 notificationType = 1;
optional int64 timestamp = 3;
optional Docid docid = 4;
optional string docTitle = 5;
optional string userEmail = 6;
optional AndroidAppNotificationData appData = 7;
optional AndroidAppDeliveryData appDeliveryData = 8;
optional PurchaseRemovalData purchaseRemovalData = 9;
optional UserNotificationData userNotificationData = 10;
optional InAppNotificationData inAppNotificationData = 11;
optional PurchaseDeclinedData purchaseDeclinedData = 12;
optional string notificationId = 13;
optional LibraryUpdate libraryUpdate = 14;
optional LibraryDirtyData libraryDirtyData = 15;

} message PurchaseDeclinedData {

optional int32 reason = 1;
optional bool showNotification = 2;

} message PurchaseRemovalData {

optional bool malicious = 1;

} message UserNotificationData {

optional string notificationTitle = 1;
optional string notificationText = 2;
optional string tickerText = 3;
optional string dialogTitle = 4;
optional string dialogText = 5;

} message PlusOneResponse { } message RateSuggestedContentResponse { } message AggregateRating {

optional int32 type = 1;
optional float starRating = 2;
optional uint64 ratingsCount = 3;
optional uint64 oneStarRatings = 4;
optional uint64 twoStarRatings = 5;
optional uint64 threeStarRatings = 6;
optional uint64 fourStarRatings = 7;
optional uint64 fiveStarRatings = 8;
optional uint64 thumbsUpCount = 9;
optional uint64 thumbsDownCount = 10;
optional uint64 commentCount = 11;
optional double bayesianMeanRating = 12;

} message DirectPurchase {

optional string detailsUrl = 1;
optional string purchaseDocid = 2;
optional string parentDocid = 3;
optional int32 offerType = 4;

} message ResolveLinkResponse {

optional string detailsUrl = 1;
optional string browseUrl = 2;
optional string searchUrl = 3;
optional DirectPurchase directPurchase = 4;
optional string homeUrl = 5;

} message Payload {

optional ListResponse listResponse = 1;
optional DetailsResponse detailsResponse = 2;
optional ReviewResponse reviewResponse = 3;
optional BuyResponse buyResponse = 4;
optional SearchResponse searchResponse = 5;
optional TocResponse tocResponse = 6;
optional BrowseResponse browseResponse = 7;
optional PurchaseStatusResponse purchaseStatusResponse = 8;
optional UpdateInstrumentResponse updateInstrumentResponse = 9;
optional LogResponse logResponse = 10;
optional CheckInstrumentResponse checkInstrumentResponse = 11;
optional PlusOneResponse plusOneResponse = 12;
optional FlagContentResponse flagContentResponse = 13;
optional AckNotificationResponse ackNotificationResponse = 14;
optional InitiateAssociationResponse initiateAssociationResponse = 15;
optional VerifyAssociationResponse verifyAssociationResponse = 16;
optional LibraryReplicationResponse libraryReplicationResponse = 17;
optional RevokeResponse revokeResponse = 18;
optional BulkDetailsResponse bulkDetailsResponse = 19;
optional ResolveLinkResponse resolveLinkResponse = 20;
optional DeliveryResponse deliveryResponse = 21;
optional AcceptTosResponse acceptTosResponse = 22;
optional RateSuggestedContentResponse rateSuggestedContentResponse = 23;
optional CheckPromoOfferResponse checkPromoOfferResponse = 24;

} message PreFetch {

optional string url = 1;
optional bytes response = 2;
optional string etag = 3;
optional int64 ttl = 4;
optional int64 softTtl = 5;

} message ResponseWrapper {

optional Payload payload = 1;
optional ServerCommands commands = 2;
repeated PreFetch preFetch = 3;
repeated Notification notification = 4;

} message ServerCommands {

optional bool clearCache = 1;
optional string displayErrorMessage = 2;
optional string logErrorStacktrace = 3;

} message GetReviewsResponse {

repeated Review review = 1;
optional int64 matchingCount = 2;

} message Review {

optional string authorName = 1;
optional string url = 2;
optional string source = 3;
optional string documentVersion = 4;
optional int64 timestampMsec = 5;
optional int32 starRating = 6;
optional string title = 7;
optional string comment = 8;
optional string commentId = 9;
optional string deviceName = 19;
optional string replyText = 29;
optional int64 replyTimestampMsec = 30;

} message ReviewResponse {

optional GetReviewsResponse getResponse = 1;
optional string nextPageUrl = 2;

} message RevokeResponse {

optional LibraryUpdate libraryUpdate = 1;

} message RelatedSearch {

optional string searchUrl = 1;
optional string header = 2;
optional int32 backendId = 3;
optional int32 docType = 4;
optional bool current = 5;

} message SearchResponse {

optional string originalQuery = 1;
optional string suggestedQuery = 2;
optional bool aggregateQuery = 3;
repeated Bucket bucket = 4;
repeated DocV2 doc = 5;
repeated RelatedSearch relatedSearch = 6;

} message CorpusMetadata {

optional int32 backend = 1;
optional string name = 2;
optional string landingUrl = 3;
optional string libraryName = 4;

} message Experiments {

repeated string experimentId = 1;

} message TocResponse {

repeated CorpusMetadata corpus = 1;
optional int32 tosVersionDeprecated = 2;
optional string tosContent = 3;
optional string homeUrl = 4;
optional Experiments experiments = 5;
optional string tosCheckboxTextMarketingEmails = 6;
optional string tosToken = 7;
optional UserSettings userSettings = 8;
optional string iconOverrideUrl = 9;

} message UserSettings {

optional bool tosCheckboxMarketingEmailsOptedIn = 1;

} message AcceptTosResponse { } message AckNotificationsRequestProto {

repeated string notificationId = 1;
optional SignatureHashProto signatureHash = 2;
repeated string nackNotificationId = 3;

} message AckNotificationsResponseProto { } message AddressProto {

optional string address1 = 1;
optional string address2 = 2;
optional string city = 3;
optional string state = 4;
optional string postalCode = 5;
optional string country = 6;
optional string name = 7;
optional string type = 8;
optional string phone = 9;

} message AppDataProto {

optional string key = 1;
optional string value = 2;

} message AppSuggestionProto {

optional ExternalAssetProto assetInfo = 1;

} message AssetIdentifierProto {

optional string packageName = 1;
optional int32 versionCode = 2;
optional string assetId = 3;

} message AssetsRequestProto {

optional int32 assetType = 1;
optional string query = 2;
optional string categoryId = 3;
repeated string assetId = 4;
optional bool retrieveVendingHistory = 5;
optional bool retrieveExtendedInfo = 6;
optional int32 sortOrder = 7;
optional int64 startIndex = 8;
optional int64 numEntries = 9;
optional int32 viewFilter = 10;
optional string rankingType = 11;
optional bool retrieveCarrierChannel = 12;
repeated string pendingDownloadAssetId = 13;
optional bool reconstructVendingHistory = 14;
optional bool unfilteredResults = 15;
repeated string badgeId = 16;

} message AssetsResponseProto {

repeated ExternalAssetProto asset = 1;
optional int64 numTotalEntries = 2;
optional string correctedQuery = 3;
repeated ExternalAssetProto altAsset = 4;
optional int64 numCorrectedEntries = 5;
optional string header = 6;
optional int32 listType = 7;

} message BillingEventRequestProto {

optional int32 eventType = 1;
optional string billingParametersId = 2;
optional bool resultSuccess = 3;
optional string clientMessage = 4;
optional ExternalCarrierBillingInstrumentProto carrierInstrument = 5;

} message BillingEventResponseProto { } message BillingParameterProto {

optional string id = 1;
optional string name = 2;
repeated string mncMcc = 3;
repeated string backendUrl = 4;
optional string iconId = 5;
optional int32 billingInstrumentType = 6;
optional string applicationId = 7;
optional string tosUrl = 8;
optional bool instrumentTosRequired = 9;
optional int32 apiVersion = 10;
optional bool perTransactionCredentialsRequired = 11;
optional bool sendSubscriberIdWithCarrierBillingRequests = 12;
optional int32 deviceAssociationMethod = 13;
optional string userTokenRequestMessage = 14;
optional string userTokenRequestAddress = 15;
optional bool passphraseRequired = 16;

} message CarrierBillingCredentialsProto {

optional string credentials = 1;
optional int64 credentialsTimeout = 2;

} message CategoryProto {

optional int32 assetType = 2;
optional string categoryId = 3;
optional string categoryDisplay = 4;
optional string categorySubtitle = 5;
repeated string promotedAssetsNew = 6;
repeated string promotedAssetsHome = 7;
repeated CategoryProto subCategories = 8;
repeated string promotedAssetsPaid = 9;
repeated string promotedAssetsFree = 10;

} message CheckForNotificationsRequestProto {

optional int64 alarmDuration = 1;

} message CheckForNotificationsResponseProto { } message CheckLicenseRequestProto {

optional string packageName = 1;
optional int32 versionCode = 2;
optional int64 nonce = 3;

} message CheckLicenseResponseProto {

optional int32 responseCode = 1;
optional string signedData = 2;
optional string signature = 3;

} message CommentsRequestProto {

optional string assetId = 1;
optional int64 startIndex = 2;
optional int64 numEntries = 3;
optional bool shouldReturnSelfComment = 4;
optional string assetReferrer = 5;

} message CommentsResponseProto {

repeated ExternalCommentProto comment = 1;
optional int64 numTotalEntries = 2;
optional ExternalCommentProto selfComment = 3;

} message ContentSyncRequestProto {

optional bool incremental = 1;
repeated group AssetInstallState = 2 {
  optional string assetId = 3;
  optional int32 assetState = 4;
  optional int64 installTime = 5;
  optional int64 uninstallTime = 6;
  optional string packageName = 7;
  optional int32 versionCode = 8;
  optional string assetReferrer = 9;
}
repeated group SystemApp = 10 {
  optional string packageName = 11;
  optional int32 versionCode = 12;
  repeated string certificateHash = 13;
}
optional int32 sideloadedAppCount = 14;

} message ContentSyncResponseProto {

optional int32 numUpdatesAvailable = 1;

} message DataMessageProto {

optional string category = 1;
repeated AppDataProto appData = 3;

} message DownloadInfoProto {

optional int64 apkSize = 1;
repeated FileMetadataProto additionalFile = 2;

} message ExternalAssetProto {

optional string id = 1;
optional string title = 2;
optional int32 assetType = 3;
optional string owner = 4;
optional string version = 5;
optional string price = 6;
optional string averageRating = 7;
optional int64 numRatings = 8;
optional group PurchaseInformation = 9 {
  optional int64 purchaseTime = 10;
  optional int64 refundTimeoutTime = 11;
  optional int32 refundStartPolicy = 45;
  optional int64 refundWindowDuration = 46;
}
optional group ExtendedInfo = 12 {
  optional string description = 13;
  optional int64 downloadCount = 14;
  repeated string applicationPermissionId = 15;
  optional int64 requiredInstallationSize = 16;
  optional string packageName = 17;
  optional string category = 18;
  optional bool forwardLocked = 19;
  optional string contactEmail = 20;
  optional bool everInstalledByUser = 21;
  optional string downloadCountString = 23;
  optional string contactPhone = 26;
  optional string contactWebsite = 27;
  optional bool nextPurchaseRefundable = 28;
  optional int32 numScreenshots = 30;
  optional string promotionalDescription = 31;
  optional int32 serverAssetState = 34;
  optional int32 contentRatingLevel = 36;
  optional string contentRatingString = 37;
  optional string recentChanges = 38;
  repeated group PackageDependency = 39 {
    optional string packageName = 41;
    optional bool skipPermissions = 42;
  }
  optional string videoLink = 43;
  optional DownloadInfoProto downloadInfo = 49;
}
optional string ownerId = 22;
optional string packageName = 24;
optional int32 versionCode = 25;
optional bool bundledAsset = 29;
optional string priceCurrency = 32;
optional int64 priceMicros = 33;
optional string filterReason = 35;
optional string actualSellerPrice = 40;
repeated ExternalBadgeProto appBadge = 47;
repeated ExternalBadgeProto ownerBadge = 48;

} message ExternalBadgeImageProto {

optional int32 usage = 1;
optional string url = 2;

} message ExternalBadgeProto {

optional string localizedTitle = 1;
optional string localizedDescription = 2;
repeated ExternalBadgeImageProto badgeImage = 3;
optional string searchId = 4;

} message ExternalCarrierBillingInstrumentProto {

optional string instrumentKey = 1;
optional string subscriberIdentifier = 2;
optional string accountType = 3;
optional string subscriberCurrency = 4;
optional uint64 transactionLimit = 5;
optional string subscriberName = 6;
optional string address1 = 7;
optional string address2 = 8;
optional string city = 9;
optional string state = 10;
optional string postalCode = 11;
optional string country = 12;
optional EncryptedSubscriberInfo encryptedSubscriberInfo = 13;

} message ExternalCommentProto {

optional string body = 1;
optional int32 rating = 2;
optional string creatorName = 3;
optional int64 creationTime = 4;
optional string creatorId = 5;

} message ExternalCreditCard {

optional string type = 1;
optional string lastDigits = 2;
optional int32 expYear = 3;
optional int32 expMonth = 4;
optional string personName = 5;
optional string countryCode = 6;
optional string postalCode = 7;
optional bool makeDefault = 8;
optional string address1 = 9;
optional string address2 = 10;
optional string city = 11;
optional string state = 12;
optional string phone = 13;

} message ExternalPaypalInstrumentProto {

optional string instrumentKey = 1;
optional string preapprovalKey = 2;
optional string paypalEmail = 3;
optional AddressProto paypalAddress = 4;
optional bool multiplePaypalInstrumentsSupported = 5;

} message FileMetadataProto {

optional int32 fileType = 1;
optional int32 versionCode = 2;
optional int64 size = 3;
optional string downloadUrl = 4;

} message GetAddressSnippetRequestProto {

optional EncryptedSubscriberInfo encryptedSubscriberInfo = 1;

} message GetAddressSnippetResponseProto {

optional string addressSnippet = 1;

} message GetAssetRequestProto {

optional string assetId = 1;
optional string directDownloadKey = 2;

} message GetAssetResponseProto {

optional group InstallAsset = 1 {
  optional string assetId = 2;
  optional string assetName = 3;
  optional string assetType = 4;
  optional string assetPackage = 5;
  optional string blobUrl = 6;
  optional string assetSignature = 7;
  optional int64 assetSize = 8;
  optional int64 refundTimeoutMillis = 9;
  optional bool forwardLocked = 10;
  optional bool secured = 11;
  optional int32 versionCode = 12;
  optional string downloadAuthCookieName = 13;
  optional string downloadAuthCookieValue = 14;
  optional int64 postInstallRefundWindowMillis = 16;
}
repeated FileMetadataProto additionalFile = 15;

} message GetCarrierInfoRequestProto { } message GetCarrierInfoResponseProto {

optional bool carrierChannelEnabled = 1;
optional bytes carrierLogoIcon = 2;
optional bytes carrierBanner = 3;
optional string carrierSubtitle = 4;
optional string carrierTitle = 5;
optional int32 carrierImageDensity = 6;

} message GetCategoriesRequestProto {

optional bool prefetchPromoData = 1;

} message GetCategoriesResponseProto {

repeated CategoryProto categories = 1;

} message GetImageRequestProto {

optional string assetId = 1;
optional int32 imageUsage = 3;
optional string imageId = 4;
optional int32 screenPropertyWidth = 5;
optional int32 screenPropertyHeight = 6;
optional int32 screenPropertyDensity = 7;
optional int32 productType = 8;

} message GetImageResponseProto {

optional bytes imageData = 1;
optional int32 imageDensity = 2;

} message GetMarketMetadataRequestProto {

optional int64 lastRequestTime = 1;
optional DeviceConfigurationProto deviceConfiguration = 2;
optional bool deviceRoaming = 3;
repeated string marketSignatureHash = 4;
optional int32 contentRating = 5;
optional string deviceModelName = 6;
optional string deviceManufacturerName = 7;

} message GetMarketMetadataResponseProto {

optional int32 latestClientVersionCode = 1;
optional string latestClientUrl = 2;
optional bool paidAppsEnabled = 3;
repeated BillingParameterProto billingParameter = 4;
optional bool commentPostEnabled = 5;
optional bool billingEventsEnabled = 6;
optional string warningMessage = 7;
optional bool inAppBillingEnabled = 8;
optional int32 inAppBillingMaxApiVersion = 9;

} message GetSubCategoriesRequestProto {

optional int32 assetType = 1;

} message GetSubCategoriesResponseProto {

repeated group SubCategory = 1 {
  optional string subCategoryDisplay = 2;
  optional string subCategoryId = 3;
}

} message InAppPurchaseInformationRequestProto {

optional SignatureHashProto signatureHash = 1;
optional int64 nonce = 2;
repeated string notificationId = 3;
optional string signatureAlgorithm = 4;
optional int32 billingApiVersion = 5;

} message InAppPurchaseInformationResponseProto {

optional SignedDataProto signedResponse = 1;
repeated StatusBarNotificationProto statusBarNotification = 2;
optional PurchaseResultProto purchaseResult = 3;

} message InAppRestoreTransactionsRequestProto {

optional SignatureHashProto signatureHash = 1;
optional int64 nonce = 2;
optional string signatureAlgorithm = 3;
optional int32 billingApiVersion = 4;

} message InAppRestoreTransactionsResponseProto {

optional SignedDataProto signedResponse = 1;
optional PurchaseResultProto purchaseResult = 2;

} /* message InputValidationError {

optional int32 inputField = 1;
optional string errorMessage = 2;

} */ message ModifyCommentRequestProto {

optional string assetId = 1;
optional ExternalCommentProto comment = 2;
optional bool deleteComment = 3;
optional bool flagAsset = 4;
optional int32 flagType = 5;
optional string flagMessage = 6;
optional bool nonFlagFlow = 7;

} message ModifyCommentResponseProto { } message PaypalCountryInfoProto {

optional bool birthDateRequired = 1;
optional string tosText = 2;
optional string billingAgreementText = 3;
optional string preTosText = 4;

} message PaypalCreateAccountRequestProto {

optional string firstName = 1;
optional string lastName = 2;
optional AddressProto address = 3;
optional string birthDate = 4;

} message PaypalCreateAccountResponseProto {

optional string createAccountKey = 1;

} message PaypalCredentialsProto {

optional string preapprovalKey = 1;
optional string paypalEmail = 2;

} message PaypalMassageAddressRequestProto {

optional AddressProto address = 1;

} message PaypalMassageAddressResponseProto {

optional AddressProto address = 1;

} message PaypalPreapprovalCredentialsRequestProto {

optional string gaiaAuthToken = 1;
optional string billingInstrumentId = 2;

} message PaypalPreapprovalCredentialsResponseProto {

optional int32 resultCode = 1;
optional string paypalAccountKey = 2;
optional string paypalEmail = 3;

} message PaypalPreapprovalDetailsRequestProto {

optional bool getAddress = 1;
optional string preapprovalKey = 2;

} message PaypalPreapprovalDetailsResponseProto {

optional string paypalEmail = 1;
optional AddressProto address = 2;

} message PaypalPreapprovalRequestProto { } message PaypalPreapprovalResponseProto {

optional string preapprovalKey = 1;

} message PendingNotificationsProto {

repeated DataMessageProto notification = 1;
optional int64 nextCheckMillis = 2;

} message PrefetchedBundleProto {

optional SingleRequestProto request = 1;
optional SingleResponseProto response = 2;

} message PurchaseCartInfoProto {

optional string itemPrice = 1;
optional string taxInclusive = 2;
optional string taxExclusive = 3;
optional string total = 4;
optional string taxMessage = 5;
optional string footerMessage = 6;
optional string priceCurrency = 7;
optional int64 priceMicros = 8;

} message PurchaseInfoProto {

optional string transactionId = 1;
optional PurchaseCartInfoProto cartInfo = 2;
optional group BillingInstruments = 3 {
  repeated group BillingInstrument = 4 {
    optional string id = 5;
    optional string name = 6;
    optional bool isInvalid = 7;
    optional int32 instrumentType = 11;
    optional int32 instrumentStatus = 14;
  }
  optional string defaultBillingInstrumentId = 8;
}
repeated int32 errorInputFields = 9;
optional string refundPolicy = 10;
optional bool userCanAddGdd = 12;
repeated int32 eligibleInstrumentTypes = 13;
optional string orderId = 15;

} message PurchaseMetadataRequestProto {

optional bool deprecatedRetrieveBillingCountries = 1;
optional int32 billingInstrumentType = 2;

} message PurchaseMetadataResponseProto {

optional group Countries = 1 {
  repeated group Country = 2 {
    optional string countryCode = 3;
    optional string countryName = 4;
    optional PaypalCountryInfoProto paypalCountryInfo = 5;
    optional bool allowsReducedBillingAddress = 6;
    repeated group InstrumentAddressSpec = 7 {
      optional int32 instrumentFamily = 8;
      optional BillingAddressSpec billingAddressSpec = 9;
    }
  }
}

} message PurchaseOrderRequestProto {

optional string gaiaAuthToken = 1;
optional string assetId = 2;
optional string transactionId = 3;
optional string billingInstrumentId = 4;
optional bool tosAccepted = 5;
optional CarrierBillingCredentialsProto carrierBillingCredentials = 6;
optional string existingOrderId = 7;
optional int32 billingInstrumentType = 8;
optional string billingParametersId = 9;
optional PaypalCredentialsProto paypalCredentials = 10;
optional RiskHeaderInfoProto riskHeaderInfo = 11;
optional int32 productType = 12;
optional SignatureHashProto signatureHash = 13;
optional string developerPayload = 14;

} message PurchaseOrderResponseProto {

optional int32 deprecatedResultCode = 1;
optional PurchaseInfoProto purchaseInfo = 2;
optional ExternalAssetProto asset = 3;
optional PurchaseResultProto purchaseResult = 4;

} message PurchasePostRequestProto {

optional string gaiaAuthToken = 1;
optional string assetId = 2;
optional string transactionId = 3;
optional group BillingInstrumentInfo = 4 {
  optional string billingInstrumentId = 5;
  optional ExternalCreditCard creditCard = 6;
  optional ExternalCarrierBillingInstrumentProto carrierInstrument = 9;
  optional ExternalPaypalInstrumentProto paypalInstrument = 10;
}
optional bool tosAccepted = 7;
optional string cbInstrumentKey = 8;
optional bool paypalAuthConfirmed = 11;
optional int32 productType = 12;
optional SignatureHashProto signatureHash = 13;

} message PurchasePostResponseProto {

optional int32 deprecatedResultCode = 1;
optional PurchaseInfoProto purchaseInfo = 2;
optional string termsOfServiceUrl = 3;
optional string termsOfServiceText = 4;
optional string termsOfServiceName = 5;
optional string termsOfServiceCheckboxText = 6;
optional string termsOfServiceHeaderText = 7;
optional PurchaseResultProto purchaseResult = 8;

} message PurchaseProductRequestProto {

optional int32 productType = 1;
optional string productId = 2;
optional SignatureHashProto signatureHash = 3;

} message PurchaseProductResponseProto {

optional string title = 1;
optional string itemTitle = 2;
optional string itemDescription = 3;
optional string merchantField = 4;

} message PurchaseResultProto {

optional int32 resultCode = 1;
optional string resultCodeMessage = 2;

} message QuerySuggestionProto {

optional string query = 1;
optional int32 estimatedNumResults = 2;
optional int32 queryWeight = 3;

} message QuerySuggestionRequestProto {

optional string query = 1;
optional int32 requestType = 2;

} message QuerySuggestionResponseProto {

repeated group Suggestion = 1 {
  optional AppSuggestionProto appSuggestion = 2;
  optional QuerySuggestionProto querySuggestion = 3;
}
optional int32 estimatedNumAppSuggestions = 4;
optional int32 estimatedNumQuerySuggestions = 5;

} message RateCommentRequestProto {

optional string assetId = 1;
optional string creatorId = 2;
optional int32 commentRating = 3;

} message RateCommentResponseProto { } message ReconstructDatabaseRequestProto {

optional bool retrieveFullHistory = 1;

} message ReconstructDatabaseResponseProto {

repeated AssetIdentifierProto asset = 1;

} message RefundRequestProto {

optional string assetId = 1;

} message RefundResponseProto {

optional int32 result = 1;
optional ExternalAssetProto asset = 2;
optional string resultDetail = 3;

} message RemoveAssetRequestProto {

optional string assetId = 1;

} message RequestPropertiesProto {

optional string userAuthToken = 1;
optional bool userAuthTokenSecure = 2;
optional int32 softwareVersion = 3;
optional string aid = 4;
optional string productNameAndVersion = 5;
optional string userLanguage = 6;
optional string userCountry = 7;
optional string operatorName = 8;
optional string simOperatorName = 9;
optional string operatorNumericName = 10;
optional string simOperatorNumericName = 11;
optional string clientId = 12;
optional string loggingId = 13;

} message RequestProto {

optional RequestPropertiesProto requestProperties = 1;
repeated group Request = 2 {
  optional RequestSpecificPropertiesProto requestSpecificProperties = 3;
  optional AssetsRequestProto assetRequest = 4;
  optional CommentsRequestProto commentsRequest = 5;
  optional ModifyCommentRequestProto modifyCommentRequest = 6;
  optional PurchasePostRequestProto purchasePostRequest = 7;
  optional PurchaseOrderRequestProto purchaseOrderRequest = 8;
  optional ContentSyncRequestProto contentSyncRequest = 9;
  optional GetAssetRequestProto getAssetRequest = 10;
  optional GetImageRequestProto getImageRequest = 11;
  optional RefundRequestProto refundRequest = 12;
  optional PurchaseMetadataRequestProto purchaseMetadataRequest = 13;
  optional GetSubCategoriesRequestProto subCategoriesRequest = 14;
  optional UninstallReasonRequestProto uninstallReasonRequest = 16;
  optional RateCommentRequestProto rateCommentRequest = 17;
  optional CheckLicenseRequestProto checkLicenseRequest = 18;
  optional GetMarketMetadataRequestProto getMarketMetadataRequest = 19;
  optional GetCategoriesRequestProto getCategoriesRequest = 21;
  optional GetCarrierInfoRequestProto getCarrierInfoRequest = 22;
  optional RemoveAssetRequestProto removeAssetRequest = 23;
  optional RestoreApplicationsRequestProto restoreApplicationsRequest = 24;
  optional QuerySuggestionRequestProto querySuggestionRequest = 25;
  optional BillingEventRequestProto billingEventRequest = 26;
  optional PaypalPreapprovalRequestProto paypalPreapprovalRequest = 27;
  optional PaypalPreapprovalDetailsRequestProto paypalPreapprovalDetailsRequest = 28;
  optional PaypalCreateAccountRequestProto paypalCreateAccountRequest = 29;
  optional PaypalPreapprovalCredentialsRequestProto paypalPreapprovalCredentialsRequest = 30;
  optional InAppRestoreTransactionsRequestProto inAppRestoreTransactionsRequest = 31;
  optional InAppPurchaseInformationRequestProto inAppPurchaseInformationRequest = 32;
  optional CheckForNotificationsRequestProto checkForNotificationsRequest = 33;
  optional AckNotificationsRequestProto ackNotificationsRequest = 34;
  optional PurchaseProductRequestProto purchaseProductRequest = 35;
  optional ReconstructDatabaseRequestProto reconstructDatabaseRequest = 36;
  optional PaypalMassageAddressRequestProto paypalMassageAddressRequest = 37;
  optional GetAddressSnippetRequestProto getAddressSnippetRequest = 38;
}

} message RequestSpecificPropertiesProto {

optional string ifNoneMatch = 1;

} message ResponsePropertiesProto {

optional int32 result = 1;
optional int32 maxAge = 2;
optional string etag = 3;
optional int32 serverVersion = 4;
optional int32 maxAgeConsumable = 6;
optional string errorMessage = 7;
repeated InputValidationError errorInputField = 8;

} message ResponseProto {

repeated group Response = 1 {
  optional ResponsePropertiesProto responseProperties = 2;
  optional AssetsResponseProto assetsResponse = 3;
  optional CommentsResponseProto commentsResponse = 4;
  optional ModifyCommentResponseProto modifyCommentResponse = 5;
  optional PurchasePostResponseProto purchasePostResponse = 6;
  optional PurchaseOrderResponseProto purchaseOrderResponse = 7;
  optional ContentSyncResponseProto contentSyncResponse = 8;
  optional GetAssetResponseProto getAssetResponse = 9;
  optional GetImageResponseProto getImageResponse = 10;
  optional RefundResponseProto refundResponse = 11;
  optional PurchaseMetadataResponseProto purchaseMetadataResponse = 12;
  optional GetSubCategoriesResponseProto subCategoriesResponse = 13;
  optional UninstallReasonResponseProto uninstallReasonResponse = 15;
  optional RateCommentResponseProto rateCommentResponse = 16;
  optional CheckLicenseResponseProto checkLicenseResponse = 17;
  optional GetMarketMetadataResponseProto getMarketMetadataResponse = 18;
  repeated PrefetchedBundleProto prefetchedBundle = 19;
  optional GetCategoriesResponseProto getCategoriesResponse = 20;
  optional GetCarrierInfoResponseProto getCarrierInfoResponse = 21;
  optional RestoreApplicationsResponseProto restoreApplicationResponse = 23;
  optional QuerySuggestionResponseProto querySuggestionResponse = 24;
  optional BillingEventResponseProto billingEventResponse = 25;
  optional PaypalPreapprovalResponseProto paypalPreapprovalResponse = 26;
  optional PaypalPreapprovalDetailsResponseProto paypalPreapprovalDetailsResponse = 27;
  optional PaypalCreateAccountResponseProto paypalCreateAccountResponse = 28;
  optional PaypalPreapprovalCredentialsResponseProto paypalPreapprovalCredentialsResponse = 29;
  optional InAppRestoreTransactionsResponseProto inAppRestoreTransactionsResponse = 30;
  optional InAppPurchaseInformationResponseProto inAppPurchaseInformationResponse = 31;
  optional CheckForNotificationsResponseProto checkForNotificationsResponse = 32;
  optional AckNotificationsResponseProto ackNotificationsResponse = 33;
  optional PurchaseProductResponseProto purchaseProductResponse = 34;
  optional ReconstructDatabaseResponseProto reconstructDatabaseResponse = 35;
  optional PaypalMassageAddressResponseProto paypalMassageAddressResponse = 36;
  optional GetAddressSnippetResponseProto getAddressSnippetResponse = 37;
}
optional PendingNotificationsProto pendingNotifications = 38;

} message RestoreApplicationsRequestProto {

optional string backupAndroidId = 1;
optional string tosVersion = 2;
optional DeviceConfigurationProto deviceConfiguration = 3;

} message RestoreApplicationsResponseProto {

repeated GetAssetResponseProto asset = 1;

} message RiskHeaderInfoProto {

optional string hashedDeviceInfo = 1;

} message SignatureHashProto {

optional string packageName = 1;
optional int32 versionCode = 2;
optional bytes hash = 3;

} message SignedDataProto {

optional string signedData = 1;
optional string signature = 2;

} message SingleRequestProto {

optional RequestSpecificPropertiesProto requestSpecificProperties = 3;
optional AssetsRequestProto assetRequest = 4;
optional CommentsRequestProto commentsRequest = 5;
optional ModifyCommentRequestProto modifyCommentRequest = 6;
optional PurchasePostRequestProto purchasePostRequest = 7;
optional PurchaseOrderRequestProto purchaseOrderRequest = 8;
optional ContentSyncRequestProto contentSyncRequest = 9;
optional GetAssetRequestProto getAssetRequest = 10;
optional GetImageRequestProto getImageRequest = 11;
optional RefundRequestProto refundRequest = 12;
optional PurchaseMetadataRequestProto purchaseMetadataRequest = 13;
optional GetSubCategoriesRequestProto subCategoriesRequest = 14;
optional UninstallReasonRequestProto uninstallReasonRequest = 16;
optional RateCommentRequestProto rateCommentRequest = 17;
optional CheckLicenseRequestProto checkLicenseRequest = 18;
optional GetMarketMetadataRequestProto getMarketMetadataRequest = 19;
optional GetCategoriesRequestProto getCategoriesRequest = 21;
optional GetCarrierInfoRequestProto getCarrierInfoRequest = 22;
optional RemoveAssetRequestProto removeAssetRequest = 23;
optional RestoreApplicationsRequestProto restoreApplicationsRequest = 24;
optional QuerySuggestionRequestProto querySuggestionRequest = 25;
optional BillingEventRequestProto billingEventRequest = 26;
optional PaypalPreapprovalRequestProto paypalPreapprovalRequest = 27;
optional PaypalPreapprovalDetailsRequestProto paypalPreapprovalDetailsRequest = 28;
optional PaypalCreateAccountRequestProto paypalCreateAccountRequest = 29;
optional PaypalPreapprovalCredentialsRequestProto paypalPreapprovalCredentialsRequest = 30;
optional InAppRestoreTransactionsRequestProto inAppRestoreTransactionsRequest = 31;
optional InAppPurchaseInformationRequestProto getInAppPurchaseInformationRequest = 32;
optional CheckForNotificationsRequestProto checkForNotificationsRequest = 33;
optional AckNotificationsRequestProto ackNotificationsRequest = 34;
optional PurchaseProductRequestProto purchaseProductRequest = 35;
optional ReconstructDatabaseRequestProto reconstructDatabaseRequest = 36;
optional PaypalMassageAddressRequestProto paypalMassageAddressRequest = 37;
optional GetAddressSnippetRequestProto getAddressSnippetRequest = 38;

} message SingleResponseProto {

optional ResponsePropertiesProto responseProperties = 2;
optional AssetsResponseProto assetsResponse = 3;
optional CommentsResponseProto commentsResponse = 4;
optional ModifyCommentResponseProto modifyCommentResponse = 5;
optional PurchasePostResponseProto purchasePostResponse = 6;
optional PurchaseOrderResponseProto purchaseOrderResponse = 7;
optional ContentSyncResponseProto contentSyncResponse = 8;
optional GetAssetResponseProto getAssetResponse = 9;
optional GetImageResponseProto getImageResponse = 10;
optional RefundResponseProto refundResponse = 11;
optional PurchaseMetadataResponseProto purchaseMetadataResponse = 12;
optional GetSubCategoriesResponseProto subCategoriesResponse = 13;
optional UninstallReasonResponseProto uninstallReasonResponse = 15;
optional RateCommentResponseProto rateCommentResponse = 16;
optional CheckLicenseResponseProto checkLicenseResponse = 17;
optional GetMarketMetadataResponseProto getMarketMetadataResponse = 18;
optional GetCategoriesResponseProto getCategoriesResponse = 20;
optional GetCarrierInfoResponseProto getCarrierInfoResponse = 21;
optional RestoreApplicationsResponseProto restoreApplicationResponse = 23;
optional QuerySuggestionResponseProto querySuggestionResponse = 24;
optional BillingEventResponseProto billingEventResponse = 25;
optional PaypalPreapprovalResponseProto paypalPreapprovalResponse = 26;
optional PaypalPreapprovalDetailsResponseProto paypalPreapprovalDetailsResponse = 27;
optional PaypalCreateAccountResponseProto paypalCreateAccountResponse = 28;
optional PaypalPreapprovalCredentialsResponseProto paypalPreapprovalCredentialsResponse = 29;
optional InAppRestoreTransactionsResponseProto inAppRestoreTransactionsResponse = 30;
optional InAppPurchaseInformationResponseProto getInAppPurchaseInformationResponse = 31;
optional CheckForNotificationsResponseProto checkForNotificationsResponse = 32;
optional AckNotificationsResponseProto ackNotificationsResponse = 33;
optional PurchaseProductResponseProto purchaseProductResponse = 34;
optional ReconstructDatabaseResponseProto reconstructDatabaseResponse = 35;
optional PaypalMassageAddressResponseProto paypalMassageAddressResponse = 36;
optional GetAddressSnippetResponseProto getAddressSnippetResponse = 37;

} message StatusBarNotificationProto {

optional string tickerText = 1;
optional string contentTitle = 2;
optional string contentText = 3;

} message UninstallReasonRequestProto {

optional string assetId = 1;
optional int32 reason = 2;

} message UninstallReasonResponseProto { }