From nobody Tue May 14 12:50:41 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+112919+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+112919+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1703600068; cv=none; d=zohomail.com; s=zohoarc; b=Rc1DhBUvs8Pl7RCw9bugzaXSayH7yLLSYcqiYVh4PEAw3iKAk8HYfXoZtw9mSGakM07uxBkO4bJ6nWlmaSDdtAM5XVr7ZwNpRIQ3JbHWlz3CsyDkHhkpE0/ppkfP2GA80y0W3hWsg87xW1NMNGKPuOZGiwxzU9VvU67avY2LPDM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1703600068; h=Content-Type:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:Sender:Subject:Subject:To:To:Message-Id; bh=Pz6FxQGymY1idS3giwKzLjDgMzhI3db2Bri3VJl27Wc=; b=N1ojUa7HGPrAg/A+3FGMb0KgALmuZi6BMo9duTl9enGKyvsCr5cBBzchJvVQVRQKu9nMghdlYkCdQkwUVi/GFqoX4drK85Eq3EEqgk043CsdWwTEczmJ56dnirke4hqIk4b1BqreJxhSfFhQ4epAclOq4MloFcQt5qX/YDHL7/E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+112919+1787277+3901457@groups.io Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 170360006892568.58711247383371; Tue, 26 Dec 2023 06:14:28 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=Pz6FxQGymY1idS3giwKzLjDgMzhI3db2Bri3VJl27Wc=; c=relaxed/simple; d=groups.io; h=Date:From:To:Cc:Subject:MIME-Version:Message-ID:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type; s=20140610; t=1703600068; v=1; b=k9xdieGB98CtHw1oPyDo7cxfWSGDF/VI7KsEnhuhB5G84ZMsWaLQqz4n/B/5mz0Ml4VWxAQJ Q3Uhl+OeoQ2ErXp5uoeKcY1CpzmxZgqdKFKwlKC85GkAE6F8uUo88b/vEQ85fvOWItJ3imEtn28 wP65FPf9ZkLH93+etW4zZrJ0= X-Received: by 127.0.0.2 with SMTP id 17m2YY1788612xnrf7OWQRvo; Tue, 26 Dec 2023 06:14:28 -0800 X-Received: from zg8tmty3ljk5ljewns4xndka.icoremail.net (zg8tmty3ljk5ljewns4xndka.icoremail.net [167.99.105.149]) by mx.groups.io with SMTP id smtpd.web11.46845.1703145698945955558 for ; Thu, 21 Dec 2023 00:01:39 -0800 X-Received: from wangyang$bosc.ac.cn ( [123.114.53.210] ) by ajax-webmail-mail (Coremail) ; Thu, 21 Dec 2023 16:01:31 +0800 (GMT+08:00) X-Originating-IP: [123.114.53.210] Date: Thu, 21 Dec 2023 16:01:31 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: =?UTF-8?B?546L5rSL?= To: devel@edk2.groups.io Cc: sunilvl@ventanamicro.com, zhiguang.liu@intel.com, michael.d.kinney@intel.com, gaoliming@byosoft.com.cn, andrei.warkentin@intel.com, wangran@bosc.ac.cn Subject: [edk2-devel] [PATCH] MdePkg/BaseLib:Fix boot DxeCore hang on riscv platform X-Priority: 3 MIME-Version: 1.0 Message-ID: <462e947d.8a.18c8b64da71.Coremail.wangyang@bosc.ac.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID: AQAAfwBnUNrb8INlc6dCAA--.1184W X-CM-SenderInfo: 5zdqw5hdqjquxrvfhtffof0/1tbiAQANE2WC5bwFJgAAsC X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWxJw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,wangyang@bosc.ac.cn List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: SIgm7VLj0s4Hb410t01YcLW2x1787277AA= Content-Type: multipart/alternative; boundary="----=_Part_485_841164517.1703145691734" X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1703600070359100029 ------=_Part_485_841164517.1703145691734 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From f15d405067860a8087c5eb4080bc3e08ca5e0e21 Mon Sep 17 00:00:00 2001 From: wangyang Date: Wed, 20 Dec 2023 20:27:42 +0800 Subject: [PATCH] MdePkg/BaseLib:Fix boot DxeCore hang on riscv platform For scene of HandOffToDxeCore()->SwitchStack(DxeCoreEntryPoint)-> InternalSwitchStack()->LongJump(),Variable HobList.Raw will be passed (from *Context1 to register a0) to DxeMain() in parameter *HobStart. However, meanwhile the function LongJump() overrides register a0 with a1 (-1) due to commit (ea628f28e5 "RISCV: Fix InternalLongJump to return correct value"), then cause hang. Replacing calling LongJump() with new InternalSwitchStackAsm() to pass addres data in register s0 to register a0 could fix this issue (just like the solution in MdePkg/Library/BaseLib/LoongArch64/SwitchStack.S) Signed-off-by: Yang Wang Reviewed-by: Ran Wang Cc:Andrei Warkentin Cc:Liming Gao Cc:Michael D Kinney Cc:Sunil V L Cc:Zhiguang Liu --- .../BaseLib/RiscV64/InternalSwitchStack.c | 7 +++- MdePkg/Library/BaseLib/RiscV64/SwitchStack.S | 40 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 MdePkg/Library/BaseLib/RiscV64/SwitchStack.S diff --git a/MdePkg/Library/BaseLib/RiscV64/InternalSwitchStack.c b/MdePkg/= Library/BaseLib/RiscV64/InternalSwitchStack.c index b78424c163..c60fbdb896 100644 --- a/MdePkg/Library/BaseLib/RiscV64/InternalSwitchStack.c +++ b/MdePkg/Library/BaseLib/RiscV64/InternalSwitchStack.c @@ -8,6 +8,11 @@ #include "BaseLibInternals.h" +UINTN +EFIAPI +InternalSwitchStackAsm ( + IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer + ); /** Transfers control to a function starting with a new stack. @@ -48,6 +53,6 @@ InternalSwitchStack ( JumpBuffer.SP =3D (UINTN)NewStack - sizeof (VOID *); JumpBuffer.S0 =3D (UINT64)(UINTN)Context1; JumpBuffer.S1 =3D (UINT64)(UINTN)Context2; - LongJump (&JumpBuffer, (UINTN)-1); + InternalSwitchStackAsm (&JumpBuffer); ASSERT (FALSE); } diff --git a/MdePkg/Library/BaseLib/RiscV64/SwitchStack.S b/MdePkg/Library/= BaseLib/RiscV64/SwitchStack.S new file mode 100644 index 0000000000..59b8d60e7e --- /dev/null +++ b/MdePkg/Library/BaseLib/RiscV64/SwitchStack.S @@ -0,0 +1,40 @@ +//------------------------------------------------------------------------= ------ +// +// InternalSwitchStackAsm for RISC-V +// +// Copyright (c) 2023, Bosc Corporation. All rights reserved.
+// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +//------------------------------------------------------------------------= ------ +# define REG_S sd +# define REG_L ld +# define SZREG 8 +.align 3 + +/** + This allows the caller to switch the stack and goes to the new entry poi= nt + + @param JumpBuffer A pointer to CPU context buffer. +**/ + + .globl InternalSwitchStackAsm +InternalSwitchStackAsm: + REG_L ra, 0*SZREG(a0) + REG_L s0, 1*SZREG(a0) + REG_L s1, 2*SZREG(a0) + REG_L s2, 3*SZREG(a0) + REG_L s3, 4*SZREG(a0) + REG_L s4, 5*SZREG(a0) + REG_L s5, 6*SZREG(a0) + REG_L s6, 7*SZREG(a0) + REG_L s7, 8*SZREG(a0) + REG_L s8, 9*SZREG(a0) + REG_L s9, 10*SZREG(a0) + REG_L s10, 11*SZREG(a0) + REG_L s11, 12*SZREG(a0) + REG_L sp, 13*SZREG(a0) + + add a0, s0, 0 + add a1, s1, 0 + ret -- 2.25.1 =E2=80=8B -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112919): https://edk2.groups.io/g/devel/message/112919 Mute This Topic: https://groups.io/mt/103369616/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- ------=_Part_485_841164517.1703145691734 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6U2ltU3VuO3doaXRlLXNwYWNlOm5vd3JhcDsiPgoJRnJv bSBmMTVkNDA1MDY3ODYwYTgwODdjNWViNDA4MGJjM2UwOGNhNWUwZTIxIE1vbiBTZXAgMTcgMDA6 MDA6MDAgMjAwMTxicj4KRnJvbTogd2FuZ3lhbmcgJmx0O3dhbmd5YW5nQGJvc2MuYWMuY24mZ3Q7 PGJyPgpEYXRlOiBXZWQsIDIwIERlYyAyMDIzIDIwOjI3OjQyICswODAwPGJyPgpTdWJqZWN0OiBb UEFUQ0hdIE1kZVBrZy9CYXNlTGliOkZpeCBib290IER4ZUNvcmUgaGFuZyBvbiByaXNjdiBwbGF0 Zm9ybTxicj4KPGJyPgpGb3Igc2NlbmUgb2Y8YnI+CkhhbmRPZmZUb0R4ZUNvcmUoKS0mZ3Q7U3dp dGNoU3RhY2soRHhlQ29yZUVudHJ5UG9pbnQpLSZndDs8YnI+CkludGVybmFsU3dpdGNoU3RhY2so KS0mZ3Q7TG9uZ0p1bXAoKSxWYXJpYWJsZSBIb2JMaXN0LlJhdzxicj4Kd2lsbCBiZSBwYXNzZWQg KGZyb20gKkNvbnRleHQxIHRvIHJlZ2lzdGVyIGEwKSB0bzxicj4KRHhlTWFpbigpIGluIHBhcmFt ZXRlciAqSG9iU3RhcnQuPGJyPgo8YnI+Ckhvd2V2ZXIsIG1lYW53aGlsZSB0aGUgZnVuY3Rpb24g TG9uZ0p1bXAoKSBvdmVycmlkZXM8YnI+CnJlZ2lzdGVyIGEwIHdpdGggYTEgKC0xKSZuYnNwOyBk dWUgdG8gY29tbWl0IChlYTYyOGYyOGU1ICJSSVNDVjogRml4PGJyPgpJbnRlcm5hbExvbmdKdW1w IHRvIHJldHVybiBjb3JyZWN0IHZhbHVlIiksIHRoZW4gY2F1c2UgaGFuZy48YnI+Cjxicj4KUmVw bGFjaW5nIGNhbGxpbmcgTG9uZ0p1bXAoKSB3aXRoIG5ldyBJbnRlcm5hbFN3aXRjaFN0YWNrQXNt KCkgdG8gcGFzczxicj4KYWRkcmVzIGRhdGEgaW4gcmVnaXN0ZXIgczAgdG8gcmVnaXN0ZXIgYTAg Y291bGQgZml4IHRoaXMgaXNzdWUgKGp1c3Q8YnI+Cmxpa2UgdGhlIHNvbHV0aW9uIGluIE1kZVBr Zy9MaWJyYXJ5L0Jhc2VMaWIvTG9vbmdBcmNoNjQvU3dpdGNoU3RhY2suUyk8YnI+Cjxicj4KU2ln bmVkLW9mZi1ieTogWWFuZyBXYW5nICZsdDt3YW5neWFuZ0Bib3NjLmFjLmNuJmd0Ozxicj4KUmV2 aWV3ZWQtYnk6IFJhbiBXYW5nICZsdDt3YW5ncmFuQGJvc2MuYWMuY24mZ3Q7PGJyPgpDYzpBbmRy ZWkgV2Fya2VudGluICZsdDthbmRyZWkud2Fya2VudGluQGludGVsLmNvbSZndDs8YnI+CkNjOkxp bWluZyBHYW8gJmx0O2dhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbiZndDs8YnI+CkNjOk1pY2hhZWwg RCBLaW5uZXkgJmx0O21pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tJmd0Ozxicj4KQ2M6U3VuaWwg ViBMICZsdDtzdW5pbHZsQHZlbnRhbmFtaWNyby5jb20mZ3Q7PGJyPgpDYzpaaGlndWFuZyBMaXUg Jmx0O3poaWd1YW5nLmxpdUBpbnRlbC5jb20mZ3Q7PGJyPgotLS08YnI+CiZuYnNwOy4uLi9CYXNl TGliL1Jpc2NWNjQvSW50ZXJuYWxTd2l0Y2hTdGFjay5jJm5ic3A7ICZuYnNwOyAmbmJzcDt8Jm5i c3A7IDcgKysrLTxicj4KJm5ic3A7TWRlUGtnL0xpYnJhcnkvQmFzZUxpYi9SaXNjVjY0L1N3aXRj aFN0YWNrLlMmbmJzcDsgfCA0MCArKysrKysrKysrKysrKysrKysrPGJyPgombmJzcDsyIGZpbGVz IGNoYW5nZWQsIDQ2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSk8YnI+CiZuYnNwO2NyZWF0 ZSBtb2RlIDEwMDY0NCBNZGVQa2cvTGlicmFyeS9CYXNlTGliL1Jpc2NWNjQvU3dpdGNoU3RhY2su Uzxicj4KPGJyPgpkaWZmIC0tZ2l0IGEvTWRlUGtnL0xpYnJhcnkvQmFzZUxpYi9SaXNjVjY0L0lu dGVybmFsU3dpdGNoU3RhY2suYyBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvUmlzY1Y2NC9JbnRl cm5hbFN3aXRjaFN0YWNrLmM8YnI+CmluZGV4IGI3ODQyNGMxNjMuLmM2MGZiZGI4OTYgMTAwNjQ0 PGJyPgotLS0gYS9NZGVQa2cvTGlicmFyeS9CYXNlTGliL1Jpc2NWNjQvSW50ZXJuYWxTd2l0Y2hT dGFjay5jPGJyPgorKysgYi9NZGVQa2cvTGlicmFyeS9CYXNlTGliL1Jpc2NWNjQvSW50ZXJuYWxT d2l0Y2hTdGFjay5jPGJyPgpAQCAtOCw2ICs4LDExIEBAPGJyPgo8YnI+CiZuYnNwOyNpbmNsdWRl ICJCYXNlTGliSW50ZXJuYWxzLmgiPGJyPgo8YnI+CitVSU5UTjxicj4KK0VGSUFQSTxicj4KK0lu dGVybmFsU3dpdGNoU3RhY2tBc20gKDxicj4KKyZuYnNwOyBJTiZuYnNwOyAmbmJzcDsgJm5ic3A7 QkFTRV9MSUJSQVJZX0pVTVBfQlVGRkVSJm5ic3A7ICpKdW1wQnVmZmVyPGJyPgorJm5ic3A7ICk7 PGJyPgombmJzcDsvKio8YnI+CiZuYnNwOyAmbmJzcDtUcmFuc2ZlcnMgY29udHJvbCB0byBhIGZ1 bmN0aW9uIHN0YXJ0aW5nIHdpdGggYSBuZXcgc3RhY2suPGJyPgo8YnI+CkBAIC00OCw2ICs1Myw2 IEBAIEludGVybmFsU3dpdGNoU3RhY2sgKDxicj4KJm5ic3A7ICZuYnNwO0p1bXBCdWZmZXIuU1Ag PSAoVUlOVE4pTmV3U3RhY2sgLSBzaXplb2YgKFZPSUQgKik7PGJyPgombmJzcDsgJm5ic3A7SnVt cEJ1ZmZlci5TMCA9IChVSU5UNjQpKFVJTlROKUNvbnRleHQxOzxicj4KJm5ic3A7ICZuYnNwO0p1 bXBCdWZmZXIuUzEgPSAoVUlOVDY0KShVSU5UTilDb250ZXh0Mjs8YnI+Ci0mbmJzcDsgTG9uZ0p1 bXAgKCZhbXA7SnVtcEJ1ZmZlciwgKFVJTlROKS0xKTs8YnI+CismbmJzcDsgSW50ZXJuYWxTd2l0 Y2hTdGFja0FzbSAoJmFtcDtKdW1wQnVmZmVyKTs8YnI+CiZuYnNwOyAmbmJzcDtBU1NFUlQgKEZB TFNFKTs8YnI+CiZuYnNwO308YnI+CmRpZmYgLS1naXQgYS9NZGVQa2cvTGlicmFyeS9CYXNlTGli L1Jpc2NWNjQvU3dpdGNoU3RhY2suUyBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvUmlzY1Y2NC9T d2l0Y2hTdGFjay5TPGJyPgpuZXcgZmlsZSBtb2RlIDEwMDY0NDxicj4KaW5kZXggMDAwMDAwMDAw MC4uNTliOGQ2MGU3ZTxicj4KLS0tIC9kZXYvbnVsbDxicj4KKysrIGIvTWRlUGtnL0xpYnJhcnkv QmFzZUxpYi9SaXNjVjY0L1N3aXRjaFN0YWNrLlM8YnI+CkBAIC0wLDAgKzEsNDAgQEA8YnI+Cisv Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLTxicj4KKy8vPGJyPgorLy8gSW50ZXJuYWxTd2l0Y2hTdGFj a0FzbSBmb3IgUklTQy1WPGJyPgorLy88YnI+CisvLyBDb3B5cmlnaHQgKGMpIDIwMjMsIEJvc2Mg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuJmx0O0JSJmd0Ozxicj4KKy8vPGJyPgor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQ8YnI+CisvLzxi cj4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyPgorIyBkZWZpbmUgUkVHX1MmbmJzcDsgc2Q8 YnI+CisjIGRlZmluZSBSRUdfTCZuYnNwOyBsZDxicj4KKyMgZGVmaW5lIFNaUkVHJm5ic3A7IDg8 YnI+CisuYWxpZ24gMzxicj4KKzxicj4KKy8qKjxicj4KKyZuYnNwOyBUaGlzIGFsbG93cyB0aGUg Y2FsbGVyIHRvIHN3aXRjaCB0aGUgc3RhY2sgYW5kIGdvZXMgdG8gdGhlIG5ldyBlbnRyeSBwb2lu dDxicj4KKzxicj4KKyZuYnNwOyBAcGFyYW0mbmJzcDsgSnVtcEJ1ZmZlciZuYnNwOyAmbmJzcDsg QSBwb2ludGVyIHRvIENQVSBjb250ZXh0IGJ1ZmZlci48YnI+CisqKi88YnI+Cis8YnI+CismbmJz cDsgJm5ic3A7IC5nbG9ibCBJbnRlcm5hbFN3aXRjaFN0YWNrQXNtPGJyPgorSW50ZXJuYWxTd2l0 Y2hTdGFja0FzbTo8YnI+CismbmJzcDsgUkVHX0wgcmEsJm5ic3A7IDAqU1pSRUcoYTApPGJyPgor Jm5ic3A7IFJFR19MIHMwLCZuYnNwOyAxKlNaUkVHKGEwKTxicj4KKyZuYnNwOyBSRUdfTCBzMSwm bmJzcDsgMipTWlJFRyhhMCk8YnI+CismbmJzcDsgUkVHX0wgczIsJm5ic3A7IDMqU1pSRUcoYTAp PGJyPgorJm5ic3A7IFJFR19MIHMzLCZuYnNwOyA0KlNaUkVHKGEwKTxicj4KKyZuYnNwOyBSRUdf TCBzNCwmbmJzcDsgNSpTWlJFRyhhMCk8YnI+CismbmJzcDsgUkVHX0wgczUsJm5ic3A7IDYqU1pS RUcoYTApPGJyPgorJm5ic3A7IFJFR19MIHM2LCZuYnNwOyA3KlNaUkVHKGEwKTxicj4KKyZuYnNw OyBSRUdfTCBzNywmbmJzcDsgOCpTWlJFRyhhMCk8YnI+CismbmJzcDsgUkVHX0wgczgsJm5ic3A7 IDkqU1pSRUcoYTApPGJyPgorJm5ic3A7IFJFR19MIHM5LCZuYnNwOyAxMCpTWlJFRyhhMCk8YnI+ CismbmJzcDsgUkVHX0wgczEwLCAxMSpTWlJFRyhhMCk8YnI+CismbmJzcDsgUkVHX0wgczExLCAx MipTWlJFRyhhMCk8YnI+CismbmJzcDsgUkVHX0wgc3AsJm5ic3A7IDEzKlNaUkVHKGEwKTxicj4K Kzxicj4KKyZuYnNwOyBhZGQmbmJzcDsgJm5ic3A7YTAsIHMwLCAwPGJyPgorJm5ic3A7IGFkZCZu YnNwOyAmbmJzcDthMSwgczEsIDA8YnI+CismbmJzcDsgcmV0PGJyPgotLTxicj4KMi4yNS4xPGJy PgoJPGRpdiBzdHlsZT0id2hpdGUtc3BhY2U6bm93cmFwOyI+CgkJPGJyPgoJPC9kaXY+CuKAizxi cj4KPC9kaXY+DQoKPGRpdiB3aWR0aD0iMSIgc3R5bGU9ImNvbG9yOndoaXRlO2NsZWFyOmJvdGgi Pl8uXyxfLl8sXzwvZGl2Pgo8aHI+CgoKR3JvdXBzLmlvIExpbmtzOjxwPgoKCiAgCiAgICBZb3Ug cmVjZWl2ZSBhbGwgbWVzc2FnZXMgc2VudCB0byB0aGlzIGdyb3VwLgogIAogIAoKCjxwPgo8YSB0 YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL21lc3Nh Z2UvMTEyOTE5Ij5WaWV3L1JlcGx5IE9ubGluZSAoIzExMjkxOSk8L2E+IHwKCgogIAoKfAoKICA8 YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9ncm91cHMuaW8vbXQvMTAzMzY5NjE2LzE3 ODcyNzciPk11dGUgVGhpcyBUb3BpYzwvYT4KCgp8IDxhIGhyZWY9Imh0dHBzOi8vZWRrMi5ncm91 cHMuaW8vZy9kZXZlbC9wb3N0Ij5OZXcgVG9waWM8L2E+Cgo8YnI+CgoKCgo8YSBocmVmPSJodHRw czovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvZWRpdHN1Yi8xNzg3Mjc3Ij5Zb3VyIFN1YnNjcmlw dGlvbjwvYT4gfAo8YSBocmVmPSJtYWlsdG86ZGV2ZWwrb3duZXJAZWRrMi5ncm91cHMuaW8iPkNv bnRhY3QgR3JvdXAgT3duZXI8L2E+IHwKCjxhIGhyZWY9Imh0dHBzOi8vZWRrMi5ncm91cHMuaW8v Zy9kZXZlbC91bnN1YiI+VW5zdWJzY3JpYmU8L2E+CgogW2ltcG9ydGVyQHBhdGNoZXcub3JnXTxi cj4KPGRpdiB3aWR0aD0iMSIgc3R5bGU9ImNvbG9yOndoaXRlO2NsZWFyOmJvdGgiPl8uXyxfLl8s XzwvZGl2PgoNCg== ------=_Part_485_841164517.1703145691734--