From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam08on2046.outbound.protection.outlook.com [40.107.100.46]) by sourceware.org (Postfix) with ESMTPS id AC0FE3857C4D for ; Tue, 18 Aug 2020 12:53:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org AC0FE3857C4D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: sourceware.org; spf=none smtp.mailfrom=AlokKumar.Sharma@amd.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FHPYPFrogg/5njSvtos+YKr3G4D1WRg8WnMo1JUcRvRAdaa6f41vY+l/sZyn2rT1jvChfwLgszrPdf9eldVCekZ8/3pzpMuGbFZSgukuujyJoeCcYKXOdElC4vR45D1vK5CyBajD8pzNZmtMlMt4PIBge6Q++uZcPj1K/48oFqRZOlAFAtPuMR7i54SngM6ew1cjsYzuuRa88FyS80RzQ/u9jpjUaYcZGFGlHDwBh+/SZclVMc6f+fy/1EyLI0lMGwK522EB3CnAykPujQuV8XAftUsdXwaLxPFx6dTfi+KEJR4DcZNd59hqKxp72A7+F8Ebm0JB8yRChWQ9lxnyYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CzZGfrVOolw0+vBYUpNonnAz58ksyOLYGfifMAs/6X8=; b=R28W1s8+p7FwIuahIWL6w36+fhLkjsAu0Y4HSnxnYLYg/2M6OwuEkRND6CN3ERI4Exv/jlxrOOLmQrdootX8f9i4+owygU6CTSya8/dSkmAo1pFijF+Xv331++HbaNSuX3axCskjUIwQR5dlkmIRlEkcvZAesfDBHPfCJMXa+gN24ZbQNOkgRpEM0nxVvR4+2nCTsnXU8I5WMHykDn7dwvmtz7rAzNDos3XzuZLkcooNEi00zg0AtSYu0y3Zde1HXxz6diRuUc7WSNYTCEwX8/0DcvCSsRc465W28XdpBBrU0v3YUfZwl8WaEHvqSMT4m/WKdQ7SEqr7fejE6KQjCQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CzZGfrVOolw0+vBYUpNonnAz58ksyOLYGfifMAs/6X8=; b=AgALFyos0m1fYA6l2DwfApkVyk1hXVF9oFbsu6jgCneJdzUO+HxNeL1Jnis/X3hNBP8+QEz8HAqlql7WWKn3NkJ1Leo16355pXDuIKk7vwS1g95IX3J0xiNz2L9dBkg/hicw1y1C6qpo6Ea6y6G+6FkIgzASlxOgNaZ87Wrx688= Received: from DM5PR12MB1644.namprd12.prod.outlook.com (2603:10b6:4:f::17) by DM6PR12MB3083.namprd12.prod.outlook.com (2603:10b6:5:11d::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3305.24; Tue, 18 Aug 2020 12:53:11 +0000 Received: from DM5PR12MB1644.namprd12.prod.outlook.com ([fe80::75a2:2c3a:92d3:7324]) by DM5PR12MB1644.namprd12.prod.outlook.com ([fe80::75a2:2c3a:92d3:7324%12]) with mapi id 15.20.3283.028; Tue, 18 Aug 2020 12:53:10 +0000 From: "Sharma, Alok Kumar" To: Andrew Burgess , Tom Tromey CC: "gdb-patches@sourceware.org" , "George, Jini Susan" , "Achra, Nitika" Subject: RE: [PATCH] Fix for incorrect breakpoint set in case of flang compiled binary Thread-Topic: [PATCH] Fix for incorrect breakpoint set in case of flang compiled binary Thread-Index: AdZ0qFa5g9X1JOhZT2iGdRxV4w0gXAAog3iAAAR+/EA= Date: Tue, 18 Aug 2020 12:53:10 +0000 Message-ID: References: <20200818102903.GL853475@embecosm.com> In-Reply-To: <20200818102903.GL853475@embecosm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_Enabled=true; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_SetDate=2020-08-18T12:38:02Z; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_Method=Privileged; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_Name=Non-Business; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_ActionId=fea64c8c-92c7-477f-a53a-0000d0984662; MSIP_Label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_ContentBits=0 msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_enabled: true msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_setdate: 2020-08-18T12:53:06Z msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_method: Privileged msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_name: Non-Business msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_siteid: 3dd8961f-e488-4e60-8e11-a82d994e183d msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_actionid: d6615685-e932-42b0-b5bd-0000e7a0151a msip_label_f2ed062d-8486-4f50-a4f1-3cce0dd00d64_contentbits: 0 authentication-results: embecosm.com; dkim=none (message not signed) header.d=none;embecosm.com; dmarc=none action=none header.from=amd.com; x-originating-ip: [103.110.48.43] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 8803d9de-c858-4a39-067c-08d84375a9a2 x-ms-traffictypediagnostic: DM6PR12MB3083: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Fq3wkE7vTTuEFcQxafdLLkIKB2QZ19wU1RyAn2RBH5PBUzIw5c2+Yr+SbWZHxT6d1vuAq8be94kbkvuDkjCV0eXfNWmS0yRRKF1FuUbnrEv8vH9zJesWo4wreVrTiuNFD2VNrOQPHPLJkIrNZC6EftCtooC94zVlRMzN3xnqwDsKdAJml9hgmraYIN7RPTpNeFHdbJN/NiEHlJ5OJmRsjQpjPZuwPE42suLsgUBdWNLMeyFjSNmDobT5ipPZsrrUMWL27SkyunYI8MlNrI7BPjzBIghcRvp1tc7Er9t/nnbcduBnyM0ENf8NAtd3aNp5QEDD3lgdp6HCJAUTsi0gyA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM5PR12MB1644.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(39860400002)(376002)(136003)(366004)(396003)(346002)(110136005)(478600001)(316002)(54906003)(186003)(26005)(71200400001)(86362001)(53546011)(6506007)(7696005)(99936003)(2906002)(52536014)(76116006)(66946007)(66446008)(66616009)(66476007)(66556008)(64756008)(4326008)(55016002)(33656002)(8936002)(9686003)(8676002)(5660300002)(83380400001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: c4HaBVrHPIA7x2vqmgSRnFLbAgVZ4tTCzNNCFzZVhbP7axkkig9vTNV8LvsM63m6q24EmwRJtyZUBFVduTR+ApXtBIhy9sv4hNZlZeVh0wGMNRId7w5ZjSkLkQex/YIvP5Xfc96mECfGInmd4yrYigbzFKl5Tt0wXDDdzjxEI87/DiFcUGjDuWthu+i+/KWcGv3/x08Fk7YEfu7AdHtdpDtSZoTepeldZL7hDMUmdg+kxf4znEjvB2Ee4qI5eCpm1cT/526QDsmzaXGDY3WVOnxOBMAD3a7Prz0aKLSMtQpeRYkOK7+ppgvVfBrawIdaTh00OsdpJm64NPr2xlIdC3UsnA2+bM85ZmI/FdwUSKRU0KSr78OIDB21Y7N5rDz+X7+sYVGnH3YegbzZ6tarQBa+2ROfz7VwbvKk0UBKCVQIj9Tl9UYKmgFceivksX27fqX1aFELVlIRPkiFUcbszBqNamokAnt11BFY7w3oUJg5VDCTojQKJWYXRzDO/Y0vmU4sJaFjc74K+4Huri3FYZe7mGZyaVsWEtUg3M6w5WA0fCMu5dZDYDQE5KpGt7OCt8BhGBC6pR/Erst80GNirAyULhcuTpbeo7D3/FSJ4fVcEYndTtSBSPtsuBfg4aYcR1ydjC7xa/xO+0D+DWqnPg== Content-Type: multipart/mixed; boundary="_002_DM5PR12MB16442B8DF80CFD21E310E33A9E5C0DM5PR12MB1644namp_" MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR12MB1644.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8803d9de-c858-4a39-067c-08d84375a9a2 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Aug 2020 12:53:10.7348 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 4PBAj+1K82kA6FbS5ZUHP+Mj6ar7svLUMRBrcWWZsH92EZ2RfvtbSFN1KlxZf7GEPaXXxPSnpXwhBYv/sK3d4w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3083 X-Spam-Status: No, score=-7.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_ASCII_DIVIDERS, RCVD_IN_ABUSEAT, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Aug 2020 12:53:19 -0000 --_002_DM5PR12MB16442B8DF80CFD21E310E33A9E5C0DM5PR12MB1644namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Thanks Tom and Andrew for your comments. Hopefully addressed in the attache= d updated patch. Please find my below answers for your queries. > We have the files producer.{c,h} that wrap up tests just like this one. = If feels like we should add a new test to those files that matches all clan= g backend based compilers, then make use of this new test throughout. > I'd keep the name of the test fairly generic, the important thing here is= the backend technology right, not the frontend language? So if I added a = new language with a clang backend I'd likely run into the same issues. Thanks for your suggestion. I have updated the patch for same. > Space before "(". Though the code is moved, I have taken care of the comment in general. > Does it really start with a space? That seems weird. Agreed but it has space at the start. >> +# break main for Flang compiler already breaks here > Do you know why? Line number 46 is the place where breakpoint to main is hit for Flang compi= led binary and that looks Okey. Below is the snippet from gdb.fortran/ ------------------------------------------ 16 program vla_struct 17 type :: one 18 integer, allocatable :: ivla (:, :, :) 19 end type one 20 type :: two 21 integer, allocatable :: ivla1 (:, :, :) 22 integer, allocatable :: ivla2 (:, :) 23 end type two 24 type :: three 25 integer :: ivar 26 integer, allocatable :: ivla (:) 27 end type three 28 type :: four 29 integer, allocatable :: ivla (:) 30 integer :: ivar 31 end type four 32 type :: five 33 type(one) :: tone 34 end type five 35 36 type(one), target :: onev 37 type(two) :: twov 38 type(three) :: threev 39 type(four) :: fourv 40 type(five) :: fivev 41 type(five) :: fivearr (2) 42 type(five), allocatable :: fivedynarr (:) 43 logical :: l 44 integer :: i, j 45 46 allocate (onev%ivla (11,22,33)) ! before-allocated 47 l =3D allocated(onev%ivla) 48 ------------------------------------------=20 gdb/ChangeLog * amd64-tdep.c (amd64_skip_prologue): Using symbol table to find the end of prologue for flang compiled binaries. * arm-tdep.c (arm_skip_prologue): Likewise. * i386-tdep.c (i386_skip_prologue): Likewise. * producer.c (producer_is_llvm): New function. (producer_parsing_tests): Added new tests for clang/flang. * producer.h (producer_is_llvm): New declaration. gdb/testsuite/ChangeLog * gdb.fortran/vla-type.exp: Skip commands not required for the Flang compiled binaries after prologue fix. Regards, Alok -----Original Message----- From: Andrew Burgess =20 Sent: Tuesday, August 18, 2020 3:59 PM To: Sharma, Alok Kumar Cc: gdb-patches@sourceware.org; George, Jini Susan ; Achra, Nitika Subject: Re: [PATCH] Fix for incorrect breakpoint set in case of flang comp= iled binary [CAUTION: External Email] * Sharma, Alok Kumar [2020-08-17 15:17:02 +0000]= : > Hi All, > > I request you all to please review this patch. Below are the details. > > Problem Description: > Currently, GDB is not able to set a breakpoint at subprogram post=20 > prologue for flang generated binaries. This is due to clang having two=20 > line notes one before and another after the prologue. > Resolution: > Now the end of prologue is determined using symbol table, which was=20 > the way for clang generated binaries already. Since clang and flang=20 > both share same back-end it is true for flang as well. > > gdb/ChangeLog > > * amd64-tdep.c (amd64_skip_prologue): Using symbol table > to find the end of prologue for flang compiled binaries. > * arm-tdep.c (arm_skip_prologue): Likewise. > * i386-tdep.c (i386_skip_prologue): Likewise. > > gdb/testsuite/ChangeLog > > * gdb.fortran/vla-type.exp: Skip commands not required for > the Flang compiled binaries after prologue fix. > > Regards, > Alok > > > From 6f578b992c789196478742b71af6b75fb76573f3 Mon Sep 17 00:00:00 2001 > From: Alok Kumar Sharma > Date: Mon, 17 Aug 2020 17:04:11 +0530 > Subject: [PATCH] Fix for incorrect breakpoint set in case of flang=20 > compiled binary > > Currently, GDB is not able to set a breakpoint at subprogram post=20 > prologue for flang generated binaries. This is due to clang having two=20 > line notes one before and another after the prologue. > Now the end of prologue is determined using symbol table, which was=20 > the way for clang generated binaries already. Since clang and flang=20 > both share same back-end it is true for flang as well. > > gdb/ChangeLog > > * amd64-tdep.c (amd64_skip_prologue): Using symbol table > to find the end of prologue for flang compiled binaries. > * arm-tdep.c (arm_skip_prologue): Likewise. > * i386-tdep.c (i386_skip_prologue): Likewise. > > gdb/testsuite/ChangeLog > > * gdb.fortran/vla-type.exp: Skip commands not required for > the Flang compiled binaries after prologue fix. > > Change-Id: I5609f979315effc213feeb6dde6a01a024e0c487 > --- > gdb/ChangeLog | 7 +++++++ > gdb/amd64-tdep.c | 5 +++-- > gdb/arm-tdep.c | 3 ++- > gdb/i386-tdep.c | 5 +++-- > gdb/testsuite/ChangeLog | 5 +++++ > gdb/testsuite/gdb.fortran/vla-type.exp | 8 ++++++-- > 6 files changed, 26 insertions(+), 7 deletions(-) > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog index=20 > 3e733a73f0..3eb07cb5d0 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,10 @@ > +2020-08-14 Alok Kumar Sharma > + > + * amd64-tdep.c (amd64_skip_prologue): Using symbol table > + to find the end of prologue for flang compiled binaries. > + * arm-tdep.c (arm_skip_prologue): Likewise. > + * i386-tdep.c (i386_skip_prologue): Likewise. > + > 2020-08-17 Tom de Vries > > PR gdb/26393 > diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c index=20 > 768fe63bdd..6f05f60548 100644 > --- a/gdb/amd64-tdep.c > +++ b/gdb/amd64-tdep.c > @@ -2547,12 +2547,13 @@ amd64_skip_prologue (struct gdbarch *gdbarch, COR= E_ADDR start_pc) > =3D skip_prologue_using_sal (gdbarch, func_addr); > struct compunit_symtab *cust =3D find_pc_compunit_symtab=20 > (func_addr); > > - /* Clang always emits a line note before the prologue and another > + /* Clang/Flang always emit a line note before the prologue and=20 > + another > one after. We trust clang to emit usable line notes. */ > if (post_prologue_pc > && (cust !=3D NULL > && COMPUNIT_PRODUCER (cust) !=3D NULL > - && startswith (COMPUNIT_PRODUCER (cust), "clang "))) > + && (startswith (COMPUNIT_PRODUCER (cust), "clang ") > + || startswith(COMPUNIT_PRODUCER(cust), " F90=20 > + Flang")))) > return std::max (start_pc, post_prologue_pc); We have the files producer.{c,h} that wrap up tests just like this one. If= feels like we should add a new test to those files that matches all clang = backend based compilers, then make use of this new test throughout. I'd keep the name of the test fairly generic, the important thing here is t= he backend technology right, not the frontend language? So if I added a ne= w language with a clang backend I'd likely run into the same issues. Thanks, Andrew > } > > diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index=20 > 9cedcc8575..27a8b519ed 100644 > --- a/gdb/arm-tdep.c > +++ b/gdb/arm-tdep.c > @@ -1351,7 +1351,8 @@ arm_skip_prologue (struct gdbarch *gdbarch, CORE_AD= DR pc) > && (cust =3D=3D NULL > || COMPUNIT_PRODUCER (cust) =3D=3D NULL > || startswith (COMPUNIT_PRODUCER (cust), "GNU ") > - || startswith (COMPUNIT_PRODUCER (cust), "clang "))) > + || startswith (COMPUNIT_PRODUCER (cust), "clang ") > + || startswith (COMPUNIT_PRODUCER (cust), " F90 Flang"))) > return post_prologue_pc; > > if (post_prologue_pc !=3D 0) > diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index=20 > 9b905c1996..4c1cf3acd7 100644 > --- a/gdb/i386-tdep.c > +++ b/gdb/i386-tdep.c > @@ -1847,12 +1847,13 @@ i386_skip_prologue (struct gdbarch *gdbarch, CORE= _ADDR start_pc) > =3D skip_prologue_using_sal (gdbarch, func_addr); > struct compunit_symtab *cust =3D find_pc_compunit_symtab=20 > (func_addr); > > - /* Clang always emits a line note before the prologue and another > + /* Clang/Flang always emit a line note before the prologue and=20 > + another > one after. We trust clang to emit usable line notes. */ > if (post_prologue_pc > && (cust !=3D NULL > && COMPUNIT_PRODUCER (cust) !=3D NULL > - && startswith (COMPUNIT_PRODUCER (cust), "clang "))) > + && (startswith (COMPUNIT_PRODUCER (cust), "clang ") > + || startswith (COMPUNIT_PRODUCER (cust), " F90=20 > + Flang")))) > return std::max (start_pc, post_prologue_pc); > } > > diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index=20 > f0b7949fd6..9d6e42ad39 100644 > --- a/gdb/testsuite/ChangeLog > +++ b/gdb/testsuite/ChangeLog > @@ -1,3 +1,8 @@ > +2020-08-14 Alok Kumar Sharma > + > + * gdb.fortran/vla-type.exp: Skip commands not required for > + the Flang compiled binaries after prologue fix. > + > 2020-08-16 Tom de Vries > > PR gdb/25350 > diff --git a/gdb/testsuite/gdb.fortran/vla-type.exp=20 > b/gdb/testsuite/gdb.fortran/vla-type.exp > index 925c583edc..e2b8d71b4c 100755 > --- a/gdb/testsuite/gdb.fortran/vla-type.exp > +++ b/gdb/testsuite/gdb.fortran/vla-type.exp > @@ -33,8 +33,12 @@ set int [fortran_int4] > > # Check if not allocated VLA in type does not break # the debugger=20 > when accessing it. > -gdb_breakpoint [gdb_get_line_number "before-allocated"]=20 > -gdb_continue_to_breakpoint "before-allocated" > +# break main for Flang compiler already breaks here if=20 > +![test_compiler_info "clang-*"] { > + gdb_breakpoint [gdb_get_line_number "before-allocated"] > + gdb_continue_to_breakpoint "before-allocated" > +} > + > gdb_test "print twov" " =3D \\\( ivla1 =3D , ivla2 =3D \\\)" \ > "print twov before allocated" > gdb_test "print twov%ivla1" " =3D " \ > -- > 2.17.1 --_002_DM5PR12MB16442B8DF80CFD21E310E33A9E5C0DM5PR12MB1644namp_ Content-Type: application/octet-stream; name="0001-Fix-for-incorrect-breakpoint-set-in-case-of-flang-co.patch" Content-Description: 0001-Fix-for-incorrect-breakpoint-set-in-case-of-flang-co.patch Content-Disposition: attachment; filename="0001-Fix-for-incorrect-breakpoint-set-in-case-of-flang-co.patch"; size=8117; creation-date="Mon, 17 Aug 2020 15:07:36 GMT"; modification-date="Tue, 18 Aug 2020 12:36:13 GMT" Content-Transfer-Encoding: base64 RnJvbSA1ODA2NTY1MTZlNjQ5ZTEzM2JkMmRjYTI5MWVhMTJjOTY4MGFjYmFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbG9rIEt1bWFyIFNoYXJtYSA8QWxva0t1bWFyLlNoYXJtYUBh bWQuY29tPgpEYXRlOiBNb24sIDE3IEF1ZyAyMDIwIDE3OjA0OjExICswNTMwClN1YmplY3Q6IFtQ QVRDSF0gRml4IGZvciBpbmNvcnJlY3QgYnJlYWtwb2ludCBzZXQgaW4gY2FzZSBvZiBmbGFuZyBj b21waWxlZAogYmluYXJ5CgogIEN1cnJlbnRseSwgR0RCIGlzIG5vdCBhYmxlIHRvIHNldCBhIGJy ZWFrcG9pbnQgYXQgc3VicHJvZ3JhbSBwb3N0CnByb2xvZ3VlIGZvciBmbGFuZyBnZW5lcmF0ZWQg YmluYXJpZXMuIFRoaXMgaXMgZHVlIHRvIGNsYW5nIGhhdmluZwp0d28gbGluZSBub3RlcyBvbmUg YmVmb3JlIGFuZCBhbm90aGVyIGFmdGVyIHRoZSBwcm9sb2d1ZS4KICBOb3cgdGhlIGVuZCBvZiBw cm9sb2d1ZSBpcyBkZXRlcm1pbmVkIHVzaW5nIHN5bWJvbCB0YWJsZSwgd2hpY2ggd2FzCnRoZSB3 YXkgZm9yIGNsYW5nIGdlbmVyYXRlZCBiaW5hcmllcyBhbHJlYWR5LiBTaW5jZSBjbGFuZyBhbmQg ZmxhbmcKYm90aCBzaGFyZSBzYW1lIGJhY2stZW5kIGl0IGlzIHRydWUgZm9yIGZsYW5nIGFzIHdl bGwuCgpnZGIvQ2hhbmdlTG9nCgogICAgICAqIGFtZDY0LXRkZXAuYyAoYW1kNjRfc2tpcF9wcm9s b2d1ZSk6IFVzaW5nIHN5bWJvbCB0YWJsZQogICAgICB0byBmaW5kIHRoZSBlbmQgb2YgcHJvbG9n dWUgZm9yIGZsYW5nIGNvbXBpbGVkIGJpbmFyaWVzLgogICAgICAqIGFybS10ZGVwLmMgKGFybV9z a2lwX3Byb2xvZ3VlKTogTGlrZXdpc2UuCiAgICAgICogaTM4Ni10ZGVwLmMgKGkzODZfc2tpcF9w cm9sb2d1ZSk6IExpa2V3aXNlLgogICAgICAqIHByb2R1Y2VyLmMgKHByb2R1Y2VyX2lzX2xsdm0p OiBOZXcgZnVuY3Rpb24uCiAgICAgIChwcm9kdWNlcl9wYXJzaW5nX3Rlc3RzKTogQWRkZWQgbmV3 IHRlc3RzIGZvciBjbGFuZy9mbGFuZy4KICAgICAgKiBwcm9kdWNlci5oIChwcm9kdWNlcl9pc19s bHZtKTogTmV3IGRlY2xhcmF0aW9uLgoKZ2RiL3Rlc3RzdWl0ZS9DaGFuZ2VMb2cKCiAgICAgICog Z2RiLmZvcnRyYW4vdmxhLXR5cGUuZXhwOiBTa2lwIGNvbW1hbmRzIG5vdCByZXF1aXJlZCBmb3IK ICAgICAgdGhlIEZsYW5nIGNvbXBpbGVkIGJpbmFyaWVzIGFmdGVyIHByb2xvZ3VlIGZpeC4KCkNo YW5nZS1JZDogSTU2MDlmOTc5MzE1ZWZmYzIxM2ZlZWI2ZGRlNmEwMWEwMjRlMGM0ODcKLS0tCiBn ZGIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwICsrKysrKysrKwogZ2Ri L2FtZDY0LXRkZXAuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgNyArKysrLS0tCiBnZGIvYXJt LXRkZXAuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0ICsrKy0KIGdkYi9pMzg2LXRkZXAu YyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDggKysrKystLS0KIGdkYi9wcm9kdWNlci5jICAg ICAgICAgICAgICAgICAgICAgICAgIHwgMjggKysrKysrKysrKysrKysrKysrKysrKysrKysKIGdk Yi9wcm9kdWNlci5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKysrKwogZ2RiL3Rlc3Rz dWl0ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgfCAgNSArKysrKwogZ2RiL3Rlc3RzdWl0ZS9n ZGIuZm9ydHJhbi92bGEtdHlwZS5leHAgfCAgOCArKysrKystLQogOCBmaWxlcyBjaGFuZ2VkLCA2 NSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dkYi9DaGFuZ2VM b2cgYi9nZGIvQ2hhbmdlTG9nCmluZGV4IDNlNzMzYTczZjAuLjYzYzk3ZjRjNTAgMTAwNjQ0Ci0t LSBhL2dkYi9DaGFuZ2VMb2cKKysrIGIvZ2RiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy MDIwLTA4LTE0ICBBbG9rIEt1bWFyIFNoYXJtYSAgPEFsb2tLdW1hci5TaGFybWFAYW1kLmNvbT4K KworCSogYW1kNjQtdGRlcC5jIChhbWQ2NF9za2lwX3Byb2xvZ3VlKTogVXNpbmcgc3ltYm9sIHRh YmxlCisJdG8gZmluZCB0aGUgZW5kIG9mIHByb2xvZ3VlIGZvciBmbGFuZyBjb21waWxlZCBiaW5h cmllcy4KKwkqIGFybS10ZGVwLmMgKGFybV9za2lwX3Byb2xvZ3VlKTogTGlrZXdpc2UuCisJKiBp Mzg2LXRkZXAuYyAoaTM4Nl9za2lwX3Byb2xvZ3VlKTogTGlrZXdpc2UuCisJKiBwcm9kdWNlci5j IChwcm9kdWNlcl9pc19sbHZtKTogTmV3IGZ1bmN0aW9uLgorCShwcm9kdWNlcl9wYXJzaW5nX3Rl c3RzKTogQWRkZWQgbmV3IHRlc3RzIGZvciBjbGFuZy9mbGFuZy4KKwkqIHByb2R1Y2VyLmggKHBy b2R1Y2VyX2lzX2xsdm0pOiBOZXcgZGVjbGFyYXRpb24uCisKIDIwMjAtMDgtMTcgIFRvbSBkZSBW cmllcyAgPHRkZXZyaWVzQHN1c2UuZGU+CiAKIAlQUiBnZGIvMjYzOTMKZGlmZiAtLWdpdCBhL2dk Yi9hbWQ2NC10ZGVwLmMgYi9nZGIvYW1kNjQtdGRlcC5jCmluZGV4IDc2OGZlNjNiZGQuLjU5Zjdj OWY4ODUgMTAwNjQ0Ci0tLSBhL2dkYi9hbWQ2NC10ZGVwLmMKKysrIGIvZ2RiL2FtZDY0LXRkZXAu YwpAQCAtMjU0NywxMiArMjU0NywxMyBAQCBhbWQ2NF9za2lwX3Byb2xvZ3VlIChzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIHN0YXJ0X3BjKQogCT0gc2tpcF9wcm9sb2d1ZV91c2lu Z19zYWwgKGdkYmFyY2gsIGZ1bmNfYWRkcik7CiAgICAgICBzdHJ1Y3QgY29tcHVuaXRfc3ltdGFi ICpjdXN0ID0gZmluZF9wY19jb21wdW5pdF9zeW10YWIgKGZ1bmNfYWRkcik7CiAKLSAgICAgIC8q IENsYW5nIGFsd2F5cyBlbWl0cyBhIGxpbmUgbm90ZSBiZWZvcmUgdGhlIHByb2xvZ3VlIGFuZCBh bm90aGVyCi0JIG9uZSBhZnRlci4gIFdlIHRydXN0IGNsYW5nIHRvIGVtaXQgdXNhYmxlIGxpbmUg bm90ZXMuICAqLworICAgICAgLyogTExWTSBiYWNrZW5kIChDbGFuZy9GbGFuZykgYWx3YXlzIGVt aXRzIGEgbGluZSBub3RlIGJlZm9yZSB0aGUKKyAgICAgICAgIHByb2xvZ3VlIGFuZCBhbm90aGVy IG9uZSBhZnRlci4gIFdlIHRydXN0IGNsYW5nIHRvIGVtaXQgdXNhYmxlCisgICAgICAgICBsaW5l IG5vdGVzLiAgKi8KICAgICAgIGlmIChwb3N0X3Byb2xvZ3VlX3BjCiAJICAmJiAoY3VzdCAhPSBO VUxMCiAJICAgICAgJiYgQ09NUFVOSVRfUFJPRFVDRVIgKGN1c3QpICE9IE5VTEwKLQkgICAgICAm JiBzdGFydHN3aXRoIChDT01QVU5JVF9QUk9EVUNFUiAoY3VzdCksICJjbGFuZyAiKSkpCisJICAg ICAgJiYgcHJvZHVjZXJfaXNfbGx2bSAoQ09NUFVOSVRfUFJPRFVDRVIgKGN1c3QpKSkpCiAgICAg ICAgIHJldHVybiBzdGQ6Om1heCAoc3RhcnRfcGMsIHBvc3RfcHJvbG9ndWVfcGMpOwogICAgIH0K IApkaWZmIC0tZ2l0IGEvZ2RiL2FybS10ZGVwLmMgYi9nZGIvYXJtLXRkZXAuYwppbmRleCA5Y2Vk Y2M4NTc1Li4wNzRlZWRiNDgwIDEwMDY0NAotLS0gYS9nZGIvYXJtLXRkZXAuYworKysgYi9nZGIv YXJtLXRkZXAuYwpAQCAtNjAsNiArNjAsOCBAQAogI2luY2x1ZGUgInJlY29yZC1mdWxsLmgiCiAj aW5jbHVkZSA8YWxnb3JpdGhtPgogCisjaW5jbHVkZSAicHJvZHVjZXIuaCIKKwogI2lmIEdEQl9T RUxGX1RFU1QKICNpbmNsdWRlICJnZGJzdXBwb3J0L3NlbGZ0ZXN0LmgiCiAjZW5kaWYKQEAgLTEz NTEsNyArMTM1Myw3IEBAIGFybV9za2lwX3Byb2xvZ3VlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJj aCwgQ09SRV9BRERSIHBjKQogCSAgJiYgKGN1c3QgPT0gTlVMTAogCSAgICAgIHx8IENPTVBVTklU X1BST0RVQ0VSIChjdXN0KSA9PSBOVUxMCiAJICAgICAgfHwgc3RhcnRzd2l0aCAoQ09NUFVOSVRf UFJPRFVDRVIgKGN1c3QpLCAiR05VICIpCi0JICAgICAgfHwgc3RhcnRzd2l0aCAoQ09NUFVOSVRf UFJPRFVDRVIgKGN1c3QpLCAiY2xhbmcgIikpKQorCSAgICAgIHx8IHByb2R1Y2VyX2lzX2xsdm0g KENPTVBVTklUX1BST0RVQ0VSIChjdXN0KSkpKQogCXJldHVybiBwb3N0X3Byb2xvZ3VlX3BjOwog CiAgICAgICBpZiAocG9zdF9wcm9sb2d1ZV9wYyAhPSAwKQpkaWZmIC0tZ2l0IGEvZ2RiL2kzODYt dGRlcC5jIGIvZ2RiL2kzODYtdGRlcC5jCmluZGV4IDliOTA1YzE5OTYuLmQ5ZmEyYjkyNjQgMTAw NjQ0Ci0tLSBhL2dkYi9pMzg2LXRkZXAuYworKysgYi9nZGIvaTM4Ni10ZGVwLmMKQEAgLTY1LDYg KzY1LDcgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNs dWRlIDx1bm9yZGVyZWRfc2V0PgorI2luY2x1ZGUgInByb2R1Y2VyLmgiCiAKIC8qIFJlZ2lzdGVy IG5hbWVzLiAgKi8KIApAQCAtMTg0NywxMiArMTg0OCwxMyBAQCBpMzg2X3NraXBfcHJvbG9ndWUg KHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgc3RhcnRfcGMpCiAJPSBza2lwX3By b2xvZ3VlX3VzaW5nX3NhbCAoZ2RiYXJjaCwgZnVuY19hZGRyKTsKICAgICAgIHN0cnVjdCBjb21w dW5pdF9zeW10YWIgKmN1c3QgPSBmaW5kX3BjX2NvbXB1bml0X3N5bXRhYiAoZnVuY19hZGRyKTsK IAotICAgICAgLyogQ2xhbmcgYWx3YXlzIGVtaXRzIGEgbGluZSBub3RlIGJlZm9yZSB0aGUgcHJv bG9ndWUgYW5kIGFub3RoZXIKLQkgb25lIGFmdGVyLiAgV2UgdHJ1c3QgY2xhbmcgdG8gZW1pdCB1 c2FibGUgbGluZSBub3Rlcy4gICovCisgICAgICAvKiBMTFZNIGJhY2tlbmQgKENsYW5nL0ZsYW5n KSBhbHdheXMgZW1pdHMgYSBsaW5lIG5vdGUgYmVmb3JlIHRoZQorICAgICAgICAgcHJvbG9ndWUg YW5kIGFub3RoZXIgb25lIGFmdGVyLiAgV2UgdHJ1c3QgY2xhbmcgdG8gZW1pdCB1c2FibGUKKyAg ICAgICAgIGxpbmUgbm90ZXMuICAqLwogICAgICAgaWYgKHBvc3RfcHJvbG9ndWVfcGMKIAkgICYm IChjdXN0ICE9IE5VTEwKIAkgICAgICAmJiBDT01QVU5JVF9QUk9EVUNFUiAoY3VzdCkgIT0gTlVM TAotCSAgICAgICYmIHN0YXJ0c3dpdGggKENPTVBVTklUX1BST0RVQ0VSIChjdXN0KSwgImNsYW5n ICIpKSkKKwkgICAgICAmJiBwcm9kdWNlcl9pc19sbHZtIChDT01QVU5JVF9QUk9EVUNFUiAoY3Vz dCkpKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4IChzdGFydF9wYywgcG9zdF9wcm9sb2d1ZV9w Yyk7CiAgICAgfQogIApkaWZmIC0tZ2l0IGEvZ2RiL3Byb2R1Y2VyLmMgYi9nZGIvcHJvZHVjZXIu YwppbmRleCA3MzVhOTI4ZjMzLi5mZTg5ZTdkNTM2IDEwMDY0NAotLS0gYS9nZGIvcHJvZHVjZXIu YworKysgYi9nZGIvcHJvZHVjZXIuYwpAQCAtMTI1LDYgKzEyNSwxOCBAQCBwcm9kdWNlcl9pc19p Y2MgKGNvbnN0IGNoYXIgKnByb2R1Y2VyLCBpbnQgKm1ham9yLCBpbnQgKm1pbm9yKQogICByZXR1 cm4gZmFsc2U7CiB9CiAKKy8qIFNlZSBwcm9kdWNlci5oLiAgKi8KKworYm9vbAorcHJvZHVjZXJf aXNfbGx2bSAoY29uc3QgY2hhciAqcHJvZHVjZXIpCit7CisgIGlmIChwcm9kdWNlciA9PSBOVUxM IHx8ICEoc3RhcnRzd2l0aCAocHJvZHVjZXIsICJjbGFuZyAiKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHx8IHN0YXJ0c3dpdGggKHByb2R1Y2VyLCAiIEY5MCBGbGFuZyAiKSkpCisgICAg cmV0dXJuIGZhbHNlOworCisgIHJldHVybiB0cnVlOworfQorCiAjaWYgZGVmaW5lZCBHREJfU0VM Rl9URVNUCiBuYW1lc3BhY2Ugc2VsZnRlc3RzIHsKIG5hbWVzcGFjZSBwcm9kdWNlciB7CkBAIC0y MDMsNiArMjE1LDIyIEBAIFZlcnNpb24gMTguMCBCZXRhIjsKICAgICBTRUxGX0NIRUNLIChwcm9k dWNlcl9pc19nY2MgKGdudV9leHAsICZtYWpvciwgJm1pbm9yKQogCQkmJiBtYWpvciA9PSA1ICYm IG1pbm9yID09IDApOwogICB9CisKKyAgeworICAgIHN0YXRpYyBjb25zdCBjaGFyIGNsYW5nX2xs dm1fZXhwW10gPSAiY2xhbmcgdmVyc2lvbiAxMi4wLjAgKENMQU5HOiBibGQjOCkiOworICAgIGlu dCBtYWpvciA9IDAsIG1pbm9yID0gMDsKKyAgICBTRUxGX0NIRUNLICghcHJvZHVjZXJfaXNfaWNj IChjbGFuZ19sbHZtX2V4cCwgTlVMTCwgTlVMTCkpOworICAgIFNFTEZfQ0hFQ0sgKCFwcm9kdWNl cl9pc19nY2MgKGNsYW5nX2xsdm1fZXhwLCAmbWFqb3IsICZtaW5vcikpOworICAgIFNFTEZfQ0hF Q0sgKHByb2R1Y2VyX2lzX2xsdm0gKGNsYW5nX2xsdm1fZXhwKSk7CisgIH0KKworICB7CisgICAg c3RhdGljIGNvbnN0IGNoYXIgZmxhbmdfbGx2bV9leHBbXSA9ICIgRjkwIEZsYW5nIC0gMS41IDIw MTctMDUtMDEiOworICAgIGludCBtYWpvciA9IDAsIG1pbm9yID0gMDsKKyAgICBTRUxGX0NIRUNL ICghcHJvZHVjZXJfaXNfaWNjIChmbGFuZ19sbHZtX2V4cCwgTlVMTCwgTlVMTCkpOworICAgIFNF TEZfQ0hFQ0sgKCFwcm9kdWNlcl9pc19nY2MgKGZsYW5nX2xsdm1fZXhwLCAmbWFqb3IsICZtaW5v cikpOworICAgIFNFTEZfQ0hFQ0sgKHByb2R1Y2VyX2lzX2xsdm0gKGZsYW5nX2xsdm1fZXhwKSk7 CisgIH0KIH0KIH0KIH0KZGlmZiAtLWdpdCBhL2dkYi9wcm9kdWNlci5oIGIvZ2RiL3Byb2R1Y2Vy LmgKaW5kZXggZDg5NzRkMzgxNC4uZTliYzMwOWIwYyAxMDA2NDQKLS0tIGEvZ2RiL3Byb2R1Y2Vy LmgKKysrIGIvZ2RiL3Byb2R1Y2VyLmgKQEAgLTUyLDQgKzUyLDggQEAgZXh0ZXJuIGludCBwcm9k dWNlcl9pc19nY2MgKGNvbnN0IGNoYXIgKnByb2R1Y2VyLCBpbnQgKm1ham9yLCBpbnQgKm1pbm9y KTsKICAgICAgICBydW5uaW5nIG9uIEludGVsKFIpIDY0LCBWZXJzaW9uIDE4LjAgQmV0YSAuLi4u Ii4gICovCiBleHRlcm4gYm9vbCBwcm9kdWNlcl9pc19pY2MgKGNvbnN0IGNoYXIgKnByb2R1Y2Vy LCBpbnQgKm1ham9yLCBpbnQgKm1pbm9yKTsKIAorLyogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZl biBQUk9EVUNFUiBzdHJpbmcgaXMgTExWTSAoY2xhbmcvZmxhbmcpIG9yCisgICBmYWxzZSBvdGhl cndpc2UuKi8KK2V4dGVybiBib29sIHByb2R1Y2VyX2lzX2xsdm0gKGNvbnN0IGNoYXIgKnByb2R1 Y2VyKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL0NoYW5nZUxvZyBiL2dk Yi90ZXN0c3VpdGUvQ2hhbmdlTG9nCmluZGV4IGYwYjc5NDlmZDYuLjlkNmU0MmFkMzkgMTAwNjQ0 Ci0tLSBhL2dkYi90ZXN0c3VpdGUvQ2hhbmdlTG9nCisrKyBiL2dkYi90ZXN0c3VpdGUvQ2hhbmdl TG9nCkBAIC0xLDMgKzEsOCBAQAorMjAyMC0wOC0xNCAgQWxvayBLdW1hciBTaGFybWEgIDxBbG9r S3VtYXIuU2hhcm1hQGFtZC5jb20+CisKKwkqIGdkYi5mb3J0cmFuL3ZsYS10eXBlLmV4cDogU2tp cCBjb21tYW5kcyBub3QgcmVxdWlyZWQgZm9yCisJdGhlIEZsYW5nIGNvbXBpbGVkIGJpbmFyaWVz IGFmdGVyIHByb2xvZ3VlIGZpeC4KKwogMjAyMC0wOC0xNiAgVG9tIGRlIFZyaWVzICA8dGRldnJp ZXNAc3VzZS5kZT4KIAogCVBSIGdkYi8yNTM1MApkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9n ZGIuZm9ydHJhbi92bGEtdHlwZS5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5mb3J0cmFuL3ZsYS10 eXBlLmV4cAppbmRleCA5MjVjNTgzZWRjLi5lMmI4ZDcxYjRjIDEwMDc1NQotLS0gYS9nZGIvdGVz dHN1aXRlL2dkYi5mb3J0cmFuL3ZsYS10eXBlLmV4cAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5m b3J0cmFuL3ZsYS10eXBlLmV4cApAQCAtMzMsOCArMzMsMTIgQEAgc2V0IGludCBbZm9ydHJhbl9p bnQ0XQogCiAjIENoZWNrIGlmIG5vdCBhbGxvY2F0ZWQgVkxBIGluIHR5cGUgZG9lcyBub3QgYnJl YWsKICMgdGhlIGRlYnVnZ2VyIHdoZW4gYWNjZXNzaW5nIGl0LgotZ2RiX2JyZWFrcG9pbnQgW2dk Yl9nZXRfbGluZV9udW1iZXIgImJlZm9yZS1hbGxvY2F0ZWQiXQotZ2RiX2NvbnRpbnVlX3RvX2Jy ZWFrcG9pbnQgImJlZm9yZS1hbGxvY2F0ZWQiCisjIGJyZWFrIG1haW4gZm9yIEZsYW5nIGNvbXBp bGVyIGFscmVhZHkgYnJlYWtzIGhlcmUKK2lmICFbdGVzdF9jb21waWxlcl9pbmZvICJjbGFuZy0q Il0geworICAgIGdkYl9icmVha3BvaW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJiZWZvcmUtYWxs b2NhdGVkIl0KKyAgICBnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAiYmVmb3JlLWFsbG9jYXRl ZCIKK30KKwogZ2RiX3Rlc3QgInByaW50IHR3b3YiICIgPSBcXFwoIGl2bGExID0gPG5vdCBhbGxv Y2F0ZWQ+LCBpdmxhMiA9IDxub3QgYWxsb2NhdGVkPiBcXFwpIiBcCiAgICJwcmludCB0d292IGJl Zm9yZSBhbGxvY2F0ZWQiCiBnZGJfdGVzdCAicHJpbnQgdHdvdiVpdmxhMSIgIiA9IDxub3QgYWxs b2NhdGVkPiIgXAotLSAKMi4xNy4xCgo= --_002_DM5PR12MB16442B8DF80CFD21E310E33A9E5C0DM5PR12MB1644namp_--