From 57dc787734aba1b1fad5b9fbde3bf0d19f94d51e Mon Sep 17 00:00:00 2001
From: Rossen Georgiev <rossen@rgp.io>
Date: Sun, 6 Mar 2016 18:53:47 +0000
Subject: [PATCH] include source proto in the repo

---
 Makefile                                     |    8 +-
 protobufs/encrypted_app_ticket.proto         |   11 +
 protobufs/gc.proto                           |   20 +
 protobufs/steammessages_base.proto           |   84 ++
 protobufs/steammessages_clientserver.proto   | 1404 ++++++++++++++++++
 protobufs/steammessages_clientserver_2.proto | 1227 +++++++++++++++
 6 files changed, 2750 insertions(+), 4 deletions(-)
 create mode 100644 protobufs/encrypted_app_ticket.proto
 create mode 100644 protobufs/gc.proto
 create mode 100644 protobufs/steammessages_base.proto
 create mode 100644 protobufs/steammessages_clientserver.proto
 create mode 100644 protobufs/steammessages_clientserver_2.proto

diff --git a/Makefile b/Makefile
index cb83d4f..067326e 100644
--- a/Makefile
+++ b/Makefile
@@ -53,14 +53,14 @@ upload: dist register
 	twine upload -r pypi dist/*
 
 pb_fetch:
-	wget -nv --show-progress -N -P ./steam/protobufs/ -i protobuf_list.txt
+	wget -nv --show-progress -N -P ./protobufs/ -i protobuf_list.txt
 
 pb_compile:
-	for filepath in `ls ./steam/protobufs/*.proto`; do \
-		protoc --python_out ./steam/protobufs/ --proto_path=/usr/include --proto_path=./steam/protobufs "$$filepath"; \
+	for filepath in `ls ./protobufs/*.proto`; do \
+		protoc --python_out ./steam/protobufs/ --proto_path=/usr/include --proto_path=./protobufs "$$filepath"; \
 	done;
 
 pb_clear:
-	rm -f ./stema/protobufs/*.proto
+	rm -f ./protobufs/*.proto
 
 pb_update: pb_fetch pb_compile
diff --git a/protobufs/encrypted_app_ticket.proto b/protobufs/encrypted_app_ticket.proto
new file mode 100644
index 0000000..8ece6f8
--- /dev/null
+++ b/protobufs/encrypted_app_ticket.proto
@@ -0,0 +1,11 @@
+option optimize_for = SPEED;
+option cc_generic_services = false;
+
+message EncryptedAppTicket {
+	optional uint32 ticket_version_no = 1;
+	optional uint32 crc_encryptedticket = 2;
+	optional uint32 cb_encrypteduserdata = 3;
+	optional uint32 cb_encrypted_appownershipticket = 4;
+	optional bytes encrypted_ticket = 5;
+}
+
diff --git a/protobufs/gc.proto b/protobufs/gc.proto
new file mode 100644
index 0000000..1bd9723
--- /dev/null
+++ b/protobufs/gc.proto
@@ -0,0 +1,20 @@
+enum GCProtoBufMsgSrc {
+	GCProtoBufMsgSrc_Unspecified = 0;
+	GCProtoBufMsgSrc_FromSystem = 1;
+	GCProtoBufMsgSrc_FromSteamID = 2;
+	GCProtoBufMsgSrc_FromGC = 3;
+	GCProtoBufMsgSrc_ReplySystem = 4;
+}
+
+message CMsgProtoBufHeader {
+	optional fixed64 client_steam_id = 1;
+	optional int32 client_session_id = 2;
+	optional uint32 source_app_id = 3;
+	optional fixed64 job_id_source = 10 [default = 18446744073709551615];
+	optional fixed64 job_id_target = 11 [default = 18446744073709551615];
+	optional string target_job_name = 12;
+	optional int32 eresult = 13 [default = 2];
+	optional string error_message = 14;
+	optional .GCProtoBufMsgSrc gc_msg_src = 200 [default = GCProtoBufMsgSrc_Unspecified];
+	optional uint32 gc_dir_index_source = 201;
+}
diff --git a/protobufs/steammessages_base.proto b/protobufs/steammessages_base.proto
new file mode 100644
index 0000000..f76d203
--- /dev/null
+++ b/protobufs/steammessages_base.proto
@@ -0,0 +1,84 @@
+import "google/protobuf/descriptor.proto";
+
+option optimize_for = SPEED;
+option cc_generic_services = false;
+
+extend .google.protobuf.MessageOptions {
+	optional int32 msgpool_soft_limit = 50000 [default = 32];
+	optional int32 msgpool_hard_limit = 50001 [default = 384];
+}
+
+message CMsgProtoBufHeader {
+	optional fixed64 steamid = 1;
+	optional int32 client_sessionid = 2;
+	optional uint32 routing_appid = 3;
+	optional fixed64 jobid_source = 10 [default = 18446744073709551615];
+	optional fixed64 jobid_target = 11 [default = 18446744073709551615];
+	optional string target_job_name = 12;
+	optional int32 seq_num = 24;
+	optional int32 eresult = 13 [default = 2];
+	optional string error_message = 14;
+	optional uint32 ip = 15;
+	optional uint32 auth_account_flags = 16;
+	optional uint32 token_source = 22;
+	optional bool admin_spoofing_user = 23;
+	optional int32 transport_error = 17 [default = 1];
+	optional uint64 messageid = 18 [default = 18446744073709551615];
+	optional uint32 publisher_group_id = 19;
+	optional uint32 sysid = 20;
+	optional uint64 trace_tag = 21;
+	optional uint32 webapi_key_id = 25;
+}
+
+message CMsgMulti {
+	optional uint32 size_unzipped = 1;
+	optional bytes message_body = 2;
+}
+
+message CMsgProtobufWrapped {
+	optional bytes message_body = 1;
+}
+
+message CMsgAuthTicket {
+	optional uint32 estate = 1;
+	optional uint32 eresult = 2 [default = 2];
+	optional fixed64 steamid = 3;
+	optional fixed64 gameid = 4;
+	optional uint32 h_steam_pipe = 5;
+	optional uint32 ticket_crc = 6;
+	optional bytes ticket = 7;
+}
+
+message CCDDBAppDetailCommon {
+	optional uint32 appid = 1;
+	optional string name = 2;
+	optional string icon = 3;
+	optional string logo = 4;
+	optional string logo_small = 5;
+	optional bool tool = 6;
+	optional bool demo = 7;
+	optional bool media = 8;
+	optional bool community_visible_stats = 9;
+	optional string friendly_name = 10;
+	optional string propagation = 11;
+	optional bool has_adult_content = 12;
+}
+
+message CMsgAppRights {
+	optional bool edit_info = 1;
+	optional bool publish = 2;
+	optional bool view_error_data = 3;
+	optional bool download = 4;
+	optional bool upload_cdkeys = 5;
+	optional bool generate_cdkeys = 6;
+	optional bool view_financials = 7;
+	optional bool manage_ceg = 8;
+	optional bool manage_signing = 9;
+	optional bool manage_cdkeys = 10;
+	optional bool edit_marketing = 11;
+	optional bool economy_support = 12;
+	optional bool economy_support_supervisor = 13;
+	optional bool manage_pricing = 14;
+	optional bool broadcast_live = 15;
+}
+
diff --git a/protobufs/steammessages_clientserver.proto b/protobufs/steammessages_clientserver.proto
new file mode 100644
index 0000000..21c4c67
--- /dev/null
+++ b/protobufs/steammessages_clientserver.proto
@@ -0,0 +1,1404 @@
+import "steammessages_base.proto";
+import "encrypted_app_ticket.proto";
+
+option optimize_for = SPEED;
+option cc_generic_services = false;
+
+message CMsgClientHeartBeat {
+}
+
+message CMsgClientUDSP2PSessionStarted {
+	optional fixed64 steamid_remote = 1;
+	optional int32 appid = 2;
+}
+
+message CMsgClientUDSP2PSessionEnded {
+	optional fixed64 steamid_remote = 1;
+	optional int32 appid = 2;
+	optional int32 session_length_sec = 3;
+	optional int32 session_error = 4;
+	optional int32 nattype = 5;
+	optional int32 bytes_recv = 6;
+	optional int32 bytes_sent = 7;
+	optional int32 bytes_sent_relay = 8;
+	optional int32 bytes_recv_relay = 9;
+	optional int32 time_to_connect_ms = 10;
+}
+
+message CMsgClientRegisterAuthTicketWithCM {
+	optional uint32 protocol_version = 1;
+	optional bytes ticket = 3;
+	optional uint64 client_instance_id = 4;
+}
+
+message CMsgClientTicketAuthComplete {
+	optional fixed64 steam_id = 1;
+	optional fixed64 game_id = 2;
+	optional uint32 estate = 3;
+	optional uint32 eauth_session_response = 4;
+	optional bytes DEPRECATED_ticket = 5;
+	optional uint32 ticket_crc = 6;
+	optional uint32 ticket_sequence = 7;
+	optional fixed64 owner_steam_id = 8;
+}
+
+message CMsgClientLogon {
+	optional uint32 protocol_version = 1;
+	optional uint32 obfustucated_private_ip = 2;
+	optional uint32 cell_id = 3;
+	optional uint32 last_session_id = 4;
+	optional uint32 client_package_version = 5;
+	optional string client_language = 6;
+	optional uint32 client_os_type = 7;
+	optional bool should_remember_password = 8 [default = false];
+	optional string wine_version = 9;
+	optional uint32 ping_ms_from_cell_search = 10;
+	optional uint32 public_ip = 20;
+	optional uint32 qos_level = 21;
+	optional fixed64 client_supplied_steam_id = 22;
+	optional bytes machine_id = 30;
+	optional uint32 launcher_type = 31 [default = 0];
+	optional uint32 ui_mode = 32 [default = 0];
+	optional bytes steam2_auth_ticket = 41;
+	optional string email_address = 42;
+	optional fixed32 rtime32_account_creation = 43;
+	optional string account_name = 50;
+	optional string password = 51;
+	optional string game_server_token = 52;
+	optional string login_key = 60;
+	optional bool was_converted_deprecated_msg = 70 [default = false];
+	optional string anon_user_target_account_name = 80;
+	optional fixed64 resolved_user_steam_id = 81;
+	optional int32 eresult_sentryfile = 82;
+	optional bytes sha_sentryfile = 83;
+	optional string auth_code = 84;
+	optional int32 otp_type = 85;
+	optional uint32 otp_value = 86;
+	optional string otp_identifier = 87;
+	optional bool steam2_ticket_request = 88;
+	optional bytes sony_psn_ticket = 90;
+	optional string sony_psn_service_id = 91;
+	optional bool create_new_psn_linked_account_if_needed = 92 [default = false];
+	optional string sony_psn_name = 93;
+	optional int32 game_server_app_id = 94;
+	optional bool steamguard_dont_remember_computer = 95;
+	optional string machine_name = 96;
+	optional string machine_name_userchosen = 97;
+	optional string country_override = 98;
+	optional bool is_steam_box = 99;
+	optional uint64 client_instance_id = 100;
+	optional string two_factor_code = 101;
+	optional bool supports_rate_limit_response = 102;
+}
+
+message CMsgClientLogonResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional int32 out_of_game_heartbeat_seconds = 2;
+	optional int32 in_game_heartbeat_seconds = 3;
+	optional uint32 public_ip = 4;
+	optional fixed32 rtime32_server_time = 5;
+	optional uint32 account_flags = 6;
+	optional uint32 cell_id = 7;
+	optional string email_domain = 8;
+	optional bytes steam2_ticket = 9;
+	optional int32 eresult_extended = 10;
+	optional string webapi_authenticate_user_nonce = 11;
+	optional uint32 cell_id_ping_threshold = 12;
+	optional bool use_pics = 13;
+	optional string vanity_url = 14;
+	optional fixed64 client_supplied_steamid = 20;
+	optional string ip_country_code = 21;
+	optional bytes parental_settings = 22;
+	optional bytes parental_setting_signature = 23;
+	optional int32 count_loginfailures_to_migrate = 24;
+	optional int32 count_disconnects_to_migrate = 25;
+	optional int32 ogs_data_report_time_window = 26;
+	optional uint64 client_instance_id = 27;
+}
+
+message CMsgClientRequestWebAPIAuthenticateUserNonce {
+}
+
+message CMsgClientRequestWebAPIAuthenticateUserNonceResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional string webapi_authenticate_user_nonce = 11;
+}
+
+message CMsgClientLogOff {
+}
+
+message CMsgClientLoggedOff {
+	optional int32 eresult = 1 [default = 2];
+}
+
+message CMsgClientCMList {
+	repeated uint32 cm_addresses = 1;
+	repeated uint32 cm_ports = 2;
+}
+
+message CMsgClientP2PConnectionInfo {
+	optional fixed64 steam_id_dest = 1;
+	optional fixed64 steam_id_src = 2;
+	optional uint32 app_id = 3;
+	optional bytes candidate = 4;
+}
+
+message CMsgClientP2PConnectionFailInfo {
+	optional fixed64 steam_id_dest = 1;
+	optional fixed64 steam_id_src = 2;
+	optional uint32 app_id = 3;
+	optional uint32 ep2p_session_error = 4;
+}
+
+message CMsgClientGetAppOwnershipTicket {
+	optional uint32 app_id = 1;
+}
+
+message CMsgClientGetAppOwnershipTicketResponse {
+	optional uint32 eresult = 1 [default = 2];
+	optional uint32 app_id = 2;
+	optional bytes ticket = 3;
+}
+
+message CMsgClientSessionToken {
+	optional uint64 token = 1;
+}
+
+message CMsgClientGameConnectTokens {
+	optional uint32 max_tokens_to_keep = 1 [default = 10];
+	repeated bytes tokens = 2;
+}
+
+message CMsgGSServerType {
+	optional uint32 app_id_served = 1;
+	optional uint32 flags = 2;
+	optional uint32 game_ip_address = 3;
+	optional uint32 game_port = 4;
+	optional string game_dir = 5;
+	optional string game_version = 6;
+	optional uint32 game_query_port = 7;
+}
+
+message CMsgGSStatusReply {
+	optional bool is_secure = 1;
+}
+
+message CMsgGSPlayerList {
+	message Player {
+		optional uint64 steam_id = 1;
+		optional uint32 public_ip = 2;
+		optional bytes token = 3;
+	}
+
+	repeated .CMsgGSPlayerList.Player players = 1;
+}
+
+message CMsgGSUserPlaying {
+	optional fixed64 steam_id = 1;
+	optional uint32 public_ip = 2;
+	optional bytes token = 3;
+}
+
+message CMsgGSDisconnectNotice {
+	optional fixed64 steam_id = 1;
+}
+
+message CMsgClientGamesPlayed {
+	message GamePlayed {
+		optional uint64 steam_id_gs = 1;
+		optional fixed64 game_id = 2;
+		optional uint32 game_ip_address = 3;
+		optional uint32 game_port = 4;
+		optional bool is_secure = 5;
+		optional bytes token = 6;
+		optional string game_extra_info = 7;
+		optional bytes game_data_blob = 8;
+		optional uint32 process_id = 9;
+		optional uint32 streaming_provider_id = 10;
+		optional uint32 game_flags = 11;
+		optional uint32 owner_id = 12;
+	}
+
+	repeated .CMsgClientGamesPlayed.GamePlayed games_played = 1;
+	optional uint32 client_os_type = 2;
+}
+
+message CMsgGSApprove {
+	optional fixed64 steam_id = 1;
+	optional fixed64 owner_steam_id = 2;
+}
+
+message CMsgGSDeny {
+	optional fixed64 steam_id = 1;
+	optional int32 edeny_reason = 2;
+	optional string deny_string = 3;
+}
+
+message CMsgGSKick {
+	optional fixed64 steam_id = 1;
+	optional int32 edeny_reason = 2;
+}
+
+message CMsgClientAuthList {
+	optional uint32 tokens_left = 1;
+	optional uint32 last_request_seq = 2;
+	optional uint32 last_request_seq_from_server = 3;
+	repeated .CMsgAuthTicket tickets = 4;
+	repeated uint32 app_ids = 5;
+	optional uint32 message_sequence = 6;
+}
+
+message CMsgClientAuthListAck {
+	repeated uint32 ticket_crc = 1;
+	repeated uint32 app_ids = 2;
+	optional uint32 message_sequence = 3;
+}
+
+message CMsgClientFriendsList {
+	message Friend {
+		optional fixed64 ulfriendid = 1;
+		optional uint32 efriendrelationship = 2;
+	}
+
+	optional bool bincremental = 1;
+	repeated .CMsgClientFriendsList.Friend friends = 2;
+	optional uint32 max_friend_count = 3;
+	optional uint32 active_friend_count = 4;
+	optional bool friends_limit_hit = 5;
+}
+
+message CMsgClientFriendsGroupsList {
+	message FriendGroup {
+		optional int32 nGroupID = 1;
+		optional string strGroupName = 2;
+	}
+
+	message FriendGroupsMembership {
+		optional fixed64 ulSteamID = 1;
+		optional int32 nGroupID = 2;
+	}
+
+	optional bool bremoval = 1;
+	optional bool bincremental = 2;
+	repeated .CMsgClientFriendsGroupsList.FriendGroup friendGroups = 3;
+	repeated .CMsgClientFriendsGroupsList.FriendGroupsMembership memberships = 4;
+}
+
+message CMsgClientPlayerNicknameList {
+	message PlayerNickname {
+		optional fixed64 steamid = 1;
+		optional string nickname = 3;
+	}
+
+	optional bool removal = 1;
+	optional bool incremental = 2;
+	repeated .CMsgClientPlayerNicknameList.PlayerNickname nicknames = 3;
+}
+
+message CMsgClientSetPlayerNickname {
+	optional fixed64 steamid = 1;
+	optional string nickname = 2;
+}
+
+message CMsgClientSetPlayerNicknameResponse {
+	optional uint32 eresult = 1;
+}
+
+message CMsgClientLicenseList {
+	message License {
+		optional uint32 package_id = 1;
+		optional fixed32 time_created = 2;
+		optional fixed32 time_next_process = 3;
+		optional int32 minute_limit = 4;
+		optional int32 minutes_used = 5;
+		optional uint32 payment_method = 6;
+		optional uint32 flags = 7;
+		optional string purchase_country_code = 8;
+		optional uint32 license_type = 9;
+		optional int32 territory_code = 10;
+		optional int32 change_number = 11;
+		optional uint32 owner_id = 12;
+		optional uint32 initial_period = 13;
+		optional uint32 initial_time_unit = 14;
+		optional uint32 renewal_period = 15;
+		optional uint32 renewal_time_unit = 16;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgClientLicenseList.License licenses = 2;
+}
+
+message CMsgClientLBSSetScore {
+	optional uint32 app_id = 1;
+	optional int32 leaderboard_id = 2;
+	optional int32 score = 3;
+	optional bytes details = 4;
+	optional int32 upload_score_method = 5;
+}
+
+message CMsgClientLBSSetScoreResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional int32 leaderboard_entry_count = 2;
+	optional bool score_changed = 3;
+	optional int32 global_rank_previous = 4;
+	optional int32 global_rank_new = 5;
+}
+
+message CMsgClientLBSSetUGC {
+	optional uint32 app_id = 1;
+	optional int32 leaderboard_id = 2;
+	optional fixed64 ugc_id = 3;
+}
+
+message CMsgClientLBSSetUGCResponse {
+	optional int32 eresult = 1 [default = 2];
+}
+
+message CMsgClientLBSFindOrCreateLB {
+	optional uint32 app_id = 1;
+	optional int32 leaderboard_sort_method = 2;
+	optional int32 leaderboard_display_type = 3;
+	optional bool create_if_not_found = 4;
+	optional string leaderboard_name = 5;
+}
+
+message CMsgClientLBSFindOrCreateLBResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional int32 leaderboard_id = 2;
+	optional int32 leaderboard_entry_count = 3;
+	optional int32 leaderboard_sort_method = 4 [default = 0];
+	optional int32 leaderboard_display_type = 5 [default = 0];
+	optional string leaderboard_name = 6;
+}
+
+message CMsgClientLBSGetLBEntries {
+	optional int32 app_id = 1;
+	optional int32 leaderboard_id = 2;
+	optional int32 range_start = 3;
+	optional int32 range_end = 4;
+	optional int32 leaderboard_data_request = 5;
+	repeated fixed64 steamids = 6;
+}
+
+message CMsgClientLBSGetLBEntriesResponse {
+	message Entry {
+		optional fixed64 steam_id_user = 1;
+		optional int32 global_rank = 2;
+		optional int32 score = 3;
+		optional bytes details = 4;
+		optional fixed64 ugc_id = 5;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	optional int32 leaderboard_entry_count = 2;
+	repeated .CMsgClientLBSGetLBEntriesResponse.Entry entries = 3;
+}
+
+message CMsgClientAccountInfo {
+	optional string persona_name = 1;
+	optional string ip_country = 2;
+	optional int32 count_authed_computers = 5;
+	optional uint32 account_flags = 7;
+	optional uint64 facebook_id = 8;
+	optional string facebook_name = 9;
+	optional bool steamguard_notify_newmachines = 14;
+	optional string steamguard_machine_name_user_chosen = 15;
+}
+
+message CMsgClientAppMinutesPlayedData {
+	message AppMinutesPlayedData {
+		optional uint32 app_id = 1;
+		optional int32 forever = 2;
+		optional int32 last_two_weeks = 3;
+	}
+
+	repeated .CMsgClientAppMinutesPlayedData.AppMinutesPlayedData minutes_played = 1;
+}
+
+message CMsgClientIsLimitedAccount {
+	optional bool bis_limited_account = 1;
+	optional bool bis_community_banned = 2;
+	optional bool bis_locked_account = 3;
+	optional bool bis_limited_account_allowed_to_invite_friends = 4;
+}
+
+message CMsgClientRequestFriendData {
+	optional uint32 persona_state_requested = 1;
+	repeated fixed64 friends = 2;
+}
+
+message CMsgClientChangeStatus {
+	optional uint32 persona_state = 1;
+	optional string player_name = 2;
+	optional bool is_auto_generated_name = 3;
+	optional bool high_priority = 4;
+	optional bool persona_set_by_user = 5;
+}
+
+message CMsgPersonaChangeResponse {
+	optional uint32 result = 1;
+	optional string player_name = 2;
+}
+
+message CMsgClientPersonaState {
+	message Friend {
+		optional fixed64 friendid = 1;
+		optional uint32 persona_state = 2;
+		optional uint32 game_played_app_id = 3;
+		optional uint32 game_server_ip = 4;
+		optional uint32 game_server_port = 5;
+		optional uint32 persona_state_flags = 6;
+		optional uint32 online_session_instances = 7;
+		optional uint32 published_instance_id = 8;
+		optional bool persona_set_by_user = 10;
+		optional string player_name = 15;
+		optional uint32 query_port = 20;
+		optional fixed64 steamid_source = 25;
+		optional bytes avatar_hash = 31;
+		optional uint32 last_logoff = 45;
+		optional uint32 last_logon = 46;
+		optional uint32 clan_rank = 50;
+		optional string game_name = 55;
+		optional fixed64 gameid = 56;
+		optional bytes game_data_blob = 60;
+		optional string clan_tag = 65;
+		optional string facebook_name = 66;
+		optional uint64 facebook_id = 67;
+	}
+
+	optional uint32 status_flags = 1;
+	repeated .CMsgClientPersonaState.Friend friends = 2;
+}
+
+message CMsgClientFriendProfileInfo {
+	optional fixed64 steamid_friend = 1;
+}
+
+message CMsgClientFriendProfileInfoResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional fixed64 steamid_friend = 2;
+	optional uint32 time_created = 3;
+	optional string real_name = 4;
+	optional string city_name = 5;
+	optional string state_name = 6;
+	optional string country_name = 7;
+	optional string headline = 8;
+	optional string summary = 9;
+}
+
+message CMsgClientServerList {
+	message Server {
+		optional uint32 server_type = 1;
+		optional uint32 server_ip = 2;
+		optional uint32 server_port = 3;
+	}
+
+	repeated .CMsgClientServerList.Server servers = 1;
+}
+
+message CMsgClientRequestedClientStats {
+	message StatsToSend {
+		optional uint32 client_stat = 1;
+		optional uint32 stat_aggregate_method = 2;
+	}
+
+	repeated .CMsgClientRequestedClientStats.StatsToSend stats_to_send = 1;
+}
+
+message CMsgClientStat2 {
+	message StatDetail {
+		optional uint32 client_stat = 1;
+		optional int64 ll_value = 2;
+		optional uint32 time_of_day = 3;
+		optional uint32 cell_id = 4;
+		optional uint32 depot_id = 5;
+		optional uint32 app_id = 6;
+	}
+
+	repeated .CMsgClientStat2.StatDetail stat_detail = 1;
+}
+
+message CMsgClientMMSCreateLobby {
+	optional uint32 app_id = 1;
+	optional int32 max_members = 2;
+	optional int32 lobby_type = 3;
+	optional int32 lobby_flags = 4;
+	optional uint32 cell_id = 5;
+	optional uint32 public_ip = 6;
+	optional bytes metadata = 7;
+	optional string persona_name_owner = 8;
+}
+
+message CMsgClientMMSCreateLobbyResponse {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional int32 eresult = 3 [default = 2];
+}
+
+message CMsgClientMMSJoinLobby {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional string persona_name = 3;
+}
+
+message CMsgClientMMSJoinLobbyResponse {
+	message Member {
+		optional fixed64 steam_id = 1;
+		optional string persona_name = 2;
+		optional bytes metadata = 3;
+	}
+
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional int32 chat_room_enter_response = 3;
+	optional int32 max_members = 4;
+	optional int32 lobby_type = 5;
+	optional int32 lobby_flags = 6;
+	optional fixed64 steam_id_owner = 7;
+	optional bytes metadata = 8;
+	repeated .CMsgClientMMSJoinLobbyResponse.Member members = 9;
+}
+
+message CMsgClientMMSLeaveLobby {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+}
+
+message CMsgClientMMSLeaveLobbyResponse {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional int32 eresult = 3 [default = 2];
+}
+
+message CMsgClientMMSGetLobbyList {
+	message Filter {
+		optional string key = 1;
+		optional string value = 2;
+		optional int32 comparision = 3;
+		optional int32 filter_type = 4;
+	}
+
+	optional uint32 app_id = 1;
+	optional int32 num_lobbies_requested = 3;
+	optional uint32 cell_id = 4;
+	optional uint32 public_ip = 5;
+	repeated .CMsgClientMMSGetLobbyList.Filter filters = 6;
+}
+
+message CMsgClientMMSGetLobbyListResponse {
+	message Lobby {
+		optional fixed64 steam_id = 1;
+		optional int32 max_members = 2;
+		optional int32 lobby_type = 3;
+		optional int32 lobby_flags = 4;
+		optional bytes metadata = 5;
+		optional int32 num_members = 6;
+		optional float distance = 7;
+		optional int64 weight = 8;
+	}
+
+	optional uint32 app_id = 1;
+	optional int32 eresult = 3 [default = 2];
+	repeated .CMsgClientMMSGetLobbyListResponse.Lobby lobbies = 4;
+}
+
+message CMsgClientMMSSetLobbyData {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional fixed64 steam_id_member = 3;
+	optional int32 max_members = 4;
+	optional int32 lobby_type = 5;
+	optional int32 lobby_flags = 6;
+	optional bytes metadata = 7;
+}
+
+message CMsgClientMMSSetLobbyDataResponse {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional int32 eresult = 3 [default = 2];
+}
+
+message CMsgClientMMSGetLobbyData {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+}
+
+message CMsgClientMMSLobbyData {
+	message Member {
+		optional fixed64 steam_id = 1;
+		optional string persona_name = 2;
+		optional bytes metadata = 3;
+	}
+
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional int32 num_members = 3;
+	optional int32 max_members = 4;
+	optional int32 lobby_type = 5;
+	optional int32 lobby_flags = 6;
+	optional fixed64 steam_id_owner = 7;
+	optional bytes metadata = 8;
+	repeated .CMsgClientMMSLobbyData.Member members = 9;
+	optional uint32 lobby_cellid = 10;
+}
+
+message CMsgClientMMSSendLobbyChatMsg {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional fixed64 steam_id_target = 3;
+	optional bytes lobby_message = 4;
+}
+
+message CMsgClientMMSLobbyChatMsg {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional fixed64 steam_id_sender = 3;
+	optional bytes lobby_message = 4;
+}
+
+message CMsgClientMMSSetLobbyOwner {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional fixed64 steam_id_new_owner = 3;
+}
+
+message CMsgClientMMSSetLobbyOwnerResponse {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional int32 eresult = 3 [default = 2];
+}
+
+message CMsgClientMMSSetLobbyLinked {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional fixed64 steam_id_lobby2 = 3;
+}
+
+message CMsgClientMMSSetLobbyGameServer {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional uint32 game_server_ip = 3;
+	optional uint32 game_server_port = 4;
+	optional fixed64 game_server_steam_id = 5;
+}
+
+message CMsgClientMMSLobbyGameServerSet {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional uint32 game_server_ip = 3;
+	optional uint32 game_server_port = 4;
+	optional fixed64 game_server_steam_id = 5;
+}
+
+message CMsgClientMMSUserJoinedLobby {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional fixed64 steam_id_user = 3;
+	optional string persona_name = 4;
+}
+
+message CMsgClientMMSUserLeftLobby {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional fixed64 steam_id_user = 3;
+	optional string persona_name = 4;
+}
+
+message CMsgClientMMSInviteToLobby {
+	optional uint32 app_id = 1;
+	optional fixed64 steam_id_lobby = 2;
+	optional fixed64 steam_id_user_invited = 3;
+}
+
+message CMsgClientUDSInviteToGame {
+	optional fixed64 steam_id_dest = 1;
+	optional fixed64 steam_id_src = 2;
+	optional string connect_string = 3;
+}
+
+message CMsgClientChatInvite {
+	optional fixed64 steam_id_invited = 1;
+	optional fixed64 steam_id_chat = 2;
+	optional fixed64 steam_id_patron = 3;
+	optional int32 chatroom_type = 4;
+	optional fixed64 steam_id_friend_chat = 5;
+	optional string chat_name = 6;
+	optional fixed64 game_id = 7;
+}
+
+message CMsgClientConnectionStats {
+	message Stats_Logon {
+		optional int32 connect_attempts = 1;
+		optional int32 connect_successes = 2;
+		optional int32 connect_failures = 3;
+		optional int32 connections_dropped = 4;
+		optional uint32 seconds_running = 5;
+		optional uint32 msec_tologonthistime = 6;
+		optional uint32 count_bad_cms = 7;
+	}
+
+	message Stats_UDP {
+		optional uint64 pkts_sent = 1;
+		optional uint64 bytes_sent = 2;
+		optional uint64 pkts_recv = 3;
+		optional uint64 pkts_processed = 4;
+		optional uint64 bytes_recv = 5;
+	}
+
+	message Stats_VConn {
+		optional uint32 connections_udp = 1;
+		optional uint32 connections_tcp = 2;
+		optional .CMsgClientConnectionStats.Stats_UDP stats_udp = 3;
+		optional uint64 pkts_abandoned = 4;
+		optional uint64 conn_req_received = 5;
+		optional uint64 pkts_resent = 6;
+		optional uint64 msgs_sent = 7;
+		optional uint64 msgs_sent_failed = 8;
+		optional uint64 msgs_recv = 9;
+		optional uint64 datagrams_sent = 10;
+		optional uint64 datagrams_recv = 11;
+		optional uint64 bad_pkts_recv = 12;
+		optional uint64 unknown_conn_pkts_recv = 13;
+		optional uint64 missed_pkts_recv = 14;
+		optional uint64 dup_pkts_recv = 15;
+		optional uint64 failed_connect_challenges = 16;
+		optional uint32 micro_sec_avg_latency = 17;
+		optional uint32 micro_sec_min_latency = 18;
+		optional uint32 micro_sec_max_latency = 19;
+		optional uint32 mem_pool_msg_in_use = 20;
+	}
+
+	optional .CMsgClientConnectionStats.Stats_Logon stats_logon = 1;
+	optional .CMsgClientConnectionStats.Stats_VConn stats_vconn = 2;
+}
+
+message CMsgClientServersAvailable {
+	message Server_Types_Available {
+		optional uint32 server = 1;
+		optional bool changed = 2;
+	}
+
+	repeated .CMsgClientServersAvailable.Server_Types_Available server_types_available = 1;
+	optional uint32 server_type_for_auth_services = 2;
+}
+
+message CMsgClientGetUserStats {
+	optional fixed64 game_id = 1;
+	optional uint32 crc_stats = 2;
+	optional int32 schema_local_version = 3;
+	optional fixed64 steam_id_for_user = 4;
+}
+
+message CMsgClientGetUserStatsResponse {
+	message Stats {
+		optional uint32 stat_id = 1;
+		optional uint32 stat_value = 2;
+	}
+
+	message Achievement_Blocks {
+		optional uint32 achievement_id = 1;
+		repeated fixed32 unlock_time = 2;
+	}
+
+	optional fixed64 game_id = 1;
+	optional int32 eresult = 2 [default = 2];
+	optional uint32 crc_stats = 3;
+	optional bytes schema = 4;
+	repeated .CMsgClientGetUserStatsResponse.Stats stats = 5;
+	repeated .CMsgClientGetUserStatsResponse.Achievement_Blocks achievement_blocks = 6;
+}
+
+message CMsgClientStoreUserStatsResponse {
+	message Stats_Failed_Validation {
+		optional uint32 stat_id = 1;
+		optional uint32 reverted_stat_value = 2;
+	}
+
+	optional fixed64 game_id = 1;
+	optional int32 eresult = 2 [default = 2];
+	optional uint32 crc_stats = 3;
+	repeated .CMsgClientStoreUserStatsResponse.Stats_Failed_Validation stats_failed_validation = 4;
+	optional bool stats_out_of_date = 5;
+}
+
+message CMsgClientStoreUserStats2 {
+	message Stats {
+		optional uint32 stat_id = 1;
+		optional uint32 stat_value = 2;
+	}
+
+	optional fixed64 game_id = 1;
+	optional fixed64 settor_steam_id = 2;
+	optional fixed64 settee_steam_id = 3;
+	optional uint32 crc_stats = 4;
+	optional bool explicit_reset = 5;
+	repeated .CMsgClientStoreUserStats2.Stats stats = 6;
+}
+
+message CMsgClientStatsUpdated {
+	message Updated_Stats {
+		optional uint32 stat_id = 1;
+		optional uint32 stat_value = 2;
+	}
+
+	optional fixed64 steam_id = 1;
+	optional fixed64 game_id = 2;
+	optional uint32 crc_stats = 3;
+	repeated .CMsgClientStatsUpdated.Updated_Stats updated_stats = 4;
+}
+
+message CMsgClientStoreUserStats {
+	message Stats_To_Store {
+		optional uint32 stat_id = 1;
+		optional uint32 stat_value = 2;
+	}
+
+	optional fixed64 game_id = 1;
+	optional bool explicit_reset = 2;
+	repeated .CMsgClientStoreUserStats.Stats_To_Store stats_to_store = 3;
+}
+
+message CMsgClientGetClientDetails {
+}
+
+message CMsgClientReportOverlayDetourFailure {
+	repeated string failure_strings = 1;
+}
+
+message CMsgClientGetClientDetailsResponse {
+	message Game {
+		optional uint32 appid = 1;
+		optional string extra_info = 2;
+		optional uint32 time_running_sec = 3;
+	}
+
+	optional uint32 package_version = 1;
+	optional uint32 protocol_version = 8;
+	optional string os = 2;
+	optional string machine_name = 3;
+	optional string ip_public = 4;
+	optional string ip_private = 5;
+	optional uint64 bytes_available = 7;
+	repeated .CMsgClientGetClientDetailsResponse.Game games_running = 6;
+}
+
+message CMsgClientGetClientAppList {
+	optional bool media = 1;
+	optional bool tools = 2;
+	optional bool games = 3;
+	optional bool only_installed = 4;
+	optional bool only_changing = 5;
+}
+
+message CMsgClientGetClientAppListResponse {
+	message App {
+		message DLC {
+			optional uint32 appid = 1;
+			optional bool installed = 2;
+		}
+
+		optional uint32 appid = 1;
+		optional string category = 2;
+		optional string app_type = 10;
+		optional bool favorite = 3;
+		optional bool installed = 4;
+		optional bool auto_update = 5;
+		optional uint64 bytes_downloaded = 6;
+		optional uint64 bytes_needed = 7;
+		optional uint32 bytes_download_rate = 8;
+		optional bool download_paused = 11;
+		optional uint32 num_downloading = 12;
+		optional uint32 num_paused = 13;
+		optional bool changing = 14;
+		optional bool available_on_platform = 15;
+		repeated .CMsgClientGetClientAppListResponse.App.DLC dlcs = 9;
+	}
+
+	repeated .CMsgClientGetClientAppListResponse.App apps = 1;
+	optional uint64 bytes_available = 2;
+}
+
+message CMsgClientInstallClientApp {
+	optional uint32 appid = 1;
+}
+
+message CMsgClientInstallClientAppResponse {
+	optional uint32 result = 1;
+}
+
+message CMsgClientUninstallClientApp {
+	optional uint32 appid = 1;
+}
+
+message CMsgClientUninstallClientAppResponse {
+	optional uint32 result = 1;
+}
+
+message CMsgClientSetClientAppUpdateState {
+	optional uint32 appid = 1;
+	optional bool update = 2;
+}
+
+message CMsgClientSetClientAppUpdateStateResponse {
+	optional uint32 result = 1;
+}
+
+message CMsgClientUFSUploadFileRequest {
+	optional uint32 app_id = 1;
+	optional uint32 file_size = 2;
+	optional uint32 raw_file_size = 3;
+	optional bytes sha_file = 4;
+	optional uint64 time_stamp = 5;
+	optional string file_name = 6;
+	optional uint32 platforms_to_sync_deprecated = 7;
+	optional uint32 platforms_to_sync = 8 [default = 4294967295];
+	optional uint32 cell_id = 9;
+	optional bool can_encrypt = 10;
+}
+
+message CMsgClientUFSUploadFileResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional bytes sha_file = 2;
+	optional bool use_http = 3;
+	optional string http_host = 4;
+	optional string http_url = 5;
+	optional bytes kv_headers = 6;
+	optional bool use_https = 7;
+	optional bool encrypt_file = 8;
+}
+
+message CMsgClientUFSUploadCommit {
+	message File {
+		optional int32 eresult = 1 [default = 2];
+		optional uint32 app_id = 2;
+		optional bytes sha_file = 3;
+		optional uint32 cub_file = 4;
+		optional string file_name = 5;
+	}
+
+	repeated .CMsgClientUFSUploadCommit.File files = 1;
+}
+
+message CMsgClientUFSUploadCommitResponse {
+	message File {
+		optional int32 eresult = 1 [default = 2];
+		optional uint32 app_id = 2;
+		optional bytes sha_file = 3;
+	}
+
+	repeated .CMsgClientUFSUploadCommitResponse.File files = 1;
+}
+
+message CMsgClientUFSFileChunk {
+	optional bytes sha_file = 1;
+	optional uint32 file_start = 2;
+	optional bytes data = 3;
+}
+
+message CMsgClientUFSTransferHeartbeat {
+}
+
+message CMsgClientUFSUploadFileFinished {
+	optional int32 eresult = 1 [default = 2];
+	optional bytes sha_file = 2;
+}
+
+message CMsgClientUFSDeleteFileRequest {
+	optional uint32 app_id = 1;
+	optional string file_name = 2;
+	optional bool is_explicit_delete = 3;
+}
+
+message CMsgClientUFSDeleteFileResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional string file_name = 2;
+}
+
+message CMsgClientUFSGetFileListForApp {
+	repeated uint32 apps_to_query = 1;
+	optional bool send_path_prefixes = 2;
+}
+
+message CMsgClientUFSGetFileListForAppResponse {
+	option (msgpool_soft_limit) = 8;
+	option (msgpool_hard_limit) = 16;
+	message File {
+		optional uint32 app_id = 1;
+		optional string file_name = 2;
+		optional bytes sha_file = 3;
+		optional uint64 time_stamp = 4;
+		optional uint32 raw_file_size = 5;
+		optional bool is_explicit_delete = 6;
+		optional uint32 platforms_to_sync = 7;
+		optional uint32 path_prefix_index = 8;
+	}
+
+	repeated .CMsgClientUFSGetFileListForAppResponse.File files = 1;
+	repeated string path_prefixes = 2;
+}
+
+message CMsgClientUFSDownloadRequest {
+	optional uint32 app_id = 1;
+	optional string file_name = 2;
+	optional bool can_handle_http = 3;
+}
+
+message CMsgClientUFSDownloadResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional uint32 app_id = 2;
+	optional uint32 file_size = 3;
+	optional uint32 raw_file_size = 4;
+	optional bytes sha_file = 5;
+	optional uint64 time_stamp = 6;
+	optional bool is_explicit_delete = 7;
+	optional bool use_http = 8;
+	optional string http_host = 9;
+	optional string http_url = 10;
+	optional bytes kv_headers = 11;
+	optional bool use_https = 12;
+	optional bool encrypted = 13;
+}
+
+message CMsgClientUFSLoginRequest {
+	optional uint32 protocol_version = 1;
+	optional uint64 am_session_token = 2;
+	repeated uint32 apps = 3;
+}
+
+message CMsgClientUFSLoginResponse {
+	optional int32 eresult = 1 [default = 2];
+}
+
+message CMsgClientRequestEncryptedAppTicket {
+	optional uint32 app_id = 1;
+	optional bytes userdata = 2;
+}
+
+message CMsgClientRequestEncryptedAppTicketResponse {
+	optional uint32 app_id = 1;
+	optional int32 eresult = 2 [default = 2];
+	optional .EncryptedAppTicket encrypted_app_ticket = 3;
+}
+
+message CMsgClientWalletInfoUpdate {
+	optional bool has_wallet = 1;
+	optional int32 balance = 2;
+	optional int32 currency = 3;
+	optional int32 balance_delayed = 4;
+}
+
+message CMsgClientAppInfoUpdate {
+	optional uint32 last_changenumber = 1;
+	optional bool send_changelist = 2;
+}
+
+message CMsgClientAppInfoChanges {
+	optional uint32 current_change_number = 1;
+	optional bool force_full_update = 2;
+	repeated uint32 appIDs = 3;
+}
+
+message CMsgClientAppInfoRequest {
+	message App {
+		optional uint32 app_id = 1;
+		optional uint32 section_flags = 2;
+		repeated uint32 section_CRC = 3;
+	}
+
+	repeated .CMsgClientAppInfoRequest.App apps = 1;
+	optional bool supports_batches = 2 [default = false];
+}
+
+message CMsgClientAppInfoResponse {
+	option (msgpool_soft_limit) = 0;
+	option (msgpool_hard_limit) = 0;
+	message App {
+		message Section {
+			optional uint32 section_id = 1;
+			optional bytes section_kv = 2;
+		}
+
+		optional uint32 app_id = 1;
+		optional uint32 change_number = 2;
+		repeated .CMsgClientAppInfoResponse.App.Section sections = 3;
+	}
+
+	repeated .CMsgClientAppInfoResponse.App apps = 1;
+	repeated uint32 apps_unknown = 2;
+	optional uint32 apps_pending = 3;
+}
+
+message CMsgClientPackageInfoRequest {
+	repeated uint32 package_ids = 1;
+	optional bool meta_data_only = 2;
+}
+
+message CMsgClientPackageInfoResponse {
+	message Package {
+		optional uint32 package_id = 1;
+		optional uint32 change_number = 2;
+		optional bytes sha = 3;
+		optional bytes buffer = 4;
+	}
+
+	repeated .CMsgClientPackageInfoResponse.Package packages = 1;
+	repeated uint32 packages_unknown = 2;
+	optional uint32 packages_pending = 3;
+}
+
+message CMsgClientPICSChangesSinceRequest {
+	optional uint32 since_change_number = 1;
+	optional bool send_app_info_changes = 2;
+	optional bool send_package_info_changes = 3;
+	optional uint32 num_app_info_cached = 4;
+	optional uint32 num_package_info_cached = 5;
+}
+
+message CMsgClientPICSChangesSinceResponse {
+	message PackageChange {
+		optional uint32 packageid = 1;
+		optional uint32 change_number = 2;
+		optional bool needs_token = 3;
+	}
+
+	message AppChange {
+		optional uint32 appid = 1;
+		optional uint32 change_number = 2;
+		optional bool needs_token = 3;
+	}
+
+	optional uint32 current_change_number = 1;
+	optional uint32 since_change_number = 2;
+	optional bool force_full_update = 3;
+	repeated .CMsgClientPICSChangesSinceResponse.PackageChange package_changes = 4;
+	repeated .CMsgClientPICSChangesSinceResponse.AppChange app_changes = 5;
+	optional bool force_full_app_update = 6;
+	optional bool force_full_package_update = 7;
+}
+
+message CMsgClientPICSProductInfoRequest {
+	message AppInfo {
+		optional uint32 appid = 1;
+		optional uint64 access_token = 2;
+		optional bool only_public = 3;
+	}
+
+	message PackageInfo {
+		optional uint32 packageid = 1;
+		optional uint64 access_token = 2;
+	}
+
+	repeated .CMsgClientPICSProductInfoRequest.PackageInfo packages = 1;
+	repeated .CMsgClientPICSProductInfoRequest.AppInfo apps = 2;
+	optional bool meta_data_only = 3;
+	optional uint32 num_prev_failed = 4;
+}
+
+message CMsgClientPICSProductInfoResponse {
+	option (msgpool_soft_limit) = 0;
+	option (msgpool_hard_limit) = 0;
+	message AppInfo {
+		optional uint32 appid = 1;
+		optional uint32 change_number = 2;
+		optional bool missing_token = 3;
+		optional bytes sha = 4;
+		optional bytes buffer = 5;
+		optional bool only_public = 6;
+		optional uint32 size = 7;
+	}
+
+	message PackageInfo {
+		optional uint32 packageid = 1;
+		optional uint32 change_number = 2;
+		optional bool missing_token = 3;
+		optional bytes sha = 4;
+		optional bytes buffer = 5;
+		optional uint32 size = 6;
+	}
+
+	repeated .CMsgClientPICSProductInfoResponse.AppInfo apps = 1;
+	repeated uint32 unknown_appids = 2;
+	repeated .CMsgClientPICSProductInfoResponse.PackageInfo packages = 3;
+	repeated uint32 unknown_packageids = 4;
+	optional bool meta_data_only = 5;
+	optional bool response_pending = 6;
+	optional uint32 http_min_size = 7;
+	optional string http_host = 8;
+}
+
+message CMsgClientPICSAccessTokenRequest {
+	repeated uint32 packageids = 1;
+	repeated uint32 appids = 2;
+}
+
+message CMsgClientPICSAccessTokenResponse {
+	message PackageToken {
+		optional uint32 packageid = 1;
+		optional uint64 access_token = 2;
+	}
+
+	message AppToken {
+		optional uint32 appid = 1;
+		optional uint64 access_token = 2;
+	}
+
+	repeated .CMsgClientPICSAccessTokenResponse.PackageToken package_access_tokens = 1;
+	repeated uint32 package_denied_tokens = 2;
+	repeated .CMsgClientPICSAccessTokenResponse.AppToken app_access_tokens = 3;
+	repeated uint32 app_denied_tokens = 4;
+}
+
+message CMsgClientUFSGetUGCDetails {
+	optional fixed64 hcontent = 1 [default = 18446744073709551615];
+}
+
+message CMsgClientUFSGetUGCDetailsResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional string url = 2;
+	optional uint32 app_id = 3;
+	optional string filename = 4;
+	optional fixed64 steamid_creator = 5;
+	optional uint32 file_size = 6;
+	optional uint32 compressed_file_size = 7;
+	optional string rangecheck_host = 8;
+	optional string file_encoded_sha1 = 9;
+}
+
+message CMsgClientUFSGetSingleFileInfo {
+	optional uint32 app_id = 1;
+	optional string file_name = 2;
+}
+
+message CMsgClientUFSGetSingleFileInfoResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional uint32 app_id = 2;
+	optional string file_name = 3;
+	optional bytes sha_file = 4;
+	optional uint64 time_stamp = 5;
+	optional uint32 raw_file_size = 6;
+	optional bool is_explicit_delete = 7;
+}
+
+message CMsgClientUFSShareFile {
+	optional uint32 app_id = 1;
+	optional string file_name = 2;
+}
+
+message CMsgClientUFSShareFileResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional fixed64 hcontent = 2 [default = 18446744073709551615];
+}
+
+message CMsgClientNewLoginKey {
+	optional uint32 unique_id = 1;
+	optional string login_key = 2;
+}
+
+message CMsgClientNewLoginKeyAccepted {
+	optional uint32 unique_id = 1;
+}
+
+message CMsgClientAMGetClanOfficers {
+	optional fixed64 steamid_clan = 1;
+}
+
+message CMsgClientAMGetClanOfficersResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional fixed64 steamid_clan = 2;
+	optional int32 officer_count = 3;
+}
+
+message CMsgClientAMGetPersonaNameHistory {
+	message IdInstance {
+		optional fixed64 steamid = 1;
+	}
+
+	optional int32 id_count = 1;
+	repeated .CMsgClientAMGetPersonaNameHistory.IdInstance Ids = 2;
+}
+
+message CMsgClientAMGetPersonaNameHistoryResponse {
+	message NameTableInstance {
+		message NameInstance {
+			optional fixed32 name_since = 1;
+			optional string name = 2;
+		}
+
+		optional int32 eresult = 1 [default = 2];
+		optional fixed64 steamid = 2;
+		repeated .CMsgClientAMGetPersonaNameHistoryResponse.NameTableInstance.NameInstance names = 3;
+	}
+
+	repeated .CMsgClientAMGetPersonaNameHistoryResponse.NameTableInstance responses = 2;
+}
+
+message CMsgClientDeregisterWithServer {
+	optional uint32 eservertype = 1;
+	optional uint32 app_id = 2;
+}
+
+message CMsgClientClanState {
+	message NameInfo {
+		optional string clan_name = 1;
+		optional bytes sha_avatar = 2;
+	}
+
+	message UserCounts {
+		optional uint32 members = 1;
+		optional uint32 online = 2;
+		optional uint32 chatting = 3;
+		optional uint32 in_game = 4;
+	}
+
+	message Event {
+		optional fixed64 gid = 1;
+		optional uint32 event_time = 2;
+		optional string headline = 3;
+		optional fixed64 game_id = 4;
+		optional bool just_posted = 5;
+	}
+
+	optional fixed64 steamid_clan = 1;
+	optional uint32 m_unStatusFlags = 2;
+	optional uint32 clan_account_flags = 3;
+	optional .CMsgClientClanState.NameInfo name_info = 4;
+	optional .CMsgClientClanState.UserCounts user_counts = 5;
+	repeated .CMsgClientClanState.Event events = 6;
+	repeated .CMsgClientClanState.Event announcements = 7;
+}
+
+message CMsgClientFriendMsg {
+	optional fixed64 steamid = 1;
+	optional int32 chat_entry_type = 2;
+	optional bytes message = 3;
+	optional fixed32 rtime32_server_timestamp = 4;
+}
+
+message CMsgClientFriendMsgIncoming {
+	optional fixed64 steamid_from = 1;
+	optional int32 chat_entry_type = 2;
+	optional bool from_limited_account = 3;
+	optional bytes message = 4;
+	optional fixed32 rtime32_server_timestamp = 5;
+}
+
+message CMsgClientAddFriend {
+	optional fixed64 steamid_to_add = 1;
+	optional string accountname_or_email_to_add = 2;
+}
+
+message CMsgClientAddFriendResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional fixed64 steam_id_added = 2;
+	optional string persona_name_added = 3;
+}
+
+message CMsgClientRemoveFriend {
+	optional fixed64 friendid = 1;
+}
+
+message CMsgClientHideFriend {
+	optional fixed64 friendid = 1;
+	optional bool hide = 2;
+}
+
diff --git a/protobufs/steammessages_clientserver_2.proto b/protobufs/steammessages_clientserver_2.proto
new file mode 100644
index 0000000..40a2149
--- /dev/null
+++ b/protobufs/steammessages_clientserver_2.proto
@@ -0,0 +1,1227 @@
+import "steammessages_base.proto";
+import "encrypted_app_ticket.proto";
+
+option optimize_for = SPEED;
+option cc_generic_services = false;
+
+message CMsgClientUCMAddScreenshot {
+	message Tag {
+		optional string tag_name = 1;
+		optional string tag_value = 2;
+	}
+
+	optional uint32 appid = 1;
+	optional string filename = 2;
+	optional string thumbname = 3;
+	optional fixed32 rtime32_created = 4;
+	optional uint32 width = 5;
+	optional uint32 height = 6;
+	optional uint32 permissions = 7;
+	optional string caption = 8;
+	optional string shortcut_name = 9;
+	repeated .CMsgClientUCMAddScreenshot.Tag tag = 10;
+	repeated fixed64 tagged_steamid = 11;
+	optional bool spoiler_tag = 12;
+	repeated uint64 tagged_publishedfileid = 13;
+}
+
+message CMsgClientUCMAddScreenshotResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional fixed64 screenshotid = 2 [default = 18446744073709551615];
+}
+
+message CMsgClientUCMDeleteScreenshot {
+	optional fixed64 screenshotid = 1 [default = 18446744073709551615];
+}
+
+message CMsgClientUCMDeleteScreenshotResponse {
+	optional int32 eresult = 1 [default = 2];
+}
+
+message CMsgClientUCMPublishFile {
+	optional uint32 app_id = 1;
+	optional string file_name = 2;
+	optional string preview_file_name = 3;
+	optional uint32 consumer_app_id = 4;
+	optional string title = 5;
+	optional string description = 6;
+	repeated string tags = 8;
+	optional bool workshop_file = 9;
+	optional int32 visibility = 10;
+	optional uint32 file_type = 11;
+	optional string url = 12;
+	optional uint32 video_provider = 13;
+	optional string video_account_name = 14;
+	optional string video_identifier = 15;
+	optional bool in_progress = 16;
+}
+
+message CMsgClientUCMPublishFileResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional fixed64 published_file_id = 2 [default = 18446744073709551615];
+	optional bool needs_workshop_legal_agreement_acceptance = 3 [default = false];
+}
+
+message CMsgClientUCMUpdatePublishedFile {
+	message KeyValueTag {
+		optional string key = 1;
+		optional string value = 2;
+	}
+
+	optional uint32 app_id = 1;
+	optional fixed64 published_file_id = 2;
+	optional string file_name = 3;
+	optional string preview_file_name = 4;
+	optional string title = 5;
+	optional string description = 6;
+	repeated string tags = 7;
+	optional int32 visibility = 8;
+	optional bool update_file = 9;
+	optional bool update_preview_file = 10;
+	optional bool update_title = 11;
+	optional bool update_description = 12;
+	optional bool update_tags = 13;
+	optional bool update_visibility = 14;
+	optional string change_description = 15;
+	optional bool update_url = 16;
+	optional string url = 17;
+	optional bool update_content_manifest = 18;
+	optional fixed64 content_manifest = 19;
+	optional string metadata = 20;
+	optional bool update_metadata = 21;
+	optional int32 language = 22 [default = 0];
+	repeated string removed_kvtags = 23;
+	repeated .CMsgClientUCMUpdatePublishedFile.KeyValueTag kvtags = 24;
+}
+
+message CMsgClientUCMUpdatePublishedFileResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional bool needs_workshop_legal_agreement_acceptance = 2 [default = false];
+}
+
+message CMsgClientUCMDeletePublishedFile {
+	optional fixed64 published_file_id = 1;
+}
+
+message CMsgClientUCMDeletePublishedFileResponse {
+	optional int32 eresult = 1 [default = 2];
+}
+
+message CMsgClientUCMEnumerateUserPublishedFiles {
+	optional uint32 app_id = 1;
+	optional uint32 start_index = 2;
+	optional uint32 sort_order = 3;
+}
+
+message CMsgClientUCMEnumerateUserPublishedFilesResponse {
+	message PublishedFileId {
+		optional fixed64 published_file_id = 1;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgClientUCMEnumerateUserPublishedFilesResponse.PublishedFileId published_files = 2;
+	optional uint32 total_results = 3;
+}
+
+message CMsgClientUCMEnumerateUserSubscribedFiles {
+	optional uint32 app_id = 1;
+	optional uint32 start_index = 2;
+	optional uint32 list_type = 3 [default = 1];
+	optional uint32 matching_file_type = 4 [default = 0];
+	optional uint32 count = 5 [default = 50];
+}
+
+message CMsgClientUCMEnumerateUserSubscribedFilesResponse {
+	message PublishedFileId {
+		optional fixed64 published_file_id = 1;
+		optional fixed32 rtime32_subscribed = 2 [default = 0];
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgClientUCMEnumerateUserSubscribedFilesResponse.PublishedFileId subscribed_files = 2;
+	optional uint32 total_results = 3;
+}
+
+message CMsgClientUCMEnumerateUserSubscribedFilesWithUpdates {
+	optional uint32 app_id = 1;
+	optional uint32 start_index = 2;
+	optional fixed32 start_time = 3;
+}
+
+message CMsgClientUCMEnumerateUserSubscribedFilesWithUpdatesResponse {
+	message PublishedFileId {
+		optional fixed64 published_file_id = 1;
+		optional fixed32 rtime32_subscribed = 2 [default = 0];
+		optional uint32 appid = 3;
+		optional fixed64 file_hcontent = 4;
+		optional uint32 file_size = 5;
+		optional fixed32 rtime32_last_updated = 6;
+		optional bool is_depot_content = 7;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgClientUCMEnumerateUserSubscribedFilesWithUpdatesResponse.PublishedFileId subscribed_files = 2;
+	optional uint32 total_results = 3;
+}
+
+message CMsgClientUCMPublishedFileSubscribed {
+	optional fixed64 published_file_id = 1;
+	optional uint32 app_id = 2;
+	optional fixed64 file_hcontent = 3;
+	optional uint32 file_size = 4;
+	optional uint32 rtime_subscribed = 5;
+	optional bool is_depot_content = 6;
+	optional uint32 rtime_updated = 7;
+}
+
+message CMsgClientUCMPublishedFileUnsubscribed {
+	optional fixed64 published_file_id = 1;
+	optional uint32 app_id = 2;
+}
+
+message CMsgClientUCMPublishedFileDeleted {
+	optional fixed64 published_file_id = 1;
+	optional uint32 app_id = 2;
+}
+
+message CMsgClientUCMPublishedFileUpdated {
+	optional fixed64 published_file_id = 1;
+	optional uint32 app_id = 2;
+	optional uint32 time_updated = 3;
+	optional fixed64 hcontent = 4;
+	optional fixed32 file_size = 5;
+	optional bool is_depot_content = 6;
+}
+
+message CMsgClientWorkshopItemChangesRequest {
+	optional uint32 app_id = 1;
+	optional uint32 last_time_updated = 2;
+	optional uint32 num_items_needed = 3;
+}
+
+message CMsgClientWorkshopItemChangesResponse {
+	message WorkshopItemInfo {
+		optional fixed64 published_file_id = 1;
+		optional uint32 time_updated = 2;
+		optional fixed64 manifest_id = 3;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	optional uint32 update_time = 2;
+	repeated .CMsgClientWorkshopItemChangesResponse.WorkshopItemInfo workshop_items = 5;
+}
+
+message CMsgClientWorkshopItemInfoRequest {
+	message WorkshopItem {
+		optional fixed64 published_file_id = 1;
+		optional uint32 time_updated = 2;
+	}
+
+	optional uint32 app_id = 1;
+	optional uint32 last_time_updated = 2;
+	repeated .CMsgClientWorkshopItemInfoRequest.WorkshopItem workshop_items = 3;
+}
+
+message CMsgClientWorkshopItemInfoResponse {
+	message WorkshopItemInfo {
+		optional fixed64 published_file_id = 1;
+		optional uint32 time_updated = 2;
+		optional fixed64 manifest_id = 3;
+		optional bool is_legacy = 4;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	optional uint32 update_time = 2;
+	repeated .CMsgClientWorkshopItemInfoResponse.WorkshopItemInfo workshop_items = 3;
+	repeated fixed64 private_items = 4;
+}
+
+message CMsgClientUCMGetPublishedFilesForUser {
+	optional uint32 app_id = 1;
+	optional fixed64 creator_steam_id = 2;
+	repeated string required_tags = 3;
+	repeated string excluded_tags = 4;
+	optional uint32 start_index = 5;
+}
+
+message CMsgClientUCMGetPublishedFilesForUserResponse {
+	message PublishedFileId {
+		optional fixed64 published_file_id = 1;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgClientUCMGetPublishedFilesForUserResponse.PublishedFileId published_files = 2;
+	optional uint32 total_results = 3;
+}
+
+message CMsgClientUCMSetUserPublishedFileAction {
+	optional fixed64 published_file_id = 1;
+	optional uint32 app_id = 2;
+	optional int32 action = 3;
+}
+
+message CMsgClientUCMSetUserPublishedFileActionResponse {
+	optional int32 eresult = 1 [default = 2];
+}
+
+message CMsgClientUCMEnumeratePublishedFilesByUserAction {
+	optional uint32 app_id = 1;
+	optional uint32 start_index = 2;
+	optional int32 action = 3;
+}
+
+message CMsgClientUCMEnumeratePublishedFilesByUserActionResponse {
+	message PublishedFileId {
+		optional fixed64 published_file_id = 1;
+		optional fixed32 rtime_time_stamp = 2 [default = 0];
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgClientUCMEnumeratePublishedFilesByUserActionResponse.PublishedFileId published_files = 2;
+	optional uint32 total_results = 3;
+}
+
+message CMsgClientScreenshotsChanged {
+}
+
+message CMsgClientUpdateUserGameInfo {
+	optional fixed64 steamid_idgs = 1;
+	optional fixed64 gameid = 2;
+	optional uint32 game_ip = 3;
+	optional uint32 game_port = 4;
+	optional bytes token = 5;
+}
+
+message CMsgClientRichPresenceUpload {
+	optional bytes rich_presence_kv = 1;
+	repeated fixed64 steamid_broadcast = 2;
+}
+
+message CMsgClientRichPresenceRequest {
+	repeated fixed64 steamid_request = 1;
+}
+
+message CMsgClientRichPresenceInfo {
+	message RichPresence {
+		optional fixed64 steamid_user = 1;
+		optional bytes rich_presence_kv = 2;
+	}
+
+	repeated .CMsgClientRichPresenceInfo.RichPresence rich_presence = 1;
+}
+
+message CMsgClientCheckFileSignature {
+	optional uint32 app_id = 1;
+}
+
+message CMsgClientCheckFileSignatureResponse {
+	optional uint32 app_id = 1;
+	optional uint32 pid = 2;
+	optional uint32 eresult = 3;
+	optional string filename = 4;
+	optional uint32 esignatureresult = 5;
+	optional bytes sha_file = 6;
+	optional bytes signatureheader = 7;
+	optional uint32 filesize = 8;
+	optional uint32 getlasterror = 9;
+	optional uint32 evalvesignaturecheckdetail = 10;
+}
+
+message CMsgClientReadMachineAuth {
+	optional string filename = 1;
+	optional uint32 offset = 2;
+	optional uint32 cubtoread = 3;
+}
+
+message CMsgClientReadMachineAuthResponse {
+	optional string filename = 1;
+	optional uint32 eresult = 2;
+	optional uint32 filesize = 3;
+	optional bytes sha_file = 4;
+	optional uint32 getlasterror = 5;
+	optional uint32 offset = 6;
+	optional uint32 cubread = 7;
+	optional bytes bytes_read = 8;
+	optional string filename_sentry = 9;
+}
+
+message CMsgClientUpdateMachineAuth {
+	optional string filename = 1;
+	optional uint32 offset = 2;
+	optional uint32 cubtowrite = 3;
+	optional bytes bytes = 4;
+	optional uint32 otp_type = 5;
+	optional string otp_identifier = 6;
+	optional bytes otp_sharedsecret = 7;
+	optional uint32 otp_timedrift = 8;
+}
+
+message CMsgClientUpdateMachineAuthResponse {
+	optional string filename = 1;
+	optional uint32 eresult = 2;
+	optional uint32 filesize = 3;
+	optional bytes sha_file = 4;
+	optional uint32 getlasterror = 5;
+	optional uint32 offset = 6;
+	optional uint32 cubwrote = 7;
+	optional int32 otp_type = 8;
+	optional uint32 otp_value = 9;
+	optional string otp_identifier = 10;
+}
+
+message CMsgClientRequestMachineAuth {
+	optional string filename = 1;
+	optional uint32 eresult_sentryfile = 2;
+	optional uint32 filesize = 3;
+	optional bytes sha_sentryfile = 4;
+	optional int32 lock_account_action = 6;
+	optional uint32 otp_type = 7;
+	optional string otp_identifier = 8;
+	optional bytes otp_sharedsecret = 9;
+	optional uint32 otp_value = 10;
+	optional string machine_name = 11;
+	optional string machine_name_userchosen = 12;
+}
+
+message CMsgClientRequestMachineAuthResponse {
+	optional uint32 eresult = 1;
+}
+
+message CMsgClientCreateFriendsGroup {
+	optional fixed64 steamid = 1;
+	optional string groupname = 2;
+}
+
+message CMsgClientCreateFriendsGroupResponse {
+	optional uint32 eresult = 1;
+	optional int32 groupid = 2;
+}
+
+message CMsgClientDeleteFriendsGroup {
+	optional fixed64 steamid = 1;
+	optional int32 groupid = 2;
+}
+
+message CMsgClientDeleteFriendsGroupResponse {
+	optional uint32 eresult = 1;
+}
+
+message CMsgClientRenameFriendsGroup {
+	optional int32 groupid = 1;
+	optional string groupname = 2;
+}
+
+message CMsgClientRenameFriendsGroupResponse {
+	optional uint32 eresult = 1;
+}
+
+message CMsgClientAddFriendToGroup {
+	optional int32 groupid = 1;
+	optional fixed64 steamiduser = 2;
+}
+
+message CMsgClientAddFriendToGroupResponse {
+	optional uint32 eresult = 1;
+}
+
+message CMsgClientRemoveFriendFromGroup {
+	optional int32 groupid = 1;
+	optional fixed64 steamiduser = 2;
+}
+
+message CMsgClientRemoveFriendFromGroupResponse {
+	optional uint32 eresult = 1;
+}
+
+message CMsgClientRegisterKey {
+	optional string key = 1;
+}
+
+message CMsgClientPurchaseResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional int32 purchase_result_details = 2;
+	optional bytes purchase_receipt_info = 3;
+}
+
+message CMsgClientActivateOEMLicense {
+	optional string bios_manufacturer = 1;
+	optional string bios_serialnumber = 2;
+	optional bytes license_file = 3;
+	optional string mainboard_manufacturer = 4;
+	optional string mainboard_product = 5;
+	optional string mainboard_serialnumber = 6;
+}
+
+message CMsgClientRegisterOEMMachine {
+	optional bytes oem_register_file = 1;
+}
+
+message CMsgClientRegisterOEMMachineResponse {
+	optional uint32 eresult = 1;
+}
+
+message CMsgClientPurchaseWithMachineID {
+	optional uint32 package_id = 1;
+	optional bytes machine_info = 2;
+}
+
+message CMsgTrading_InitiateTradeRequest {
+	optional uint32 trade_request_id = 1;
+	optional uint64 other_steamid = 2;
+	optional string other_name = 3;
+}
+
+message CMsgTrading_InitiateTradeResponse {
+	optional uint32 response = 1;
+	optional uint32 trade_request_id = 2;
+	optional uint64 other_steamid = 3;
+	optional uint32 steamguard_required_days = 4;
+	optional uint32 new_device_cooldown_days = 5;
+	optional uint32 default_password_reset_probation_days = 6;
+	optional uint32 password_reset_probation_days = 7;
+	optional uint32 default_email_change_probation_days = 8;
+	optional uint32 email_change_probation_days = 9;
+}
+
+message CMsgTrading_CancelTradeRequest {
+	optional uint64 other_steamid = 1;
+}
+
+message CMsgTrading_StartSession {
+	optional uint64 other_steamid = 1;
+}
+
+message CMsgClientEmailChange {
+	optional string password = 1;
+	optional string email = 2;
+	optional string code = 3;
+	optional bool final = 4;
+	optional bool newmethod = 5;
+	optional string twofactor_code = 6;
+	optional string sms_code = 7;
+	optional bool client_supports_sms = 8;
+}
+
+message CMsgClientEmailChangeResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional bool requires_sms_code = 2;
+}
+
+message CMsgClientGetCDNAuthToken {
+	optional uint32 app_id = 1;
+	optional string host_name = 2;
+}
+
+message CMsgClientGetDepotDecryptionKey {
+	optional uint32 depot_id = 1;
+	optional uint32 app_id = 2;
+}
+
+message CMsgClientGetDepotDecryptionKeyResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional uint32 depot_id = 2;
+	optional bytes depot_encryption_key = 3;
+}
+
+message CMsgClientGetAppBetaPasswords {
+	optional uint32 app_id = 1;
+}
+
+message CMsgClientGetAppBetaPasswordsResponse {
+	message BetaPassword {
+		optional string betaname = 1;
+		optional string betapassword = 2;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	optional uint32 app_id = 2;
+	repeated .CMsgClientGetAppBetaPasswordsResponse.BetaPassword betapasswords = 3;
+}
+
+message CMsgClientCheckAppBetaPassword {
+	optional uint32 app_id = 1;
+	optional string betapassword = 2;
+}
+
+message CMsgClientCheckAppBetaPasswordResponse {
+	message BetaPassword {
+		optional string betaname = 1;
+		optional string betapassword = 2;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgClientCheckAppBetaPasswordResponse.BetaPassword betapasswords = 4;
+}
+
+message CMsgClientUpdateAppJobReport {
+	optional uint32 app_id = 1;
+	repeated uint32 depot_ids = 2;
+	optional uint32 app_state = 3;
+	optional uint32 job_app_error = 4;
+	optional string error_details = 5;
+	optional uint32 job_duration = 6;
+	optional uint32 files_validation_failed = 7;
+	optional uint64 bytes_downloaded = 8;
+	optional uint64 bytes_staged = 9;
+	optional uint64 bytes_comitted = 10;
+	optional uint32 start_app_state = 11;
+	optional fixed64 stats_machine_id = 12;
+}
+
+message CMsgClientDPContentStatsReport {
+	optional fixed64 stats_machine_id = 1;
+	optional string country_code = 2;
+	optional int32 os_type = 3;
+	optional int32 language = 4;
+	optional uint32 num_install_folders = 5;
+	optional uint32 num_installed_games = 6;
+	optional uint64 size_installed_games = 7;
+}
+
+message CMsgClientGetCDNAuthTokenResponse {
+	optional uint32 eresult = 1 [default = 2];
+	optional string token = 2;
+	optional uint32 expiration_time = 3;
+}
+
+message CMsgDownloadRateStatistics {
+	message StatsInfo {
+		optional uint32 source_type = 1;
+		optional uint32 source_id = 2;
+		optional uint32 seconds = 3;
+		optional uint64 bytes = 4;
+	}
+
+	optional uint32 cell_id = 1;
+	repeated .CMsgDownloadRateStatistics.StatsInfo stats = 2;
+}
+
+message CMsgClientRequestAccountData {
+	optional string account_or_email = 1;
+	optional uint32 action = 2;
+}
+
+message CMsgClientRequestAccountDataResponse {
+	optional uint32 action = 1;
+	optional uint32 eresult = 2;
+	optional string account_name = 3;
+	optional uint32 ct_matches = 4;
+	optional string account_name_suggestion1 = 5;
+	optional string account_name_suggestion2 = 6;
+	optional string account_name_suggestion3 = 7;
+}
+
+message CMsgClientUGSGetGlobalStats {
+	optional uint64 gameid = 1;
+	optional uint32 history_days_requested = 2;
+	optional fixed32 time_last_requested = 3;
+	optional uint32 first_day_cached = 4;
+	optional uint32 days_cached = 5;
+}
+
+message CMsgClientUGSGetGlobalStatsResponse {
+	message Day {
+		message Stat {
+			optional int32 stat_id = 1;
+			optional int64 data = 2;
+		}
+
+		optional uint32 day_id = 1;
+		repeated .CMsgClientUGSGetGlobalStatsResponse.Day.Stat stats = 2;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	optional fixed32 timestamp = 2;
+	optional int32 day_current = 3;
+	repeated .CMsgClientUGSGetGlobalStatsResponse.Day days = 4;
+}
+
+message CMsgGameServerData {
+	message Player {
+		optional fixed64 steam_id = 1;
+	}
+
+	optional fixed64 steam_id_gs = 1;
+	optional uint32 ip = 2;
+	optional uint32 query_port = 3;
+	optional uint32 game_port = 4;
+	optional uint32 sourcetv_port = 5;
+	optional string name = 22;
+	optional uint32 app_id = 6;
+	optional string gamedir = 7;
+	optional string version = 8;
+	optional string product = 9;
+	optional string region = 10;
+	repeated .CMsgGameServerData.Player players = 11;
+	optional uint32 max_players = 12;
+	optional uint32 bot_count = 13;
+	optional bool password = 14;
+	optional bool secure = 15;
+	optional bool dedicated = 16;
+	optional string os = 17;
+	optional string game_data = 18;
+	optional uint32 game_data_version = 19;
+	optional string game_type = 20;
+	optional string map = 21;
+}
+
+message CMsgGameServerRemove {
+	optional fixed64 steam_id = 1;
+	optional uint32 ip = 2;
+	optional uint32 query_port = 3;
+}
+
+message CMsgClientGMSServerQuery {
+	optional uint32 app_id = 1;
+	optional uint32 geo_location_ip = 2;
+	optional uint32 region_code = 3;
+	optional string filter_text = 4;
+	optional uint32 max_servers = 5;
+}
+
+message CMsgGMSClientServerQueryResponse {
+	message Server {
+		optional uint32 server_ip = 1;
+		optional uint32 server_port = 2;
+		optional uint32 auth_players = 3;
+	}
+
+	repeated .CMsgGMSClientServerQueryResponse.Server servers = 1;
+	optional string error = 2;
+}
+
+message CMsgGameServerOutOfDate {
+	optional fixed64 steam_id_gs = 1;
+	optional bool reject = 2;
+	optional string message = 3;
+}
+
+message CMsgClientRedeemGuestPass {
+	optional fixed64 guest_pass_id = 1;
+}
+
+message CMsgClientRedeemGuestPassResponse {
+	optional uint32 eresult = 1 [default = 2];
+	optional uint32 package_id = 2;
+	optional uint32 must_own_appid = 3;
+}
+
+message CMsgClientGetClanActivityCounts {
+	repeated uint64 steamid_clans = 1;
+}
+
+message CMsgClientGetClanActivityCountsResponse {
+	optional uint32 eresult = 1 [default = 2];
+}
+
+message CMsgClientOGSReportString {
+	optional bool accumulated = 1;
+	optional uint64 sessionid = 2;
+	optional int32 severity = 3;
+	optional string formatter = 4;
+	optional bytes varargs = 5;
+}
+
+message CMsgClientOGSReportBug {
+	optional uint64 sessionid = 1;
+	optional string bugtext = 2;
+	optional bytes screenshot = 3;
+}
+
+message CMsgGSAssociateWithClan {
+	optional fixed64 steam_id_clan = 1;
+}
+
+message CMsgGSAssociateWithClanResponse {
+	optional fixed64 steam_id_clan = 1;
+	optional uint32 eresult = 2 [default = 2];
+}
+
+message CMsgGSComputeNewPlayerCompatibility {
+	optional fixed64 steam_id_candidate = 1;
+}
+
+message CMsgGSComputeNewPlayerCompatibilityResponse {
+	optional fixed64 steam_id_candidate = 1;
+	optional uint32 eresult = 2 [default = 2];
+	optional bool is_clan_member = 3;
+	optional int32 ct_dont_like_you = 4;
+	optional int32 ct_you_dont_like = 5;
+	optional int32 ct_clanmembers_dont_like_you = 6;
+}
+
+message CMsgClientSentLogs {
+}
+
+message CMsgGCClient {
+	optional uint32 appid = 1;
+	optional uint32 msgtype = 2;
+	optional bytes payload = 3;
+	optional fixed64 steamid = 4;
+	optional string gcname = 5;
+}
+
+message CMsgClientRequestFreeLicense {
+	repeated uint32 appids = 2;
+}
+
+message CMsgClientRequestFreeLicenseResponse {
+	optional uint32 eresult = 1 [default = 2];
+	repeated uint32 granted_packageids = 2;
+	repeated uint32 granted_appids = 3;
+}
+
+message CMsgDRMDownloadRequestWithCrashData {
+	optional uint32 download_flags = 1;
+	optional uint32 download_types_known = 2;
+	optional bytes guid_drm = 3;
+	optional bytes guid_split = 4;
+	optional bytes guid_merge = 5;
+	optional string module_name = 6;
+	optional string module_path = 7;
+	optional bytes crash_data = 8;
+}
+
+message CMsgDRMDownloadResponse {
+	optional uint32 eresult = 1 [default = 2];
+	optional uint32 app_id = 2;
+	optional uint32 blob_download_type = 3;
+	optional bytes merge_guid = 4;
+	optional uint32 download_file_dfs_ip = 5;
+	optional uint32 download_file_dfs_port = 6;
+	optional string download_file_url = 7;
+	optional string module_path = 8;
+}
+
+message CMsgDRMFinalResult {
+	optional uint32 eResult = 1 [default = 2];
+	optional uint32 app_id = 2;
+	optional uint32 blob_download_type = 3;
+	optional uint32 error_detail = 4;
+	optional bytes merge_guid = 5;
+	optional uint32 download_file_dfs_ip = 6;
+	optional uint32 download_file_dfs_port = 7;
+	optional string download_file_url = 8;
+}
+
+message CMsgClientDPCheckSpecialSurvey {
+	optional uint32 survey_id = 1;
+}
+
+message CMsgClientDPCheckSpecialSurveyResponse {
+	optional uint32 eResult = 1 [default = 2];
+	optional uint32 state = 2;
+	optional string name = 3;
+	optional string custom_url = 4;
+	optional bool include_software = 5;
+	optional bytes token = 6;
+}
+
+message CMsgClientDPSendSpecialSurveyResponse {
+	optional uint32 survey_id = 1;
+	optional bytes data = 2;
+}
+
+message CMsgClientDPSendSpecialSurveyResponseReply {
+	optional uint32 eResult = 1 [default = 2];
+	optional bytes token = 2;
+}
+
+message CMsgClientRequestForgottenPasswordEmail {
+	optional string account_name = 1;
+	optional string password_tried = 2;
+}
+
+message CMsgClientRequestForgottenPasswordEmailResponse {
+	optional uint32 eResult = 1;
+	optional bool use_secret_question = 2;
+}
+
+message CMsgClientItemAnnouncements {
+	optional uint32 count_new_items = 1;
+}
+
+message CMsgClientRequestItemAnnouncements {
+}
+
+message CMsgClientUserNotifications {
+	message Notification {
+		optional uint32 user_notification_type = 1;
+		optional uint32 count = 2;
+	}
+
+	repeated .CMsgClientUserNotifications.Notification notifications = 1;
+}
+
+message CMsgClientCommentNotifications {
+	optional uint32 count_new_comments = 1;
+	optional uint32 count_new_comments_owner = 2;
+	optional uint32 count_new_comments_subscriptions = 3;
+}
+
+message CMsgClientRequestCommentNotifications {
+}
+
+message CMsgClientOfflineMessageNotification {
+	optional uint32 offline_messages = 1;
+	repeated uint32 friends_with_offline_messages = 2;
+}
+
+message CMsgClientRequestOfflineMessageCount {
+}
+
+message CMsgClientFSGetFriendMessageHistory {
+	optional fixed64 steamid = 1;
+}
+
+message CMsgClientFSGetFriendMessageHistoryResponse {
+	message FriendMessage {
+		optional uint32 accountid = 1;
+		optional uint32 timestamp = 2;
+		optional string message = 3;
+		optional bool unread = 4;
+	}
+
+	optional fixed64 steamid = 1;
+	optional uint32 success = 2;
+	repeated .CMsgClientFSGetFriendMessageHistoryResponse.FriendMessage messages = 3;
+}
+
+message CMsgClientFSGetFriendMessageHistoryForOfflineMessages {
+}
+
+message CMsgClientFSGetFriendsSteamLevels {
+	repeated uint32 accountids = 1;
+}
+
+message CMsgClientFSGetFriendsSteamLevelsResponse {
+	message Friend {
+		optional uint32 accountid = 1;
+		optional uint32 level = 2;
+	}
+
+	repeated .CMsgClientFSGetFriendsSteamLevelsResponse.Friend friends = 1;
+}
+
+message CMsgClientEmailAddrInfo {
+	optional string email_address = 1;
+	optional bool email_is_validated = 2;
+	optional bool email_validation_changed = 3;
+	optional bool credential_change_requires_code = 4;
+	optional bool password_or_secretqa_change_requires_code = 5;
+	optional bool remind_user_about_email = 6;
+}
+
+message CMsgCREEnumeratePublishedFiles {
+	optional uint32 app_id = 1;
+	optional int32 query_type = 2;
+	optional uint32 start_index = 3;
+	optional uint32 days = 4;
+	optional uint32 count = 5;
+	repeated string tags = 6;
+	repeated string user_tags = 7;
+	optional uint32 matching_file_type = 8 [default = 13];
+}
+
+message CMsgCREEnumeratePublishedFilesResponse {
+	message PublishedFileId {
+		optional fixed64 published_file_id = 1;
+		optional int32 votes_for = 2;
+		optional int32 votes_against = 3;
+		optional int32 reports = 4;
+		optional float score = 5;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgCREEnumeratePublishedFilesResponse.PublishedFileId published_files = 2;
+	optional uint32 total_results = 3;
+}
+
+message CMsgCREItemVoteSummary {
+	message PublishedFileId {
+		optional fixed64 published_file_id = 1;
+	}
+
+	repeated .CMsgCREItemVoteSummary.PublishedFileId published_file_ids = 1;
+}
+
+message CMsgCREItemVoteSummaryResponse {
+	message ItemVoteSummary {
+		optional fixed64 published_file_id = 1;
+		optional int32 votes_for = 2;
+		optional int32 votes_against = 3;
+		optional int32 reports = 4;
+		optional float score = 5;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgCREItemVoteSummaryResponse.ItemVoteSummary item_vote_summaries = 2;
+}
+
+message CMsgCREUpdateUserPublishedItemVote {
+	optional fixed64 published_file_id = 1;
+	optional bool vote_up = 2;
+}
+
+message CMsgCREUpdateUserPublishedItemVoteResponse {
+	optional int32 eresult = 1 [default = 2];
+}
+
+message CMsgCREGetUserPublishedItemVoteDetails {
+	message PublishedFileId {
+		optional fixed64 published_file_id = 1;
+	}
+
+	repeated .CMsgCREGetUserPublishedItemVoteDetails.PublishedFileId published_file_ids = 1;
+}
+
+message CMsgCREGetUserPublishedItemVoteDetailsResponse {
+	message UserItemVoteDetail {
+		optional fixed64 published_file_id = 1;
+		optional int32 vote = 2 [default = 0];
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgCREGetUserPublishedItemVoteDetailsResponse.UserItemVoteDetail user_item_vote_details = 2;
+}
+
+message CMsgGameServerPingSample {
+	message Sample {
+		optional fixed32 ip = 1;
+		optional uint32 avg_ping_ms = 2;
+		optional uint32 stddev_ping_ms_x10 = 3;
+	}
+
+	optional fixed32 my_ip = 1;
+	optional int32 gs_app_id = 2;
+	repeated .CMsgGameServerPingSample.Sample gs_samples = 3;
+}
+
+message CMsgFSGetFollowerCount {
+	optional fixed64 steam_id = 1;
+}
+
+message CMsgFSGetFollowerCountResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional int32 count = 2 [default = 0];
+}
+
+message CMsgFSGetIsFollowing {
+	optional fixed64 steam_id = 1;
+}
+
+message CMsgFSGetIsFollowingResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional bool is_following = 2 [default = false];
+}
+
+message CMsgFSEnumerateFollowingList {
+	optional uint32 start_index = 1;
+}
+
+message CMsgFSEnumerateFollowingListResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional int32 total_results = 2;
+	repeated fixed64 steam_ids = 3;
+}
+
+message CMsgDPGetNumberOfCurrentPlayers {
+	optional uint32 appid = 1;
+}
+
+message CMsgDPGetNumberOfCurrentPlayersResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional int32 player_count = 2;
+}
+
+message CMsgClientFriendUserStatusPublished {
+	optional fixed64 friend_steamid = 1;
+	optional uint32 appid = 2;
+	optional string status_text = 3;
+}
+
+message CMsgClientServiceMethod {
+	optional string method_name = 1;
+	optional bytes serialized_method = 2;
+	optional bool is_notification = 3;
+}
+
+message CMsgClientServiceMethodResponse {
+	optional string method_name = 1;
+	optional bytes serialized_method_response = 2;
+}
+
+message CMsgClientUIMode {
+	optional uint32 uimode = 1;
+}
+
+message CMsgClientVanityURLChangedNotification {
+	optional string vanity_url = 1;
+}
+
+message CMsgClientAuthorizeLocalDeviceRequest {
+	optional string device_description = 1;
+	optional uint32 owner_account_id = 2;
+}
+
+message CMsgClientAuthorizeLocalDevice {
+	optional int32 eresult = 1 [default = 2];
+	optional uint32 owner_account_id = 2;
+	optional uint64 authed_device_token = 3;
+}
+
+message CMsgClientDeauthorizeDeviceRequest {
+	optional uint32 deauthorization_account_id = 1;
+	optional uint64 deauthorization_device_token = 2;
+}
+
+message CMsgClientDeauthorizeDevice {
+	optional int32 eresult = 1 [default = 2];
+	optional uint32 deauthorization_account_id = 2;
+}
+
+message CMsgClientUseLocalDeviceAuthorizations {
+	message DeviceToken {
+		optional uint32 owner_account_id = 1;
+		optional uint64 token_id = 2;
+	}
+
+	repeated uint32 authorization_account_id = 1;
+	repeated .CMsgClientUseLocalDeviceAuthorizations.DeviceToken device_tokens = 2;
+}
+
+message CMsgClientGetAuthorizedDevices {
+}
+
+message CMsgClientGetAuthorizedDevicesResponse {
+	message AuthorizedDevice {
+		optional uint64 auth_device_token = 1;
+		optional string device_name = 2;
+		optional uint32 last_access_time = 3;
+		optional uint32 borrower_id = 4;
+		optional bool is_pending = 5;
+		optional uint32 app_played = 6;
+	}
+
+	optional int32 eresult = 1 [default = 2];
+	repeated .CMsgClientGetAuthorizedDevicesResponse.AuthorizedDevice authorized_device = 2;
+}
+
+message CMsgClientGetEmoticonList {
+}
+
+message CMsgClientEmoticonList {
+	message Emoticon {
+		optional string name = 1;
+		optional int32 count = 2;
+	}
+
+	repeated .CMsgClientEmoticonList.Emoticon emoticons = 1;
+}
+
+message CMsgClientSharedLibraryLockStatus {
+	message LockedLibrary {
+		optional uint32 owner_id = 1;
+		optional uint32 locked_by = 2;
+	}
+
+	repeated .CMsgClientSharedLibraryLockStatus.LockedLibrary locked_library = 1;
+	optional uint32 own_library_locked_by = 2;
+}
+
+message CMsgClientSharedLibraryStopPlaying {
+	message StopApp {
+		optional uint32 app_id = 1;
+		optional uint32 owner_id = 2;
+	}
+
+	optional int32 seconds_left = 1;
+	repeated .CMsgClientSharedLibraryStopPlaying.StopApp stop_apps = 2;
+}
+
+message CMsgClientServiceCall {
+	optional bytes sysid_routing = 1;
+	optional uint32 call_handle = 2;
+	optional uint32 module_crc = 3;
+	optional bytes module_hash = 4;
+	optional uint32 function_id = 5;
+	optional uint32 cub_output_max = 6;
+	optional uint32 flags = 7;
+	optional bytes callparameter = 8;
+	optional bool ping_only = 9;
+	optional uint32 max_outstanding_calls = 10;
+}
+
+message CMsgClientServiceModule {
+	optional uint32 module_crc = 1;
+	optional bytes module_hash = 2;
+	optional bytes module_content = 3;
+}
+
+message CMsgClientServiceCallResponse {
+	optional bytes sysid_routing = 1;
+	optional uint32 call_handle = 2;
+	optional uint32 module_crc = 3;
+	optional bytes module_hash = 4;
+	optional uint32 ecallresult = 5;
+	optional bytes result_content = 6;
+	optional bytes os_version_info = 7;
+	optional bytes system_info = 8;
+	optional fixed64 load_address = 9;
+	optional bytes exception_record = 10;
+	optional bytes portable_os_version_info = 11;
+	optional bytes portable_system_info = 12;
+	optional bool was_converted = 13;
+	optional uint32 internal_result = 14;
+	optional uint32 current_count = 15;
+	optional uint32 last_call_handle = 16;
+	optional uint32 last_call_module_crc = 17;
+	optional bytes last_call_sysid_routing = 18;
+	optional uint32 last_ecallresult = 19;
+	optional uint32 last_callissue_delta = 20;
+	optional uint32 last_callcomplete_delta = 21;
+}
+
+message CMsgAMUnlockStreaming {
+}
+
+message CMsgAMUnlockStreamingResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional bytes encryption_key = 2;
+}
+
+message CMsgClientPlayingSessionState {
+	optional bool playing_blocked = 2;
+	optional uint32 playing_app = 3;
+}
+
+message CMsgClientKickPlayingSession {
+	optional bool only_stop_game = 1;
+}
+
+message CMsgClientCreateAccount {
+	optional string account_name = 1;
+	optional string password = 2;
+	optional string email = 3;
+	optional uint32 launcher = 6;
+}
+
+message CMsgClientCreateAccountResponse {
+	optional int32 eresult = 1 [default = 2];
+	optional fixed64 steamid = 2;
+}
+
+message CMsgClientVoiceCallPreAuthorize {
+	optional fixed64 caller_steamid = 1;
+	optional fixed64 receiver_steamid = 2;
+	optional int32 caller_id = 3;
+	optional bool hangup = 4;
+}
+
+message CMsgClientVoiceCallPreAuthorizeResponse {
+	optional fixed64 caller_steamid = 1;
+	optional fixed64 receiver_steamid = 2;
+	optional int32 eresult = 3 [default = 2];
+	optional int32 caller_id = 4;
+}
+