From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 91955 invoked by alias); 26 Jul 2016 17:15:57 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 91940 invoked by uid 89); 26 Jul 2016 17:15:56 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-lf0-f50.google.com Received: from mail-lf0-f50.google.com (HELO mail-lf0-f50.google.com) (209.85.215.50) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 26 Jul 2016 17:15:46 +0000 Received: by mail-lf0-f50.google.com with SMTP id g62so9801461lfe.3 for ; Tue, 26 Jul 2016 10:15:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:from:to:references:message-id:date :user-agent:mime-version:in-reply-to; bh=6isLk9AzeUMVjcge3WsrrsGgGwIa6dZulJMz+mLQb94=; b=ksNEWkC4o1/Gnfey5oKlPPDYYtijxBsfgX2u3hdgUSckFxOQh4ygvCPG6lhfMudn/U gS0w8F/TkLrp8n3IBbklUp5F0reF7IttHuaO6+i9Ewlu/usjPMbqq7rrf/sQcQWGjk2U ST9rPO1wCQvUA2qu1rz3gQQJ+9/XvUiOI8Tz+DD8SWY01SbIzfz/Bp49iRbBdkSxYidE AbjKRzsWx6PUG2+NTEIA52XvXpM3hhlGmvhtk5FSsa/i223tHkDwbs5+rejb4eIMOzGW 6iUqUQIG7FeFJCzULFGIRG+6L9wrcXEXLpPosmKVJguwJUA7WPRt9Ald6BoHfmT+aZfL 4gIg== X-Gm-Message-State: AEkoous5BxLMNKTs6/QfafHOLpQxDgRuhEzGGmjHw48HUSdpMWEvUpnkA6tswBNI5ZipnQ== X-Received: by 10.25.214.76 with SMTP id n73mr8254553lfg.162.1469553342311; Tue, 26 Jul 2016 10:15:42 -0700 (PDT) Received: from [192.168.4.39] (broadband-95-84-200-6.nationalcablenetworks.ru. [95.84.200.6]) by smtp.gmail.com with ESMTPSA id p128sm276873lfb.32.2016.07.26.10.15.40 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Jul 2016 10:15:41 -0700 (PDT) Subject: Re: Program-assigned thread names on Windows From: LRN To: gdb-patches@sourceware.org References: <5052d495-ea40-b364-96ea-9e68c90bd747@gmail.com> <14995502.J10EtrK3xV@ralph.baldwin.cx> <6a3446f9-63dc-67a1-3702-203d77c8d85d@gmail.com> <0cabec98-8411-2c3a-98d0-3d950de02bc5@gmail.com> <28023f06-f99c-77d1-10cf-5243f2a082a4@gmail.com> <0e59216f-77cb-608a-aa39-578c2610eda1@dronecode.org.uk> <0f064b2b-6b51-f132-caa6-a4c1a85585a3@gmail.com> Message-ID: <2c9f43ec-af6f-cdaf-8e45-b251588b9b89@gmail.com> Date: Tue, 26 Jul 2016 17:15:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Thunderbird/50.0a1 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="Gqrd964eFkuCourHPPAPFKXvGL55w5InV" X-IsSubscribed: yes X-SW-Source: 2016-07/txt/msg00351.txt.bz2 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --Gqrd964eFkuCourHPPAPFKXvGL55w5InV Content-Type: multipart/mixed; boundary="3XcQcd2dCXkwj7ocoG9GuxNU1sWw98oMK" From: LRN To: gdb-patches@sourceware.org Message-ID: <2c9f43ec-af6f-cdaf-8e45-b251588b9b89@gmail.com> Subject: Re: Program-assigned thread names on Windows References: <5052d495-ea40-b364-96ea-9e68c90bd747@gmail.com> <14995502.J10EtrK3xV@ralph.baldwin.cx> <6a3446f9-63dc-67a1-3702-203d77c8d85d@gmail.com> <0cabec98-8411-2c3a-98d0-3d950de02bc5@gmail.com> <28023f06-f99c-77d1-10cf-5243f2a082a4@gmail.com> <0e59216f-77cb-608a-aa39-578c2610eda1@dronecode.org.uk> <0f064b2b-6b51-f132-caa6-a4c1a85585a3@gmail.com> In-Reply-To: --3XcQcd2dCXkwj7ocoG9GuxNU1sWw98oMK Content-Type: multipart/mixed; boundary="------------14EAA150AFDB22022A232D77" This is a multi-part message in MIME format. --------------14EAA150AFDB22022A232D77 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Content-length: 3489 On 26.07.2016 18:40, LRN wrote: > On 26.07.2016 17:17, LRN wrote: >> On 26.07.2016 16:18, Jon Turney wrote: >>> On 26/07/2016 07:07, LRN wrote: >>>> On 26.07.2016 0:32, LRN wrote: >>>>>> On 25.07.2016 17:23, LRN wrote: >>>>>>>> On 25.07.2016 17:06, Jon Turney wrote: >>>>>>>>>> On 25/07/2016 14:34, LRN wrote: >>>>>>>>>>>> On 25.07.2016 15:17, Jon Turney wrote: >>>>>>>>>>>>>> On 23/07/2016 18:01, LRN wrote: >>>>>> seem to point to the stack, but that's all i can tell). Also, the 4-= th >>>>>> element (which is "Reserved for future use, must be zero") is not ze= ro when >>>>>> the exception is caught. >>>>>> In light of this, we should probably check for NumberParameters >=3D= 4. Or >>>>>> even NumberParameters >=3D 3, given that we don't really look at the= 4th >>>>>> parameter. >>> >>> It seems on x86_64, the structure is laid out by gcc as: >>> >>> 4 DWORD dwType >>> 4 padding >>> 8 LPCSTR szName >>> 4 DWORD dwThreadID >>> 4 DWORD dwFlags >>> >>> total size 24, so nNumberOfArguments =3D 3, so this is passed to the=20 >>> debugger as an array of 3 DWORD64s >>> >>> Of course, the 'correct' layout is defined by how the sample code is=20 >>> laid out by MSVC, which I'm guessing is the same, but haven't checked... >>> >>> So dwThreadID and dwFlags get packed together into=20 >>> ExceptionInformation[2]. Fortunately, dwFlags should be set to 0. >>> >>> Furthermore, accessing dwType as a DWORD64 value via=20 >>> ExceptionInformation[0] relies on the padding being zero initialized in= =20 >>> the debugee to have useful values! I guess you'll have to mask with 0xf= fff? >> >> I'll play a bit with the 64-bit exception-throwing example and see how >> WinDbg reacts to various combinations of alignment and argument counting, >> and will make gdb support the layout that WinDbg supports. >=20 > Played around with 64-bit WinDbg. > It worked with the code that i've used originally (from MSDN with no > significant changes). Also: >=20 > 1) WinDbg (of either bitness) doesn't care what the argument count is, as > long as it's at least 3 (0x1000, string pointer and thread ID); giving it= 2 > makes it silently drop the exception and not set the thread name >=20 > 2) WinDbg (of either bitness) currently doesn't care what you put in > dwFlags. I've tried filling dwFlags with garbage (a copy of the dwThreadID > value, for example), and WinDbg still set the thread name correctly, > without misidentifying the thread. > This leads me to believe that, as you've suggested, 64-bit WinDbg does & > 0x00000000FFFFFFFF on ExceptionInformation[2] (32-bit WinDbg doesn't have= to). >=20 > Also of note, 32-bit WinDbg can't debug 64-bit executables, but 64-bit > WinDbg can debug 32-bit executables. >=20 > Maybe they foresaw the use of 64-bit architectures (i can't dig deeper in= to > the MSDN than MSVC 2003, not sure how the thread-name example looked in > MSVC 6.0 era) and padded the struct size to be a multiple of 8, reserving > the last DWORD for future use; later realized that due to struct packing a > 64-bit debugger would get 3 64-bit pointer-sized values, with the last one > being a combination of threadid and flags, and adapted their debugger to > handle exactly this case. >=20 > Anyway, for gdb: > 1) Look for at least 3 arguments. > 2) In 64-bit gdb do the & 0xFFFFFFFF on the 3rd member to get thread id. >=20 > And that's it. >=20 Attached is the last (hopefully) iteration of the patch. --=20 O< ascii ribbon - stop html email! - www.asciiribbon.org --------------14EAA150AFDB22022A232D77 Content-Type: text/plain; charset=UTF-8; name="0001-Support-settings-thread-name-MS-Windows.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Support-settings-thread-name-MS-Windows.patch" Content-length: 7194 RnJvbSA1MGVlMmVlZTMxMGMzYzE5YmVhNTIwZTM4NDU2NDc2MmU5MTcyZjM1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUQw PUEwPUQxPTgzPUQxPTgxPUQwPUJCPUQwPUIwPUQwPUJEPTIwPUQwPTk4PUQw PUI2PUQwPUIxPz0KID0/VVRGLTg/cT89RDE9ODM9RDA9QkI9RDA9QjA9RDE9 ODI9RDA9QkU9RDA9QjI/PSA8bHJuMTk4NkBnbWFpbC5jb20+CkRhdGU6IFN1 biwgMjYgSnVuIDIwMTYgMTE6MTQ6NDkgKzAwMDAKU3ViamVjdDogW1BBVENI IDEvM10gU3VwcG9ydCBzZXR0aW5ncyB0aHJlYWQgbmFtZSAoTVMtV2luZG93 cykKClRoaXMgaXMgZG9uZSBieSBjYXRjaGluZyBhbiBleGNlcHRpb24gbnVt YmVyIDB4NDA2RDEzODgKKGl0IGhhcyBubyBkb2N1bWVudGVkIG5hbWUsIHRo b3VnaCBNU0ROIGR1YnMgaXQgIk1TX1ZDX0VYQ0VQVElPTiIKaW4gb25lIGNv ZGUgZXhhbXBsZSksIHdoaWNoIGlzIHRocm93biBieSB0aGUgcHJvZ3JhbS4K VGhlIGV4Y2VwdGlvbiByZWNvcmQgY29udGFpbnMgYW4gSUQgb2YgYSB0aHJl YWQgYW5kIGEgbmFtZSB0bwpnaXZlIGl0LgoKVGhpcyByZXF1aXJlcyByb2xs aW5nIGJhY2sgc29tZSBjaGFuZ2VzIGluIGhhbmRsZV9leGNlcHRpb24oKSwK d2hpY2ggbm93IGFnYWluIHJldHVybnMgbW9yZSB0aGFuIHR3byBkaXN0aW5j dCB2YWx1ZXMuIFRoZSB2YWx1ZQpIQU5ETEVfRVhDRVBUSU9OX0lHTk9SRUQg bWVhbnMgdGhhdCBnZGIgc2hvdWxkIGp1c3QgY29udGludWUsCndpdGhvdXQg cmV0dXJuaW5nIHRocmVhZCBJRCB1cCB0aGUgc3RhY2sgKHdoaWNoIHdpbGwg cmVzdWx0CmluIGZ1cnRoZXIgaGFuZGxpbmcgb2YgdGhlIGV4Y2VwdGlvbiwg d2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudCkuCi0tLQogZ2RiL3dpbmRvd3Mt bmF0LmMgfCA3NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNjkgaW5z ZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nZGIv d2luZG93cy1uYXQuYyBiL2dkYi93aW5kb3dzLW5hdC5jCmluZGV4IDNmNjc0 ODYuLjgyNjMwZGIgMTAwNjQ0Ci0tLSBhL2dkYi93aW5kb3dzLW5hdC5jCisr KyBiL2dkYi93aW5kb3dzLW5hdC5jCkBAIC0xNzQsNiArMTc0LDE1IEBAIHN0 YXRpYyBpbnQgZGVidWdfcmVnaXN0ZXJzX3VzZWQ7CiBzdGF0aWMgaW50IHdp bmRvd3NfaW5pdGlhbGl6YXRpb25fZG9uZTsKICNkZWZpbmUgRFI2X0NMRUFS X1ZBTFVFIDB4ZmZmZjBmZjAKIAorI2RlZmluZSBNU19WQ19FWENFUFRJT04g MHg0MDZEMTM4OAorCit0eXBlZGVmIGVudW0KK3sKKyAgSEFORExFX0VYQ0VQ VElPTl9VTkhBTkRMRUQgPSAwLAorICBIQU5ETEVfRVhDRVBUSU9OX0hBTkRM RUQsCisgIEhBTkRMRV9FWENFUFRJT05fSUdOT1JFRAorfSBoYW5kbGVfZXhj ZXB0aW9uX3Jlc3VsdDsKKwogLyogVGhlIHN0cmluZyBzZW50IGJ5IGN5Z3dp biB3aGVuIGl0IHByb2Nlc3NlcyBhIHNpZ25hbC4KICAgIEZJWE1FOiBUaGlz IHNob3VsZCBiZSBpbiBhIGN5Z3dpbiBpbmNsdWRlIGZpbGUuICAqLwogI2lm bmRlZiBfQ1lHV0lOX1NJR05BTF9TVFJJTkcKQEAgLTEwMzEsMTAgKzEwNDAs MTEgQEAgZGlzcGxheV9zZWxlY3RvcnMgKGNoYXIgKiBhcmdzLCBpbnQgZnJv bV90dHkpCiAgICAgaG9zdF9hZGRyZXNzX3RvX3N0cmluZyAoXAogICAgICAg Y3VycmVudF9ldmVudC51LkV4Y2VwdGlvbi5FeGNlcHRpb25SZWNvcmQuRXhj ZXB0aW9uQWRkcmVzcykpCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBoYW5kbGVf ZXhjZXB0aW9uX3Jlc3VsdAogaGFuZGxlX2V4Y2VwdGlvbiAoc3RydWN0IHRh cmdldF93YWl0c3RhdHVzICpvdXJzdGF0dXMpCiB7CiAgIERXT1JEIGNvZGUg PSBjdXJyZW50X2V2ZW50LnUuRXhjZXB0aW9uLkV4Y2VwdGlvblJlY29yZC5F eGNlcHRpb25Db2RlOworICBoYW5kbGVfZXhjZXB0aW9uX3Jlc3VsdCByZXN1 bHQgPSBIQU5ETEVfRVhDRVBUSU9OX0hBTkRMRUQ7CiAKICAgb3Vyc3RhdHVz LT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQ7CiAKQEAgLTEwNjQs NyArMTA3NCw3IEBAIGhhbmRsZV9leGNlcHRpb24gKHN0cnVjdCB0YXJnZXRf d2FpdHN0YXR1cyAqb3Vyc3RhdHVzKQogCQkJCSAgICAmJiBhZGRyIDwgY3ln d2luX2xvYWRfZW5kKSkKIAkgICAgfHwgKGZpbmRfcGNfcGFydGlhbF9mdW5j dGlvbiAoYWRkciwgJmZuLCBOVUxMLCBOVUxMKQogCQkmJiBzdGFydHN3aXRo IChmbiwgIktFUk5FTDMyIUlzQmFkIikpKQotCSAgcmV0dXJuIDA7CisJICBy ZXR1cm4gSEFORExFX0VYQ0VQVElPTl9VTkhBTkRMRUQ7CiAgICAgICB9CiAj ZW5kaWYKICAgICAgIGJyZWFrOwpAQCAtMTE0MCwxMCArMTE1MCw1MiBAQCBo YW5kbGVfZXhjZXB0aW9uIChzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91 cnN0YXR1cykKICAgICAgIERFQlVHX0VYQ0VQVElPTl9TSU1QTEUgKCJFWENF UFRJT05fTk9OQ09OVElOVUFCTEVfRVhDRVBUSU9OIik7CiAgICAgICBvdXJz dGF0dXMtPnZhbHVlLnNpZyA9IEdEQl9TSUdOQUxfSUxMOwogICAgICAgYnJl YWs7CisgICAgY2FzZSBNU19WQ19FWENFUFRJT046CisgICAgICBpZiAoY3Vy cmVudF9ldmVudC51LkV4Y2VwdGlvbi5FeGNlcHRpb25SZWNvcmQuTnVtYmVy UGFyYW1ldGVycyA+PSAzCisgICAgICAgICAgJiYgKGN1cnJlbnRfZXZlbnQu dS5FeGNlcHRpb24uRXhjZXB0aW9uUmVjb3JkLkV4Y2VwdGlvbkluZm9ybWF0 aW9uWzBdICYgMHhGRkZGRkZGRikgPT0gMHgxMDAwKQorCXsKKwkgIGxvbmcg bmFtZWRfdGhyZWFkX2lkOworCSAgcHRpZF90IG5hbWVkX3RocmVhZF9wdGlk OworCSAgc3RydWN0IHRocmVhZF9pbmZvICpuYW1lZF90aHJlYWQ7CisJICBD T1JFX0FERFIgdGhyZWFkX25hbWVfdGFyZ2V0OworCSAgY2hhciAqdGhyZWFk X25hbWU7CisJICBpbnQgdGhyZWFkX25hbWVfbGVuOworCisJICBERUJVR19F WENFUFRJT05fU0lNUExFICgiTVNfVkNfRVhDRVBUSU9OIik7CisKKwkgIG5h bWVkX3RocmVhZF9pZCA9IChsb25nKSAoMHhGRkZGRkZGRiAmIGN1cnJlbnRf ZXZlbnQudS5FeGNlcHRpb24uRXhjZXB0aW9uUmVjb3JkLkV4Y2VwdGlvbklu Zm9ybWF0aW9uWzJdKTsKKwkgIHRocmVhZF9uYW1lX3RhcmdldCA9IGN1cnJl bnRfZXZlbnQudS5FeGNlcHRpb24uRXhjZXB0aW9uUmVjb3JkLkV4Y2VwdGlv bkluZm9ybWF0aW9uWzFdOworCisJICBpZiAobmFtZWRfdGhyZWFkX2lkID09 IChEV09SRCkgLTEpCisJICAgIG5hbWVkX3RocmVhZF9pZCA9IGN1cnJlbnRf ZXZlbnQuZHdUaHJlYWRJZDsKKworCSAgbmFtZWRfdGhyZWFkX3B0aWQgPSBw dGlkX2J1aWxkIChjdXJyZW50X2V2ZW50LmR3UHJvY2Vzc0lkLCAwLCBuYW1l ZF90aHJlYWRfaWQpLAorCSAgbmFtZWRfdGhyZWFkID0gZmluZF90aHJlYWRf cHRpZCAobmFtZWRfdGhyZWFkX3B0aWQpOworCisJICB0aHJlYWRfbmFtZSA9 IE5VTEw7CisJICB0aHJlYWRfbmFtZV9sZW4gPSB0YXJnZXRfcmVhZF9zdHJp bmcgKHRocmVhZF9uYW1lX3RhcmdldCwgJnRocmVhZF9uYW1lLCAxMDI1LCAw KTsKKwkgIGlmICh0aHJlYWRfbmFtZV9sZW4gPiAwICYmIHRocmVhZF9uYW1l ICE9IE5VTEwpCisJICAgIHsKKwkgICAgICB0aHJlYWRfbmFtZVt0aHJlYWRf bmFtZV9sZW4gLSAxXSA9ICdcMCc7CisJICAgICAgaWYgKHRocmVhZF9uYW1l WzBdICE9ICdcMCcpCisJCXsKKwkJICB4ZnJlZSAobmFtZWRfdGhyZWFkLT5u YW1lKTsKKwkJICBuYW1lZF90aHJlYWQtPm5hbWUgPSB0aHJlYWRfbmFtZTsK KwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHhmcmVlICh0aHJlYWRfbmFt ZSk7CisJCX0KKwkgICAgfQorCSAgb3Vyc3RhdHVzLT52YWx1ZS5zaWcgPSBH REJfU0lHTkFMX1RSQVA7CisJICByZXN1bHQgPSBIQU5ETEVfRVhDRVBUSU9O X0lHTk9SRUQ7CisJICBicmVhazsKKwl9CisJLyogdHJlYXQgaW1wcm9wZXJs eSBmb3JtZWQgZXhjZXB0aW9uIGFzIHVua25vd24sIGZhbGx0aHJvdWdoICov CiAgICAgZGVmYXVsdDoKICAgICAgIC8qIFRyZWF0IHVuaGFuZGxlZCBmaXJz dCBjaGFuY2UgZXhjZXB0aW9ucyBzcGVjaWFsbHkuICAqLwogICAgICAgaWYg KGN1cnJlbnRfZXZlbnQudS5FeGNlcHRpb24uZHdGaXJzdENoYW5jZSkKLQly ZXR1cm4gMDsKKwlyZXR1cm4gSEFORExFX0VYQ0VQVElPTl9VTkhBTkRMRUQ7 CiAgICAgICBwcmludGZfdW5maWx0ZXJlZCAoImdkYjogdW5rbm93biB0YXJn ZXQgZXhjZXB0aW9uIDB4JTA4eCBhdCAlc1xuIiwKIAkodW5zaWduZWQpIGN1 cnJlbnRfZXZlbnQudS5FeGNlcHRpb24uRXhjZXB0aW9uUmVjb3JkLkV4Y2Vw dGlvbkNvZGUsCiAJaG9zdF9hZGRyZXNzX3RvX3N0cmluZyAoCkBAIC0xMTUz LDcgKzEyMDUsNyBAQCBoYW5kbGVfZXhjZXB0aW9uIChzdHJ1Y3QgdGFyZ2V0 X3dhaXRzdGF0dXMgKm91cnN0YXR1cykKICAgICB9CiAgIGV4Y2VwdGlvbl9j b3VudCsrOwogICBsYXN0X3NpZyA9IG91cnN0YXR1cy0+dmFsdWUuc2lnOwot ICByZXR1cm4gMTsKKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogUmVzdW1l IHRocmVhZCBzcGVjaWZpZWQgYnkgSUQsIG9yIGFsbCBhcnRpZmljaWFsbHkg c3VzcGVuZGVkCkBAIC0xNTEwLDEwICsxNTYyLDE5IEBAIGdldF93aW5kb3dz X2RlYnVnX2V2ZW50IChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLAogCQkgICAg ICJFWENFUFRJT05fREVCVUdfRVZFTlQiKSk7CiAgICAgICBpZiAoc2F3X2Ny ZWF0ZSAhPSAxKQogCWJyZWFrOwotICAgICAgaWYgKGhhbmRsZV9leGNlcHRp b24gKG91cnN0YXR1cykpCi0JdGhyZWFkX2lkID0gY3VycmVudF9ldmVudC5k d1RocmVhZElkOwotICAgICAgZWxzZQotCWNvbnRpbnVlX3N0YXR1cyA9IERC R19FWENFUFRJT05fTk9UX0hBTkRMRUQ7CisgICAgICBzd2l0Y2ggKGhhbmRs ZV9leGNlcHRpb24gKG91cnN0YXR1cykpCisJeworCWNhc2UgSEFORExFX0VY Q0VQVElPTl9VTkhBTkRMRUQ6CisJZGVmYXVsdDoKKwkgIGNvbnRpbnVlX3N0 YXR1cyA9IERCR19FWENFUFRJT05fTk9UX0hBTkRMRUQ7CisJICBicmVhazsK KwljYXNlIEhBTkRMRV9FWENFUFRJT05fSEFORExFRDoKKwkgIHRocmVhZF9p ZCA9IGN1cnJlbnRfZXZlbnQuZHdUaHJlYWRJZDsKKwkgIGJyZWFrOworCWNh c2UgSEFORExFX0VYQ0VQVElPTl9JR05PUkVEOgorCSAgY29udGludWVfc3Rh dHVzID0gREJHX0NPTlRJTlVFOworCSAgYnJlYWs7CisJfQogICAgICAgYnJl YWs7CiAKICAgICBjYXNlIE9VVFBVVF9ERUJVR19TVFJJTkdfRVZFTlQ6CS8q IE1lc3NhZ2UgZnJvbSB0aGUga2VybmVsLiAgKi8KLS0gCjIuNC4wCgo= --------------14EAA150AFDB22022A232D77 Content-Type: application/pgp-keys; name="0x6759BA74.asc" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0x6759BA74.asc" Content-length: 3718 -----BEGIN PGP PUBLIC KEY BLOCK-----=0A= Version: GnuPG v2=0A= =0A= mQINBFd+4e0BEACxh5wQhm5pG3DMdXokYTZYyncAc0MGQkuCG7+0CUa06VW+qVz3=0A= x+wkWRSJSbFrltSzNpKY67kOGPc1b7e1V4vIQ5ubNSYNOnwqFedEorBCyA6jvpfE=0A= vmLHcWJyK6emZC2s09ToxN1ovzcJBkQMgpJNYj4jZHdHEJ0PD+qEp7bKTXlxzWXM=0A= oHjPdykSLPDuTzQ1Gi09OakKhzOUvg+3Lgqo1aAf+r8HtysM19wUE06h1BYpsMo/=0A= gP87w/uhyqrqqAPBb3tpJtAhw8OcUREsJ4GC5zsp80eHy7IS6LIrPB3nf9XyIxvd=0A= 5qql9y1XclbB/sTGfD2Z27gYLLqFDIlYxXKT1z999yGN71gXYoLi9wbqpP0VSbdh=0A= tr8LVhGiuP+BPNq1y62wKyBKpJulBq2TnYWhukYowI1tCkCFeL1F0yG2M0RTvo3P=0A= dUp6YSHiNbuvgiFzoow2YVCPW+w2MBFR2S1Si72Yegq2+tf5Dd0mSOEKOhaChz/X=0A= L3gFlbjgaF0qA879Q/8pppjdsmwDY+q48WV4NnI3bPsTlZ6dKnI0ZMpct9Kfi7E5=0A= dmexGdOCde4RbEs4dOsdMhjFl9B1YQPjKpTmh7FtoTDJqMklZEAzBr+pEDb7BorM=0A= Beh2aHsJ0Z7Qd52BCaUAIuPUXjwXDI4qzf7UyWLFS66BkeDXBRDRWaRL5QARAQAB=0A= tBdMUk4gPGxybjE5ODZAZ21haWwuY29tPokCPwQTAQgAKQUCV37h7QIbIwUJCWYB=0A= gAcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEI2t6SdnWbp0qtoQAIjcnzeN=0A= riwftAfLsnXKYBrxmdbfPsmu4G7cQxsabst841sOrvWFPHTkEZk/xpfyQgxpZEiB=0A= 8uF82XKNbHNh9+nWqiDyt/Y9v23IIt1fIodOuB1q3Jdbh7nraflgzeji91rR3BuP=0A= mKcbpX+t4zlOg2RNh3dG+xoY91C5gXXWqBZ73kyGDHkpp2jGFXNStzdlcR4qLBiV=0A= dbtXfU/mnmB3tFuojx/zgL71816G2toBZzeWT/6c7UnmrubarvbNIVPbYufM0Xzw=0A= 7sK1y+i6p+QnZPZJ7nytINAVAZJ3pxle1Ajwb5p4QAVSsau78iG04/9cNU+gtftT=0A= kwNOIJ0LDnj+S6A58uLIr2Ebl4Jr4g0MPlw74CsUIspQz9sb6/yANLQ98kz3PrUa=0A= MpodI2dNpV8UROoJ/t96ys755FcEb/09SDJcTUx7QlPukgoq4mrWqB59kVID7CKq=0A= HRRDanuoyR/+ITDUxXUEUIJkWGYzUfKzjI8ditBCI6zxNftWCaiw5XkrEEpctvzS=0A= CBbNE7KjAoFbZDnsXHgg9xZWpAzYYP6aCmBvpjISMGihXbw1oS6mJvvHTFSzjTvX=0A= QHShvyO8XLI7Q+NwrYV+mVNvtBX+mQaTsQdS9knSpoHHO/N0QlCUzbnPIEOVKjN6=0A= Hw7bcBokYeI0ez3yMZlf/bU/yyMRfxskOqxciQEcBBMBCAAGBQJXfuIzAAoJEOs4=0A= Jb6SI2CwxPgIAJtQBb/79MSdZZb3kggOC0ClZ7WDRSdP31R272gdckcbqVqm7vMl=0A= 0OZxQH5G4QRuFNLMSJG5ytf//qoxYj5CmvQS5NkP/sgnMaHvjHG+jRaBfB9t00Um=0A= h24BBL04Ac0lv3eiBc64nUJT37dEBUNEE8fgQ67gnV1hacqybVXqWIm1RXluL+Un=0A= fdFsbD6KWHLY2uPrARXdLYT7veUPnEgziw4s/2AVrGHiSgNZV1Z8pFMsuiUGpCRr=0A= 1K0r8b6hP3nxa0xxzk83NrKI6ZL1Jyhlqe7dLSWaSVofHk9WmcARZ+hJ/PlP+9N5=0A= Fd5ZuJ9R5t8C0gUB5v1ID4vPxt/YFCeiVJy5Ag0EV37h7QEQAKcbtHNm2vc6aYgR=0A= /eK0cJmJOqV3S0PtXychIV6zYj2/DppUOttsQN39nEgTBui1QFYfVgYNv3S0DBZY=0A= ESSijTLrzyCbzYL9AL/OzIgo++m8F0lERhhMKsVKtdZWLBflkQgPgCpMdwqhGdRP=0A= 5WrximbRtHN7JD4TCfupCqepefqvxyYv/pHYcDTFEycEChkRgCpc88tTxNdAyd2+=0A= F7lfvMxsgGmNcMa5IzIm1GXjKQONyiMffmjYT0Sod/AS/RA7z3aTv9/2Sm4TLgae=0A= 4BtV+ZU39VMkfA8c2DsnVi4zVKOBho7MH/Lwar2bQwKZ8U1TKhKDwK0Q1eYTq+3U=0A= Nc6Rk/9QolYpYup7/lH5wWppPvipqlltTQa6F0csD6AIc9W7rO7RVFo+lqvrEZAw=0A= AUXrRCTFtBijg715eZenDzS0QZw9WtQ6ufhsAamap6hJQmIZD3HdWdrHCT1TQ/Tt=0A= JzPAyIYbRbKCe2hoxUojF0A/P1ZL90kf/OZPQ6Oisl5XMyuyiJFgVbdbXYMJ+f+k=0A= 3pTrVxB9vASmGxX3LXCxVJAZ9xJWdBC73VK7rwit0tA8ijekrmkhSjZlIZCKvDYA=0A= j9fV4O6QXRuuFZKo4xGYWCIPFwe802jOrbvQw8YT5CgN7hGMUyHV/GCH50uUoVJD=0A= andFGy7hvTckfXk85oXARMswdyQ3ABEBAAGJAiUEGAEIAA8FAld+4e0CGwwFCQlm=0A= AYAACgkQja3pJ2dZunQeVQ/9FtseE5WqnmvPGc5NPGvbWhrd5x9CpStPG9b+xsBu=0A= 91ZXrMHsNOVQ0SxFdB708OT15sTy1ldeemxUK62E5XO1bvFJ4R1gHkWe6K/j9TfG=0A= Fshbyl3J6WKwG2qwT2JpNVpb+6QShFZVRe9a1rn3D/DNZurj3XYgVQGWlYVYT/LA=0A= 32zmBjQEzSXMbDBR/wSiJzYqgTB+9udGkcrYVgrmNz5YSA2mp6l1+PH/i++FD4j/=0A= KWFVnmqt1QqT8Q0l4MYQH65MdzHdspwfMt0XZ5abnubWIO78ImbOA/CD7MwbuWvy=0A= zezkiDcqQQ2G8mu/ER3oByfQ84iMIxGv1V608EBddHWygd6YQIKdScay0D+54IUz=0A= DXyv9tcnAAnxvMM5wzJyjWytOwL2H7FvSVAtfdywaF2wZA0iHho5Df8OeZdPEZhF=0A= 85GngH3hOBE0EAUMSFwThhRU7a2oMLSTFXRg0bKC3n0MoNExAV/oKiSM5HC06PsP=0A= exONpT/8WHL6GRk6vfsj09m7qScZSvyX35TxggnEHNwNW5/aYKIuhsXohxhLkUqM=0A= Bzu9/Xdq0xPOTyJSTberO8LR1TdWwi2WtPEBOtD25VMtEwhHrX3BKBkmYVu5f7vr=0A= CZikOLr7N8a5zJHJIiEdA2uljajBVTkPRCbMVsIBN2VVPcY2YOyNmG4gAtYmuDRL=0A= rb8=3D=0A= =3D8FDv=0A= -----END PGP PUBLIC KEY BLOCK-----=0A= --------------14EAA150AFDB22022A232D77-- --3XcQcd2dCXkwj7ocoG9GuxNU1sWw98oMK-- --Gqrd964eFkuCourHPPAPFKXvGL55w5InV Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" Content-length: 819 -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJXl5q7AAoJEI2t6SdnWbp0y4cP/0P/C3tSRe90e+L0hPshxUao Ge0K1OTUv4evbH3ZpGCZASJ2ylxFgIGTSS8kADsblIShA/7KdoCKMcc+Q4sUQYAJ voOlR86eh0+SU2WBpEr4sYhpaAovqztThhnMMq7+t1QXM4hXWM/3VBWR/KOjnO2Q sXW4o6tQ0TR2Rf5OSZoXZxGL7WO/HjeHzfgl9StFTOfKZHuhhKcpY5bqkQ2AMJIP +2izsT5XFNqbJ/R0J1u+SeVN6LF9PC5l0ywf/ZXeOFd2jqTd5givJhdHeDBdiP6/ l8MBlz6cNJPCKlzu+160L5ToZR1zvGLKobXwIH1kSAKpZQLdwXYWtwjCKj2bP1PL yz50807aKZ9s6RBSvve+r1PrSPLfF5mNzaY04cFZjDvUOb/zSm/N+DC8YTt/ZaD2 WY+eenBhqzDN+BfqR18jwx1TFxizr7ydozw2rQ6lgnp0REPHgOsV07++IqgFQCQw ac1VN3gbnEef5od1WszLAh46Pmwzmc4OBbo+cYPKFe4c2719P53NEANHDkFNDOJL DktiBc/cKEJFqZMLcAeHqrlh9+Fx8+jLiNkeHOPc337+Lsn2d9zfOMlkG+sZKoDq 2acuPMEvzPStEA9jJGU7wOFyEEZfi+Mi3gaz+MFX6fb15UKbpRrRW1WkYGsQq8zX 1ttNokRijfndmXpMCvtq =Fttx -----END PGP SIGNATURE----- --Gqrd964eFkuCourHPPAPFKXvGL55w5InV--