diff --git a/Assets/proto/protocol.bytes b/Assets/proto/protocol.bytes
index b929d2064..4aab617c3 100644
--- a/Assets/proto/protocol.bytes
+++ b/Assets/proto/protocol.bytes
@@ -1,5 +1,5 @@
 
-–Ë
+Ö†
 pb/proto/protocol.protocspb"ž
 Gift
 act_type (RactType
@@ -160,7 +160,110 @@ id_with_lv (2.cspb.HeroIdWithLvRidWithLv&
 rewards (2.cspb.RewardRrewards"4
 ActIntroductoryGift
 
-trigger_at (R	triggerAt"Á
+trigger_at (R	triggerAt"’
+	RivalInfo
+name (	Rname
+level (Rlevel
+avatar (Ravatar!
+avatar_frame (RavatarFrame
+	total_win (RtotalWinC
+rival_heroes (2 .cspb.RivalInfo.RivalHeroesEntryRrivalHeroes>
+RivalHeroesEntry
+key (Rkey
+value (Rvalue:8"¢
+ActivityPVP
+playing (Rplaying*
+enter_count_daily (RenterCountDaily
+	win_count (RwinCount&
+total_win_count (R
totalWinCount
+
+lose_count (R	loseCount5
+heroes (2.cspb.ActivityPVP.HeroesEntryRheroes3
+current_select_pair_id (RcurrentSelectPairId-
+next_select_four_id (RnextSelectFourId%
+match_cd_end_at	 (RmatchCdEndAt.
+
+rival_info
+ (2.cspb.RivalInfoR	rivalInfo
+exp (Rexp
+level (Rlevel>
+	collected
 (2 .cspb.ActivityPVP.CollectedEntryR	collected9
+HeroesEntry
+key (Rkey
+value (Rvalue:8T
+CollectedEntry
+key (Rkey,
+value (2.cspb.ActivityPVPGradeRvalue:8"
+ActivityPVPDataReq"t
+ActivityPVPDataRsp(
+err_code (2
.cspb.ErrCodeRerrCode4
+Activity_pvp (2.cspb.ActivityPVPRActivityPvp"
+ActivityPVPBeginReq"u
+ActivityPVPBeginRsp(
+err_code (2
.cspb.ErrCodeRerrCode4
+Activity_pvp (2.cspb.ActivityPVPRActivityPvp"0
+ActivityPVPDecideHeroReq
+index (Rindex"‹
+ActivityPVPDecideHeroRsp(
+err_code (2
.cspb.ErrCodeRerrCodeB
+heroes (2*.cspb.ActivityPVPDecideHeroRsp.HeroesEntryRheroes
+pair_id (RpairId-
+next_select_four_id (RnextSelectFourId9
+HeroesEntry
+key (Rkey
+value (Rvalue:8"
+ActivityPVPFlushHeroesReq"±
+ActivityPVPFlushHeroesRsp(
+err_code (2
.cspb.ErrCodeRerrCode"
+costs (2.cspb.RewardRcosts
+pair_id (RpairId-
+next_select_four_id (RnextSelectFourId"%
+ActivityPVPMatchReq
+ad (Rad"�
+ActivityPVPMatchRsp(
+err_code (2
.cspb.ErrCodeRerrCode%
+rival (2.cspb.RivalInfoRrival%
+match_cd_end_at (RmatchCdEndAt"&
+ActivityPVPOverCDReq
+ad (Rad"t
+ActivityPVPOverCDRsp(
+err_code (2
.cspb.ErrCodeRerrCode
+ad (Rad"
+costs (2.cspb.RewardRcosts"
+ActivityPVPStartReq"?
+ActivityPVPStartRsp(
+err_code (2
.cspb.ErrCodeRerrCode"q
+ActivityPVPSettlementReq
+win (Rwin
+season (Rseason+
+	task_stat (2.cspb.TaskStatRtaskStat"z
+ActivityPVPSettlementRsp(
+err_code (2
.cspb.ErrCodeRerrCode4
+Activity_pvp (2.cspb.ActivityPVPRActivityPvp"
+ActivityPVPRankReq"€
+ActivityPVPRankRsp(
+err_code (2
.cspb.ErrCodeRerrCode%
+ranks (2.cspb.RivalInfoRranks
+own_rank (RownRank"i
+ActivityPVPGrade
+normal (Rnormal
+superior (Rsuperior!
+superior_max (RsuperiorMax"A
+ActivityPVPBountyClaimReq
+id (Rid
+grade (Rgrade"�
+ActivityPVPBountyClaimRsp(
+err_code (2
.cspb.ErrCodeRerrCode&
+rewards (2.cspb.RewardRrewards]
+success_id_grade (23.cspb.ActivityPVPBountyClaimRsp.SuccessIdGradeEntryRsuccessIdGradeA
+SuccessIdGradeEntry
+key (Rkey
+value (Rvalue:8"4
+"ActivityPVPBountyClaimByDiamondReq
+id (Rid"r
+"ActivityPVPBountyClaimByDiamondRsp(
+err_code (2
.cspb.ErrCodeRerrCode"
+costs (2.cspb.RewardRcosts"Á
 ActLevelUpGift.
 gifts (2.cspb.ActLevelUpGiftInfoRgifts/
 gold_gift_trigger_at (RgoldGiftTriggerAt 
@@ -221,7 +324,7 @@ rival_info (2.cspb.MatchPlayerInfoR	rivalInfo(
 total_win_count (R
totalWinCount(
 total_lose_count (RtotalLoseCount7
 highest_score_in_history (RhighestScoreInHistory"
-
stage_gift_id (RstageGiftId"ò
+
stage_gift_id (RstageGiftId"Š
 MatchPlayerInfo
 name (	Rname
 level (Rlevel
@@ -231,10 +334,14 @@ rival_info (2.cspb.MatchPlayerInfoR	rivalInfo(
 array_heroes (2
 .cspb.HeroRarrayHeroesL
 
heroes_equips (2'.cspb.MatchPlayerInfo.HeroesEquipsEntryRheroesEquips
-skins (RskinsQ
+skins (RskinsI
+heroes_runes	 (2&.cspb.MatchPlayerInfo.HeroesRunesEntryRheroesRunesQ
 HeroesEquipsEntry
 key (Rkey&
-value (2.cspb.HeroEquipsRvalue:8"³
+value (2.cspb.HeroEquipsRvalue:8K
+HeroesRunesEntry
+key (Rkey!
+value (2.cspb.GridsRvalue:8"³
 ChallengeRecordInfo
 win (Rwin
 attacker (Rattacker4
@@ -307,16 +414,20 @@ PVPRankRsp(
 .cspb.RankRtop100
 rank (Rrank"$
 PVPRankHeroesReq
-rid (	Rrid"£
+rid (	Rrid"¼
 PVPRankHeroesRsp(
 err_code (2
.cspb.ErrCodeRerrCode-
 array_heroes (2
 .cspb.HeroRarrayHeroesM
 
heroes_equips (2(.cspb.PVPRankHeroesRsp.HeroesEquipsEntryRheroesEquips
-skins (RskinsQ
+skins (RskinsJ
+heroes_runes (2'.cspb.PVPRankHeroesRsp.HeroesRunesEntryRheroesRunesQ
 HeroesEquipsEntry
 key (Rkey&
-value (2.cspb.HeroEquipsRvalue:8"
+value (2.cspb.HeroEquipsRvalue:8K
+HeroesRunesEntry
+key (Rkey!
+value (2.cspb.GridsRvalue:8"
 
 PVPInfoReq"b
 
@@ -460,16 +571,20 @@ today_self (2.cspb.BossRushRankInfoR	todaySelf?
 err_code (2
.cspb.ErrCodeRerrCode&
 rewards (2.cspb.RewardRrewards"'
 BossRushPlayerInfoReq
-id (	Rid"­
+id (	Rid"Ë
 BossRushPlayerInfoRsp(
 err_code (2
.cspb.ErrCodeRerrCode-
 array_heroes (2
 .cspb.HeroRarrayHeroesR
 
heroes_equips (2-.cspb.BossRushPlayerInfoRsp.HeroesEquipsEntryRheroesEquips
-skins (RskinsQ
+skins (RskinsO
+heroes_runes (2,.cspb.BossRushPlayerInfoRsp.HeroesRunesEntryRheroesRunesQ
 HeroesEquipsEntry
 key (Rkey&
-value (2.cspb.HeroEquipsRvalue:8"J
+value (2.cspb.HeroEquipsRvalue:8K
+HeroesRunesEntry
+key (Rkey!
+value (2.cspb.GridsRvalue:8"J
 BossRushBoughtNtf
 bought (Rbought
 
@@ -685,6 +800,98 @@ skill_cast (R	skillCast
 ChapterGoldChallengeFarmRsp(
 err_code (2
.cspb.ErrCodeRerrCode"
 costs (2.cspb.RewardRcosts&
+rewards (2.cspb.RewardRrewards"²
+ChapterRuneChallenge(
+max_challenge_id (RmaxChallengeId;
+turns (2%.cspb.ChapterRuneChallenge.TurnsEntryRturns
+heroes (RheroesK
+rank_reward (2*.cspb.ChapterRuneChallenge.RankRewardEntryR
+rankReward(
+buy_silver_count (RbuySilverCount
+total_count (R
+totalCountK
+stat_counts (2*.cspb.ChapterRuneChallenge.StatCountsEntryR
+statCounts8
+
+TurnsEntry
+key (Rkey
+value (Rvalue:8=
+RankRewardEntry
+key (Rkey
+value (Rvalue:8=
+StatCountsEntry
+key (Rkey
+value (Rvalue:8"7
+ChapterRuneChallengeHeroesReq
+heroes (Rheroes"I
+ChapterRuneChallengeHeroesRsp(
+err_code (2
.cspb.ErrCodeRerrCode"F
+ChapterRuneChallengeStartReq
+id (Rid
+heroes (Rheroes"l
+ChapterRuneChallengeStartRsp(
+err_code (2
.cspb.ErrCodeRerrCode"
+costs (2.cspb.RewardRcosts"b
+!ChapterRuneChallengeSettlementReq
+win (Rwin+
+	task_stat (2.cspb.TaskStatRtaskStat"Œ
+!ChapterRuneChallengeSettlementRsp(
+err_code (2
.cspb.ErrCodeRerrCode&
+rewards (2.cspb.RewardRrewards
+max_id (RmaxId"I
+ChapterRuneChallengeFarmReq*
+chapter_weapon_id (RchapterWeaponId"“
+ChapterRuneChallengeFarmRsp(
+err_code (2
.cspb.ErrCodeRerrCode"
+costs (2.cspb.RewardRcosts&
+rewards (2.cspb.RewardRrewards"­
+RunePlayerInfo
+name (	Rname
+level (Rlevel
+avatar (Ravatar!
+avatar_frame (RavatarFrame
+	max_layer (RmaxLayer
+min_turn (RminTurn",
+ChapterRuneRankReq
+season (Rseason"ƒ
+ChapterRuneRankRsp(
+err_code (2
.cspb.ErrCodeRerrCode(
+rank (2.cspb.RunePlayerInfoRrank
+own_rank (RownRank"*
+ChapterRunePlayerInfoReq
+id (	Rid"Ô
+ChapterRunePlayerInfoRsp(
+err_code (2
.cspb.ErrCodeRerrCode-
+array_heroes (2
+.cspb.HeroRarrayHeroesU
+
heroes_equips (20.cspb.ChapterRunePlayerInfoRsp.HeroesEquipsEntryRheroesEquips
+skins (RskinsR
+heroes_runes (2/.cspb.ChapterRunePlayerInfoRsp.HeroesRunesEntryRheroesRunesQ
+HeroesEquipsEntry
+key (Rkey&
+value (2.cspb.HeroEquipsRvalue:8K
+HeroesRunesEntry
+key (Rkey!
+value (2.cspb.GridsRvalue:8""
+ChapterRuneAdReq
+id (	Rid"<
+ChapterRuneAdRsp(
+err_code (2
.cspb.ErrCodeRerrCode"$
+ChapterRuneFarmReq
+id (Rid"Š
+ChapterRuneFarmRsp(
+err_code (2
.cspb.ErrCodeRerrCode"
+costs (2.cspb.RewardRcosts&
+rewards (2.cspb.RewardRrewards"
+ChapterRuneRankRewardReq"l
+ChapterRuneRankRewardRsp(
+err_code (2
.cspb.ErrCodeRerrCode&
+rewards (2.cspb.RewardRrewards"6
+ChapterRuneBuySliverReq
+	buy_count (RbuyCount"�
+ChapterRuneBuySliverRsp(
+err_code (2
.cspb.ErrCodeRerrCode"
+costs (2.cspb.RewardRcosts&
 rewards (2.cspb.RewardRrewards"ì
 ChapterShardsChallenge2
 today_challenge_count (RtodayChallengeCount2
@@ -752,7 +959,7 @@ trigger_at (R	triggerAt
 err_code (2
.cspb.ErrCodeRerrCode"
 costs (2.cspb.RewardRcosts&
 rewards (2.cspb.RewardRrewards8
-	gift_info (2.cspb.ChapterWeaponGiftInfoRgiftInfo"Ø
+	gift_info (2.cspb.ChapterWeaponGiftInfoRgiftInfo"ñ
 LatestPlayerInfo
 ID (	RID
 name (	Rname
@@ -761,10 +968,14 @@ trigger_at (R	triggerAt
 avatar_frame (RavatarFrame-
 array_heroes (2
 .cspb.HeroRarrayHeroesM
-
heroes_equips (2(.cspb.LatestPlayerInfo.HeroesEquipsEntryRheroesEquipsQ
+
heroes_equips (2(.cspb.LatestPlayerInfo.HeroesEquipsEntryRheroesEquipsJ
+heroes_runes (2'.cspb.LatestPlayerInfo.HeroesRunesEntryRheroesRunesQ
 HeroesEquipsEntry
 key (Rkey&
-value (2.cspb.HeroEquipsRvalue:8"N
+value (2.cspb.HeroEquipsRvalue:8K
+HeroesRunesEntry
+key (Rkey!
+value (2.cspb.GridsRvalue:8"N
  ChapterWeaponLatestPlayerInfoReq*
 chapter_weapon_id (RchapterWeaponId"~
  ChapterWeaponLatestPlayerInfoRsp(
@@ -1136,7 +1347,7 @@ facebookId
 client_info (2.cspb.ClientInfoR
 clientInfo
 
-skip_guide (R	skipGuide"€
+skip_guide (R	skipGuide"ò
 LoginRsp(
 err_code (2
.cspb.ErrCodeRerrCode*
 today_first_login (RtodayFirstLogin
@@ -1186,10 +1397,13 @@ collection!
 game_version% (	RgameVersion+
 	hero_fund& (2.cspb.HeroFundRheroFundK
 act_weapon_armor_gift' (2.cspb.ActWeaponArmorGiftRactWeaponArmorGift=
-fourteen_bounty( (2.cspb.FourteenBountyRfourteenBounty.
+fourteen_bounty( (2.cspb.FourteenBountyRfourteenBounty
+rune) (2
+.cspb.RuneRrune.
 
-activities) (2.cspb.ActivityR
-activities"U
+activities* (2.cspb.ActivityR
+activitiesP
+chapter_rune_challenge+ (2.cspb.ChapterRuneChallengeRchapterRuneChallenge"U
 PipedReq
 id (
Rid
 ts (Rts
@@ -1233,7 +1447,45 @@ LevelUpRsp(
 id (Rid
 type (Rtype
 start_at (RstartAt
-end_at (RendAt"^
+end_at (RendAt"\
+Grid
+quality (Rquality
+suit (Rsuit
+attr (Rattr
+lock (Rlock")
+Grids 
+grids (2
+.cspb.GridRgrids"»
+Rune
+level (Rlevel
+exp (Rexp>
+heroes_grids (2.cspb.Rune.HeroesGridsEntryRheroesGridsK
+HeroesGridsEntry
+key (Rkey!
+value (2.cspb.GridsRvalue:8"U
+RuneLockReq
+hero_id (RheroId
+grid_num (RgridNum
+lock (Rlock"9
+RuneLockRsp*
+
+hero_girds (2.cspb.GridsR	heroGirds"J
+RuneQuenchingReq
+hero_id (RheroId
+
+auto_count (R	autoCount"Ó
+RuneQuenchingRsp(
+err_code (2
.cspb.ErrCodeRerrCode
+level (Rlevel
+exp (Rexp*
+
+hero_girds (2.cspb.GridsR	heroGirds"
+costs (2.cspb.RewardRcosts
+
+auto_count (R	autoCount"/
+
RuneUpdateNtf
+rune (2
+.cspb.RuneRrune"^
 Grade
 normal (Rnormal
 superior (Rsuperior!
@@ -1392,7 +1644,7 @@ skill_cast (R	skillCast
  (R
killsBossTurn
 spare_hp (RspareHp
 
-total_turn (R	totalTurn*Ü
+total_turn (R	totalTurn*ÿ
 ErrCode
 SUCCESS
 
@@ -1517,7 +1769,8 @@ total_turn (R	totalTurn*
 ARENA_STAGE_GIFT_LIMIT™ 
 SUMMER_TASK_UNMET_CONDITIONº
 SUMMER_TASK_HAS_CLAIMED»
-BOSS_RUSH_FIGHT_NOT_TODAYì*L
+BOSS_RUSH_FIGHT_NOT_TODAYì!
+ACTIVITY_PVP_HEROES_WAS_FULLÐ*L
 
KickOutReason
 MAINTAIN
 	FLOW_CTRL
