From a322b609f7064dca58934c7a7dba15e33cdf1e95 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 17 Feb 2025 16:19:39 +0800 Subject: [PATCH] =?UTF-8?q?[6.10.0]=E6=95=B0=E6=8D=AE=E4=B8=8A=E8=BD=A6-?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=9B=92=E5=AD=90=E8=BD=A6=E9=BE=99=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=A2=9E=E5=8A=A0=E8=BD=A6=E9=81=93=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/msgbox/BusPassengerMsgBoxBubbleView.kt | 3 +- .../function/hmi/ui/msgbox/MBoxBubbleView.kt | 3 +- .../hmi/ui/msgbox/MMsgBoxBubbleView.kt | 3 +- .../ui/msgbox/PassengerMsgBoxBubbleView.kt | 3 +- .../BusPassengerMsgBoxBubbleAdapter.kt | 48 ++++- .../ui/msgbox/adapter/MBoxBubbleAdapter.kt | 31 +++ .../ui/msgbox/adapter/MMsgBoxBubbleAdapter.kt | 33 +++- .../ui/msgbox/adapter/MsgBoxToastAdapter.kt | 12 ++ .../hmi/ui/msgbox/adapter/NDERoadAdapter.kt | 183 ++++++++++++++++++ .../adapter/PassengerMsgBoxBubbleAdapter.kt | 31 +++ .../msgbox/adapter/PassengerNDERoadAdapter.kt | 168 ++++++++++++++++ .../res/drawable-xhdpi/icon_road_forward.png | Bin 0 -> 2257 bytes .../res/drawable/bg_msg_box_toast_nde.png | Bin 0 -> 13901 bytes .../res/drawable/bg_nde_road_recommend.xml | 10 + .../res/drawable/bg_road_recommend_one.png | Bin 0 -> 12507 bytes .../res/drawable/bg_road_recommend_three.png | Bin 0 -> 12507 bytes .../res/drawable/bg_road_recommend_two.png | Bin 0 -> 11740 bytes .../res/drawable/rv_divider_line_road.xml | 8 + .../main/res/layout/item_msg_toast_nde.xml | 17 +- .../src/main/res/layout/item_nde_road.xml | 43 ++++ .../main/res/layout/item_passenger_nde.xml | 54 ++++++ .../res/layout/item_passenger_nde_road.xml | 43 ++++ .../src/main/res/values/color.xml | 5 + .../src/main/res/values/strings.xml | 3 + 24 files changed, 688 insertions(+), 13 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/NDERoadAdapter.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerNDERoadAdapter.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_road_forward.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_msg_box_toast_nde.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_nde_road_recommend.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_road_recommend_one.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_road_recommend_three.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_road_recommend_two.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/rv_divider_line_road.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_nde_road.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_nde.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_nde_road.xml diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/BusPassengerMsgBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/BusPassengerMsgBoxBubbleView.kt index ed9c9303bc..cee53028c3 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/BusPassengerMsgBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/BusPassengerMsgBoxBubbleView.kt @@ -55,7 +55,8 @@ class BusPassengerMsgBoxBubbleView @JvmOverloads constructor( UiThreadHandler.post({ if(category == MsgCategory.NOTICE){ if(msgBoxList.type == MsgBoxType.NOTICE - || msgBoxList.type == MsgBoxType.OBU || msgBoxList.type == MsgBoxType.OPERATION){ + || msgBoxList.type == MsgBoxType.OBU || msgBoxList.type == MsgBoxType.OPERATION + || msgBoxList.type == MsgBoxType.NDE){ MsgBoxConfig.noticeList.add(msgBoxList) if(isShowData){ CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/MBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/MBoxBubbleView.kt index f581c4f496..5fb6671983 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/MBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/MBoxBubbleView.kt @@ -58,7 +58,8 @@ class MBoxBubbleView @JvmOverloads constructor( UiThreadHandler.post({ if(category == MsgCategory.NOTICE){ if(msgBoxList.type == MsgBoxType.NOTICE - || msgBoxList.type == MsgBoxType.OBU || msgBoxList.type == MsgBoxType.OPERATION){ + || msgBoxList.type == MsgBoxType.OBU || msgBoxList.type == MsgBoxType.OPERATION + || msgBoxList.type == MsgBoxType.NDE){ MsgBoxConfig.noticeList.add(msgBoxList) if(isShowData){ CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/MMsgBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/MMsgBoxBubbleView.kt index 6fc7280b14..86e2990083 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/MMsgBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/MMsgBoxBubbleView.kt @@ -55,7 +55,8 @@ class MMsgBoxBubbleView @JvmOverloads constructor( UiThreadHandler.post({ if(category == MsgCategory.NOTICE){ if(msgBoxList.type == MsgBoxType.NOTICE - || msgBoxList.type == MsgBoxType.OBU || msgBoxList.type == MsgBoxType.OPERATION){ + || msgBoxList.type == MsgBoxType.OBU || msgBoxList.type == MsgBoxType.OPERATION + || msgBoxList.type == MsgBoxType.NDE){ update(msgBoxList) } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt index 809a47c7aa..02f3b39bca 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt @@ -70,7 +70,8 @@ class PassengerMsgBoxBubbleView @JvmOverloads constructor( override fun onDataChanged(category: MsgCategory, msgBoxList: MsgBoxBean) { UiThreadHandler.post({ if(category == MsgCategory.NOTICE){ - if(msgBoxList.type == MsgBoxType.NOTICE || msgBoxList.type == MsgBoxType.OBU){ + if(msgBoxList.type == MsgBoxType.NOTICE || msgBoxList.type == MsgBoxType.OBU + || msgBoxList.type == MsgBoxType.NDE){ if(isCacheMsg){ //将消息缓存到未播放列表等待小智语音播放完成后取出播放 MsgBoxConfig.unPlayList.add(msgBoxList) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/BusPassengerMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/BusPassengerMsgBoxBubbleAdapter.kt index d39ac2adae..8f643dca85 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/BusPassengerMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/BusPassengerMsgBoxBubbleAdapter.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.core.content.res.ResourcesCompat +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.data.enums.EventTypeEnumNew import com.mogo.eagle.core.data.msgbox.* @@ -23,6 +24,7 @@ class BusPassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerV private val notice: Int = 1 private val v2x: Int = 2 private val operation: Int = 3 + private val nde: Int = 4 fun setData(data: ArrayList){ this.data = data @@ -42,6 +44,10 @@ class BusPassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerV val view = LayoutInflater.from(parent.context).inflate(R.layout.item_bus_box_operation,parent,false) BusBubbleOperationHolder(view) } + nde->{ + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_nde,parent,false) + BusBubbleNdeHolder(view) + } else ->{ val view = LayoutInflater.from(parent.context).inflate(R.layout.item_bus_box_v2x,parent,false) BusBubbleV2XHolder(view) @@ -84,6 +90,21 @@ class BusPassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerV holder.tvBusPV2XTitle.text = EventTypeEnumNew.getEventTitle(v2XMsg.type) } } + is BusBubbleNdeHolder ->{ + data?.let { + val ndeMsg = it[position].msgBoxBean.bean as NDEMsg + holder.tvNdeTitle.text = ndeMsg.title + holder.tvNdeContent.text = ndeMsg.des + val linearLayoutManager = LinearLayoutManager(activity) + linearLayoutManager.orientation = LinearLayoutManager.HORIZONTAL + val ndeRoadAdapter = PassengerNDERoadAdapter(activity) + holder.rvNdeList.adapter = ndeRoadAdapter + holder.rvNdeList.layoutManager = linearLayoutManager + ndeMsg.getRoadList()?.let {roadList-> + ndeRoadAdapter.setData(roadList) + } + } + } } val msgBoxBean: MsgBoxCountDownBean = data!![position] @@ -107,12 +128,19 @@ class BusPassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerV override fun getItemCount() = data?.size ?: 0 override fun getItemViewType(position: Int): Int{ - return if(data!![position].msgBoxBean.type == MsgBoxType.NOTICE){ - notice - }else if(data!![position].msgBoxBean.type == MsgBoxType.OPERATION){ - operation - } else{ - v2x + return when (data!![position].msgBoxBean.type) { + MsgBoxType.NOTICE -> { + notice + } + MsgBoxType.OPERATION -> { + operation + } + MsgBoxType.NDE -> { + nde + } + else -> { + v2x + } } } @@ -136,4 +164,12 @@ class BusPassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerV var tvBusPOperationContent: TextView = itemView.findViewById(R.id.tvBusPOperationContent) } + //NDE + class BusBubbleNdeHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var ivNdeImage: ImageView = itemView.findViewById(R.id.ivNdeImage) + var tvNdeTitle: TextView = itemView.findViewById(R.id.tvNdeTitle) + var tvNdeContent: TextView = itemView.findViewById(R.id.tvNdeContent) + var rvNdeList: RecyclerView = itemView.findViewById(R.id.rvNdeList) + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/MBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/MBoxBubbleAdapter.kt index 57f1c7afe1..8c66767006 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/MBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/MBoxBubbleAdapter.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.core.content.res.ResourcesCompat +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.data.enums.EventTypeEnumNew import com.mogo.eagle.core.data.msgbox.* @@ -23,6 +24,7 @@ class MBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter){ @@ -43,6 +45,10 @@ class MBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter{ + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_nde,parent,false) + BubbleNdeHolder(view) + } else -> { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_m_box_v2x,parent,false) BubbleV2XHolder(view) @@ -85,6 +91,21 @@ class MBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter{ + data?.let { + val ndeMsg = it[position].msgBoxBean.bean as NDEMsg + holder.tvNdeTitle.text = ndeMsg.title + holder.tvNdeContent.text = ndeMsg.des + val linearLayoutManager = LinearLayoutManager(activity) + linearLayoutManager.orientation = LinearLayoutManager.HORIZONTAL + val ndeRoadAdapter = PassengerNDERoadAdapter(activity) + holder.rvNdeList.adapter = ndeRoadAdapter + holder.rvNdeList.layoutManager = linearLayoutManager + ndeMsg.getRoadList()?.let {roadList-> + ndeRoadAdapter.setData(roadList) + } + } + } } val msgBoxBean: MsgBoxCountDownBean = data!![position] @@ -114,6 +135,9 @@ class MBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter { operation } + MsgBoxType.NDE -> { + nde + } else -> { v2x } @@ -142,5 +166,12 @@ class MBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter){ @@ -55,6 +57,10 @@ class MMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter val view = LayoutInflater.from(parent.context).inflate(R.layout.item_m_msg_box_operation,parent,false) BubbleOperationHolder(view) } + nde -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_nde,parent,false) + BubbleNdeHolder(view) + } else -> { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_m_msg_box_v2x,parent,false) BubbleV2XHolder(view) @@ -137,6 +143,21 @@ class MMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter holder.tvMOperationContent.text = operationMsg.content } } + is BubbleNdeHolder ->{ + data?.let { + val ndeMsg = it[position].msgBoxBean.bean as NDEMsg + holder.tvNdeTitle.text = ndeMsg.title + holder.tvNdeContent.text = ndeMsg.des + val linearLayoutManager = LinearLayoutManager(activity) + linearLayoutManager.orientation = LinearLayoutManager.HORIZONTAL + val ndeRoadAdapter = PassengerNDERoadAdapter(activity) + holder.rvNdeList.adapter = ndeRoadAdapter + holder.rvNdeList.layoutManager = linearLayoutManager + ndeMsg.getRoadList()?.let {roadList-> + ndeRoadAdapter.setData(roadList) + } + } + } } val msgBoxBean: MsgBoxCountDownBean = data!![position] @@ -165,7 +186,9 @@ class MMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter summary }else if(data!![position].msgBoxBean.type == MsgBoxType.OPERATION){ operation - } else{ + }else if(data!![position].msgBoxBean.type == MsgBoxType.NDE){ + nde + }else{ v2x } } @@ -201,4 +224,12 @@ class MMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter var tvMOperationContent: TextView = itemView.findViewById(R.id.tvMOperationContent) } + //NDE + class BubbleNdeHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var ivNdeImage: ImageView = itemView.findViewById(R.id.ivNdeImage) + var tvNdeTitle: TextView = itemView.findViewById(R.id.tvNdeTitle) + var tvNdeContent: TextView = itemView.findViewById(R.id.tvNdeContent) + var rvNdeList: RecyclerView = itemView.findViewById(R.id.rvNdeList) + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/MsgBoxToastAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/MsgBoxToastAdapter.kt index 3a11acdf89..f56e3a49af 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/MsgBoxToastAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/MsgBoxToastAdapter.kt @@ -10,6 +10,8 @@ import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.data.deva.report.ReportEntity import com.mogo.eagle.core.data.enums.DataSourceType @@ -150,6 +152,15 @@ class MsgBoxToastAdapter(private val activity: Activity) : RecyclerView.Adapter< val ndeMsg = it[position].msgBoxBean.bean as NDEMsg holder.tvNdeTitle.text = ndeMsg.title holder.tvNdeContent.text = ndeMsg.des + val linearLayoutManager = LinearLayoutManager(activity) + linearLayoutManager.orientation = LinearLayoutManager.HORIZONTAL + val ndeRoadAdapter = NDERoadAdapter(activity) + holder.rvRoadList.adapter = ndeRoadAdapter + holder.rvRoadList.layoutManager = linearLayoutManager +// holder.rvRoadList.addItemDecoration(divider) + ndeMsg.getRoadList()?.let {roadList-> + ndeRoadAdapter.setData(roadList) + } } } //OTA升级消息 @@ -387,6 +398,7 @@ class MsgBoxToastAdapter(private val activity: Activity) : RecyclerView.Adapter< class BubbleNDEHolder(itemView: View): RecyclerView.ViewHolder(itemView){ var tvNdeTitle: TextView = itemView.findViewById(R.id.tvNdeTitle) var tvNdeContent: TextView = itemView.findViewById(R.id.tvNdeContent) + var rvRoadList: RecyclerView = itemView.findViewById(R.id.rvRoadList) } //OTA升级消息 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/NDERoadAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/NDERoadAdapter.kt new file mode 100644 index 0000000000..5472c160da --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/NDERoadAdapter.kt @@ -0,0 +1,183 @@ +package com.mogo.eagle.core.function.hmi.ui.msgbox.adapter + +import android.content.Context +import android.util.TypedValue +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.data.msgbox.NDEMsg +import com.mogo.eagle.core.function.hmi.R + +/** + * NDE消息车龙车道列表适配器 + */ +class NDERoadAdapter(private val context: Context): RecyclerView.Adapter() { + + private var roadList: List ?= null + + fun setData(list: List){ + roadList = list + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RoadHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_nde_road, parent, false) + return RoadHolder(view) + } + + override fun onBindViewHolder(holder: RoadHolder, position: Int) { + roadList?.let { + val roadMsg = it[position] + if(it.size <= 3){ + //设置item宽度为最大宽度180dp + val params = ConstraintLayout.LayoutParams( + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 180f, + context.resources.displayMetrics).toInt(), + ConstraintLayout.LayoutParams.WRAP_CONTENT) + holder.clRoadLayout.layoutParams = params + }else if(it.size == 4){ + //设置item宽度为最大宽度180dp + val params = ConstraintLayout.LayoutParams( + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 152f, + context.resources.displayMetrics).toInt(), + ConstraintLayout.LayoutParams.WRAP_CONTENT) + holder.clRoadLayout.layoutParams = params + }else if(it.size == 5){ + val params = ConstraintLayout.LayoutParams( + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 120f, + context.resources.displayMetrics).toInt(), + ConstraintLayout.LayoutParams.WRAP_CONTENT) + holder.clRoadLayout.layoutParams = params + }else{ + val params = ConstraintLayout.LayoutParams( + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 90f, + context.resources.displayMetrics).toInt(), + ConstraintLayout.LayoutParams.WRAP_CONTENT) + holder.clRoadLayout.layoutParams = params + } + when(roadMsg.arrowType){ + //直行 + 201->{ + holder.ivRoadType.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_road_forward + )) + } + //直行或左转 + 202->{ + + } + //直行或右转 + 203->{ + + } + //直行或掉头 + 204->{ + + } + //左转 + 205->{ + + } + //左转或掉头 + 206->{ + + } + //左弯或向左合流 + 207->{ + + } + //右转 + 208->{ + + } + //右转或向右合流 + 209->{ + + } + //左右转弯 + 210->{ + + } + //掉头 + 211->{ + + } + //禁止左转 + 212->{ + + } + //禁止右转 + 213->{ + + } + //禁止掉头 + 214->{ + + } + //直行或左转或右转 + 215->{ + + } + //直行或掉头或左转 + 216->{ + + } + //右转或掉头 + 217->{ + + } + //禁止右转或向右合流 + 218->{ + + } + } + //是否是推荐车道 + if(roadMsg.isRecommend){ + holder.tvRoadStatus.text = context.getString(R.string.nde_road_recommend) + holder.tvRoadStatus.setTextColor(context.getColor(R.color.msg_nde_road_recommend)) + if(it.size<=3){ + holder.clRoadLayout.background = ContextCompat.getDrawable( + context, + R.drawable.bg_road_recommend_one + ) + }else if(it.size == 4){ + holder.clRoadLayout.background = ContextCompat.getDrawable( + context, + R.drawable.bg_road_recommend_two + ) + }else{ + holder.clRoadLayout.background = ContextCompat.getDrawable( + context, + R.drawable.bg_road_recommend_three + ) + } + } + //是否有车龙,代表拥堵、行驶缓慢 + if(roadMsg.isCheLong){ + holder.tvRoadStatus.text = context.getString(R.string.nde_road_slow) + holder.tvRoadStatus.setTextColor(context.getColor(R.color.msg_nde_road_slow)) + } + if(position == it.lastIndex){ + holder.viewDivider.visibility = View.INVISIBLE + } + } + } + + override fun getItemCount() = roadList?.size ?: 0 + + class RoadHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ + var clRoadLayout: ConstraintLayout = itemView.findViewById(R.id.clRoadLayout) + var ivRoadType: ImageView = itemView.findViewById(R.id.ivRoadType) + var tvRoadStatus: TextView = itemView.findViewById(R.id.tvRoadStatus) + var viewDivider: View = itemView.findViewById(R.id.viewDivider) + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt index 8207016a7e..6f1854dc0c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.core.content.res.ResourcesCompat +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.data.enums.DataSourceType import com.mogo.eagle.core.data.enums.EventTypeEnumNew @@ -35,6 +36,7 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView private val v2x: Int = 2 private val summary: Int = 3 private val voice: Int = 4 + private val nde: Int = 5 fun setData(data: ArrayList){ this.data = data @@ -70,6 +72,10 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_box_voice,parent,false) BubbleVoiceHolder(view) } + nde -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_nde,parent,false) + BubbleNdeHolder(view) + } else -> { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_box_v2x,parent,false) BubbleV2XHolder(view) @@ -149,6 +155,21 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView } } } + is BubbleNdeHolder ->{ + data?.let { + val ndeMsg = it[position].msgBoxBean.bean as NDEMsg + holder.tvNdeTitle.text = ndeMsg.title + holder.tvNdeContent.text = ndeMsg.des + val linearLayoutManager = LinearLayoutManager(activity) + linearLayoutManager.orientation = LinearLayoutManager.HORIZONTAL + val ndeRoadAdapter = PassengerNDERoadAdapter(activity) + holder.rvNdeList.adapter = ndeRoadAdapter + holder.rvNdeList.layoutManager = linearLayoutManager + ndeMsg.getRoadList()?.let {roadList-> + ndeRoadAdapter.setData(roadList) + } + } + } } val msgBoxBean: MsgBoxCountDownBean = data!![position] @@ -181,6 +202,8 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView summary }else if(data!![position].msgBoxBean.type == MsgBoxType.VOICE){ voice + }else if(data!![position].msgBoxBean.type == MsgBoxType.NDE){ + nde }else{ v2x } @@ -213,4 +236,12 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView var tvVoiceRes: AlignTwoTextView = itemView.findViewById(R.id.tvVoiceRes) } + //NDE + class BubbleNdeHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var ivNdeImage: ImageView = itemView.findViewById(R.id.ivNdeImage) + var tvNdeTitle: TextView = itemView.findViewById(R.id.tvNdeTitle) + var tvNdeContent: TextView = itemView.findViewById(R.id.tvNdeContent) + var rvNdeList: RecyclerView = itemView.findViewById(R.id.rvNdeList) + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerNDERoadAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerNDERoadAdapter.kt new file mode 100644 index 0000000000..50f81786c3 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerNDERoadAdapter.kt @@ -0,0 +1,168 @@ +package com.mogo.eagle.core.function.hmi.ui.msgbox.adapter + +import android.content.Context +import android.util.TypedValue +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.data.msgbox.NDEMsg +import com.mogo.eagle.core.function.hmi.R + +class PassengerNDERoadAdapter(private val context: Context): RecyclerView.Adapter() { + + private var roadList: List ?= null + + fun setData(list: List){ + roadList = list + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PassengerRoadHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_passenger_nde_road, parent, false) + return PassengerRoadHolder(view) + } + + override fun onBindViewHolder(holder: PassengerRoadHolder, position: Int) { + roadList?.let{ + val roadMsg = it[position] + if(it.size < 3){ + //设置item宽度为最大宽度180dp + val params = ConstraintLayout.LayoutParams( + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 180f, + context.resources.displayMetrics).toInt(), + ConstraintLayout.LayoutParams.WRAP_CONTENT) + holder.clRoadLayout.layoutParams = params + }else if(it.size == 3){ + //设置item宽度为最大宽度180dp + val params = ConstraintLayout.LayoutParams( + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 120f, + context.resources.displayMetrics).toInt(), + ConstraintLayout.LayoutParams.WRAP_CONTENT) + holder.clRoadLayout.layoutParams = params + }else if(it.size == 4){ + //设置item宽度为最大宽度180dp + val params = ConstraintLayout.LayoutParams( + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100f, + context.resources.displayMetrics).toInt(), + ConstraintLayout.LayoutParams.WRAP_CONTENT) + holder.clRoadLayout.layoutParams = params + }else{ + val params = ConstraintLayout.LayoutParams( + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 90f, + context.resources.displayMetrics).toInt(), + ConstraintLayout.LayoutParams.WRAP_CONTENT) + holder.clRoadLayout.layoutParams = params + } + when(roadMsg.arrowType){ + //直行 + 201->{ + holder.ivRoadType.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_road_forward + )) + } + //直行或左转 + 202->{ + + } + //直行或右转 + 203->{ + + } + //直行或掉头 + 204->{ + + } + //左转 + 205->{ + + } + //左转或掉头 + 206->{ + + } + //左弯或向左合流 + 207->{ + + } + //右转 + 208->{ + + } + //右转或向右合流 + 209->{ + + } + //左右转弯 + 210->{ + + } + //掉头 + 211->{ + + } + //禁止左转 + 212->{ + + } + //禁止右转 + 213->{ + + } + //禁止掉头 + 214->{ + + } + //直行或左转或右转 + 215->{ + + } + //直行或掉头或左转 + 216->{ + + } + //右转或掉头 + 217->{ + + } + //禁止右转或向右合流 + 218->{ + + } + } + //是否是推荐车道 + if(roadMsg.isRecommend){ + holder.tvRoadStatus.text = context.getString(R.string.nde_road_recommend) + holder.tvRoadStatus.setTextColor(context.getColor(R.color.msg_nde_road_recommend)) + holder.clRoadLayout.background = ContextCompat.getDrawable( + context, + R.drawable.bg_nde_road_recommend + ) + } + //是否有车龙,代表拥堵、行驶缓慢 + if(roadMsg.isCheLong){ + holder.tvRoadStatus.text = context.getString(R.string.nde_road_slow) + holder.tvRoadStatus.setTextColor(context.getColor(R.color.msg_nde_road_slow)) + } + if(position == it.lastIndex){ + holder.viewDivider.visibility = View.INVISIBLE + } + } + } + + override fun getItemCount() = roadList?.size ?: 0 + + class PassengerRoadHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ + var clRoadLayout: ConstraintLayout = itemView.findViewById(R.id.clRoadLayout) + var ivRoadType: ImageView = itemView.findViewById(R.id.ivRoadType) + var tvRoadStatus: TextView = itemView.findViewById(R.id.tvRoadStatus) + var viewDivider: View = itemView.findViewById(R.id.viewDivider) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_road_forward.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_road_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..968513dc7f41377ef973b72316bab6c21c497b9d GIT binary patch literal 2257 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 + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_road_recommend_one.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_road_recommend_one.png new file mode 100644 index 0000000000000000000000000000000000000000..21dd9b8d2c3c0c240fe69c45e5eebc1a3607dd70 GIT binary patch literal 12507 zcmZv@c|27A`~P2g6)h4fy&@Bew2)+HrbKuZ6AFbSX|s$a`;4iOEru6SStb!#$G)2> z+axivGng1m#xlm3G5dT^@Avoix&3~>&+m`p%sJm)+wMP4e5MzV~%~EGJ_B`&C{g@)1vsEhZQj zRA0z)ah}{XSD@Rq4kvZy%1Vp-=|A81p}N}1>Z|7$xh*?r9QdBO;p!OPAG58wm_XMUm3<^zRI^w6zr z9DznQV$OGG*0lTuMyjD1gd}{+78^~=5s}Qpf}IXUP;PCGEn2gMt!G(>Z(S~n5xZ9H z_{HIi__!KvpeZ&=!XOs=+@^q?dA-lv=AUH9`2pJ?qv?gBx|1d6MuygZkfj*4Y0IRt z`(EYCyYw!ebf+yJ)NT1h9al7uG;MZr4SQM;_4EVSHhg)f#TkmB%|b37#JWs_-|b*x zFt*F14!ShQ+?x|JO92N9qbj~Y=bS7#5qKoqB0NlY{z z**1#nl+m0yjCaoukgnSvmo5-6hUN6Er{t%`ZTtH_#3rS!T!!h|W}*!4Uw;ti@1GyU zD7vV_wm!=7NP4yr%#6R(6klD8TJ>#Xuyye6*w8(4^&f`4CUOZg=Zs)(eSj5BD;g2`xBWPiAFjtS&F+B9=zRrUSJh`A3XpC ze+8#%N`@#R-%s^0F#6|g?i6)ttzAwy4HgWf?N&GlKZF0GHZ!hE6+k>y4=ek3{?Hv zKRjbk6;{u1C=K$4#Dgv{Jl5$mYm6}7|C}M#3a!aSqt}pA!F)(^%VDUU{J(Q*Jwyb& zpF~6$lMduA-&Rkvf)e_SgnsTM^G_&304KaWsToD!M6{sLcnCt!v_E_7D*NVTdGWRh zE0}Ur27@qRbzg5`N8NhWVXYG>{e}^pyk!TohARrvxk<+_NIHAy@EPnOao;ByKfFh@ zAB}y}xZ;Zl3=X*Mi_3+l#u<| zHG*g*Xa~V_33xo;`tXSIYnHxR(pY6iuiD)_$`&1*h9U7v2itaJdV$JxqfT{N`Z=iN z{+e65a%*>aKbX1qiPVGk&K~S5x3IZgCQ|%?cy*g^`b*WZM`y>@%Q2Y>L9Tf}!Ktwq zGN2wgc+u=A1T0`%GyO#T6(u<+!DX3JExdd>2mFB@z;?1j$f;keGW%{UWS2!2jfqzH zR*gp{F8|eb*R!nFA@}sNb8wpKJ<37ptxH(Lkm}OMK~1^K$4M<$9Ql~$KzKRh2G$7)NLYeaaZMX3$Ht;EbY*eo2n zfRpWY4{GWoqofX2Fu9uRn_^NBc8@K>ZF-b^oC@7m)qKtbvEit?iC#ZMtBhh*I>#Se z>fHW>f(jZz@C&pN-;37`^$h3L_L0cGoSOZMiWNo4l5hrFOLA2Q3jJ;>(s4yjMc#9a zZ7@A+pJn|Gn_b3uV{NHX8sR$;?YN3*HFa}yi^#!vx0foSFpfbI2otItmyKl^x=lob z(Udgwy0UPM)lu}8$k?|sw{PW5qxe_!Qs}yFw4v72zrT9WDFok7y=$r32jGJ@Ew>`C zth%(8f2GdZuU;XiqR&%cfljV;#Xx2RlGNWtJX)raI~6*w_Jc!IaBytJy9j1T4T1Ff zU8RY!tTFXRhSHTwD|6RY#GVA_Z4CJc7(#xpbsJ6;58vhKC|B;n!3Ug7XR?z7nM z?Cra>yTfPivuSLl4O3F~Xd-6p?Mv!LSYXjA=LiOy%=or{Z6Qj@xs z%^$Lo4mUZXryuY5mYj*MT*h=2m^Y^&hRnjEU)OUl)>kw%MjJ$OcDD$F%LZen`Av!o z(!q>{BcsHwGe79PPzj{5dRFMCyKaNtIgfrB{_vgc<0o9f6aF$H&!~j1?B~RnYjOc8@gxexRPCZL}l(gv09}f85({Xm45DB zw$x80)v6z4oNyV32X)tc>^oji4y7&E7!TGdz0%DIjkaf~+x#XYA}4R{4bq&G9-JxK zVuoqdBO<$tQNeTxAM}XkQ%4P>ho#!FhZdvye@~{QyKbMQfr5jG!_%FMQ z_-WVYXzs(B^XM?nXM!@W#vMmEi}<}-+!&Xxfb_c)xWQ>#9u7C8GuRk1w*fOe`^n?( zKkhYT&kMCnP2bMRyVSA`XN($wcQAa0ErNxJ;&(eXNM6An?ffGWXC-Ec%L)+ z`bfjfrUIrWM0AT8cre)`BWxG=)!+I&`$p+ske`E)AsLn=w7yD+P#~@h#qKdHm0HL) z%qSNyi~g$JS}hDgu3-XWB3yUL+&&_h z6iP@y&kv#lmzJKG2Z`YVz8|?4C*`t~37wb~g;x<0O7T20%yVA+!r4*7ADGGbuQ+YR z%@Wnm40gyp0bNmR%HAuMVSUUY6Q+>=_;P&8y^bu*^OY~EX9&O0EWfqXY`EBkyDso6 z7CqjRzc0c^6K&s;$DEewKggm}qac#t%aD}s^?yi1;==mcnZ~e)$(7ls-J#su$fZtj z3uP}U;uTCFc(kNGL*&d2$?o5X0JCn>>7!St@jQAc&seA*^wdHhSN->q{ zxP%dFlfaA3trr}cHKuc6B{&q$ceR-Oj*6V_US59p=Z6B5;(%@_o0g~^4dqB#-bbFk zkH%6vShPH)hr%%n^CQKoeND=(o7XRla)%Kg_21cdNm$)u_Cy;U{!q1tLU)U0!rE-h z21QXZ-xlalsQ}hmvbS5$+)$KYaVb86TcwT+9Er>N!QgNUlL-t?D1ipUFVgWM5>&A1 zEx(Lwbe+xRjyNu~L}|9{y|DE|yE009-B(12SP-rzBH!GEn#VcdDgxcTYPsgibqWr+ zQ>1#bcaj6{@!ei`X5xmcoeMnw^Gmj)bI88y$8+>gBz$sh_B*xsQ6Nk`%J>XBTLg^W zPZ3$Om`!kXK^o5`WpP(7`o;^yrZP;`>f)@G{O{6tp3TOg5j`Pr*|d5xn|kI;SB=^EGWnGos52GPv94u$9u> zsjdC&r3aTvr6#2h^S^0bb-^C^h{c9Z#395z=7;3a%l6)L^&a)j0Yq?;^V@5ORy5p7 zF{m%RBEwryT`X#dWgzTl-*W^7{-d_*n2YH(qt7kyuTX@lL<0zO*&B=VetmbrdJpXS zVBbIGMOkm|#gkOx6{~*P+c!R&;LweEgZNFbyV{kC9WdGf-{IK_9XUV~m*2TouBj2= zj)+e`<0NV$()U_xxeLp>WG}Q+U0>-pE_z;)Vg|J#2LixjnZD7h@9@Y}CKPrM8b;hUyTkwca!fcfK~wwd)dETG_RUGi(n@}tN`f{2 zm=Sq?Nb6(rgT0nU{1LgSLs{%wE%kl#^yfDfUXVugP)NN|9Df5{iu<}_129F%fah5e z%I1bu&;X%93uT4fkyqCI?Zv3tdFj;WoOk+drxvUVD)%R; zKO2C`pPX3M`f$!oxyy|sU{jqqYHMM9f1z#;6t@GhjFgX1_NIpatUBVZQeeLOlatBl zXtw9I&*O<3F_)v->f*nYpBYilEq#^LMJbiZ=UGR5X|Al=VanvcF!i_;6?ybZCH=ul z5c=SR%xQ-a>jeh0tE!)jt`=gnIPUgm;=D$RN@@GHDq4}M-9eJQ5;_{>?O2JRS89KE zK87)3iWHWv+1F-%b5PE(RMJDg{jKQQtjL?%ch_90>|aP~p*BD8?D;ol^;PI7n+Hbg z1#j=g_E)VGg|eQMIXIGx0mmV1sPY>h#!xMMSI>R-^x3PqRWw!mMApJ(H1`kZ#;7{&?Wo^;XqN?^)O*vri2j}lJPL&l(-q4! z!Ocemg>$2@wMR-iaL;$c2I7qSeJ@((*t8!=G0@r#2%v%Zw8l7x%<24v%4Ytv5tTcx ztP4pm9y2GwC{ezXXnm7>_S{4N=W0?#jksOAl>D{|7W>4e(sFYTn@tvj6n+toRYKY9 z48q{1zGHYOw)?q!C4(-XqTD9bI=WzE^cGcc?RWUaBtuhQ<&%z3e=(HQ6|561bTbxg zvLhRh<1HiQXwv>X|IMAcOp3qbud<|rh8NU0-6n_ha9qosIXsiqraPce$p`( zmX|El)U4Fo*Xqt8^atZxonkj6oSPy}EdY{y>qgnC48~6pQg{uSJNRP+umMzG!vhvg0@><&Gzs{HD^wP44b{tg`VzqId}XQJ+SL zWZotn7!EXq8UT~4bhV~=CEIMzPimg5n*5aLaxxbJ3gkQExqSUmSb?A}wtW z;tWa)(KHb*^!}`ZSw65=5DY(JRt0l*pNk!dUD>QMg?vxJHS|J1k6#)L+@Q}OOI*WZ z>^boG%p9b>a4PhouX{h5m9Okt3|%~Zjzg}(GCj##$7EQj|fYv2igierqM)Ip>{}F6F zDx!#^i#<#>ro}}Ef4jy#Q$G0!b+_XYh-Ol>$bf@q7?eo^Y&POFZflE4*;rV~g^cyn z7gp>!ZOBM|D3^|w)vJSEXrTPvcvt(2b=xVabxT?{W}5_vcGl)Q_a_QDYmS*^7 zN>xE0)SzOx{8wCKktYL)w*^ed7|lLVOWj@eikjVqBX2QT<*(z13x2HH0Z?e_g9vjajjJWZ~E`?uVfJ^a#AW~p;;+S-j@#==z$gtdWcw8NeKE+4{! z$r)xU;-a42Rt-Mc@T6CsUi5c#=-*LhnJsID1fM-HSmUPMmQFn*Y`GB7{p6kAzdwEo zlDpf@B?}ZV!JEgRkFC@s6$;C&6g;RkI!^y-JYpvl zATf%+P=SqhpeqKQZV&!ns$ljAK2KqK+7z%Z;F~bSqx_asNzNYSQ8q zjlF!HT34(ep^Zw>_vcy~behn#f_G`f5f5^#$!r^>)UJ^u@;!PdZ>>cu>1{R(3kYOPQR9qPc~e^_ zld__@_QKVx!)$V!1BSOAlhd&k%Fn>^3nXu9DtqHMl(rWndq(-I=DIp`9!uHf{|P=P zGwL!Qt$@zM?$FsbkzuoMHC=R`&S4+v2t2qT%?$?>IJ3=W8KlchoHNfeXC)SN9SZPA zZJqYcKBefXGN{5qEZO*U;CZxO88z(<~HoJR;Usd>69Y zR84&00QQCE{NvNML0@~a+d~1rzs!UfG&TsgiUozQf3y(`bkT1WpG9z%N4QuHU)J1snl~|%?$-3oXo2&##>d&HQ>uBVm zwm7ZR6hfVjgL?&-Kv|}NJpgF(06poNeJn4Ymb3mFn z7_(9J*k|qz9_CR@3|(q3h8u{oO&n2}X&!2JOW|ngf*t857QhF-UX{&MdYvcKXN zUC7XQ4JRaS2yqTuQYaKHHd=4Jn>y_uwr}5qfxXmD={Yw8aCFZC*~eot!RKyt<_|yy zZ;grA?65|GKKNSJ5z@8&%~&)%Bhu)-L{m_xQ>zJh|F?R;w#~4XS8uM+i8h$icLL!% zHxA9KnkJ_y`dx>|T`1ZQ@>Vxre~-s8mfaMmFy9w&;1+-}rl3lj&IlCuO-HG%>2wWP z8A=E2Wi<@^p?7<&RNZ2SIE9fHXkD6n3^yJuqI7JuHlVO zhcx*e^3@)Qry1jkNmHsRnyK`=#%}#?4PdhXx~?T6H*2++Z-9iM@ub#u1CmfV#Tg1g z8z9S>s>`SgZs}5yx9F#jVTQ}#u_qdqf*+rfI~}BmWSElwD#SHv-a%~^61>-Fb;85a z>NAi>DBHfKRgo^;yg+V^v#ek}%(@6sL>If#j3Xg#O`O{h^c}Ajp*g+G(veEeX|>}i z5mv)?`L#v<55U1#MU~Vj!hL9dU^x{YSBRCzapPcuN98U2n-@X9G<`;h0p3 z-zN<@^U(ayUq^nE{vLi+Fz-tZVD&EcE--=tgajHz1w#|G2JfZ~< zHK;1GeE9e2>A0Wh5&8!5!cXp?7MRCa39be_mTU%@(XVcEJ@MnCR8h1wI4_&Q7{ERi;T&0wP zP_cas-7bq-m(-j`J`QuwMBh}B$EzO!1gaN5`hckvp|E8vlxh<$Ji-;PWjyLSc5e7J z@K783(u=x!M+2#@ia%U<#$xZcPuYtkTyauMwCxMQw%OsRtlq$B4qPzSHq%={Gkh&_ z;8R>0AH)_N8o6w1r&is%v3Yp2;dkQJ&|o|w7*a64*lAT@@q-?;S_Sa&)1`j)SYLQV zWO`B3QSFFN1Tw{YezC@jfPsX`MKpk~iB=A0u_YrXf2Bp&ntmT*2a4N5VTXrQQP|&C zuBYhf+XGBNYP=&$lMkz8s+Q>^!~|&xmg>;FsI&Ly&yX&10+?LB=L;vk&z^684Gw94 zP(a_EGTk7Cw>RoM+_;9u6DHz#rhzXPbw_chat|+1L^o%x=dwz}^1n$&2n){w>BUa; zOMvvfWFi9(Vr(ZLWVTfWWI2SzfB_v1IN~k1<1~xO;~#ApAR<~pZUC>WXkJ}raQ@(8 z9^0P`b)=fpiz!+ECF8&T=GcZ8;3J%-CHC@Oogg}iz{x%=>v9-TNL26wZPnwo-{3Ia zKCCXTACG?U_MFk*kuo=P$h$4MH>=tg(6FgEYxSc?A`14(Yd%eogb4@MC|>td7Uqbo0BMlso_CtUTejGG(PsGEscy7hUuGhVsN*|pEW|QJN|AX__{#Mr zOeKk*R3A*?t=yUYsEs&V3)?(YmYuvkkXgCHdX;sj35`wPS=-$DU62lX95hk%5lB(S z{&7@4xeS(={PWCceoQ%H_IJgxtz7uyH;NN2e1jH(--Ix0gTq~<>v;)ZjN**dpYdiL zAARuA%tmN<=*H_G(R6*x`wU&kq7oGB&4TtIR)+a=(*F{u_MAd4j~nPSqPi)xXCzu! zf=i(b`H)DwL96Xqs9VkMo~rqkR8My66aIOI{xuCzA^xs(7T!ta>nPHvyH&7bi_&Ps6ZHy^K&6JQ{E=oTe08lUeuc@L zU+MEaKDr|CP)&MwZfTjCg$Gg2A+ZTe%A4@2t=+ntrSQv}11-MpdI`{7R)uQOgIRxd zRLw(SCuDS81oSzX>fCy85{kZTHq~B1GZsGV(>DS_I&*sFNB#!#RzspArv20BDN$`n z|J^rc87FeSvG5uUHUyZC0&Y;KO}X_CYvLfZvT5t5Mf6R*s@Xi*DA=Hv5 zL94&LoE{g^*bs^0J-NRELraT0$AKCtzKpKN%vq7_`}^^=>T*>%J@xNHMRG4^& z0c(My%6{UEriz8RN^-cFwNl0m*m;Je&6XhOk077&!z0~twpbGz!rZSGq20wod-50q zPrbYJ58`0O@PhCd5Q4U=v>7d>-W{Hx4AtZ?AUg=hI%SqLbH?RFGC6$CEoJj?u9buF zeebcfUeN9Lfk4s%_V!~21IVH?mvJGy{$)Sj3(bp5q%~ep%W$yo(A}riUY5EjT+mjAkTs&298G2+gPYfLY4fgN7#l5lp>75p@ zkBzTi9ou^y-qqVFxx#Qnum5f=S(`IAt3?c&lxXBN5Xht?rY1;8pdPMx#s^Iv3bAp^ zun-S9qf8u(_W%NByB9@fXHy04_G%A|@C3+_ggjhhoHsAL4R=3Q_lbt+rjb|m1(Zmv zOw^kRbIzL7utfKZCg%1k$O+IIr!&UY3?e}^L0~X?h!@cUgsifcC4Ap70w^XLRp!U{zD?@*T07G z`@F4lNZF9pGYanZdQT>aT=Pa%vS`+`qA%F?edA|N!OYA@uvs47Mu)P#Xw!wPH?HWsXn!?p!YgrvpA>OZ`PG|iLyTP{_;?^1Dp(>t6BAW zVZ%0v%@2d;I~iLL5DJ}I%5KUr{?z4cVnb zu?a28r>~AU#oqsYJV%1g`9r|T{9&)Yu!2TTV$R}q2&dB7P;2)vIe>#2AMRqTZ(i9o zizxdZShg*7@OC=bVW;>51?_J3)kkiQYaLQ`zZ3+YWO*@>wdSI$I0aD{-wAch8M%_n zD%6l#Bh!h2#;;mHB84qlL9-*)ESMV#!-%EL3EHOd5u%81yd8Bif0wS7pIa3aZT!hW zk5E>@kwbtl+A0?@8jIZ&4(bV_|ESnt|6RG$XOqVOPbep@GiFTKrpx^PqrIj;w%pg{ zP6@NBIolikhrZknId5a^;P`qqf6ct=iqL@P$>6|Cyd>VaX*p!#{(sLR%QTIPG&o13 z>}FFB2LY4P^O2jgVnJa_-&F#mNAG^n#y$?{xTq!_LS0b_?6(1BLF%&tD{`~j-2WY| zfUrtnKj7a(6d@Fi2CPAg!zcct-bf!PF)!k&Q@cn%-IB8}mTQVXgihyuWL{4~Q*ogeVnkKP@0bKQk-o_w)-kQ(0u`7njW{oj z8ObLp3O(VU#UC?Y5xRk@CT~!X=Jy<+&H?voS%i?T7$(3Dv0tjrt0xm=t5?l+@1xm3 z1p}k6N^0v@-Frm@&HQbwEH>svhrK|-c71}ka^$qyp27_&ZX53 z7kLyjd^^MCFw8ON%5RIDL^KtW?kF(8TCaZB1`^aDy%7?g7n}^UZvkkZfpAF(MJ333 zQ$>M{t`^w3_VcjfWcsuD15k_SKZ$a6x%tL?g(~P*dRXZD*)~s=aCv|b@^QGek-#`0Z=gZDd(`%qN=+alNr%U700PCDQLK^oM?S59aWI%67R!co zBTrOrS@G9Dox)n)mKE;o)AT=}M5FO7>(39c(?MSfdZOdU;MqG36ndZ(q6)1 zCD*B?yOk{%Gq3B!6}bO;dh6h|i*bmJ^{;6gJvFh1QdzN5@3>Z`j|mBT5bN>qIptkp ztV*Y;s9mpjEfunalq_k}j#CNl%T{DQu6A;Gv$4fEfxWXw*P zlvhqXRvA3{%%vkfeL<$^(A^VeaikL~j&9Gkfw&2`YU1S{UV$>DvKKq8TRRiuKKquI zLL09q+zqu|#(2Ctkn-lFv4ehG`k`b` z(@W(wsOt8r>k_}e$(Wo`F#Em-e?jTPpW25r&oulGs9#ek{qK$O9&ZlZSOx&-HU0Ac zZ-)b^C&T|A9b%vkzg^~z+hyoG?A~725B@HLKmDgqy{j31cV>^T z8PH*AsG-||lcfa`6Sam!hm2yS+Ilb|rvK#rj}K0M63;A#HkxJ``pZ}UQ(&rF-e3R5 z^QlC6In*sLFh1(kZL6iPo>bY2fkK<9S7kEADb}SmKA!K6ntCk{IsO^SKMr=`e($)^ zXKIUO$9m?p%6jMPn`_E4EK2|Vc6`aKzAXn~@9DXta03}NP6M8LFh2dic=j}@AQQmK^I5PITEx7V9d{#UN*(=dB!4na3GAP$EfIjgWUt&f zXBJnn{^!l(gyU}JoL-UZG)R_?g}R4J_8i~kU%L3dXKC)&s2^3aC3Nn^w=n){Vuo9aSF>eYHfz4I;|`E z{bIkqZwuCkA+^uz*;f7XGTFkv$y#8+<~#lYb;|SG*D&bWNI(q&atEMgTiF13+oHQG z92H9%90~}ufOO_ZW(`rRq2@q^hLR#s#-%P~ zfA_ZKC%duA+rK(dWtOTV=DVf9XTSX3P=QvenF7Z@I3X*zxVlKmed74bCQ11G@}Ja= z<@KVbl>eqfRT)apt7Mj@HI-hI?RSZHcrE6H0MVk4${$0R7^ z3)iWQ+^BL4Fgu{rB(4+Uo2YqnP(%`EtSDb# z6QFpU%x2rs99;g6>z_FF{Hcr>gfY4s{(P{Fb2$VO85B&u|3%7_v@z0AqkI@q?0k< z$W@oA>G;`fo2LiLlU0HHEeeE3ijEdv8dpnIG6{TjCFIvO zAW~Atb-r+BKL<=SEB>jHT>x`ogQsB6LA1gs8w4_JG&`^%iHY1imTS+*%edBM!$+6J5ie(45o_xO^B)J3oT0JUS? zMwGcmn)Y5cQA7PJ_LExNGNRXQ1B&=?8z`m(*Au87s~fU+_EQbQ(iP$ypws18tzhoB zSl{~&>P8j9fiO;N05v{S**#;t0XCF?UHiPuG7GQm&D6hYj6-d)-Z~oaR69p_&ck%r zx|*q?Kt7ptwbc> z+axivGng1m#xlm3G5dT^@Avoix&3~>&+m`p%sJm)+wMP4e5MzV~%~EGJ_B`&C{g@)1vsEhZQj zRA0z)ah}{XSD@Rq4kvZy%1Vp-=|A81p}N}1>Z|7$xh*?r9QdBO;p!OPAG58wm_XMUm3<^zRI^w6zr z9DznQV$OGG*0lTuMyjD1gd}{+78^~=5s}Qpf}IXUP;PCGEn2gMt!G(>Z(S~n5xZ9H z_{HIi__!KvpeZ&=!XOs=+@^q?dA-lv=AUH9`2pJ?qv?gBx|1d6MuygZkfj*4Y0IRt z`(EYCyYw!ebf+yJ)NT1h9al7uG;MZr4SQM;_4EVSHhg)f#TkmB%|b37#JWs_-|b*x zFt*F14!ShQ+?x|JO92N9qbj~Y=bS7#5qKoqB0NlY{z z**1#nl+m0yjCaoukgnSvmo5-6hUN6Er{t%`ZTtH_#3rS!T!!h|W}*!4Uw;ti@1GyU zD7vV_wm!=7NP4yr%#6R(6klD8TJ>#Xuyye6*w8(4^&f`4CUOZg=Zs)(eSj5BD;g2`xBWPiAFjtS&F+B9=zRrUSJh`A3XpC ze+8#%N`@#R-%s^0F#6|g?i6)ttzAwy4HgWf?N&GlKZF0GHZ!hE6+k>y4=ek3{?Hv zKRjbk6;{u1C=K$4#Dgv{Jl5$mYm6}7|C}M#3a!aSqt}pA!F)(^%VDUU{J(Q*Jwyb& zpF~6$lMduA-&Rkvf)e_SgnsTM^G_&304KaWsToD!M6{sLcnCt!v_E_7D*NVTdGWRh zE0}Ur27@qRbzg5`N8NhWVXYG>{e}^pyk!TohARrvxk<+_NIHAy@EPnOao;ByKfFh@ zAB}y}xZ;Zl3=X*Mi_3+l#u<| zHG*g*Xa~V_33xo;`tXSIYnHxR(pY6iuiD)_$`&1*h9U7v2itaJdV$JxqfT{N`Z=iN z{+e65a%*>aKbX1qiPVGk&K~S5x3IZgCQ|%?cy*g^`b*WZM`y>@%Q2Y>L9Tf}!Ktwq zGN2wgc+u=A1T0`%GyO#T6(u<+!DX3JExdd>2mFB@z;?1j$f;keGW%{UWS2!2jfqzH zR*gp{F8|eb*R!nFA@}sNb8wpKJ<37ptxH(Lkm}OMK~1^K$4M<$9Ql~$KzKRh2G$7)NLYeaaZMX3$Ht;EbY*eo2n zfRpWY4{GWoqofX2Fu9uRn_^NBc8@K>ZF-b^oC@7m)qKtbvEit?iC#ZMtBhh*I>#Se z>fHW>f(jZz@C&pN-;37`^$h3L_L0cGoSOZMiWNo4l5hrFOLA2Q3jJ;>(s4yjMc#9a zZ7@A+pJn|Gn_b3uV{NHX8sR$;?YN3*HFa}yi^#!vx0foSFpfbI2otItmyKl^x=lob z(Udgwy0UPM)lu}8$k?|sw{PW5qxe_!Qs}yFw4v72zrT9WDFok7y=$r32jGJ@Ew>`C zth%(8f2GdZuU;XiqR&%cfljV;#Xx2RlGNWtJX)raI~6*w_Jc!IaBytJy9j1T4T1Ff zU8RY!tTFXRhSHTwD|6RY#GVA_Z4CJc7(#xpbsJ6;58vhKC|B;n!3Ug7XR?z7nM z?Cra>yTfPivuSLl4O3F~Xd-6p?Mv!LSYXjA=LiOy%=or{Z6Qj@xs z%^$Lo4mUZXryuY5mYj*MT*h=2m^Y^&hRnjEU)OUl)>kw%MjJ$OcDD$F%LZen`Av!o z(!q>{BcsHwGe79PPzj{5dRFMCyKaNtIgfrB{_vgc<0o9f6aF$H&!~j1?B~RnYjOc8@gxexRPCZL}l(gv09}f85({Xm45DB zw$x80)v6z4oNyV32X)tc>^oji4y7&E7!TGdz0%DIjkaf~+x#XYA}4R{4bq&G9-JxK zVuoqdBO<$tQNeTxAM}XkQ%4P>ho#!FhZdvye@~{QyKbMQfr5jG!_%FMQ z_-WVYXzs(B^XM?nXM!@W#vMmEi}<}-+!&Xxfb_c)xWQ>#9u7C8GuRk1w*fOe`^n?( zKkhYT&kMCnP2bMRyVSA`XN($wcQAa0ErNxJ;&(eXNM6An?ffGWXC-Ec%L)+ z`bfjfrUIrWM0AT8cre)`BWxG=)!+I&`$p+ske`E)AsLn=w7yD+P#~@h#qKdHm0HL) z%qSNyi~g$JS}hDgu3-XWB3yUL+&&_h z6iP@y&kv#lmzJKG2Z`YVz8|?4C*`t~37wb~g;x<0O7T20%yVA+!r4*7ADGGbuQ+YR z%@Wnm40gyp0bNmR%HAuMVSUUY6Q+>=_;P&8y^bu*^OY~EX9&O0EWfqXY`EBkyDso6 z7CqjRzc0c^6K&s;$DEewKggm}qac#t%aD}s^?yi1;==mcnZ~e)$(7ls-J#su$fZtj z3uP}U;uTCFc(kNGL*&d2$?o5X0JCn>>7!St@jQAc&seA*^wdHhSN->q{ zxP%dFlfaA3trr}cHKuc6B{&q$ceR-Oj*6V_US59p=Z6B5;(%@_o0g~^4dqB#-bbFk zkH%6vShPH)hr%%n^CQKoeND=(o7XRla)%Kg_21cdNm$)u_Cy;U{!q1tLU)U0!rE-h z21QXZ-xlalsQ}hmvbS5$+)$KYaVb86TcwT+9Er>N!QgNUlL-t?D1ipUFVgWM5>&A1 zEx(Lwbe+xRjyNu~L}|9{y|DE|yE009-B(12SP-rzBH!GEn#VcdDgxcTYPsgibqWr+ zQ>1#bcaj6{@!ei`X5xmcoeMnw^Gmj)bI88y$8+>gBz$sh_B*xsQ6Nk`%J>XBTLg^W zPZ3$Om`!kXK^o5`WpP(7`o;^yrZP;`>f)@G{O{6tp3TOg5j`Pr*|d5xn|kI;SB=^EGWnGos52GPv94u$9u> zsjdC&r3aTvr6#2h^S^0bb-^C^h{c9Z#395z=7;3a%l6)L^&a)j0Yq?;^V@5ORy5p7 zF{m%RBEwryT`X#dWgzTl-*W^7{-d_*n2YH(qt7kyuTX@lL<0zO*&B=VetmbrdJpXS zVBbIGMOkm|#gkOx6{~*P+c!R&;LweEgZNFbyV{kC9WdGf-{IK_9XUV~m*2TouBj2= zj)+e`<0NV$()U_xxeLp>WG}Q+U0>-pE_z;)Vg|J#2LixjnZD7h@9@Y}CKPrM8b;hUyTkwca!fcfK~wwd)dETG_RUGi(n@}tN`f{2 zm=Sq?Nb6(rgT0nU{1LgSLs{%wE%kl#^yfDfUXVugP)NN|9Df5{iu<}_129F%fah5e z%I1bu&;X%93uT4fkyqCI?Zv3tdFj;WoOk+drxvUVD)%R; zKO2C`pPX3M`f$!oxyy|sU{jqqYHMM9f1z#;6t@GhjFgX1_NIpatUBVZQeeLOlatBl zXtw9I&*O<3F_)v->f*nYpBYilEq#^LMJbiZ=UGR5X|Al=VanvcF!i_;6?ybZCH=ul z5c=SR%xQ-a>jeh0tE!)jt`=gnIPUgm;=D$RN@@GHDq4}M-9eJQ5;_{>?O2JRS89KE zK87)3iWHWv+1F-%b5PE(RMJDg{jKQQtjL?%ch_90>|aP~p*BD8?D;ol^;PI7n+Hbg z1#j=g_E)VGg|eQMIXIGx0mmV1sPY>h#!xMMSI>R-^x3PqRWw!mMApJ(H1`kZ#;7{&?Wo^;XqN?^)O*vri2j}lJPL&l(-q4! z!Ocemg>$2@wMR-iaL;$c2I7qSeJ@((*t8!=G0@r#2%v%Zw8l7x%<24v%4Ytv5tTcx ztP4pm9y2GwC{ezXXnm7>_S{4N=W0?#jksOAl>D{|7W>4e(sFYTn@tvj6n+toRYKY9 z48q{1zGHYOw)?q!C4(-XqTD9bI=WzE^cGcc?RWUaBtuhQ<&%z3e=(HQ6|561bTbxg zvLhRh<1HiQXwv>X|IMAcOp3qbud<|rh8NU0-6n_ha9qosIXsiqraPce$p`( zmX|El)U4Fo*Xqt8^atZxonkj6oSPy}EdY{y>qgnC48~6pQg{uSJNRP+umMzG!vhvg0@><&Gzs{HD^wP44b{tg`VzqId}XQJ+SL zWZotn7!EXq8UT~4bhV~=CEIMzPimg5n*5aLaxxbJ3gkQExqSUmSb?A}wtW z;tWa)(KHb*^!}`ZSw65=5DY(JRt0l*pNk!dUD>QMg?vxJHS|J1k6#)L+@Q}OOI*WZ z>^boG%p9b>a4PhouX{h5m9Okt3|%~Zjzg}(GCj##$7EQj|fYv2igierqM)Ip>{}F6F zDx!#^i#<#>ro}}Ef4jy#Q$G0!b+_XYh-Ol>$bf@q7?eo^Y&POFZflE4*;rV~g^cyn z7gp>!ZOBM|D3^|w)vJSEXrTPvcvt(2b=xVabxT?{W}5_vcGl)Q_a_QDYmS*^7 zN>xE0)SzOx{8wCKktYL)w*^ed7|lLVOWj@eikjVqBX2QT<*(z13x2HH0Z?e_g9vjajjJWZ~E`?uVfJ^a#AW~p;;+S-j@#==z$gtdWcw8NeKE+4{! z$r)xU;-a42Rt-Mc@T6CsUi5c#=-*LhnJsID1fM-HSmUPMmQFn*Y`GB7{p6kAzdwEo zlDpf@B?}ZV!JEgRkFC@s6$;C&6g;RkI!^y-JYpvl zATf%+P=SqhpeqKQZV&!ns$ljAK2KqK+7z%Z;F~bSqx_asNzNYSQ8q zjlF!HT34(ep^Zw>_vcy~behn#f_G`f5f5^#$!r^>)UJ^u@;!PdZ>>cu>1{R(3kYOPQR9qPc~e^_ zld__@_QKVx!)$V!1BSOAlhd&k%Fn>^3nXu9DtqHMl(rWndq(-I=DIp`9!uHf{|P=P zGwL!Qt$@zM?$FsbkzuoMHC=R`&S4+v2t2qT%?$?>IJ3=W8KlchoHNfeXC)SN9SZPA zZJqYcKBefXGN{5qEZO*U;CZxO88z(<~HoJR;Usd>69Y zR84&00QQCE{NvNML0@~a+d~1rzs!UfG&TsgiUozQf3y(`bkT1WpG9z%N4QuHU)J1snl~|%?$-3oXo2&##>d&HQ>uBVm zwm7ZR6hfVjgL?&-Kv|}NJpgF(06poNeJn4Ymb3mFn z7_(9J*k|qz9_CR@3|(q3h8u{oO&n2}X&!2JOW|ngf*t857QhF-UX{&MdYvcKXN zUC7XQ4JRaS2yqTuQYaKHHd=4Jn>y_uwr}5qfxXmD={Yw8aCFZC*~eot!RKyt<_|yy zZ;grA?65|GKKNSJ5z@8&%~&)%Bhu)-L{m_xQ>zJh|F?R;w#~4XS8uM+i8h$icLL!% zHxA9KnkJ_y`dx>|T`1ZQ@>Vxre~-s8mfaMmFy9w&;1+-}rl3lj&IlCuO-HG%>2wWP z8A=E2Wi<@^p?7<&RNZ2SIE9fHXkD6n3^yJuqI7JuHlVO zhcx*e^3@)Qry1jkNmHsRnyK`=#%}#?4PdhXx~?T6H*2++Z-9iM@ub#u1CmfV#Tg1g z8z9S>s>`SgZs}5yx9F#jVTQ}#u_qdqf*+rfI~}BmWSElwD#SHv-a%~^61>-Fb;85a z>NAi>DBHfKRgo^;yg+V^v#ek}%(@6sL>If#j3Xg#O`O{h^c}Ajp*g+G(veEeX|>}i z5mv)?`L#v<55U1#MU~Vj!hL9dU^x{YSBRCzapPcuN98U2n-@X9G<`;h0p3 z-zN<@^U(ayUq^nE{vLi+Fz-tZVD&EcE--=tgajHz1w#|G2JfZ~< zHK;1GeE9e2>A0Wh5&8!5!cXp?7MRCa39be_mTU%@(XVcEJ@MnCR8h1wI4_&Q7{ERi;T&0wP zP_cas-7bq-m(-j`J`QuwMBh}B$EzO!1gaN5`hckvp|E8vlxh<$Ji-;PWjyLSc5e7J z@K783(u=x!M+2#@ia%U<#$xZcPuYtkTyauMwCxMQw%OsRtlq$B4qPzSHq%={Gkh&_ z;8R>0AH)_N8o6w1r&is%v3Yp2;dkQJ&|o|w7*a64*lAT@@q-?;S_Sa&)1`j)SYLQV zWO`B3QSFFN1Tw{YezC@jfPsX`MKpk~iB=A0u_YrXf2Bp&ntmT*2a4N5VTXrQQP|&C zuBYhf+XGBNYP=&$lMkz8s+Q>^!~|&xmg>;FsI&Ly&yX&10+?LB=L;vk&z^684Gw94 zP(a_EGTk7Cw>RoM+_;9u6DHz#rhzXPbw_chat|+1L^o%x=dwz}^1n$&2n){w>BUa; zOMvvfWFi9(Vr(ZLWVTfWWI2SzfB_v1IN~k1<1~xO;~#ApAR<~pZUC>WXkJ}raQ@(8 z9^0P`b)=fpiz!+ECF8&T=GcZ8;3J%-CHC@Oogg}iz{x%=>v9-TNL26wZPnwo-{3Ia zKCCXTACG?U_MFk*kuo=P$h$4MH>=tg(6FgEYxSc?A`14(Yd%eogb4@MC|>td7Uqbo0BMlso_CtUTejGG(PsGEscy7hUuGhVsN*|pEW|QJN|AX__{#Mr zOeKk*R3A*?t=yUYsEs&V3)?(YmYuvkkXgCHdX;sj35`wPS=-$DU62lX95hk%5lB(S z{&7@4xeS(={PWCceoQ%H_IJgxtz7uyH;NN2e1jH(--Ix0gTq~<>v;)ZjN**dpYdiL zAARuA%tmN<=*H_G(R6*x`wU&kq7oGB&4TtIR)+a=(*F{u_MAd4j~nPSqPi)xXCzu! zf=i(b`H)DwL96Xqs9VkMo~rqkR8My66aIOI{xuCzA^xs(7T!ta>nPHvyH&7bi_&Ps6ZHy^K&6JQ{E=oTe08lUeuc@L zU+MEaKDr|CP)&MwZfTjCg$Gg2A+ZTe%A4@2t=+ntrSQv}11-MpdI`{7R)uQOgIRxd zRLw(SCuDS81oSzX>fCy85{kZTHq~B1GZsGV(>DS_I&*sFNB#!#RzspArv20BDN$`n z|J^rc87FeSvG5uUHUyZC0&Y;KO}X_CYvLfZvT5t5Mf6R*s@Xi*DA=Hv5 zL94&LoE{g^*bs^0J-NRELraT0$AKCtzKpKN%vq7_`}^^=>T*>%J@xNHMRG4^& z0c(My%6{UEriz8RN^-cFwNl0m*m;Je&6XhOk077&!z0~twpbGz!rZSGq20wod-50q zPrbYJ58`0O@PhCd5Q4U=v>7d>-W{Hx4AtZ?AUg=hI%SqLbH?RFGC6$CEoJj?u9buF zeebcfUeN9Lfk4s%_V!~21IVH?mvJGy{$)Sj3(bp5q%~ep%W$yo(A}riUY5EjT+mjAkTs&298G2+gPYfLY4fgN7#l5lp>75p@ zkBzTi9ou^y-qqVFxx#Qnum5f=S(`IAt3?c&lxXBN5Xht?rY1;8pdPMx#s^Iv3bAp^ zun-S9qf8u(_W%NByB9@fXHy04_G%A|@C3+_ggjhhoHsAL4R=3Q_lbt+rjb|m1(Zmv zOw^kRbIzL7utfKZCg%1k$O+IIr!&UY3?e}^L0~X?h!@cUgsifcC4Ap70w^XLRp!U{zD?@*T07G z`@F4lNZF9pGYanZdQT>aT=Pa%vS`+`qA%F?edA|N!OYA@uvs47Mu)P#Xw!wPH?HWsXn!?p!YgrvpA>OZ`PG|iLyTP{_;?^1Dp(>t6BAW zVZ%0v%@2d;I~iLL5DJ}I%5KUr{?z4cVnb zu?a28r>~AU#oqsYJV%1g`9r|T{9&)Yu!2TTV$R}q2&dB7P;2)vIe>#2AMRqTZ(i9o zizxdZShg*7@OC=bVW;>51?_J3)kkiQYaLQ`zZ3+YWO*@>wdSI$I0aD{-wAch8M%_n zD%6l#Bh!h2#;;mHB84qlL9-*)ESMV#!-%EL3EHOd5u%81yd8Bif0wS7pIa3aZT!hW zk5E>@kwbtl+A0?@8jIZ&4(bV_|ESnt|6RG$XOqVOPbep@GiFTKrpx^PqrIj;w%pg{ zP6@NBIolikhrZknId5a^;P`qqf6ct=iqL@P$>6|Cyd>VaX*p!#{(sLR%QTIPG&o13 z>}FFB2LY4P^O2jgVnJa_-&F#mNAG^n#y$?{xTq!_LS0b_?6(1BLF%&tD{`~j-2WY| zfUrtnKj7a(6d@Fi2CPAg!zcct-bf!PF)!k&Q@cn%-IB8}mTQVXgihyuWL{4~Q*ogeVnkKP@0bKQk-o_w)-kQ(0u`7njW{oj z8ObLp3O(VU#UC?Y5xRk@CT~!X=Jy<+&H?voS%i?T7$(3Dv0tjrt0xm=t5?l+@1xm3 z1p}k6N^0v@-Frm@&HQbwEH>svhrK|-c71}ka^$qyp27_&ZX53 z7kLyjd^^MCFw8ON%5RIDL^KtW?kF(8TCaZB1`^aDy%7?g7n}^UZvkkZfpAF(MJ333 zQ$>M{t`^w3_VcjfWcsuD15k_SKZ$a6x%tL?g(~P*dRXZD*)~s=aCv|b@^QGek-#`0Z=gZDd(`%qN=+alNr%U700PCDQLK^oM?S59aWI%67R!co zBTrOrS@G9Dox)n)mKE;o)AT=}M5FO7>(39c(?MSfdZOdU;MqG36ndZ(q6)1 zCD*B?yOk{%Gq3B!6}bO;dh6h|i*bmJ^{;6gJvFh1QdzN5@3>Z`j|mBT5bN>qIptkp ztV*Y;s9mpjEfunalq_k}j#CNl%T{DQu6A;Gv$4fEfxWXw*P zlvhqXRvA3{%%vkfeL<$^(A^VeaikL~j&9Gkfw&2`YU1S{UV$>DvKKq8TRRiuKKquI zLL09q+zqu|#(2Ctkn-lFv4ehG`k`b` z(@W(wsOt8r>k_}e$(Wo`F#Em-e?jTPpW25r&oulGs9#ek{qK$O9&ZlZSOx&-HU0Ac zZ-)b^C&T|A9b%vkzg^~z+hyoG?A~725B@HLKmDgqy{j31cV>^T z8PH*AsG-||lcfa`6Sam!hm2yS+Ilb|rvK#rj}K0M63;A#HkxJ``pZ}UQ(&rF-e3R5 z^QlC6In*sLFh1(kZL6iPo>bY2fkK<9S7kEADb}SmKA!K6ntCk{IsO^SKMr=`e($)^ zXKIUO$9m?p%6jMPn`_E4EK2|Vc6`aKzAXn~@9DXta03}NP6M8LFh2dic=j}@AQQmK^I5PITEx7V9d{#UN*(=dB!4na3GAP$EfIjgWUt&f zXBJnn{^!l(gyU}JoL-UZG)R_?g}R4J_8i~kU%L3dXKC)&s2^3aC3Nn^w=n){Vuo9aSF>eYHfz4I;|`E z{bIkqZwuCkA+^uz*;f7XGTFkv$y#8+<~#lYb;|SG*D&bWNI(q&atEMgTiF13+oHQG z92H9%90~}ufOO_ZW(`rRq2@q^hLR#s#-%P~ zfA_ZKC%duA+rK(dWtOTV=DVf9XTSX3P=QvenF7Z@I3X*zxVlKmed74bCQ11G@}Ja= z<@KVbl>eqfRT)apt7Mj@HI-hI?RSZHcrE6H0MVk4${$0R7^ z3)iWQ+^BL4Fgu{rB(4+Uo2YqnP(%`EtSDb# z6QFpU%x2rs99;g6>z_FF{Hcr>gfY4s{(P{Fb2$VO85B&u|3%7_v@z0AqkI@q?0k< z$W@oA>G;`fo2LiLlU0HHEeeE3ijEdv8dpnIG6{TjCFIvO zAW~Atb-r+BKL<=SEB>jHT>x`ogQsB6LA1gs8w4_JG&`^%iHY1imTS+*%edBM!$+6J5ie(45o_xO^B)J3oT0JUS? zMwGcmn)Y5cQA7PJ_LExNGNRXQ1B&=?8z`m(*Au87s~fU+_EQbQ(iP$ypws18tzhoB zSl{~&>P8j9fiO;N05v{S**#;t0XCF?UHiPuG7GQm&D6hYj6-d)-Z~oaR69p_&ck%r zx|*q?Kt7ptwbc>H_&d0=jG{;crX6DLlb zH@$0Q#cDsXj&`ootn-`u@foa!E!fJ$@I*zw=sK%o^vu@O-OTL74c0Z+3AQA!6DR+^ z!a9Um$B7dhpV>}uuv)gi_dc`#-_uW@IsWgu{qKtz!mCavPRQReH8OY@&b9@?{WpE* zziSWvG(5OyYAK&SD%|g@x8`*)0s4$s!zhd3)H3?Wwz%!=E&4a82VIuJvHvZ??vq)C z{ELRM#pFyWyGM4$F2_dgY@(d{r{8`uekb=!E>O311{URTL0>B4>mHUFLPIDF2tw^o z)>q?Oo%FdvC9ZnFoJfIl)#swvBuC?#Ro;PYU@O>Mcw`VYIL!1jRfpOR(hv_Fp!&q5 z?TluKfcq8B$T61*9Zb9Tf+mkDU)UL|YFM{wWIn5``*!xJ{N49%NF{q`U?OC1O8ap0 z)UEnk5NB<^0{dSp?6Oxe0HOJ=2II`5AGHZJUn7O{B95H%!YUaZc0Qp`_5s2ZPv0gq z(DLK+8yiTKePu(A+{lJPAv{MB@xcYL0;Az3%d0~|Zvt@Qz>YkZgz9|=Z zcp-g#iP2F2p4u9dlDN#tNIpeAqX7s6IMlvlmx_&?3Rx>q4B5L-h`!>@>|KHhmw&`Q z?wx(6UwtUQ+ZuL5>E9UL=?T~4RpKfZ8t9F^?<>kBc#>;!4t*aI$d7;GTxeYXOG!`8 z?I&lm-KYW}s6DHT55IV4d&R=bd(cdP>YDc4N{4>8Wm4n89Hi> zIfLAPQj|8>3^F!bfN=oGONbO$c$-s?(QDmktX1XXZrNdxd9=it@P2*7M&Czq)?q?# z6g89N*lqz8q^ldKS0(Z}XkQk5MQ!ihS(KuRv^qU0D}O!HcExbh`b!|j;@f!pa({ox zH9mK|I%G}(shp?HN2X=m1eFVezez&0&(~bJXS8cl@tbnc{X!g?H3KgL%@UW3(WMOc zz(A_TyRc(^!7H<42NA=U6;Y0`65j4KP`y<~k>GO=Ur<;Av04Hain~)Vo?AtVU zLb>o5-I~>Nsok&c-{BGMAB}_jms6c9mYZh}uzNZ@WD}r$-S9YKeQ8;wt!5za@`psT zifS(oMf!i4`xVlVG*rSgB`EB9gumDTU6ZkxSUzd#j8GiWv&uR-ZS(b0+sg?L4xP^Y zRhbk4qft|zejT&KBE@T=d>Tp5EDpn+&%B&<^So6hV~-y|-R*gILUQ*UBn2uCTD{tj zRTu{l8Z}d+7rOe4jEb>vA7u7if>+>()J=4!&jq6qPW27_u7^6VhR>71V8C&rk`3?b ze_Y~7pQe>h+Q8)zN*21i^-1!O`05v;@HlPncNFqhplXa2A;p;Qq|g}!?`qk*mmMD& zAq!#0MiU%YlmiQp3m$pDoE13G>n#^ej6_4HZl|qacgvB2qM?rYL%>*0m5(r2IA*R4 z>TJ`qH!^3#OIB1Af2uOB#nAIyaCOw6b}>DVZ3#|OFp$`6zqMUz@ZMVt;( z=ZIQv6?dMmP7+keX@7pE#^b7y?yCZx&8Ymc`HYRi*;O1iGxbm{9PUsC@zgz#UO9sB zAXS}|ZO}9y9l;%+UG0b-fHC3BQOTX~17fi64@_iqvl$o( z5oeMKP~kk)bVP_;f}rDQN$Oht=T*um7&raLsAiQCOa^CL?EB>4WxnfapmHGsC>t`{ zf(_I5xCVY5HA(FNgjN$Qrb(cJes;eaSkwxI8-91B{7q zNahmpfl~72i>gFNQJ*S8G)Lt#f-2`va3T z{khQoifC(`H8q%_)i|EXy7vKz6hk*wb6$x8d`&72gU{5Zb~>`BGQ`{FFOz*YLhn4h94{KBOF;`6b~XDn+9o zuy!JRiT%7E`yOBMimRw4UJbNacBLhH1C5q!i#9U%gx_oK<-H12&%w8K~k~@eoCPsG|1EN13ZPn&&-E6cm zBJ!=cZBz{b5-bC6E~$8^Pw>rPwYs=ESLDIa(tPPb-ppM9FrO}1Db zojXW81U1}{c?h+EIOi;#gYN|T>5Z+G+_fvB`5ZNl=l$K1ovHAeJbrxrKa5;)=avY8 zA+xWhbWMoDMmv!CqCP+z8f+0Cx?#_}1aS6kcsng>Bs2AX2a<~amBRXkJ3dHP%?x5E z`d?_OW*h!Hn4p2d^!0N?|&#KWxjn`;$?TC0>9V|VU#0NutSYyK;tzE>1PQiHZc5mQ=^ zB@%+!5$GklXaPO}Dq4MvbSC(?ZexFO*}E!AWoErzHEzoBdf})8@R}vG1{|uF z&HTQo`rYswg&Bd{;u$te7s^1UTn$PTJ8!JfZV)2Q6)uv z38K?pdP!I8uU9S8x^jM~qHYOdBac$;DcgI`jtQ@)a~BI-4>7(F=Nu z?)Ieo-GzCMd#WX|!_AmTiA}Of)NVc{SX1M0| zo!>AeW+}+w}B{??amD1fnf z&i{?sQ5n2fGeY;yzv(TCq(1!I(_=rW-T`JM?dI*K*B@r=MJM`%S+Qn9R*RYIsHMYL z8GI5_|89#?Je9Pu6UoMmf=D&6YF(y1Cq<-h)Dhe0gE|a4QXCOnB1uhrNqY5r$-1c@DCKwN zO5=6##AxUFgar9#krSHZPLsj#2@Lmmiie)*k8jbgp9v>)#{~x;E+_G7TzyCh}f(ncbmg3G`Yvc^xV z>!_{8T?f~6H@`l+DSw%ZO#}FDPaGC`^!~}kq~E0my0q9dn7+d1>PY89_62YH%{BdM z4vW`k$hSU1ZdXf+ma-fn3`(QT{Y;_M$S zKB_;`(!u;Y`owmXZ-qi%qy^Q`Vit(#9|id0-iLbP4Chi~BiT@es36f3@T;L5I|hAM z%3};ea#U|x;=4~JENz)3W;GwnB;!}I77XB*l)eKNE_wWzt04U*+y;PFz8ozcjvc$y zGz_o>7Yr8hBs^!w2?+S*h`#6peNbFQR0XKG1FC!&CDAN9n}I#M3od^QBAQ73#>7a9 zDCFojDfr*w5;Jd?w3>rSN$Mk$%yr(LTMM1Kq?d$U$Mo?YXm33e<`^W@uyU;rWl%~; z#5Pw|DVadL*4DsKwt0$Z!tfaV2GAjMzKVY>cG z2@jCWK!xC9u~#N8U)Q5=xrZi9>))-&TTIkbI74-5Ua(9e5#M2S88>aAjjMIN%iR#1 z8=~XUPiaB*5I3HKG#^n7X}bP1Z8CU@qXzgxR<&E-Q*jd(7cIt4%yc)qRF{jd(9wRg zmCn7O8xy4;7O`thU9KDRST*L?u!}m|COAw$wN&_R3%s$q?~NZ~|3yiTqwz5xGEFnugYwfu8~os<0ns68mtDy$|wf55sS?_%`&u@Nd;@E zr$b#THtPHUs^Z`gAt>nahS2~?Va>G@PY}iLVE%=#)qg|OAu>n-*`X(|M%uiq5wI-A z*7#2)YeCbX*eOv?Wesr}e=q~z=>t6IUw#{)Rg+`_qBjL_ZD=_ZiRvRq#ttLkVcf#(2a#*l@vyk`>}1h+lX0H*bA}1q zn3Imj5X7OeFTxYD>x}qcs1)>Nk`|#QCa8D*hC!SFKE;5c;BZJ64?uA@o|{?u zXDRcc&i;ksJ+G9;eo!Ja!QvXGp#OxaT7`Ep#=)Uv`J3pZJ&ww|6)C@ITOPYvayE|&Hb4R`^tlA z(6zQWsZ*-F{QfMDulZQw^oOr{DRhBt3=2phjQm%Y(aCqLKY7v(STL1PirA+25<*HuicH@1p8 z938H(*e?mig_nb=TK)y&g+y%@Y{Sv&(s)T?(C#3Y{5}^agKjlsA+A8 zHtfGe55pJWh6(9cjn;nfH>abN4HZ6PG41I@qFSJ6J1QDSE0hU(Q!;>^Cn;CDM%$j_ zQ(TfDFXP4mYVTYfA_(pB#kNnIf8I+sTK%O9A^-h_HdXil9uKm1f%L}wCDGax z(s-p;G|4Pdcv^>w*TeEGUT0wx2{pfI2)&zma(T`!1hcC%p?z^=3$d1uaw@Y(u6aU8sdZ6zqw}74VLa!o{pA6_SexV5C097xK zpB|@V9cAVFLeFPyRyFrrR(UPuryqWjnV{UNk^nWd$$U2RXX?2sa3YuaPC0K9s()7l zVb=$6G9afH_zNBJ`)F%Qn5>9U4AYA)JQmEImVDzO&iq1BZ+xaefOl7KuBWv}%t3@@%*x_2 zm_Vu={L9s`JU;L zqRUIv%V@xH^6Z@ons{jvBG3q60oVMWP+cgqLT=b`oiPd!X&cZifEAnP_WZ@ymIA?1 zGl##W;oVk;=Nk=TAnxch_cVG;K^!s*r`>R_bLQkQw|rh&xA6gF@R1O%>3S{Rr^u5< zQW97J^^fm_n}=Ya^+MefgVmiXh2c3Kj_he&?HlF;{p{tLJA_EgJ&jLB0>Wzr#9F*$} zYHY`uADIzAY6=nw+RvrCmk7^agZwuwwoWBH;5=>M_{P-HCk~~b%)-ib*XuPSpTz9( zS^z6&!Z?E;PCl!wwwB@Bnl2a=xX*FH^N2)DPvcNCz9bE@LGvnL4iV z%wKOL8YsU5v0sq8JmB^;5_Yxj%xq!4@57BK6^2K-iO`724QvvR!AhhRIOlYQ#ud~^ z2;?=FN25m>(hfd1#HC z;&FRU8DjzSRbmAshxBGbzTlDH0p4a<_uh3UeKdUI!6~EmZKovV6B;IWF9v? zL4E#F@(Ow*TKjY#l3ZG0vJVagiXm2P==yqlT(>Q-trr;ZFVrtk#p~k}zLW12Ur-<1 zA*$z)4Ci&8B@dm$m4Wl%1kLCUK$MY`nBWRxP+{lApU{7`pDor z5byyTZ#12{Xm+7MnOd9zDp-|b)-v8DiTrT>x`Npxbpm04V18`%r__9E3SriX*?b#! z4#7Y*SUX*;yP}ELucTo6WT+zY`tZ@e1oyCeye^mc?hfi zx#MKSGm|xaE)rYRugN-Q8gBqCb?oK{=zHwjpl1#5jNe2rm&$-Eoch3*FZ--+$KKV~ zgLL*21E-C4>5;9!wA^>C(JOdG5Pjgo%mF%5M}sk;pNZ^Y=gQ}4;t7(+FgLEElIqtQ zoz|vhT$~D4u#{=35=ZK6m^}e|B&uP#C5*)PPJY<&t1CzCtySH~>%QE93D9BY?nM5H z)zi^2g(*GfZ5O%jGIw=QeH;zL-=G(bzZhfKXpIB6OT`BsGHeSS6#zMxckUD0Ya6O9 zverwWuSVeTg1El7SzLOfDQSYYIummud=B^3lyP*-lyYKMPeZa<#T_5teaZ_oBWrb! zv2(-W#$0OeSAVOS_kEpIrJBQ#BgNsQ!%UHi9{JSUa(spmIj{oCPf>84DVNJfU9`)j zPBBIZDTPANY4yKPpdbwMMvMV4#tN4g{mlGICl{DA<}JU zZ*?=<8Oy-!c|rCmIcgRJFvDRtsH945kSzNVn5mq4ho{|ImIhp71x=bX=Atv)C=H&C z&^6kPfZUjS2rUO;-TjP6JH5<^2BM;kqOk z&x%UYXYjpm$Oimf}V!CASm0h1NvkM`4>St~aCgdd5lHuEo-S|uKqp^qnf_x71~ zGdG-?xB|w4nE3Av;g;;maieiFXO4FxSBT)>G;}moMOPMI)LQGczFIp;F6Z^M5}P`G zOH3#_!I*i+SJH=|ZNSnES0 z{Xe7%u6u+Ee=VDO{J7>Og2qz6YMT9yDyY@s%UEIwdP>a+hwI$QwjfwCV5!Z=i_43h zeFc%h2GTDj_zyQ{H`8WdY_3qcXQ2BzBFCYxA4;eXh+DpXnM)*?4fiR!G{pmcJ`%KR zQI44AFUHjEYlOZNB;P@cNh?Tho}Pfftf@MSMN`0xD~g z#@FWhfMeh*K}5pV6L_RgZ4+9>GeO0igb+sOflI9e`aT}ooKAbt8N=KyG|t++aTtK- zWU}SE_VVM&9M>-xr_?$#GuqkSG#DqL7?h0N4)y5NU3L)NmU9T32yC*|!NkiAURSOy zu{qW=Ie=pZB0R?-8#Ly1CxxwZK@5BO3e1Q3VAqbhZ|sKOiqZC$bU^d?P*G^agQh2R z#jg4*u}*U#faj`g&E`Nv8^Lw!K*Vrho#aU6CH|O$O%kf<*-gN4bF}0^uG8EHCLe5u z!laulGms{E-BZ}5)$t}*tSBo`E1kXA*|O6f?a!H@w>sBebn@M(*sHmqnaXoZ`yr;q zJa1Z`bYat9v~zgt#E7$q?W`XtQu`<0$`=G|cr>55q;B071T*W>0<4ETd@t)^d@2E+ zlM)^j*4PkCZ;yTsGO57D3HUXl1V7%An5s?Lyjk{qN08EW{!N&FdU731N<+!0_{ka+ zd)8n}|89-;^&Ro)3Ko5{jk~}(6xIliJ(?G;2Vp0doyj5r$TT}AFRdHbn=3?SN!38re4AI*e$<=ke5D7v$h zrH^Qhfm!%D+IyfTm>P5>jQp#V6tfiG+7;_4aMVt<=6POMe(s?!|9&S6scmub^gLwz zMH5Z!th0IE_3)Wa7%|ao{JvF`h~BwXIr{C*?dfINl9beJh1XNK%|Pq6q+HglJ$3Xj z9Xu;9m%^1X_3W?W++eR)lXw@?h!K{+IyBLXiQj$B`zUV;{SV5Ec>~9HE^>9HYLB`; zb2eE$^r5QM`geZ-&T_h@**U)S8V?cE6Tmoq0DPSrase&Gkj{QByU=lj& z)6Q^x!l3s_80M7*T}Fj=B<Uvk=h=XHRfW{{#$3GB_y7C=}5OV~F$W2t8tcqWJAp6vRK=nuJmGB_j-16g>(SoM#=@F-WGvsIFbWODf z3H@KcMgou{-7EpAiw6;^*!~VfctiY~dFw18s#tz&zp_HoD5f(U&Oq@toOMk)3MTha zT7!RHfXUy#LFeKXV{QJ_5caa}sW?7dWF9P#zjR;rBQtLq`rn?3-jPM;8*L90a+rK& z62?JKOD96u7Ym?IYPbW}=?m$AV5=AsePegkWi9WI+ye9}TSBzABKcK%UG&p!Gr}if z&=~W3u`4dJsMCV9lRhWZKcaV~YxgCeYboT5JZ-1B{mSkt`x>ch0U~|xpb~0)YYh;Q z6YdwE)Z_$ZE`Bhz_v(shSiTe zImju0sg=f+te#?GV?SCR>aY7ZUvKPWvg4sg0UhzSaIG?HaG; zmNhl|--3_5NJhOn;p%thXk_>8lL#z}oza_@;`GZyKwRHd8l|}^NSurT7f1apRs^u5 zLC1H8E>{b_!D^)4;h)b2wZgQiYGL15r3E^ex^l;TFC7fJ{BJK4YTvk3m9aSOf5bdo zsKSCL5o2BVLfsKS*yc#F^TD{(cF)Ezh}R!eqVWLiepFS~u89x8S*t7I(TfrfgPrgmg0!>qPAQu6hmphIhK57M&dqHh$ zPh>aMA6wVI2txlwV##3#HMZ^gSAk*b7!5KklWe}pTPswMsjUzRaQl9zL&GvuhcgsAP~huS2C?3EPs4NS%Q-Sb^0 z1eo;U5hw;phHkC=T*haBIGyeBbdUQe%F>~$xVKw0xJ8#^^2)DaGxtVKu0cXcBgZU; zAci^o(gtI3+RIS@Brg?BI2OG<_xs;!`%Il&@Ts-~V@pI)Cm0nU&gk%;*y?2dmOnN@akZek8kJ=aKCrQNjaOJq=Ll?#RS~fj!|hb;I7APJ#{iSCn5n-yzItAa5jY;}b?C}^ z-u{zP@kF#3Wb?z}az~|FEM#wfws3DKgY%No)H~s}lxw1o;Y%dQAME zzVQSEGqQK~CJTcC4-HP8%wYMqacsYTVeVgr9B?`F9OxaU#Na@E?Vf$~M64(0jJgot zOXHg#jW6+S{A~6b8UU)=w^7P?lV#i%)F&P?y9PxoOVW2b`#NUx&vVlQgQSYw&+k); zkx*jVao(ngPKKUCXOznQ?O`YVu3;z4ne*Oakhfo((*=axmM3&SlGzPElC{k}9}w2! z<+eg|2R}<=#;d9Y`F>Vo0}bP!n1B&-<@*z?!IjM)|97x!l)QlOs5Y&$t5Qpz#U1?b zu<;>IyD5TZzJW=4xrdjcgqs%qb`+q7lsbBr<~HQ~Vd{4!fxEb=Nuv@8?y{Bs`Hm&xUGU-}FPK5~{LkvbfM zC%kT=_nr~9G;P_*l7gX6>!>krnDoU^J66JdIyFa*`>WR4)eWh&FY51dyi|&_{Z)tM z3s#7A7E%oo(pc!R49*2&xb`R@yL1JCLCR@{e+7Ieh#4Qvx zWil1ZM;e&K`BLK5m9e(KG+z9?(9*<{~23;CPFBkKOa! zL6dy(BP$Sn4gaoIl4)dlqOF%l%~07uZaL@631Z|LpZ1coW)X*oKGI%*HG%a1O>3w} z`5HqW!btnwW~3CHNX!)TPH=f?+oNI1wn!S34C#6iS${OU&55eL_s??yDlNYw##J=& zue}FsJ*$iT>m@e@#@Q2=HhPz_qSjOvj;lYy1|31aE$U4kdhv%2uaI>)aQ!WS)DR1D zsAl|v+<45w!+6y5o`vJjLR@sI@m)WsO(SWFdzsN~Cl4nhes-ShEIj_MU;d=qJxHQAEF$M<&h7&0EfUYM;T+z3PmtvB znU{)p=)(h?pgGp6i)s?NvzlKUmN*RTL(p5%^;UCXdI36f_E(^vCf(ptKLA<+N>-ds zoS#@_idy4Qe`uKi+RD7$6#CP|3$fXYq69@929tN>{ztcp-%5Y$w@;WFn;TUaK7INB E0i>j_YXATM literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/rv_divider_line_road.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/rv_divider_line_road.xml new file mode 100644 index 0000000000..1173a22cdb --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/rv_divider_line_road.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_toast_nde.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_toast_nde.xml index c44a3b0348..8e5fcda9fc 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_toast_nde.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_toast_nde.xml @@ -2,9 +2,9 @@ @@ -16,6 +16,8 @@ app:layout_constraintLeft_toLeftOf="parent" android:src="@drawable/icon_nde" android:contentDescription="@string/msg_box_toast_icon" + android:layout_marginTop="@dimen/dp_50" + android:layout_marginStart="@dimen/dp_50" /> @@ -42,4 +45,14 @@ android:layout_marginTop="@dimen/dp_6" /> + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_nde_road.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_nde_road.xml new file mode 100644 index 0000000000..f74d45eac7 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_nde_road.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_nde.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_nde.xml new file mode 100644 index 0000000000..da101ee8c3 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_nde.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_nde_road.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_nde_road.xml new file mode 100644 index 0000000000..6b573f2f8d --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_nde_road.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml index 30aa0833f5..81f9c49d33 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml @@ -93,6 +93,11 @@ #131415 + #2EACFF + #FF852E + #666666 + #99FFFFFF + #FF4E41 #666666 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml index 647a91337f..e97f35b990 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml @@ -212,6 +212,9 @@ V2X图标 NDE图标 OTA图标 + NDE车道图标 + 推荐 + 缓慢 故障发生时间减少 故障发生时间增加