From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22814 invoked by alias); 28 Oct 2011 07:55:10 -0000 Received: (qmail 22683 invoked by uid 22791); 28 Oct 2011 07:55:00 -0000 X-SWARE-Spam-Status: No, hits=0.1 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,TW_BP,TW_EG,TW_GJ,TW_WB,TW_YB X-Spam-Check-By: sourceware.org Received: from mail-vx0-f169.google.com (HELO mail-vx0-f169.google.com) (209.85.220.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 28 Oct 2011 07:54:36 +0000 Received: by vcbfk1 with SMTP id fk1so3974965vcb.0 for ; Fri, 28 Oct 2011 00:54:35 -0700 (PDT) Received: by 10.220.148.148 with SMTP id p20mr265405vcv.73.1319788475149; Fri, 28 Oct 2011 00:54:35 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.180.75 with HTTP; Fri, 28 Oct 2011 00:54:13 -0700 (PDT) In-Reply-To: References: From: Kevin Pouget Date: Fri, 28 Oct 2011 08:33:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey Cc: gdb-patches@sourceware.org, pmuldoon@redhat.com Content-Type: multipart/mixed; boundary=f46d043be1c83d6e3604b05733a0 X-IsSubscribed: yes 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 X-SW-Source: 2011-10/txt/msg00757.txt.bz2 --f46d043be1c83d6e3604b05733a0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 3293 On Tue, Oct 25, 2011 at 1:36 PM, Kevin Pouget wrot= e: > On Tue, Oct 25, 2011 at 1:05 PM, Phil Muldoon wrote: >> >> Kevin Pouget writes: >> >> > On Mon, Oct 24, 2011 at 6:06 PM, Phil Muldoon wr= ote: >> >> Kevin Pouget writes: >> >> >> >> I have some comments regarding the Python bits. >> > >> > Thanks for that, I replied inline >> >> Thanks. >> >> >>> @@ -5700,6 +5700,7 @@ init_raw_breakpoint_without_location (struct b= reakpoint *b, >> >>> =A0 =A0b->frame_id =3D null_frame_id; >> >>> =A0 =A0b->condition_not_parsed =3D 0; >> >>> =A0 =A0b->py_bp_object =3D NULL; >> >>> + =A0b->is_py_finish_bp =3D 0; >> >> >> >Phil>> Is there any reason why this needs to be in the breakpoint struc= t? >> >> >Kevin> just to put it back in context (in was back in May ...), here is= the >> >Kevin> rational behind the flag: >> >> >> > On Thu, May 19, 2011 at 6:20 PM, Tom Tromey wrote: >> >> gdbpy_is_stopped_at_finish_bp is not safe to call here -- it assumes = the >> >> GIL has been acquired, which it has not. =A0I would rather it not be = changed >> >> to acquire the GIL, however. =A0I think one of two other approaches w= ould >> >> be preferable. >> >> >> >> One way you could handle this is to add a new constant to enum bptype. >> >> This is likely to be pretty invasive. >> >> >> >> Another way would be to add a flag to the struct breakpoint itself. >> >> >> >> Yet another way would be a new breakpoint_ops method. >> >> >Kevin> I've refactored the code according to your comment anyway, it ma= ke >> >Kevin> sense, so now there are two version: >> >> First let me apologies for not picking up on these previous comments. >> >> My own personal opinion is to abstract the details to the GDB Python >> code, instead of adding another flag to 'struct breakpoint'. That was >> the original ethos of adding a pointer inside the breakpoint struct to >> the Python breakpoint-object - so we can have access to the whole of the >> breakpoint object without breaking out pieces of it here and there. > > yes, I totally agree with this opinion, and that's why I changed the > code arguing, > "what's for Python stays in Python" ! > >> That being said, I don't want to delay this patch any further (and I'm >> not sure why you cannot acquire the GIL in the accessor function? =A0The= re >> is a performance hit involved in acquiring the GIL, maybe that). Tom >> gave three options that make sense, so whatever works for you and Tom >> will be fine. =A0Thanks for taking the time to refactor it. =A0Tom, what= do >> you think? > > > I've got time for my patches, provided that they're not "forgotten", > and that the > discussions are constructive, I'll be happy to fix and refactor according= ly :) > > I've got no idea about the cost of Python functions in general, let > see if that's > what Tom had in mind. > > > Cordially, > > Kevin Hello, I've updated this patch against the last GIT tree and fixed some typos in the code, if you want to give it another look Tom... I followed your suggestion (delete BP once the frame in gone) as well as Phil's (move is_finish_py from 'struct breakpoint' to the Py object, looks with encapsulation) Thanks, Kevin --f46d043be1c83d6e3604b05733a0 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Introduce-gdb.FinishBreakpoints.patch" Content-Disposition: attachment; filename="0001-Introduce-gdb.FinishBreakpoints.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_guavgpwx0 Content-length: 73599 RnJvbSA3YThhYmM3NGQ1NDcyNmU0YzVjZWNjYjM0ZTcwNGM3NDY1ZTQzNDA5 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJbnRyb2R1Y2UgZ2Ri LkZpbmlzaEJyZWFrcG9pbnRzCgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv TkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDQgKwogZ2RiL2RvYy9nZGIudGV4aW5mbyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDQ5ICsrKwogZ2RiL2luZmNtZC5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICst CiBnZGIvaW5mZXJpb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDMgKwogZ2RiL2luZnJ1bi5jICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICstCiBnZGIvcHl0aG9u L3B5LWJyZWFrcG9pbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NTEgKy0tCiBnZGIvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYyAgICAg ICAgICAgICAgICAgICB8ICA0MDQgKysrKysrKysrKysrKysrKysrKysKIGdk Yi9weXRob24vcHktZnJhbWUuYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAzMiArLQogZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaCAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDUwICsrKy0KIGdkYi9weXRob24v cHl0aG9uLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg NiArCiBnZGIvcHl0aG9uL3B5dGhvbi5oICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDIgKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWJyZWFrcG9pbnQuZXhwICAgICAgICAgfCAgICA3ICstCiBnZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuYyAgICB8 ICAgOTcgKysrKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludC5leHAgIHwgIDIzMCArKysrKysrKysrKwogZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5ICAg fCAgIDg4ICsrKysrCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmlu aXNoLWJyZWFrcG9pbnQyLmNjICB8ICAgNTkgKysrCiBnZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cCB8ICAgNjUg KysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVh a3BvaW50Mi5weSAgfCAgIDM0ICsrCiAxOSBmaWxlcyBjaGFuZ2VkLCAxMTUy IGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGdkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWZpbmlzaC1icmVha3BvaW50LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5j YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1maW5pc2gtYnJlYWtwb2ludDIuZXhwCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3Bv aW50Mi5weQoKZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9N YWtlZmlsZS5pbgppbmRleCAzMmQ4ZWYzLi42Y2VkZjEyIDEwMDY0NAotLS0g YS9nZGIvTWFrZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0y ODcsNiArMjg3LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktZXZ0 cmVnaXN0cnkubyBcCiAJcHktZXZ0cy5vIFwKIAlweS1leGl0ZWRldmVudC5v IFwKKwlweS1maW5pc2hicmVha3BvaW50Lm8gXAogCXB5LWZyYW1lLm8gXAog CXB5LWZ1bmN0aW9uLm8gXAogCXB5LWluZmVyaW9yLm8gXApAQCAtMzE4LDYg KzMxOSw3IEBAIFNVQkRJUl9QWVRIT05fU1JDUyA9IFwKIAlweXRob24vcHkt ZXZ0cmVnaXN0cnkuYyBcCiAJcHl0aG9uL3B5LWV2dHMuYyBcCiAJcHl0aG9u L3B5LWV4aXRlZGV2ZW50LmMgXAorCXB5dGhvbi9weS1maW5pc2hicmVha3Bv aW50LmMgXAogCXB5dGhvbi9weS1mcmFtZS5jIFwKIAlweXRob24vcHktZnVu Y3Rpb24uYyBcCiAJcHl0aG9uL3B5LWluZmVyaW9yLmMgXApAQCAtMjEwMyw2 ICsyMTA1LDEwIEBAIHB5LWV4aXRlZGV2ZW50Lm86ICQoc3JjZGlyKS9weXRo b24vcHktZXhpdGVkZXZlbnQuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZM QUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5LWV4aXRlZGV2ZW50LmMKIAkkKFBP U1RDT01QSUxFKQogCitweS1maW5pc2hicmVha3BvaW50Lm86ICQoc3JjZGly KS9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCisJJChDT01QSUxFKSAk KFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZmluaXNoYnJl YWtwb2ludC5jCisJJChQT1NUQ09NUElMRSkKKwogcHktZnJhbWUubzogJChz cmNkaXIpL3B5dGhvbi9weS1mcmFtZS5jCiAJJChDT01QSUxFKSAkKFBZVEhP Tl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZnJhbWUuYwogCSQoUE9T VENPTVBJTEUpCmRpZmYgLS1naXQgYS9nZGIvTkVXUyBiL2dkYi9ORVdTCmlu ZGV4IDgwYzU5ZjYuLjY1NWUwMTMgMTAwNjQ0Ci0tLSBhL2dkYi9ORVdTCisr KyBiL2dkYi9ORVdTCkBAIC01MCw2ICs1MCwxMCBAQAogICAqKiBUaGUgImdk Yi5icmVha3BvaW50IiBmdW5jdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGlu IGZhdm9yIG9mCiAgICAgICJnZGIuYnJlYWtwb2ludHMiLgogCisgICoqIEEg bmV3IGNsYXNzICJnZGIuRmluaXNoQnJlYWtwb2ludCIgaXMgcHJvdmlkZWQg dG8gY2F0Y2ggdGhlIHJldHVybgorICAgICBvZiBhIGZ1bmN0aW9uLiAgVGhp cyBjbGFzcyBpcyBiYXNlZCBvbiB0aGUgImZpbmlzaCIgY29tbWFuZAorICAg ICBhdmFpbGFibGUgaW4gdGhlIENMSS4gCisKICAgKiogVHlwZSBvYmplY3Rz IGZvciBzdHJ1Y3QgYW5kIHVuaW9uIHR5cGVzIG5vdyBhbGxvdyBhY2Nlc3Mg dG8KICAgICAgdGhlIGZpZWxkcyB1c2luZyBzdGFuZGFyZCBQeXRob24gZGlj dGlvbmFyeSAobWFwcGluZykgbWV0aG9kcy4KICAgICAgRm9yIGV4YW1wbGUs ICJzb21lX3R5cGVbJ215ZmllbGQnXSIgbm93IHdvcmtzLCBhcyBkb2VzCmRp ZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIu dGV4aW5mbwppbmRleCA2OWUyYmRhLi44NDdkYzQyIDEwMDY0NAotLS0gYS9n ZGIvZG9jL2dkYi50ZXhpbmZvCisrKyBiL2dkYi9kb2MvZ2RiLnRleGluZm8K QEAgLTIxMjg5LDYgKzIxMjg5LDggQEAgc2l0dWF0aW9uLCBhIFB5dGhvbiBA Y29kZXtLZXlib2FyZEludGVycnVwdH0gZXhjZXB0aW9uIGlzIHRocm93bi4K ICogU3ltYm9sIFRhYmxlcyBJbiBQeXRob246OiAgICAgUHl0aG9uIHJlcHJl c2VudGF0aW9uIG9mIHN5bWJvbCB0YWJsZXMuCiAqIExhenkgU3RyaW5ncyBJ biBQeXRob246OiAgICAgIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiBsYXp5 IHN0cmluZ3MuCiAqIEJyZWFrcG9pbnRzIEluIFB5dGhvbjo6ICAgICAgIE1h bmlwdWxhdGluZyBicmVha3BvaW50cyB1c2luZyBQeXRob24uCisqIEZpbmlz aCBCcmVha3BvaW50cyBpbiBQeXRob246OiBTZXR0aW5nIEJyZWFrcG9pbnRz IG9uIGZ1bmN0aW9uIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1c2luZyBQeXRob24uCiBAZW5kIG1lbnUKIAogQG5vZGUgQmFz aWMgUHl0aG9uCkBAIC0yNDA4Miw2ICsyNDA4NCw1MyBAQCBjb21tYW5kcywg c2VwYXJhdGVkIGJ5IG5ld2xpbmVzLiAgSWYgdGhlcmUgYXJlIG5vIGNvbW1h bmRzLCB0aGlzCiBhdHRyaWJ1dGUgaXMgQGNvZGV7Tm9uZX0uICBUaGlzIGF0 dHJpYnV0ZSBpcyBub3Qgd3JpdGFibGUuCiBAZW5kIGRlZnZhcgogCitAbm9k ZSBGaW5pc2ggQnJlYWtwb2ludHMgaW4gUHl0aG9uCitAc3Vic3Vic2VjdGlv biBGaW5pc2ggQnJlYWtwb2ludHMKKworQGNpbmRleCBweXRob24gZmluaXNo IGJyZWFrcG9pbnRzCitAdGluZGV4IGdkYi5GaW5pc2hCcmVha3BvaW50CisK K0EgZmluaXNoIGJyZWFrcG9pbnQgaXMgYSB0ZW1wb3JhcnkgYnJlYWtwb2lu dCBzZXQgYXQgdGhlIHJldHVybiBhZGRyZXNzIG9mCithIGZyYW1lLCBiYXNl ZCBvbiB0aGUgQGNvZGV7ZmluaXNofSBjb21tYW5kLiAgQGNvZGV7Z2RiLkZp bmlzaEJyZWFrcG9pbnR9CitleHRlbmRzIEBjb2Rle2dkYi5CcmVha3BvaW50 fS4gIFRoZSB1bmRlcmx5aW5nIGJyZWFrcG9pbnQgd2lsbCBiZSBkaXNhYmxl ZCAKK2FuZCBkZWxldGVkIHdoZW4gdGhlIGV4ZWN1dGlvbiB3aWxsIHJ1biBv dXQgb2YgdGhlIGJyZWFrcG9pbnQgc2NvcGUgKGkuZS5AOiAKK0Bjb2Rle0Jy ZWFrcG9pbnQuc3RvcH0gb3IgQGNvZGV7RmluaXNoQnJlYWtwb2ludC5vdXRf b2Zfc2NvcGV9IHRyaWdnZXJlZCkuCisKK0BkZWZ1biBGaW5pc2hCcmVha3Bv aW50Ll9faW5pdF9fIChAdmFye2ZyYW1lfSwgQHJ7W31AdmFye2ludGVybmFs fUBye119KQorQ3JlYXRlIGEgZmluaXNoIGJyZWFrcG9pbnQgYXQgdGhlIHJl dHVybiBhZGRyZXNzIG9mIHRoZSBAY29kZXtnZGIuRnJhbWV9CitvYmplY3Qg QHZhcntmcmFtZX0uICBUaGUgb3B0aW9uYWwgQHZhcntpbnRlcm5hbH0gYXJn dW1lbnQgYWxsb3dzIHRoZQorYnJlYWtwb2ludCB0byBiZWNvbWUgaW52aXNp YmxlIHRvIHRoZSB1c2VyLiAgQHhyZWZ7QnJlYWtwb2ludHMgSW4gUHl0aG9u fSwKK2ZvciBmdXJ0aGVyIGRldGFpbHMgYWJvdXQgdGhpcyBhcmd1bWVudC4K K0BlbmQgZGVmdW4KKworQGRlZnVuIEZpbmlzaEJyZWFrcG9pbnQub3V0X29m X3Njb3BlIChzZWxmKQorSW4gc29tZSBjaXJjdW1zdGFuY2VzIChlLmcuQDog QGNvZGV7bG9uZ2ptcH0sIENAdHsrK30gZXhjZXB0aW9ucywgQHZhbHVle0dE Qk59IAorQGNvZGV7cmV0dXJufSBjb21tYW5kLCBAZG90c3t9KSwgYSBmdW5j dGlvbiBtYXkgbm90IHByb3Blcmx5IHRlcm1pbmF0ZSwgYW5kCit0aHVzIG5l dmVyIGhpdCB0aGUgZmluaXNoIGJyZWFrcG9pbnQuICBXaGVuIEB2YWx1ZXtH REJOfSBub3RpY2VzIHN1Y2ggYQorc2l0dWF0aW9uLCB0aGUgQGNvZGV7b3V0 X29mX3Njb3BlfSBjYWxsYmFjayB3aWxsIGJlIHRyaWdnZXJlZC4KKworWW91 IG1heSB3YW50IHRvIHN1Yi1jbGFzcyBAY29kZXtnZGIuRmluaXNoQnJlYWtw b2ludH0gYW5kIG92ZXJyaWRlIHRoaXMKK21ldGhvZDoKKworQHNtYWxsZXhh bXBsZQorY2xhc3MgTXlGaW5pc2hCcmVha3BvaW50IChnZGIuRmluaXNoQnJl YWtwb2ludCkKKyAgICBkZWYgc3RvcCAoc2VsZik6CisgICAgICAgIHByaW50 ICJub3JtYWwgZmluaXNoIgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIAor ICAgIGRlZiBvdXRfb2Zfc2NvcGUgKCk6CisgICAgICAgIHByaW50ICJhYm5v cm1hbCBmaW5pc2giCitAZW5kIHNtYWxsZXhhbXBsZSAKK0BlbmQgZGVmdW4K KworQGRlZnZhciBGaW5pc2hCcmVha3BvaW50LnJldHVybl92YWx1ZQorV2hl biBAdmFsdWV7R0RCTn0gaXMgc3RvcHBlZCBhdCBhIGZpbmlzaCBicmVha3Bv aW50IGFuZCB0aGUgZnJhbWUgCit1c2VkIHRvIGJ1aWxkIHRoZSBAY29kZXtn ZGIuRmluaXNoQnJlYWtwb2ludH0gb2JqZWN0IGhhZCBkZWJ1ZyBzeW1ib2xz LCB0aGlzCithdHRyaWJ1dGUgd2lsbCBjb250YWluIGEgQGNvZGV7Z2RiLlZh bHVlfSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgcmV0dXJuCit2YWx1 ZSBvZiB0aGUgZnVuY3Rpb24uICBUaGUgdmFsdWUgd2lsbCBiZSBAY29kZXtO b25lfSBpZiB0aGUgcmV0dXJuIHZhbHVlCit3YXMgbm90IGNvbXB1dGFibGUu ICBUaGlzIGF0dHJpYnV0ZSBpcyBub3Qgd3JpdGFibGUuCitAZW5kIGRlZnZh cgorCiBAbm9kZSBMYXp5IFN0cmluZ3MgSW4gUHl0aG9uCiBAc3Vic3Vic2Vj dGlvbiBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgbGF6eSBzdHJpbmdzLgog CmRpZmYgLS1naXQgYS9nZGIvaW5mY21kLmMgYi9nZGIvaW5mY21kLmMKaW5k ZXggM2U4YmY1ZC4uMzNjZTFmYyAxMDA2NDQKLS0tIGEvZ2RiL2luZmNtZC5j CisrKyBiL2dkYi9pbmZjbWQuYwpAQCAtMTQxMywxNCArMTQxMywxMiBAQCBh ZHZhbmNlX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQogICB1 bnRpbF9icmVha19jb21tYW5kIChhcmcsIGZyb21fdHR5LCAxKTsKIH0KIAwK LS8qIFByaW50IHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUgZW5k IG9mIGEgJ2ZpbmlzaCcgY29tbWFuZC4gICovCisvKiBSZXR1cm4gdGhlIHZh bHVlIG9mIHRoZSByZXN1bHQgYXQgdGhlIGVuZCBvZiBhICdmaW5pc2gnIGNv bW1hbmQvQlAuICAqLwogCi1zdGF0aWMgdm9pZAotcHJpbnRfcmV0dXJuX3Zh bHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAqdmFs dWVfdHlwZSkKK3N0cnVjdCB2YWx1ZSAqCitnZXRfcmV0dXJuX3ZhbHVlIChz dHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlw ZSkKIHsKICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfcmVnY2Fj aGVfYXJjaCAoc3RvcF9yZWdpc3RlcnMpOwotICBzdHJ1Y3QgY2xlYW51cCAq b2xkX2NoYWluOwotICBzdHJ1Y3QgdWlfc3RyZWFtICpzdGI7CiAgIHN0cnVj dCB2YWx1ZSAqdmFsdWU7CiAgIHN0cnVjdCB1aV9vdXQgKnVpb3V0ID0gY3Vy cmVudF91aW91dDsKIApAQCAtMTQ1MSw2ICsxNDQ5LDE5IEBAIHByaW50X3Jl dHVybl92YWx1ZSAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5 cGUgKnZhbHVlX3R5cGUpCiAgICAgICBpbnRlcm5hbF9lcnJvciAoX19GSUxF X18sIF9fTElORV9fLCBfKCJiYWQgc3dpdGNoIikpOwogICAgIH0KIAorICBy ZXR1cm4gdmFsdWU7Cit9CisKKy8qIFByaW50IHRoZSByZXN1bHQgb2YgYSBm dW5jdGlvbiBhdCB0aGUgZW5kIG9mIGEgJ2ZpbmlzaCcgY29tbWFuZC4gICov CisKK3N0YXRpYyB2b2lkCitwcmludF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0 eXBlICpmdW5jX3R5cGUsIHN0cnVjdCB0eXBlICp2YWx1ZV90eXBlKQorewor ICBzdHJ1Y3QgdmFsdWUgKnZhbHVlID0gZ2V0X3JldHVybl92YWx1ZSAoZnVu Y190eXBlLCB2YWx1ZV90eXBlKTsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9j aGFpbjsKKyAgc3RydWN0IHVpX3N0cmVhbSAqc3RiOworICBzdHJ1Y3QgdWlf b3V0ICp1aW91dCA9IGN1cnJlbnRfdWlvdXQ7CisKICAgaWYgKHZhbHVlKQog ICAgIHsKICAgICAgIHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zIG9wdHM7 CmRpZmYgLS1naXQgYS9nZGIvaW5mZXJpb3IuaCBiL2dkYi9pbmZlcmlvci5o CmluZGV4IGNmYWVhN2YuLmYxOTg2OTYgMTAwNjQ0Ci0tLSBhL2dkYi9pbmZl cmlvci5oCisrKyBiL2dkYi9pbmZlcmlvci5oCkBAIC0yNjksNiArMjY5LDkg QEAgZXh0ZXJuIHZvaWQgZGV0YWNoX2NvbW1hbmQgKGNoYXIgKiwgaW50KTsK IAogZXh0ZXJuIHZvaWQgbm90aWNlX25ld19pbmZlcmlvciAocHRpZF90LCBp bnQsIGludCk7CiAKK2V4dGVybiBzdHJ1Y3QgdmFsdWUgKmdldF9yZXR1cm5f dmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdHlwZSAqdmFsdWVf dHlwZSk7CisKIC8qIEFkZHJlc3MgYXQgd2hpY2ggaW5mZXJpb3Igc3RvcHBl ZC4gICovCiAKIGV4dGVybiBDT1JFX0FERFIgc3RvcF9wYzsKZGlmZiAtLWdp dCBhL2dkYi9pbmZydW4uYyBiL2dkYi9pbmZydW4uYwppbmRleCBkYjZhNWQx Li41Y2UwYzk0IDEwMDY0NAotLS0gYS9nZGIvaW5mcnVuLmMKKysrIGIvZ2Ri L2luZnJ1bi5jCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAidHJhY2Vw b2ludC5oIgogI2luY2x1ZGUgImNvbnRpbnVhdGlvbnMuaCIKICNpbmNsdWRl ICJpbnRlcnBzLmgiCisjaW5jbHVkZSAicHl0aG9uL3B5dGhvbi5oIgogCiAv KiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMgKi8KIApAQCAtMzY1 LDcgKzM2Niw4IEBAIHNob3dfc3RvcF9vbl9zb2xpYl9ldmVudHMgKHN0cnVj dCB1aV9maWxlICpmaWxlLCBpbnQgZnJvbV90dHksCiBpbnQgc3RvcF9hZnRl cl90cmFwOwogCiAvKiBTYXZlIHJlZ2lzdGVyIGNvbnRlbnRzIGhlcmUgd2hl biBleGVjdXRpbmcgYSAiZmluaXNoIiBjb21tYW5kIG9yIGFyZQotICAgYWJv dXQgdG8gcG9wIGEgc3RhY2sgZHVtbXkgZnJhbWUsIGlmLWFuZC1vbmx5LWlm IHByb2NlZWRfdG9fZmluaXNoIGlzIHNldC4KKyAgIGFib3V0IHRvIHBvcCBh IHN0YWNrIGR1bW15IGZyYW1lLCBpZi1hbmQtb25seS1pZiBwcm9jZWVkX3Rv X2ZpbmlzaCBpcyBzZXQKKyAgIG9yIGEgUHl0aG9uIEZpbmlzaEJyZWFrcG9p bnQgaGFzIGJlZW4gaGl0LgogICAgVGh1cyB0aGlzIGNvbnRhaW5zIHRoZSBy ZXR1cm4gdmFsdWUgZnJvbSB0aGUgY2FsbGVkIGZ1bmN0aW9uIChhc3N1bWlu ZwogICAgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBhIHJlZ2lzdGVyKS4gICov CiAKQEAgLTU5ODUsOCArNTk4Nyw5IEBAIG5vcm1hbF9zdG9wICh2b2lkKQog CiAgIC8qIFNhdmUgdGhlIGZ1bmN0aW9uIHZhbHVlIHJldHVybiByZWdpc3Rl cnMsIGlmIHdlIGNhcmUuCiAgICAgIFdlIG1pZ2h0IGJlIGFib3V0IHRvIHJl c3RvcmUgdGhlaXIgcHJldmlvdXMgY29udGVudHMuICAqLwotICBpZiAoaW5m ZXJpb3JfdGhyZWFkICgpLT5jb250cm9sLnByb2NlZWRfdG9fZmluaXNoCi0g ICAgICAmJiBleGVjdXRpb25fZGlyZWN0aW9uICE9IEVYRUNfUkVWRVJTRSkK KyAgaWYgKGdkYnB5X2lzX3N0b3BwZWRfYXRfZmluaXNoX2JwIChpbmZlcmlv cl90aHJlYWQgKCktPmNvbnRyb2wuc3RvcF9icHN0YXQpCisgICAgICB8fCAo aW5mZXJpb3JfdGhyZWFkICgpLT5jb250cm9sLnByb2NlZWRfdG9fZmluaXNo CisgICAgICAgICAgJiYgZXhlY3V0aW9uX2RpcmVjdGlvbiAhPSBFWEVDX1JF VkVSU0UpKQogICAgIHsKICAgICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBiZSBu ZWNlc3NhcnkuICAqLwogICAgICAgaWYgKHN0b3BfcmVnaXN0ZXJzKQpkaWZm IC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMgYi9nZGIvcHl0 aG9uL3B5LWJyZWFrcG9pbnQuYwppbmRleCBkYWNlYjk5Li5lNDcyMGMwIDEw MDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5LWJyZWFrcG9pbnQuYworKysgYi9n ZGIvcHl0aG9uL3B5LWJyZWFrcG9pbnQuYwpAQCAtMzEsNTIgKzMxLDE4IEBA CiAjaW5jbHVkZSAiYXJjaC11dGlscy5oIgogI2luY2x1ZGUgImxhbmd1YWdl LmgiCiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3Rf dHlwZTsKK1B5VHlwZU9iamVjdCBicmVha3BvaW50X29iamVjdF90eXBlOwog CiAvKiBOdW1iZXIgb2YgbGl2ZSBicmVha3BvaW50cy4gICovCiBzdGF0aWMg aW50IGJwcHlfbGl2ZTsKIAogLyogVmFyaWFibGVzIHVzZWQgdG8gcGFzcyBp bmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBCcmVha3BvaW50CiAgICBjb25zdHJ1 Y3RvciBhbmQgdGhlIGJyZWFrcG9pbnQtY3JlYXRlZCBob29rIGZ1bmN0aW9u LiAgKi8KLXN0YXRpYyBicmVha3BvaW50X29iamVjdCAqYnBweV9wZW5kaW5n X29iamVjdDsKK2JyZWFrcG9pbnRfb2JqZWN0ICpicHB5X3BlbmRpbmdfb2Jq ZWN0OwogCiAvKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgUHl0 aG9uIGNvbmRpdGlvbiBpcyBldmFsdWF0ZWQuICAqLwogc3RhdGljIGNoYXIg KiBjb25zdCBzdG9wX2Z1bmMgPSAic3RvcCI7CiAKLXN0cnVjdCBicmVha3Bv aW50X29iamVjdAotewotICBQeU9iamVjdF9IRUFECi0KLSAgLyogVGhlIGJy ZWFrcG9pbnQgbnVtYmVyIGFjY29yZGluZyB0byBnZGIuICAqLwotICBpbnQg bnVtYmVyOwotCi0gIC8qIFRoZSBnZGIgYnJlYWtwb2ludCBvYmplY3QsIG9y IE5VTEwgaWYgdGhlIGJyZWFrcG9pbnQgaGFzIGJlZW4KLSAgICAgZGVsZXRl ZC4gICovCi0gIHN0cnVjdCBicmVha3BvaW50ICpicDsKLX07Ci0KLS8qIFJl cXVpcmUgdGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQgYnJlYWtwb2ludCBJ RDsgdGhyb3cgYSBQeXRob24KLSAgIGV4Y2VwdGlvbiBpZiBpdCBpcyBpbnZh bGlkLiAgKi8KLSNkZWZpbmUgQlBQWV9SRVFVSVJFX1ZBTElEKEJyZWFrcG9p bnQpCQkJCQlcCi0gICAgZG8gewkJCQkJCQkJXAotICAgICAgaWYgKChCcmVh a3BvaW50KS0+YnAgPT0gTlVMTCkJCQkJCVwKLQlyZXR1cm4gUHlFcnJfRm9y bWF0IChQeUV4Y19SdW50aW1lRXJyb3IsICAgICAgICAgICAgICAgICAgICAg ICAgXAotCQkJICAgICBfKCJCcmVha3BvaW50ICVkIGlzIGludmFsaWQuIiks CQlcCi0JCQkgICAgIChCcmVha3BvaW50KS0+bnVtYmVyKTsJCQlcCi0gICAg fSB3aGlsZSAoMCkKLQotLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUg YSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgotICAgZXhj ZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICBUaGlzIG1hY3JvIGlzIGZvciB1 c2UgaW4gc2V0dGVyIGZ1bmN0aW9ucy4gICovCi0jZGVmaW5lIEJQUFlfU0VU X1JFUVVJUkVfVkFMSUQoQnJlYWtwb2ludCkJCQkJXAotICAgIGRvIHsJCQkJ CQkJCVwKLSAgICAgIGlmICgoQnJlYWtwb2ludCktPmJwID09IE5VTEwpCQkJ CQlcCi0gICAgICAgIHsJCQkJCQkJCVwKLQkgIFB5RXJyX0Zvcm1hdCAoUHlF eGNfUnVudGltZUVycm9yLCBfKCJCcmVha3BvaW50ICVkIGlzIGludmFsaWQu IiksIFwKLQkJCShCcmVha3BvaW50KS0+bnVtYmVyKTsJCQkJXAotCSAgcmV0 dXJuIC0xOwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotICAgIH0gd2hpbGUgKDAp Ci0KIC8qIFRoaXMgaXMgdXNlZCB0byBpbml0aWFsaXplIHZhcmlvdXMgZ2Ri LmJwXyogY29uc3RhbnRzLiAgKi8KIHN0cnVjdCBweWJwX2NvZGUKIHsKQEAg LTc1Nyw2ICs3MjMsMTUgQEAgZ2RicHlfc2hvdWxkX3N0b3AgKHN0cnVjdCBi cmVha3BvaW50X29iamVjdCAqYnBfb2JqKQogICAgICAgZWxzZQogCWdkYnB5 X3ByaW50X3N0YWNrICgpOwogICAgIH0KKworICAvKiBJZiBpdCdzIGEgdGVt cG9yYXJ5IGJyZWFrcG9pbnQuICAqLworICBpZiAoYnBmaW5pc2hweV9pc19m aW5pc2hfYnAgKHB5X2JwKSkKKyAgICB7CisgICAgICAvKiBDYW4ndCBkZWxl dGUgaXQgaGVyZS4gICovCisgICAgICBnZGJfYXNzZXJ0IChiLT5kaXNwb3Np dGlvbiA9PSBkaXNwX2RlbCk7CisgICAgICBkaXNhYmxlX2JyZWFrcG9pbnQg KGIpOworICAgIH0KKwogICBkb19jbGVhbnVwcyAoY2xlYW51cCk7CiAKICAg cmV0dXJuIHN0b3A7CkBAIC04MjEsNiArNzk2LDggQEAgZ2RicHlfYnJlYWtw b2ludF9jcmVhdGVkIChzdHJ1Y3QgYnJlYWtwb2ludCAqYnApCiAgICAgICBu ZXdicC0+YnAtPnB5X2JwX29iamVjdCA9IG5ld2JwOwogICAgICAgUHlfSU5D UkVGIChuZXdicCk7CiAgICAgICArK2JwcHlfbGl2ZTsKKworICAgICAgbmV3 YnAtPmlzX2ZpbmlzaF9icCA9IGJwZmluaXNocHlfaXNfZmluaXNoX2JwICgo UHlPYmplY3QgKikgbmV3YnApOwogICAgIH0KICAgZWxzZQogICAgIHsKQEAg LTk4MCw3ICs5NTcsNyBAQCBzdGF0aWMgUHlNZXRob2REZWYgYnJlYWtwb2lu dF9vYmplY3RfbWV0aG9kc1tdID0KICAgeyBOVUxMIH0gLyogU2VudGluZWwu ICAqLwogfTsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBicmVha3BvaW50X29i amVjdF90eXBlID0KK1B5VHlwZU9iamVjdCBicmVha3BvaW50X29iamVjdF90 eXBlID0KIHsKICAgUHlPYmplY3RfSEVBRF9JTklUIChOVUxMKQogICAwLAkJ CQkgIC8qb2Jfc2l6ZSovCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LWZp bmlzaGJyZWFrcG9pbnQuYyBiL2dkYi9weXRob24vcHktZmluaXNoYnJlYWtw b2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAy NzY5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL3B5LWZpbmlz aGJyZWFrcG9pbnQuYwpAQCAtMCwwICsxLDQwNCBAQAorLyogUHl0aG9uIGlu dGVyZmFjZSB0byBmaW5pc2ggYnJlYWtwb2ludHMKKworICAgQ29weXJpZ2h0 IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisg ICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKworCisjaW5jbHVkZSAiZGVmcy5oIgorI2luY2x1 ZGUgImV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJweXRob24taW50ZXJuYWwu aCIKKyNpbmNsdWRlICJicmVha3BvaW50LmgiCisjaW5jbHVkZSAiZnJhbWUu aCIKKyNpbmNsdWRlICJnZGJ0aHJlYWQuaCIKKyNpbmNsdWRlICJhcmNoLXV0 aWxzLmgiCisjaW5jbHVkZSAibGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJvYnNl cnZlci5oIgorI2luY2x1ZGUgImluZmVyaW9yLmgiCisKK3N0YXRpYyBQeVR5 cGVPYmplY3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGU7CisKKy8q IEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBQeXRob24gZmluaXNo IGJwIGlzIGZvdW5kIG91dCBvZiBzY29wZS4gICovCitzdGF0aWMgY2hhciAq IGNvbnN0IG91dG9mc2NvcGVfZnVuYyA9ICJvdXRfb2Zfc2NvcGUiOworCisv KiBzdHJ1Y3QgaW1wbGVtZW50aW5nIHRoZSBnZGIuRmluaXNoQnJlYWtwb2lu dCBvYmplY3QgYnkgZXh0ZW5kaW5nCisgICB0aGUgZ2RiLkJyZWFrcG9pbnQg Y2xhc3MuICAqLworc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdAor eworICAvKiBnZGIuQnJlYWtwb2ludCBiYXNlIGNsYXNzLiAgKi8KKyAgYnJl YWtwb2ludF9vYmplY3QgcHlfYnA7CisgIC8qIGdkYi5UeXBlIG9iamVjdCBv ZiB0aGUgZnVuY3Rpb24gZmluaXNoZWQgYnkgdGhpcyBicmVha3BvaW50LiAg Ki8KKyAgUHlPYmplY3QgKmZ1bmN0aW9uX3R5cGU7CisgIC8qIGdkYi5UeXBl IG9iamVjdCBvZiB0aGUgdmFsdWUgcmV0dXJuIGJ5IHRoZSBicmVha3BvaW50 ZWQgZnVuY3Rpb24uICAqLworICBQeU9iamVjdCAqcmV0dXJuX3R5cGU7Cisg IC8qIFdoZW4gc3RvcHBlZCBhdCB0aGlzIEZpbmlzaEJyZWFrcG9pbnQsIHZh bHVlIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbjsKKyAgICAgUHlfTm9uZSBp ZiB0aGUgdmFsdWUgaXMgbm90IGNvbXB1dGFibGU7IE5VTEwgaWYgR0RCIGlz IG5vdCBzdG9wcGVkIGF0CisgICAgIGEgRmluaXNoQnJlYWtwb2ludC4gICov CisgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWU7Cit9OworCisvKiBUcmlnZ2Vy ZWQgd2hlbiBHREIgc3RvcHMgYXQgUFlfQlAuICBDb21wdXRlcyBhbmQgY2Fj aGVzIHRoZSBgcmV0dXJuX3ZhbHVlJywKKyAgIGlmIHBvc3NpYmxlLiAgKi8K Kworc3RhdGljIHZvaWQKK2JwZmluaXNoX3N0b3BwZWRfYXRfZmluaXNoX2Jw IChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpweV9icCkKK3sK KyAgaWYgKHB5X2JwLT5yZXR1cm5fdHlwZSkKKyAgICB7CisgICAgICBzdHJ1 Y3QgdmFsdWUgKnJldCA9CisgICAgICAgICAgZ2V0X3JldHVybl92YWx1ZSAo dHlwZV9vYmplY3RfdG9fdHlwZSAocHlfYnAtPmZ1bmN0aW9uX3R5cGUpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfb2JqZWN0X3RvX3R5 cGUgKHB5X2JwLT5yZXR1cm5fdHlwZSkpOworICAgICAgaWYgKHJldCkKKyAg ICAgICAgeworICAgICAgICAgIHB5X2JwLT5yZXR1cm5fdmFsdWUgPSB2YWx1 ZV90b192YWx1ZV9vYmplY3QgKHJldCk7CisgICAgICAgIH0KKyAgICAgIGVs c2UKKyAgICAgICAgcHlfYnAtPnJldHVybl92YWx1ZSA9IFB5X05vbmU7Cisg ICAgfQorfQorCisvKiBQeXRob24gZnVuY3Rpb24gdG8gZ2V0IHRoZSAncmV0 dXJuX3ZhbHVlJyBhdHRyaWJ1dGUgb2YKKyAgIEZpbmlzaEJyZWFrcG9pbnQu ICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorYnBmaW5pc2hweV9nZXRfcmV0 dXJudmFsdWUgKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQorewor ICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2Zpbmlz aGJwID0KKyAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0 ICopIHNlbGY7CisKKyAgaWYgKHNlbGZfZmluaXNoYnAtPnJldHVybl90eXBl ID09IE5VTEwpCisgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgLyogQ2hlY2sg aWYgd2UgaGF2ZSBhIGNhY2hlZCB2YWx1ZS4gICovCisgIGlmICghc2VsZl9m aW5pc2hicC0+cmV0dXJuX3ZhbHVlKQorICAgIHsKKyAgICAgIGJwc3RhdCBi czsKKworICAgICAgQlBQWV9SRVFVSVJFX1ZBTElEICgmc2VsZl9maW5pc2hi cC0+cHlfYnApOworCisgICAgICBmb3IgKGJzID0gaW5mZXJpb3JfdGhyZWFk ICgpLT5jb250cm9sLnN0b3BfYnBzdGF0OworICAgICAgICAgIGJzOyBicyA9 IGJzLT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGJyZWFr cG9pbnQgKmJwID0gYnMtPmJyZWFrcG9pbnRfYXQ7CisKKyAgICAgICAgICBp ZiAoYnAgIT0gTlVMTCAmJiAoUHlPYmplY3QgKikgYnAtPnB5X2JwX29iamVj dCA9PSBzZWxmKQorICAgICAgICAgICAgICBicGZpbmlzaF9zdG9wcGVkX2F0 X2ZpbmlzaF9icCAoc2VsZl9maW5pc2hicCk7CisgICAgICAgIH0KKyAgICB9 CisKKyAgaWYgKCFzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWUpCisgICAg UHlfUkVUVVJOX05PTkU7CisKKyAgUHlfSU5DUkVGIChzZWxmX2ZpbmlzaGJw LT5yZXR1cm5fdmFsdWUpOworICByZXR1cm4gc2VsZl9maW5pc2hicC0+cmV0 dXJuX3ZhbHVlOworfQorCisvKiBJZiBTVE9QX0JQU1RBVCBjb250YWlucyBh IFB5dGhvbiBicmVha3BvaW50IHdob3NlIHR5cGUgaXMgVFlQRSwgcmV0dXJu cworICAgdGhpcyBicmVha3BvaW50LiBSZXR1cm5zIE5VTEwgb3RoZXJ3aXNl LiAgKi8KKworc3RydWN0IGJyZWFrcG9pbnQgKgorZ2RicHlfaXNfc3RvcHBl ZF9hdF9maW5pc2hfYnAgKGJwc3RhdCBzdG9wX2Jwc3RhdCkKK3sKKyAgYnBz dGF0IGJzOworCisgIGZvciAoYnMgPSBzdG9wX2Jwc3RhdDsgYnM7IGJzID0g YnMtPm5leHQpCisgICAgeworICAgICAgaWYgKGJzLT5icmVha3BvaW50X2F0 CisgICAgICAgICAgJiYgYnBmaW5pc2hweV9icF9pc19maW5pc2hfYnAgKChi cmVha3BvaW50X29iamVjdCAqKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicy0+YnJlYWtwb2ludF9hdC0+cHlfYnBfb2Jq ZWN0KSkKKyAgICAgICAgcmV0dXJuIGJzLT5icmVha3BvaW50X2F0OworICAg IH0KKworICByZXR1cm4gTlVMTDsKK30KKworLyogUHl0aG9uIGZ1bmN0aW9u IHRvIGNyZWF0ZSBhIG5ldyBicmVha3BvaW50LiAgKi8KKworc3RhdGljIGlu dAorYnBmaW5pc2hweV9pbml0IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3Qg KmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgIHN0YXRpYyBjaGFyICpr ZXl3b3Jkc1tdID0geyAiZnJhbWUiLCAiaW50ZXJuYWwiLCBOVUxMIH07Cisg IGJyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2JwID0gKGJyZWFrcG9pbnRfb2Jq ZWN0ICopIHNlbGY7CisgIHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmpl Y3QgKnNlbGZfYnBmaW5pc2ggPQorICAgICAgKHN0cnVjdCBmaW5pc2hfYnJl YWtwb2ludF9vYmplY3QgKikgc2VsZjsKKyAgaW50IHR5cGUgPSBicF9icmVh a3BvaW50OworICBQeU9iamVjdCAqZnJhbWVfb2JqID0gTlVMTDsKKyAgc3Ry dWN0IGZyYW1lX2luZm8gKmZyYW1lLCAqcHJldl9mcmFtZTsKKyAgc3RydWN0 IGZyYW1lX2lkIGZyYW1lX2lkOworICBQeU9iamVjdCAqaW50ZXJuYWwgPSBO VUxMOworICBpbnQgaW50ZXJuYWxfYnAgPSAwOworICBDT1JFX0FERFIgZmlu aXNoX3BjLCBwYzsKKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24g ZXhjZXB0OworICBjaGFyICphZGRyX3N0ciwgc21hbGxfYnVmWzEwMF07Cisg IHN0cnVjdCBzeW1ib2wgKmZ1bmN0aW9uOworCisgIGlmICghIFB5QXJnX1Bh cnNlVHVwbGVBbmRLZXl3b3JkcyAoYXJncywga3dhcmdzLCAiT3xPIiwga2V5 d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmZyYW1lX29iaiwgJmludGVybmFsKSkKKyAgICByZXR1cm4gLTE7CisKKyAg aWYgKCFmcmFtZV9vYmopCisgICAgZ290byBpbnZhbGlkX2ZyYW1lOworICAK KyAgZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoZnJhbWVf b2JqKTsKKyAgaWYgKGZyYW1lID09IE5VTEwpCisgICAgZ290byBpbnZhbGlk X2ZyYW1lOworICAKKyAgcHJldl9mcmFtZSA9IGdldF9wcmV2X2ZyYW1lIChm cmFtZSk7CisgIGlmIChwcmV2X2ZyYW1lID09IDApCisgICAgeworICAgICAg UHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLCAKKyAgICAgICAg ICAgXygiXCJGaW5pc2hCcmVha3BvaW50XCIgbm90IG1lYW5pbmdmdWwgaW4g dGhlIG91dGVybW9zdCBmcmFtZS4iKSk7CisgICAgICByZXR1cm4gLTE7Cisg ICAgfQorICBlbHNlIGlmIChnZXRfZnJhbWVfdHlwZSAocHJldl9mcmFtZSkg PT0gRFVNTVlfRlJBTUUpCisgICAgICB7CisgICAgICAgIFB5RXJyX1NldFN0 cmluZyAoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgIF8o IlwiRmluaXNoQnJlYWtwb2ludFwiIGNhbm5vdCBiZSBzZXQgb24gYSBkdW1t eSBmcmFtZS4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKwor ICBmcmFtZV9pZCA9IGdldF9mcmFtZV9pZCAocHJldl9mcmFtZSk7CisgIGlm IChmcmFtZV9pZF9lcSAoZnJhbWVfaWQsIG51bGxfZnJhbWVfaWQpKQorICAg IGdvdG8gaW52YWxpZF9mcmFtZTsKKworICBpZiAoaW50ZXJuYWwpCisgICAg eworICAgICAgaW50ZXJuYWxfYnAgPSBQeU9iamVjdF9Jc1RydWUgKGludGVy bmFsKTsKKyAgICAgIGlmIChpbnRlcm5hbF9icCA9PSAtMSkgCisgICAgICAg IHsKKyAgICAgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJy b3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHZhbHVl IG9mIGBpbnRlcm5hbCcgbXVzdCBiZSBhIGJvb2xlYW4uIikpOworICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBGaW5k IHRoZSBmdW5jdGlvbiB3ZSB3aWxsIHJldHVybiBmcm9tLiAgKi8KKyAgc2Vs Zl9icGZpbmlzaC0+cmV0dXJuX3R5cGUgPSBOVUxMOworICBzZWxmX2JwZmlu aXNoLT5mdW5jdGlvbl90eXBlID0gTlVMTDsKKyAgaWYgKGdldF9mcmFtZV9w Y19pZl9hdmFpbGFibGUgKGZyYW1lLCAmcGMpKQorICAgIHsKKyAgICAgIGZ1 bmN0aW9uID0gZmluZF9wY19mdW5jdGlvbiAocGMpOworICAgICAgaWYgKGZ1 bmN0aW9uICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3Qg dHlwZSAqcmV0X3R5cGUgPSBUWVBFX1RBUkdFVF9UWVBFIChTWU1CT0xfVFlQ RSAoZnVuY3Rpb24pKTsKKworICAgICAgICAgIC8qIFJlbWVtYmVyIG9ubHkg bm9uLVZPSUQgcmV0dXJuIHR5cGVzLiAgKi8KKyAgICAgICAgICBpZiAoVFlQ RV9DT0RFIChyZXRfdHlwZSkgIT0gVFlQRV9DT0RFX1ZPSUQpCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgIHNlbGZfYnBmaW5pc2gtPnJldHVybl90 eXBlID0gdHlwZV90b190eXBlX29iamVjdCAocmV0X3R5cGUpOworICAgICAg ICAgICAgICBzZWxmX2JwZmluaXNoLT5mdW5jdGlvbl90eXBlID0KKyAgICAg ICAgICAgICAgICAgIHR5cGVfdG9fdHlwZV9vYmplY3QgKFNZTUJPTF9UWVBF IChmdW5jdGlvbikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg fQorCisgIGJwcHlfcGVuZGluZ19vYmplY3QgPSBzZWxmX2JwOworICBicHB5 X3BlbmRpbmdfb2JqZWN0LT5udW1iZXIgPSAtMTsKKyAgYnBweV9wZW5kaW5n X29iamVjdC0+YnAgPSBOVUxMOworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBS RVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAgLyogU2V0IGEgYnJlYWtw b2ludCBvbiB0aGUgcmV0dXJuIGFkZHJlc3MuICAqLworICAgICAgZmluaXNo X3BjID0gZ2V0X2ZyYW1lX3BjIChwcmV2X2ZyYW1lKTsKKyAgICAgIHNwcmlu dGYgKHNtYWxsX2J1ZiwgIiolcyIsIGhleF9zdHJpbmcgKGZpbmlzaF9wYykp OworICAgICAgYWRkcl9zdHIgPSBzbWFsbF9idWY7CisKKyAgICAgIGNyZWF0 ZV9icmVha3BvaW50IChweXRob25fZ2RiYXJjaCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBhZGRyX3N0ciwgTlVMTCwgLTEsCisgICAgICAgICAgICAg ICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAxIC8q dGVtcF9mbGFnKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgYnBfYnJl YWtwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg ICAgICAgICAgICAgICAgICAgIEFVVE9fQk9PTEVBTl9UUlVFLAorICAgICAg ICAgICAgICAgICAgICAgICAgICZia3B0X2JyZWFrcG9pbnRfb3BzLAorICAg ICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIGludGVybmFsX2JwKTsKKyAg ICB9CisgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKyAgICB7CisgICAgICBQ eUVycl9Gb3JtYXQgKGV4Y2VwdC5yZWFzb24gPT0gUkVUVVJOX1FVSVQKKyAg ICAgICAgICAgICAgICAgICAgPyBQeUV4Y19LZXlib2FyZEludGVycnVwdCA6 IFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIiVz IiwgZXhjZXB0Lm1lc3NhZ2UpOworICAgICAgcmV0dXJuIC0xOworICAgIH0K KyAgQlBQWV9TRVRfUkVRVUlSRV9WQUxJRCAoc2VsZl9icCk7CisgIAorICBz ZWxmX2JwLT5icC0+ZnJhbWVfaWQgPSBmcmFtZV9pZDsKKyAgCisgIHJldHVy biAwOworICAKKyBpbnZhbGlkX2ZyYW1lOgorICBQeUVycl9TZXRTdHJpbmcg KFB5RXhjX1ZhbHVlRXJyb3IsIAorICAgICAgICAgICAgICAgICAgIF8oIklu dmFsaWQgSUQgZm9yIHRoZSBgZnJhbWUnIG9iamVjdC4iKSk7CisgIHJldHVy biAtMTsKK30KKworLyogUmV0dXJucyAxIGlmIE9CSiBpcyBub3QgTlVMTCBh bmQgcmVmZXJlbmNlcyBhIEZpbmlzaEJyZWFrcG9pbnQgb2JqZWN0LiAgKi8K KworaW50CiticGZpbmlzaHB5X2lzX2ZpbmlzaF9icCAoUHlPYmplY3QgKm9i aikKK3sKKyAgcmV0dXJuIG9iaiAhPSBOVUxMCisgICAgICAgICAmJiBQeU9i amVjdF9UeXBlQ2hlY2sgKG9iaiwgJmZpbmlzaF9icmVha3BvaW50X29iamVj dF90eXBlKTsKK30KKworLyogUmV0dXJucyAxIGlmIFBZX09CSiBpcyBub3Qg TlVMTCBhbmQgcmVmZXJlbmNlcyBhIEZpbmlzaEJyZWFrcG9pbnQgb2JqZWN0 LgorICAgVGhpcyB2ZXJzaW9uIGRvZXNuJ3QgYXNzdW1lIHRoYXQgR0lMIGhh cyBiZWVuIGFjcXVpcmVkLiAgKi8KKworaW50CiticGZpbmlzaHB5X2JwX2lz X2ZpbmlzaF9icCAoYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaikKK3sKKyAg cmV0dXJuIGJwX29iaiAhPSBOVUxMCisgICAgICAgICAmJiBicF9vYmotPmlz X2ZpbmlzaF9icDsKK30KKworLyogQ2FsbGVkIHdoZW4gR0RCIG5vdGljZXMg dGhhdCB0aGUgZmluaXNoIGJyZWFrcG9pbnQgQlBfT0JKIGlzIG91dCBvZgor ICAgdGhlIGN1cnJlbnQgY2FsbHN0YWNrLiAgVHJpZ2dlcnMgdGhlIG1ldGhv ZCBPVVRfT0ZfU0NPUEUgaWYgaW1wbGVtZW50ZWQsCisgICB0aGVuIGRlbGV0 ZSB0aGUgYnJlYWtwb2ludC4gICovCisKK3N0YXRpYyB2b2lkCiticGZpbmlz aHB5X291dF9vZl9zY29wZSAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29i amVjdCAqYnBmaW5pc2hfb2JqKQoreworICBicmVha3BvaW50X29iamVjdCAq YnBfb2JqID0gKGJyZWFrcG9pbnRfb2JqZWN0ICopIGJwZmluaXNoX29iajsK KyAgUHlPYmplY3QgKnB5X29iaiA9IChQeU9iamVjdCAqKSBicF9vYmo7CisK KyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcgKHB5X29iaiwgb3V0b2Zz Y29wZV9mdW5jKSkKKyAgICB7CisgICAgICBpZiAoIVB5T2JqZWN0X0NhbGxN ZXRob2QgKHB5X29iaiwgb3V0b2ZzY29wZV9mdW5jLCBOVUxMKSkKKyAgICAg ICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAgICB9CisKKyAgZGVsZXRl X2JyZWFrcG9pbnQgKGJwZmluaXNoX29iai0+cHlfYnAuYnApOworfQorCisv KiBDYWxsYmFjayBmb3IgYGJwZmluaXNocHlfZGV0ZWN0X291dF9zY29wZScu ICBUcmlnZ2VycyBQeXRob24ncworICAgYEItPm91dF9vZl9zY29wZScgZnVu Y3Rpb24gaWYgQiBpcyBhIEZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIGl0cwor ICAgc2NvcGUgb3IgdHVybiBvZiBvdXRfb2Zfc2NvcGUgbm90aWZpY2F0aW9u IGlmIEIgaGFzIGJlZW4gaGl0LiAgKi8KKworc3RhdGljIGludAorYnBmaW5p c2hweV9kZXRlY3Rfb3V0X3Njb3BlX2NiIChzdHJ1Y3QgYnJlYWtwb2ludCAq Yiwgdm9pZCAqYXJncykKK3sKKyAgc3RydWN0IGJyZWFrcG9pbnQgKmJwX3N0 b3BwZWQgPSAoc3RydWN0IGJyZWFrcG9pbnQgKikgYXJnczsKKyAgUHlPYmpl Y3QgKnB5X2JwID0gKFB5T2JqZWN0ICopIGItPnB5X2JwX29iamVjdDsKKyAg c3RydWN0IGdkYmFyY2ggKmdhcmNoID0gYi0+Z2RiYXJjaCA/IGItPmdkYmFy Y2ggOiBnZXRfY3VycmVudF9hcmNoICgpOworICBzdHJ1Y3QgY2xlYW51cCAq Y2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52IChnYXJjaCwgY3VycmVudF9s YW5ndWFnZSk7CisgIAorICAvKiBUcmlnZ2VyIG91dF9vZl9zY29wZSBpZiB0 aGlzIGlzIGEgRmluaXNoQnJlYWtwb2ludCBhbmQgaXRzIGZyYW1lIGlzCisg ICAgIG5vdCBhbnltb3JlIGluIHRoZSBjdXJyZW50IGNhbGxzdGFjay4gICov CisgIGlmIChicGZpbmlzaHB5X2lzX2ZpbmlzaF9icCAocHlfYnApKQorICAg IHsKKyAgICAgIHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKmZp bmlzaF9icCA9CisgICAgICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2lu dF9vYmplY3QgKikgcHlfYnA7CisKKyAgICAgIGlmIChiID09IGJwX3N0b3Bw ZWQpCisgICAgICAgIGJwZmluaXNoX3N0b3BwZWRfYXRfZmluaXNoX2JwIChm aW5pc2hfYnApOworICAgICAgZWxzZSBpZiAoYi0+cHNwYWNlID09IGN1cnJl bnRfaW5mZXJpb3IgKCktPnBzcGFjZQorICAgICAgICAgICAmJiAoIXRhcmdl dF9oYXNfcmVnaXN0ZXJzCisgICAgICAgICAgICAgICB8fCBmcmFtZV9maW5k X2J5X2lkIChiLT5mcmFtZV9pZCkgPT0gTlVMTCkpCisgICAgICAgIHsKKyAg ICAgICAgICBicGZpbmlzaHB5X291dF9vZl9zY29wZSAoZmluaXNoX2JwKTsK KyAgICAgICAgfQorICAgIH0KKyAgCisgIGRvX2NsZWFudXBzIChjbGVhbnVw KTsKKyAgCisgIHJldHVybiAwOworfQorCisvKiBBdHRhY2hlZCB0byBgc3Rv cCcgbm90aWZpY2F0aW9ucywgY2hlY2sgaWYgdGhlIGV4ZWN1dGlvbiBoYXMg cnVuIG91dGcKKyAgIG91dCBvZiB0aGUgc2NvcGUgb2YgYW55IEZpbmlzaEJy ZWFrcG9pbnQgYmVmb3JlIGl0IGhhcyBiZWVuIGhpdC4gICovCisKK3N0YXRp YyB2b2lkCiticGZpbmlzaHB5X2hhbmRsZV9zdG9wIChzdHJ1Y3QgYnBzdGF0 cyAqYnMsIGludCBwcmludF9mcmFtZSkKK3sKKyAgaXRlcmF0ZV9vdmVyX2Jy ZWFrcG9pbnRzIChicGZpbmlzaHB5X2RldGVjdF9vdXRfc2NvcGVfY2IsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnMgPT0gTlVMTCA/IE5VTEwg OiBicy0+YnJlYWtwb2ludF9hdCk7Cit9CisKKy8qIEF0dGFjaGVkIHRvIGBl eGl0JyBub3RpZmljYXRpb25zLCB0cmlnZ2VycyBhbGwgdGhlIG5lY2Vzc2Fy eSBvdXQgb2YKKyAgIHNjb3BlIG5vdGlmaWNhdGlvbnMuICAqLworCitzdGF0 aWMgdm9pZAorYnBmaW5pc2hweV9oYW5kbGVfZXhpdCAoc3RydWN0IGluZmVy aW9yICppbmYpCit7CisgIGl0ZXJhdGVfb3Zlcl9icmVha3BvaW50cyAoYnBm aW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlX2NiLCBOVUxMKTsKK30KKworLyog SW5pdGlhbGl6ZSB0aGUgUHl0aG9uIGZpbmlzaCBicmVha3BvaW50IGNvZGUu ICAqLworCit2b2lkCitnZGJweV9pbml0aWFsaXplX2ZpbmlzaGJyZWFrcG9p bnRzICh2b2lkKQoreworICBpZiAoUHlUeXBlX1JlYWR5ICgmZmluaXNoX2Jy ZWFrcG9pbnRfb2JqZWN0X3R5cGUpIDwgMCkKKyAgICAgIHJldHVybjsKKyAg CisgIFB5X0lOQ1JFRiAoJmZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBl KTsKKyAgUHlNb2R1bGVfQWRkT2JqZWN0IChnZGJfbW9kdWxlLCAiRmluaXNo QnJlYWtwb2ludCIsCisgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0 ICopICZmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfdHlwZSk7CisgICAgCisg IG9ic2VydmVyX2F0dGFjaF9ub3JtYWxfc3RvcCAoYnBmaW5pc2hweV9oYW5k bGVfc3RvcCk7CisgIG9ic2VydmVyX2F0dGFjaF9pbmZlcmlvcl9leGl0IChi cGZpbmlzaHB5X2hhbmRsZV9leGl0KTsKK30KKworc3RhdGljIFB5R2V0U2V0 RGVmIGZpbmlzaF9icmVha3BvaW50X29iamVjdF9nZXRzZXRbXSA9IHsKKyAg eyAicmV0dXJuX3ZhbHVlIiwgYnBmaW5pc2hweV9nZXRfcmV0dXJudmFsdWUs IE5VTEwsCisgICJnZGIuVmFsdWUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUg cmV0dXJuIHZhbHVlLCBpZiBhbnkuIFwKK05vbmUgb3RoZXJ3aXNlLiIsIE5V TEwgfSwKKyAgICB7IE5VTEwgfSAgLyogU2VudGluZWwuICAqLworfTsKKwor c3RhdGljIFB5VHlwZU9iamVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3Rf dHlwZSA9Cit7CisgIFB5T2JqZWN0X0hFQURfSU5JVCAoTlVMTCkKKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm9iX3NpemUqLworICAi Z2RiLkZpbmlzaEJyZWFrcG9pbnQiLCAgICAgICAgIC8qdHBfbmFtZSovCisg IHNpemVvZiAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCksICAv KnRwX2Jhc2ljc2l6ZSovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyp0cF9pdGVtc2l6ZSovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNf bnVtYmVyKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KnRwX2FzX3NlcXVlbmNlKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8gKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1 ZmZlciovCisgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFT RVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgIkdEQiBmaW5pc2ggYnJlYWtwb2lu dCBvYmplY3QiLCAvKiB0cF9kb2MgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93 ZWFrbGlzdG9mZnNldCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisg IGZpbmlzaF9icmVha3BvaW50X29iamVjdF9nZXRzZXQsLyogdHBfZ2V0c2V0 ICovCisgICZicmVha3BvaW50X29iamVjdF90eXBlLCAgICAgICAgLyogdHBf YmFzZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX2RpY3QgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgIGJw ZmluaXNocHlfaW5pdCwgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9j ICovCisgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf bmV3ICovCit9OwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS1mcmFtZS5j IGIvZ2RiL3B5dGhvbi9weS1mcmFtZS5jCmluZGV4IDM5OGNlODQuLmM0NDk0 Y2IgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHktZnJhbWUuYworKysgYi9n ZGIvcHl0aG9uL3B5LWZyYW1lLmMKQEAgLTYwLDkgKzYwLDEwIEBAIHN0YXRp YyBQeVR5cGVPYmplY3QgZnJhbWVfb2JqZWN0X3R5cGU7CiAgICBvYmplY3Qu ICBJZiB0aGUgZnJhbWUgZG9lc24ndCBleGlzdCBhbnltb3JlICh0aGUgZnJh bWUgaWQgZG9lc24ndAogICAgY29ycmVzcG9uZCB0byBhbnkgZnJhbWUgaW4g dGhlIGluZmVyaW9yKSwgcmV0dXJucyBOVUxMLiAgKi8KIAotc3RhdGljIHN0 cnVjdCBmcmFtZV9pbmZvICoKLWZyYW1lX29iamVjdF90b19mcmFtZV9pbmZv IChmcmFtZV9vYmplY3QgKmZyYW1lX29iaikKK3N0cnVjdCBmcmFtZV9pbmZv ICoKK2ZyYW1lX29iamVjdF90b19mcmFtZV9pbmZvIChQeU9iamVjdCAqb2Jq KQogeworICBmcmFtZV9vYmplY3QgKmZyYW1lX29iaiA9IChmcmFtZV9vYmpl Y3QgKikgb2JqOyAgCiAgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKIAog ICBmcmFtZSA9IGZyYW1lX2ZpbmRfYnlfaWQgKGZyYW1lX29iai0+ZnJhbWVf aWQpOwpAQCAtMTAzLDcgKzEwNCw3IEBAIGZyYXB5X2lzX3ZhbGlkIChQeU9i amVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgIHN0cnVjdCBmcmFt ZV9pbmZvICpmcmFtZTsKIAotICBmcmFtZSA9IGZyYW1lX29iamVjdF90b19m cmFtZV9pbmZvICgoZnJhbWVfb2JqZWN0ICopIHNlbGYpOworICBmcmFtZSA9 IGZyYW1lX29iamVjdF90b19mcmFtZV9pbmZvIChzZWxmKTsKICAgaWYgKGZy YW1lID09IE5VTEwpCiAgICAgUHlfUkVUVVJOX0ZBTFNFOwogCkBAIC0xMjQs NyArMTI1LDcgQEAgZnJhcHlfbmFtZSAoUHlPYmplY3QgKnNlbGYsIFB5T2Jq ZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFT S19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZy YW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFV SVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIGZpbmRfZnJhbWVf ZnVubmFtZSAoZnJhbWUsICZuYW1lLCAmbGFuZywgTlVMTCk7CiAgICAgfQpA QCAtMTUzLDcgKzE1NCw3IEBAIGZyYXB5X3R5cGUgKFB5T2JqZWN0ICpzZWxm LCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVU VVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFM SUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJB UFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICB0eXBl ID0gZ2V0X2ZyYW1lX3R5cGUgKGZyYW1lKTsKICAgICB9CkBAIC0xNzQsNyAr MTc1LDcgQEAgZnJhcHlfdW53aW5kX3N0b3BfcmVhc29uIChQeU9iamVjdCAq c2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQs IFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJF X1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKICAgICB9CiAg IEdEQl9QWV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOwogCkBAIC0xOTUs NyArMTk2LDcgQEAgZnJhcHlfcGMgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj dCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tf QUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFt ZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlS RV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBwYyA9IGdldF9mcmFt ZV9wYyAoZnJhbWUpOwogICAgIH0KQEAgLTIxNiw3ICsyMTcsNyBAQCBmcmFw eV9ibG9jayAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAg IFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewot ICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBz ZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxm LCBmcmFtZSk7CiAgICAgICBibG9jayA9IGdldF9mcmFtZV9ibG9jayAoZnJh bWUsIE5VTEwpOwogICAgIH0KICAgR0RCX1BZX0hBTkRMRV9FWENFUFRJT04g KGV4Y2VwdCk7CkBAIC0yNTcsNyArMjU4LDcgQEAgZnJhcHlfZnVuY3Rpb24g KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FU Q0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZS QVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJh bWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUp OwogCiAgICAgICBzeW0gPSBmaW5kX3BjX2Z1bmN0aW9uIChnZXRfZnJhbWVf YWRkcmVzc19pbl9ibG9jayAoZnJhbWUpKTsKICAgICB9CkBAIC0zMTksNyAr MzIwLDcgQEAgZnJhcHlfb2xkZXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj dCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tf QUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFt ZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlS RV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBwcmV2ID0gZ2V0X3By ZXZfZnJhbWUgKGZyYW1lKTsKICAgICAgIGlmIChwcmV2KQpAQCAtMzQ4LDcg KzM0OSw3IEBAIGZyYXB5X25ld2VyIChQeU9iamVjdCAqc2VsZiwgUHlPYmpl Y3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNL X0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJh bWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJ UkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAgbmV4dCA9IGdldF9u ZXh0X2ZyYW1lIChmcmFtZSk7CiAgICAgICBpZiAobmV4dCkKQEAgLTM3Nyw3 ICszNzgsNyBAQCBmcmFweV9maW5kX3NhbCAoUHlPYmplY3QgKnNlbGYsIFB5 T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5f TUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAo KGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9S RVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIGZpbmRfZnJh bWVfc2FsIChmcmFtZSwgJnNhbCk7CiAgICAgICBzYWxfb2JqID0gc3ltdGFi X2FuZF9saW5lX3RvX3NhbF9vYmplY3QgKHNhbCk7CkBAIC00MzMsNyArNDM0 LDcgQEAgZnJhcHlfcmVhZF92YXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj dCAqYXJncykKIAogICAgICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9N QVNLX0FMTCkKIAl7Ci0JICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVf b2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKwkgIEZSQVBZX1JFUVVJUkVfVkFM SUQgKHNlbGYsIGZyYW1lKTsKIAogCSAgaWYgKCFibG9jaykKIAkgICAgYmxv Y2sgPSBnZXRfZnJhbWVfYmxvY2sgKGZyYW1lLCBOVUxMKTsKQEAgLTQ2MSw3 ICs0NjIsNyBAQCBmcmFweV9yZWFkX3ZhciAoUHlPYmplY3QgKnNlbGYsIFB5 T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5f TUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAo KGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9S RVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHZhbCA9IHJl YWRfdmFyX3ZhbHVlICh2YXIsIGZyYW1lKTsKICAgICB9CkBAIC00NzYsMTIg KzQ3NywxMSBAQCBzdGF0aWMgUHlPYmplY3QgKgogZnJhcHlfc2VsZWN0IChQ eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgIHN0cnVjdCBm cmFtZV9pbmZvICpmaTsKLSAgZnJhbWVfb2JqZWN0ICpmcmFtZSA9IChmcmFt ZV9vYmplY3QgKikgc2VsZjsKICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNl cHRpb24gZXhjZXB0OwogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5f TUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAo ZnJhbWUsIGZpKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYs IGZpKTsKIAogICAgICAgc2VsZWN0X2ZyYW1lIChmaSk7CiAgICAgfQpkaWZm IC0tZ2l0IGEvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaCBiL2dkYi9w eXRob24vcHl0aG9uLWludGVybmFsLmgKaW5kZXggZTU5MzYxMi4uZjg5OWI3 NyAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaAor KysgYi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCkBAIC0xMjAsOSAr MTIwLDUwIEBAIGV4dGVybiBQeVR5cGVPYmplY3Qgc3ltYm9sX29iamVjdF90 eXBlOwogZXh0ZXJuIFB5VHlwZU9iamVjdCBldmVudF9vYmplY3RfdHlwZTsK IGV4dGVybiBQeVR5cGVPYmplY3QgZXZlbnRzX29iamVjdF90eXBlOwogZXh0 ZXJuIFB5VHlwZU9iamVjdCBzdG9wX2V2ZW50X29iamVjdF90eXBlOworZXh0 ZXJuIFB5VHlwZU9iamVjdCBicmVha3BvaW50X29iamVjdF90eXBlOworCit0 eXBlZGVmIHN0cnVjdCBicmVha3BvaW50X29iamVjdAoreworICBQeU9iamVj dF9IRUFECisKKyAgLyogVGhlIGJyZWFrcG9pbnQgbnVtYmVyIGFjY29yZGlu ZyB0byBnZGIuICAqLworICBpbnQgbnVtYmVyOworCisgIC8qIFRoZSBnZGIg YnJlYWtwb2ludCBvYmplY3QsIG9yIE5VTEwgaWYgdGhlIGJyZWFrcG9pbnQg aGFzIGJlZW4KKyAgICAgZGVsZXRlZC4gICovCisgIHN0cnVjdCBicmVha3Bv aW50ICpicDsKKworICAvKiAxIGlzIHRoaXMgaXMgYSBGaW5pc2hCcmVha3Bv aW50IG9iamVjdCwgMCBvdGhlcndpc2UuICAqLworICBpbnQgaXNfZmluaXNo X2JwOworfSBicmVha3BvaW50X29iamVjdDsKKworLyogUmVxdWlyZSB0aGF0 IEJSRUFLUE9JTlQgYmUgYSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBh IFB5dGhvbgorICAgZXhjZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICAqLwor I2RlZmluZSBCUFBZX1JFUVVJUkVfVkFMSUQoQnJlYWtwb2ludCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgaWYgKChCcmVha3BvaW50KS0+YnAgPT0g TlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICByZXR1cm4gUHlFcnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJy b3IsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfKCJCcmVha3BvaW50ICVkIGlzIGludmFsaWQuIiks ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo QnJlYWtwb2ludCktPm51bWJlcik7ICAgICAgICAgICAgICAgICAgICAgXAor ICAgIH0gd2hpbGUgKDApCisKKy8qIFJlcXVpcmUgdGhhdCBCUkVBS1BPSU5U IGJlIGEgdmFsaWQgYnJlYWtwb2ludCBJRDsgdGhyb3cgYSBQeXRob24KKyAg IGV4Y2VwdGlvbiBpZiBpdCBpcyBpbnZhbGlkLiAgVGhpcyBtYWNybyBpcyBm b3IgdXNlIGluIHNldHRlciBmdW5jdGlvbnMuICAqLworI2RlZmluZSBCUFBZ X1NFVF9SRVFVSVJFX1ZBTElEKEJyZWFrcG9pbnQpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgaWYgKChCcmVha3BvaW50KS0+YnAgPT0gTlVMTCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICAgIFB5RXJyX0Zvcm1hdCAoUHlF eGNfUnVudGltZUVycm9yLCBfKCJCcmVha3BvaW50ICVkIGlzIGludmFsaWQu IiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChCcmVha3BvaW50KS0+ bnVtYmVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg ICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisKKy8qIFZhcmlhYmxlcyB1c2Vk IHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgQnJlYWtwb2ludAor ICAgY29uc3RydWN0b3IgYW5kIHRoZSBicmVha3BvaW50LWNyZWF0ZWQgaG9v ayBmdW5jdGlvbi4gICovCitleHRlcm4gYnJlYWtwb2ludF9vYmplY3QgKmJw cHlfcGVuZGluZ19vYmplY3Q7CiAKLS8qIERlZmluZWQgaW4gcHktYnJlYWtw b2ludC5jICovCi10eXBlZGVmIHN0cnVjdCBicmVha3BvaW50X29iamVjdCBi cmVha3BvaW50X29iamVjdDsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTE4 OCw2ICsyMjksMTAgQEAgc3RydWN0IHZhbHVlICpjb252ZXJ0X3ZhbHVlX2Zy b21fcHl0aG9uIChQeU9iamVjdCAqb2JqKTsKIHN0cnVjdCB0eXBlICp0eXBl X29iamVjdF90b190eXBlIChQeU9iamVjdCAqb2JqKTsKIHN0cnVjdCBzeW10 YWIgKnN5bXRhYl9vYmplY3RfdG9fc3ltdGFiIChQeU9iamVjdCAqb2JqKTsK IHN0cnVjdCBzeW10YWJfYW5kX2xpbmUgKnNhbF9vYmplY3RfdG9fc3ltdGFi X2FuZF9saW5lIChQeU9iamVjdCAqb2JqKTsKK3N0cnVjdCBmcmFtZV9pbmZv ICpmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoUHlPYmplY3QgKmZyYW1l X29iaik7CisKK2ludCBicGZpbmlzaHB5X2lzX2ZpbmlzaF9icCAoUHlPYmpl Y3QgKm9iaik7CitpbnQgYnBmaW5pc2hweV9icF9pc19maW5pc2hfYnAgKGJy ZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopOwogCiB2b2lkIGdkYnB5X2luaXRp YWxpemVfYXV0b19sb2FkICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6 ZV92YWx1ZXMgKHZvaWQpOwpAQCAtMjAyLDYgKzI0Nyw3IEBAIHZvaWQgZ2Ri cHlfaW5pdGlhbGl6ZV9mdW5jdGlvbnMgKHZvaWQpOwogdm9pZCBnZGJweV9p bml0aWFsaXplX3BzcGFjZSAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxp emVfb2JqZmlsZSAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfYnJl YWtwb2ludHMgKHZvaWQpOwordm9pZCBnZGJweV9pbml0aWFsaXplX2Zpbmlz aGJyZWFrcG9pbnRzICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9s YXp5X3N0cmluZyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfcGFy YW1ldGVycyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfdGhyZWFk ICh2b2lkKTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLmMgYi9n ZGIvcHl0aG9uL3B5dGhvbi5jCmluZGV4IGRmOGUzZDUuLmRiMjNiYmYgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLmMKKysrIGIvZ2RiL3B5dGhv bi9weXRob24uYwpAQCAtMTA1NCw2ICsxMDU0LDExIEBAIGdkYnB5X2JyZWFr cG9pbnRfaGFzX3B5X2NvbmQgKHN0cnVjdCBicmVha3BvaW50X29iamVjdCAq YnBfb2JqKQogCQkgICAgInNjcmlwdGluZyBpcyBub3Qgc3VwcG9ydGVkLiIp KTsKIH0KIAorc3RydWN0IGJyZWFrcG9pbnQgKgorZ2RicHlfaXNfc3RvcHBl ZF9hdF9maW5pc2hfYnAgKGJwc3RhdCBzdG9wX2Jwc3RhdCkKK3sKKyAgcmV0 dXJuIE5VTEw7Cit9CiAjZW5kaWYgLyogSEFWRV9QWVRIT04gKi8KIAogDApA QCAtMTI0Myw2ICsxMjQ4LDcgQEAgRW5hYmxlcyBvciBkaXNhYmxlcyBwcmlu dGluZyBvZiBQeXRob24gc3RhY2sgdHJhY2VzLiIpLAogICBnZGJweV9pbml0 aWFsaXplX3BzcGFjZSAoKTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9vYmpmaWxl ICgpOwogICBnZGJweV9pbml0aWFsaXplX2JyZWFrcG9pbnRzICgpOworICBn ZGJweV9pbml0aWFsaXplX2ZpbmlzaGJyZWFrcG9pbnRzICgpOwogICBnZGJw eV9pbml0aWFsaXplX2xhenlfc3RyaW5nICgpOwogICBnZGJweV9pbml0aWFs aXplX3RocmVhZCAoKTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9pbmZlcmlvciAo KTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLmggYi9nZGIvcHl0 aG9uL3B5dGhvbi5oCmluZGV4IGNlMGViMzUuLmUzNDFkNzYgMTAwNjQ0Ci0t LSBhL2dkYi9weXRob24vcHl0aG9uLmgKKysrIGIvZ2RiL3B5dGhvbi9weXRo b24uaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBHREJfUFlUSE9OX0gK IAogI2luY2x1ZGUgInZhbHVlLmgiCisjaW5jbHVkZSAiYnJlYWtwb2ludC5o IgogCiBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3Q7CiAKQEAgLTQ3LDQgKzQ4 LDUgQEAgaW50IGdkYnB5X3Nob3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2lu dF9vYmplY3QgKmJwX29iaik7CiAKIGludCBnZGJweV9icmVha3BvaW50X2hh c19weV9jb25kIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaik7 CiAKK3N0cnVjdCBicmVha3BvaW50ICpnZGJweV9pc19zdG9wcGVkX2F0X2Zp bmlzaF9icCAoYnBzdGF0IHN0b3BfYnBzdGF0KTsKICNlbmRpZiAvKiBHREJf UFlUSE9OX0ggKi8KZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1icmVha3BvaW50LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1icmVha3BvaW50LmV4cAppbmRleCBlMGRkMDg3Li4wZTNhZGJk IDEwMDY0NAotLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktYnJl YWtwb2ludC5leHAKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWJyZWFrcG9pbnQuZXhwCkBAIC00NCw3ICs0NCw4IEBAIGdkYl9weV90ZXN0 X3NpbGVudF9jbWQgInB5dGhvbiBibGlzdCA9IGdkYi5icmVha3BvaW50cygp IiAiR2V0IEJyZWFrcG9pbnQgTGlzdCIKIGdkYl90ZXN0ICJweXRob24gcHJp bnQgYmxpc3RcWzBcXSIgIjxnZGIuQnJlYWtwb2ludCBvYmplY3QgYXQgJGhl eD4iICJDaGVjayBvYmogZXhpc3RzIgogZ2RiX3Rlc3QgInB5dGhvbiBwcmlu dCBibGlzdFxbMFxdLmxvY2F0aW9uIiAibWFpbi4iICJDaGVjayBicmVha3Bv aW50IGxvY2F0aW9uIgogCi1nZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5l X251bWJlciAiQnJlYWsgYXQgbXVsdGlwbHkuIl0KK3NldCBtdWx0X2xpbmUg W2dkYl9nZXRfbGluZV9udW1iZXIgIkJyZWFrIGF0IG11bHRpcGx5LiJdCitn ZGJfYnJlYWtwb2ludCAke211bHRfbGluZX0KIGdkYl9jb250aW51ZV90b19i cmVha3BvaW50ICJCcmVhayBhdCBtdWx0aXBseS4iCiAKICMgQ2hlY2sgdGhh dCB0aGUgUHl0aG9uIGJyZWFrcG9pbnQgY29kZSBub3RlZCB0aGUgYWRkaXRp b24gb2YgYQpAQCAtNTQsNyArNTUsOSBAQCBnZGJfdGVzdCAicHl0aG9uIHBy aW50IGxlbihibGlzdCkiICIyIiAiQ2hlY2sgZm9yIHR3byBicmVha3BvaW50 cyIKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzBcXSIgIjxnZGIu QnJlYWtwb2ludCBvYmplY3QgYXQgJGhleD4iICJDaGVjayBvYmogZXhpc3Rz IgogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMFxdLmxvY2F0aW9u IiAibWFpbi4iICJDaGVjayBicmVha3BvaW50IGxvY2F0aW9uIgogZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBibGlzdFxbMVxdIiAiPGdkYi5CcmVha3BvaW50 IG9iamVjdCBhdCAkaGV4PiIgIkNoZWNrIG9iaiBleGlzdHMiCi1nZGJfdGVz dCAicHl0aG9uIHByaW50IGJsaXN0XFsxXF0ubG9jYXRpb24iICJweS1icmVh a3BvaW50XC5jOjQxKiIgIkNoZWNrIGJyZWFrcG9pbnQgbG9jYXRpb24iCisK K2dkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzFcXS5sb2NhdGlvbiIg InB5LWJyZWFrcG9pbnRcLmM6JHttdWx0X2xpbmV9KiIgXAorICAgICAgICAg IkNoZWNrIGJyZWFrcG9pbnQgbG9jYXRpb24iCiAKICMgQ2hlY2sgaGl0IGFu ZCBpZ25vcmUgY291bnRzLiAKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxp c3RcWzFcXS5oaXRfY291bnQiICIxIiAiQ2hlY2sgYnJlYWtwb2ludCBoaXQg Y291bnQiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktZmluaXNoLWJyZWFrcG9pbnQuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjViNzA4ZTMKLS0tIC9kZXYvbnVsbAorKysg Yi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQuYwpAQCAtMCwwICsxLDk3IEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBh cnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQg MjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlIDxzZXRqbXAuaD4K KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwor aW50IGluY3JlYXNlXzEgKGludCAqYSkKK3sKKyAgKmEgKz0gMTsKKyAgcmV0 dXJuIC01OworfQorCit2b2lkIGluY3JlYXNlIChpbnQgKmEpCit7CisgIGlu Y3JlYXNlXzEgKGEpOworfQorCitpbnQKK3Rlc3RfMSAoaW50IGksIGludCBq KQoreworICByZXR1cm4gaSA9PSBqOworfQorCitpbnQKK3Rlc3QoaW50IGks IGludCBqKQoreworICByZXR1cm4gdGVzdF8xIChpLCBqKTsKK30KKworaW50 CitjYWxsX2xvbmdqbXBfMSAoam1wX2J1ZiAqYnVmKQoreworICBsb25nam1w ICgqYnVmLCAxKTsKK30KKworaW50CitjYWxsX2xvbmdqbXAgKGptcF9idWYg KmJ1ZikKK3sKKyAgY2FsbF9sb25nam1wXzEgKGJ1Zik7Cit9CisKK3ZvaWQK K3Rlc3RfZXhlY19leGl0KGludCBkb19leGl0KQoreworICBpZiAoZG9fZXhp dCkKKyAgICBleGl0KDApOworICBlbHNlCisgICAgZXhlY2wgKCIvYmluL2Vj aG8iLCAiZWNobyIsICItMSIsIChjaGFyICopMCk7Cit9CisKK2ludCBtYWlu IChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBqbXBfYnVmIGVudjsK KyAgaW50IGZvbyA9IDU7CisgIGludCBiYXIgPSA0MjsKKyAgaW50IGksIGo7 CisKKyAgZ2V0cGlkKCk7CisKKyAgaSA9IDA7CisgIC8qIEJyZWFrIGF0IGlu Y3JlYXNlLiAqLworICBpbmNyZWFzZSAoJmkpOworICBpbmNyZWFzZSAoJmkp OworICBpbmNyZWFzZSAoJmkpOworCisgIGZvciAoaSA9IDA7IGkgPCAxMDsg aSsrKQorICAgIHsKKyAgICAgIGogKz0gMTsgLyogQ29uZGl0aW9uIEJyZWFr LiAqLworICAgIH0KKworICBpZiAoc2V0am1wIChlbnYpID09IDApIC8qIGxv bmdqbXAgY2F1Z2h0ICovCisgICAgeworICAgICAgY2FsbF9sb25nam1wICgm ZW52KTsKKyAgICB9CisgIGVsc2UKKyAgICBqICs9IDE7IC8qIGFmdGVyIGxv bmdqbXAuICovCisKKyAgdGVzdF9leGVjX2V4aXQoMSk7CisKKyAgcmV0dXJu IGo7IC8qIEJyZWFrIGF0IGVuZC4gKi8KK30KZGlmZiAtLWdpdCBhL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5leHAg Yi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0 ZDNiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwCkBAIC0wLDAgKzEsMjMw IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMK KyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisj IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxl IGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyB0aGUg bWVjaGFuaXNtCisjIGV4cG9zaW5nIHZhbHVlcyB0byBQeXRob24uCisKK2lm ICR0cmFjZWxldmVsIHRoZW4geworICAgIHN0cmFjZSAkdHJhY2VsZXZlbAor fQorCitsb2FkX2xpYiBnZGItcHl0aG9uLmV4cAorCitzZXQgdGVzdGZpbGUg InB5LWZpbmlzaC1icmVha3BvaW50Igorc2V0IHNyY2ZpbGUgJHt0ZXN0Zmls ZX0uYworCitpZiB7IFtwcmVwYXJlX2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9 LmV4cCAke3Rlc3RmaWxlfSAke3NyY2ZpbGV9XSB9IHsKKyAgICByZXR1cm4g LTEKK30KKworc2V0IHJlbW90ZV9weXRob25fZmlsZSBbcmVtb3RlX2Rvd25s b2FkIGhvc3QgJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfS5weV0K KworCisjIFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMg bm90IGVuYWJsZWQuCitpZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7IGNv bnRpbnVlIH0KKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4gbm9y bWFsIGNvbmRpdGlvbnMKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxl fQorCitpZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5v dCBydW4gdG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KK2dkYl90ZXN0X25v X291dHB1dCAic2V0IGNvbmZpcm0gb2ZmIiAiZGlzYWJsZSBjb25maXJtYXRp b24iCitnZGJfdGVzdCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQ eXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQg cHl0aG9uIHNjcmlwdHMiCitnZGJfYnJlYWtwb2ludCAiaW5jcmVhc2VfMSIK K2dkYl90ZXN0ICJjb250aW51ZSIgIkJyZWFrcG9pbnQgLiphdC4qIiAiY29u dGludWUgdG8gdGhlIGZ1bmN0aW9uIHRvIGZpbmlzaCIKKworIyBzZXQgRmlu aXNoQnJlYWtwb2ludAorCitnZGJfdGVzdCAicHl0aG9uIGZpbmlzaGJwID0g TXlGaW5pc2hCcmVha3BvaW50IChnZGIucGFyc2VfYW5kX2V2YWwgKCdhJyks IGdkYi5zZWxlY3RlZF9mcmFtZSAoKSkiIFwKKyAgICAgICAgICJUZW1wb3Jh cnkgYnJlYWtwb2ludC4qIiAic2V0IEZpbmlzaEJyZWFrcG9pbnQiCitnZGJf dGVzdCAicHl0aG9uIHByaW50IGZpbmlzaGJwLnJldHVybl92YWx1ZSIgIk5v bmUuKiIgXAorICAgICAgICAgImNoZWNrIHJldHVybl92YWx1ZSBhdCBpbml0 IgorCisjIGNoZWNrIG5vcm1hbCBicCBoaXQKKworZ2RiX3Rlc3QgImNvbnRp bnVlIiAiTXlGaW5pc2hCcmVha3BvaW50IHN0b3Agd2l0aC4qIzAuKmluY3Jl YXNlLioiIFwKKyAgICAgICAgICJjaGVjayBNeUZpbmlzaEJyZWFrcG9pbnQg aGl0IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5pc2hicC5yZXR1cm5f dmFsdWUiICItNS4qIiAiY2hlY2sgcmV0dXJuX3ZhbHVlIgorCitnZGJfdGVz dCAicHl0aG9uIHByaW50IGZpbmlzaGJwLmlzX3ZhbGlkKCkiICJGYWxzZS4q IlwKKyAgICAgICAgICJlbnN1cmUgdGhhdCBmaW5pc2ggYnAgaXMgaW52YWxp ZCBhZmVyIG5vcm1hbCBoaXQiCisKKyMgY2hlY2sgRmluaXNoQnJlYWtwb2lu dCBpbiBtYWluIG5vIGFsbG93ZWQKKworZ2RiX3Rlc3QgImZpbmlzaCIgIm1h aW4uKiIgInJldHVybiB0byBtYWluKCkiCitnZGJfdGVzdCAicHl0aG9uIE15 RmluaXNoQnJlYWtwb2ludCAoTm9uZSwgZ2RiLnNlbGVjdGVkX2ZyYW1lICgp KSIgXAorICAgICAgICAgIlZhbHVlRXJyb3I6IFwiRmluaXNoQnJlYWtwb2lu dFwiIG5vdCBtZWFuaW5nZnVsIGluIHRoZSBvdXRlcm1vc3QgZnJhbWUuLioi IFwKKyAgICAgICAgICJjaGVjayBGaW5pc2hCUCBub3QgYWxsb3dlZCBpbiBt YWluIgorCisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCB3aXRoIG5vIGRl YnVnIHN5bWJvbCAKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQor CitnZGJfdGVzdCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRo b24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0 aG9uIHNjcmlwdHMiCitzZXQgY29uZF9saW5lIFtnZGJfZ2V0X2xpbmVfbnVt YmVyICJDb25kaXRpb24gQnJlYWsuIl0KKworaWYgIVtydW50byAiZ2V0cGlk Il0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBnZXRwaWQuIgor ICAgIHJldHVybiAwCit9CisKK2dkYl90ZXN0ICJweXRob24gZmluaXNoQlAg PSBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJhbWUoKSki IFwKKyAgICAgICAgICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGluaXQiIFwK KyAgICAgICAgICJzZXQgZmluaXNoIGJyZWFrcG9pbnQiCitnZGJfdGVzdCAi Y29udGludWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IHN0b3AuKiIgImNo ZWNrIEZpbmlzaEJyZWFrcG9pbnQgaGl0IgorZ2RiX3Rlc3QgInB5dGhvbiBw cmludCBmaW5pc2hCUC5yZXR1cm5fdmFsdWUiICJOb25lIiAiY2hlY2sgcmV0 dXJuIHZhbHVlIHdpdGhvdXQgZGVidWcgc3ltYm9sIgorCisjCisjIFRlc3Qg RmluaXNoQnJlYWtwb2ludCBpbiBmdW5jdGlvbiByZXR1cm5lZCBieSBsb25n am1wIAorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisKK2dkYl90 ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25fZmlsZSIgIlB5dGhvbiBzY3Jp cHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBweXRob24gc2Ny aXB0cyIKKworaWYgIVtydW50byBjYWxsX2xvbmdqbXBfMV0gdGhlbiB7Cisg ICAgcGVycm9yICJjb3VsZG4ndCBydW4gdG8gYnJlYWtwb2ludCBjYWxsX2xv bmdqbXAiCisgICAgY29udGludWUKK30KKworZ2RiX3Rlc3QgInB5dGhvbiBm aW5pc2hicCA9IFNpbXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9m cmFtZSgpKSIgXAorICAgICAgICAgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQg aW5pdCIgXAorICAgICAgICAgInNldCBmaW5pc2ggYnJlYWtwb2ludCIgCitn ZGJfdGVzdCAiYnJlYWsgW2dkYl9nZXRfbGluZV9udW1iZXIgImFmdGVyIGxv bmdqbXAuIl0iICJCcmVha3BvaW50LiogYXQgLioiIFwKKyAgICAgICAgICJz ZXQgQlAgYWZ0ZXIgdGhlIGp1bXAiCitnZGJfdGVzdCAiY29udGludWUiICJT aW1wbGVGaW5pc2hCcmVha3BvaW50IG91dCBvZiBzY29wZS4qIiBcCisgICAg ICAgICAiY2hlY2sgRmluaXNoQlAgb3V0IG9mIHNjb3BlIG5vdGlmaWNhdGlv biIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnAuaXNfdmFsaWQo KSIgIkZhbHNlLioiXAorICAgICAgICAgImVuc3VyZSB0aGF0IGZpbmlzaCBi cCBpcyBpbnZhbGlkIGFmZXIgb3V0IG9mIHNjb3BlIG5vdGlmaWNhdGlvbiIK KworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4gQlAgY29uZGl0aW9u IGV2YWx1YXRpb24gCisjIChmaW5pc2ggaW4gZHVtbXkgZnJhbWUpCisjCisK K2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJj ZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRl ZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCisK K2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1 biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorICAgICAgICAgCitnZGJf dGVzdCAiYnJlYWsgJHtjb25kX2xpbmV9IGlmIHRlc3RfMShpLDgpIiAiQnJl YWtwb2ludCAuKiBhdCAuKiIgXAorICAgICAgICAgInNldCBhIGNvbmRpdGlv bmFsIEJQIgorZ2RiX3Rlc3QgInB5dGhvbiBUZXN0QnJlYWtwb2ludCgpIiAi VGVzdEJyZWFrcG9pbnQgaW5pdCIgXAorICAgICAgICAgInNldCBGaW5pc2hC UCBpbiBhIGJyZWFrcG9pbnQgY29uZGl0aW9uIgorZ2RiX3Rlc3QgImNvbnRp bnVlIiBcCisgICAgICAgICAiXCJGaW5pc2hCcmVha3BvaW50XCIgY2Fubm90 IGJlIHNldCBvbiBhIGR1bW15IGZyYW1lLioiIFwKKyAgICAgICAgICJkb24n dCBhbGxvdyBGaW5pc2hCcmVha3BvaW50IG9uIGR1bW15IGZyYW1lcyIKK2dk Yl90ZXN0ICJwcmludCBpIiAiOCIgImNoZWNrIHN0b3BwZWQgbG9jYXRpb24i CisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGluIEJQIGNvbmRpdGlv biBldmFsdWF0aW9uIAorIyAoZmluaXNoIGluIG5vcm1hbCBmcmFtZSkKKyMK KworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291 cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0IGltcG9y dGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisK K2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1 biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAiYnJl YWsgJHtjb25kX2xpbmV9IGlmIHRlc3QoaSw4KSIgXAorICAgICAgICAgIkJy ZWFrcG9pbnQgLiogYXQgLioiICJzZXQgY29uZGl0aW9uYWwgQlAiCitnZGJf dGVzdCAicHl0aG9uIFRlc3RCcmVha3BvaW50KCkiICJUZXN0QnJlYWtwb2lu dCBpbml0IiAic2V0IEJQIGluIGNvbmRpdGlvbiIKKworZ2RiX3Rlc3QgImNv bnRpbnVlIiBcCisgICAgICAgICAidGVzdCBkb24ndCBzdG9wIDEuKnRlc3Qg ZG9uJ3Qgc3RvcCAyLip0ZXN0IHN0b3AuKkVycm9yIGluIHRlc3RpbmcgYnJl YWtwb2ludCBjb25kaXRpb24uKlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2Vk IHN0b3BwZWQgd2hpbGUgaW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIu KiIgXAorICAgICAgICAgInN0b3AgaW4gY29uZGl0aW9uIGZ1bmN0aW9uIgor CitnZGJfdGVzdCAiY29udGludWUiICJDb250aW51aW5nLioiICJmaW5pc2gg Y29uZGl0aW9uIGV2YWx1YXRpb24iCitnZGJfdGVzdCAiY29udGludWUiICJC cmVha3BvaW50LioiICJzdG9wIGF0IGNvbmRpdGlvbmFsIGJyZWFrcG9pbnQi CitnZGJfdGVzdCAicHJpbnQgaSIgIjgiICJjaGVjayBzdG9wcGVkIGxvY2F0 aW9uIgorCisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBleHBsaWNp dCBpbmZlcmlvciBmdW5jdGlvbiBjYWxsCisjCisKK2NsZWFuX3Jlc3RhcnQg JHt0ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhv bl9maWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAg ICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCitpZiAhW3J1bnRvX21haW5d IHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAg cmV0dXJuIDAKK30KKworIyByZXR1cm4gYWRkcmVzcyBpbiBkdW1teSBmcmFt ZQorCitnZGJfdGVzdCAicHl0aG9uIFRlc3RFeHBsaWNpdEJyZWFrcG9pbnQo J2luY3JlYXNlXzEnKSIgIkJyZWFrcG9pbnQuKmF0LioiIFwKKyAgICAgICAg ICJwcmVwYXJlIFRlc3RFeHBsaWNpdEJyZWFrcG9pbnQiCitnZGJfdGVzdCAi cHJpbnQgaW5jcmVhc2VfMSgmaSkiIFwKKyAgICAgICAgICJcIkZpbmlzaEJy ZWFrcG9pbnRcIiBjYW5ub3QgYmUgc2V0IG9uIGEgZHVtbXkgZnJhbWUuKiIg XAorICAgICAgICAgImRvbid0IGFsbG93IEZpbmlzaEJyZWFrcG9pbnQgb24g ZHVtbXkgZnJhbWVzIgorCisjIHJldHVybiBhZGRyZXNzIGluIG5vcm1hbCBm cmFtZQorCitkZWxldGVfYnJlYWtwb2ludHMKK2dkYl90ZXN0ICJweXRob24g VGVzdEV4cGxpY2l0QnJlYWtwb2ludChcImluY3JlYXNlXzFcIikiICJCcmVh a3BvaW50LiphdC4qIiBcCisgICAgICAgICAicHJlcGFyZSBUZXN0RXhwbGlj aXRCcmVha3BvaW50IgorZ2RiX3Rlc3QgInByaW50IGluY3JlYXNlKCZpKSIg XAorICAgICAgICAgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdC4qU2lt cGxlRmluaXNoQnJlYWtwb2ludCBzdG9wLipUaGUgcHJvZ3JhbSBiZWluZyBk ZWJ1Z2dlZCBzdG9wcGVkIHdoaWxlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZy b20gR0RCLioiIFwKKyAgICAgICAgICJGaW5pc2hCUCBzdG9wIGF0IGR1cmlu ZyBleHBsaWNpdCBmdW5jdGlvbiBjYWxsIgorCisKKyMKKyMgVGVzdCBGaW5p c2hCcmVha3BvaW50IHdoZW4gaW5mZXJpb3IgZXhpdHMKKyMKKworaWYgIVty dW50byAidGVzdF9leGVjX2V4aXQiXSB0aGVuIHsKKyAgICBmYWlsICJDYW5u b3QgcnVuIHRvIHRlc3RfZXhlY19leGl0LiIKKyAgICByZXR1cm4gMAorfQor CitnZGJfdGVzdCAicHl0aG9uIFNpbXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2Ri Lm5ld2VzdF9mcmFtZSgpKSIgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5p dCIgInNldCBGaW5pc2hCUCBhZnRlciB0aGUgZXhpdCgpIgorZ2RiX3Rlc3Qg ImNvbnRpbnVlIiAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBvdXQgb2Ygc2Nv cGUuKiIgImNhdGNoIG91dCBvZiBzY29wZSBhZnRlciBleGl0IgorCisjCisj IFRlc3QgRmluaXNoQnJlYWtwb2ludCB3aGVuIGluZmVyaW9yIGV4ZWNzCisj CisKK2lmICFbcnVudG8gInRlc3RfZXhlY19leGl0Il0gdGhlbiB7CisgICAg ZmFpbCAiQ2Fubm90IHJ1biB0byB0ZXN0X2V4ZWNfZXhpdC4iCisgICAgcmV0 dXJuIDAKK30gICAgIAorCitnZGJfdGVzdF9ub19vdXRwdXQgInNldCB2YXIg ZG9fZXhpdCA9IDAiICJzd2l0Y2ggdG8gZXhlY3ZlKCkgdGVzdCIKK2dkYl90 ZXN0ICJweXRob24gU2ltcGxlRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0 X2ZyYW1lKCkpIiAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBpbml0IiAic2V0 IEZpbmlzaEJQIGFmdGVyIHRoZSBleGVjIgorZ2RiX3Rlc3QgImNhdGNoIGV4 ZWMiICJDYXRjaHBvaW50LipcKGV4ZWNcKS4qIiAiY2F0Y2ggZXhlYyIKK2dk Yl90ZXN0ICJjb250aW51ZSIgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0 IG9mIHNjb3BlLioiICJjYXRjaCBvdXQgb2Ygc2NvcGUgYWZ0ZXIgZXhlYyIK XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIv dGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQucHkg Yi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRm MTBiMAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5weQpAQCAtMCwwICsxLDg4IEBA CisjIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor IyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor IyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMg cGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHB5dGhvbiBG aW5pc2gKKyMgQnJlYWtwb2ludHMuCisJCQorY2xhc3MgTXlGaW5pc2hCcmVh a3BvaW50KGdkYi5GaW5pc2hCcmVha3BvaW50KToKKwlkZWYgX19pbml0X18o c2VsZiwgdmFsLCBmcmFtZSk6CisJCWdkYi5GaW5pc2hCcmVha3BvaW50Ll9f aW5pdF9fIChzZWxmLCBmcmFtZSkKKwkJcHJpbnQgIk15RmluaXNoQnJlYWtw b2ludCBpbml0IgorCQlzZWxmLnZhbCA9IHZhbAorCQkKKwlkZWYgc3RvcChz ZWxmKToKKwkJcHJpbnQgIk15RmluaXNoQnJlYWtwb2ludCBzdG9wIHdpdGgg JWQiICUgaW50KHNlbGYudmFsLmRlcmVmZXJlbmNlKCkpCisJCWdkYi5leGVj dXRlKCJ3aGVyZSAxIikKKwkJcmV0dXJuIFRydWUKKwkKKwlkZWYgb3V0X29m X3Njb3BlKHNlbGYpOgorCQlwcmludCAiTXlGaW5pc2hCcmVha3BvaW50IG91 dCBvZiBzY29wZS4uLiIKKworY2xhc3MgVGVzdEJyZWFrcG9pbnQoZ2RiLkJy ZWFrcG9pbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAg Z2RiLkJyZWFrcG9pbnQuX19pbml0X18oc2VsZiwgc3BlYz0idGVzdF8xIiwg aW50ZXJuYWw9MSkKKyAgICAgICAgc2VsZi5zaWxlbnQgPSBUcnVlCisgICAg ICAgIHNlbGYuY291bnQgPSAwCisgICAgICAgIHByaW50ICJUZXN0QnJlYWtw b2ludCBpbml0IgorICAgICAgICAKKyAgICBkZWYgc3RvcChzZWxmKToKKyAg ICAJc2VsZi5jb3VudCArPSAxCisgICAgCXRyeToKKyAgICAgICAgCVRlc3RG aW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJhbWUoKSwgc2VsZi5jb3Vu dCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAg CXByaW50IGUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIFRlc3RG aW5pc2hCcmVha3BvaW50KGdkYi5GaW5pc2hCcmVha3BvaW50KToKKyAgICBk ZWYgX19pbml0X18oc2VsZiwgZnJhbWUsIGNvdW50KToKKyAgICAJc2VsZi5j b3VudCA9IGNvdW50CisgICAgICAgIGdkYi5GaW5pc2hCcmVha3BvaW50Ll9f aW5pdF9fKHNlbGYsIGZyYW1lLCBpbnRlcm5hbD0xKQorICAgICAgICAKKyAg ICAgICAgCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHByaW50ICIt LT4iLCBzZWxmLm51bWJlcgorICAgICAgICBpZiAoc2VsZi5jb3VudCA9PSAz KToKKyAgICAgICAgICAgIHByaW50ICJ0ZXN0IHN0b3AgLi4uICVkIiAlIHNl bGYuY291bnQKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVs c2U6CisgICAgICAgICAgICBwcmludCAidGVzdCBkb24ndCBzdG9wICVkIiAl IHNlbGYuY291bnQKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSAKKyAgICAg ICAgCisgICAgCisgICAgZGVmIG91dF9vZl9zY29wZShzZWxmKToKKyAgICAg ICAgcHJpbnQgInRlc3QgZGlkbid0IGZpbmlzaCAuLi4gJWQiICUgc2VsZi5j b3VudAorCitjbGFzcyBUZXN0RXhwbGljaXRCcmVha3BvaW50KGdkYi5CcmVh a3BvaW50KToKKwlkZWYgc3RvcChzZWxmKToKKwkJdHJ5OgorCQkJU2ltcGxl RmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpCisJCWV4Y2Vw dCBWYWx1ZUVycm9yIGFzIGU6CisJCQlwcmludCBlCisJCXJldHVybiBGYWxz ZQorCitjbGFzcyBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5GaW5pc2hC cmVha3BvaW50KToKKwlkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorCQln ZGIuRmluaXNoQnJlYWtwb2ludC5fX2luaXRfXyAoc2VsZiwgZnJhbWUpCisJ CQorCQlwcmludCAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBpbml0IgorCQkK KwlkZWYgc3RvcChzZWxmKToKKwkJcHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFr cG9pbnQgc3RvcCIgCisJCXJldHVybiBUcnVlCisJCisJZGVmIG91dF9vZl9z Y29wZShzZWxmKToKKwkJcHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQg b3V0IG9mIHNjb3BlLi4uIgorCitwcmludCAiUHl0aG9uIHNjcmlwdCBpbXBv cnRlZGQiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktZmluaXNoLWJyZWFrcG9pbnQyLmNjIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5jYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGVlYTA2Ci0tLSAvZGV2L251bGwK KysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVh a3BvaW50Mi5jYwpAQCAtMCwwICsxLDU5IEBACisvKiBUaGlzIHRlc3RjYXNl IGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5 cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKworI2luY2x1ZGUgPGlv c3RyZWFtPgorCit2b2lkCit0aHJvd19leGNlcHRpb25fMSAoaW50IGUpCit7 CisgIHRocm93IG5ldyBpbnQgKGUpOworfQorCit2b2lkCit0aHJvd19leGNl cHRpb24gKGludCBlKQoreworICB0aHJvd19leGNlcHRpb25fMSAoZSk7Cit9 CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgaW50IGk7CisgIHRyeQorICAg IHsKKyAgICAgIHRocm93X2V4Y2VwdGlvbl8xICgxMCk7CisgICAgfQorICBj YXRjaCAoY29uc3QgaW50ICplKQorICAgIHsKKyAgICAgICAgc3RkOjpjZXJy IDw8ICJFeGNlcHRpb24gIyIgPDwgKmUgPDwgc3RkOjplbmRsOworICAgIH0K KyAgaSArPSAxOyAvKiBCcmVhayBhZnRlciBleGNlcHRpb24gMS4gICovCisK KyAgdHJ5CisgICAgeworICAgICAgdGhyb3dfZXhjZXB0aW9uICgxMCk7Cisg ICAgfQorICBjYXRjaCAoY29uc3QgaW50ICplKQorICAgIHsKKyAgICAgICAg c3RkOjpjZXJyIDw8ICJFeGNlcHRpb24gIyIgPDwgKmUgPDwgc3RkOjplbmRs OworICAgIH0KKyAgaSArPSAxOyAvKiBCcmVhayBhZnRlciBleGNlcHRpb24g Mi4gICovCisKKyAgcmV0dXJuIGk7Cit9CmRpZmYgLS1naXQgYS9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cCBi L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2lu dDIuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZh ZTc5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cApAQCAtMCwwICsxLDY1 IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMK KyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisj IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxl IGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyB0aGUg bWVjaGFuaXNtCisjIGV4cG9zaW5nIHZhbHVlcyB0byBQeXRob24uCisKK2lm ICR0cmFjZWxldmVsIHRoZW4geworICAgIHN0cmFjZSAkdHJhY2VsZXZlbAor fQorCitsb2FkX2xpYiBnZGItcHl0aG9uLmV4cAorCitzZXQgdGVzdGZpbGUg InB5LWZpbmlzaC1icmVha3BvaW50MiIKK3NldCBzcmNmaWxlICR7dGVzdGZp bGV9LmNjCitzZXQgYmluZmlsZSAke29iamRpcn0vJHtzdWJkaXJ9LyR7dGVz dGZpbGV9CitzZXQgcHlmaWxlICAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVz dGZpbGV9LnB5CisKKyMgU3RhcnQgd2l0aCBhIGZyZXNoIGdkYi4KK2dkYl9l eGl0CitnZGJfc3RhcnQKK2dkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIv JHN1YmRpcgorZ2RiX2xvYWQgJHtiaW5maWxlfQorCitpZiB7IFtnZGJfY29t cGlsZSAiJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3NyY2ZpbGV9IiAiJHtiaW5m aWxlfSIgZXhlY3V0YWJsZSB7ZGVidWcgYysrfV0gIT0gIiIgfSB7CisgICAg dW50ZXN0ZWQgIkNvdWxkbid0IGNvbXBpbGUgJHtzcmNmaWxlfSIKKyAgICBy ZXR1cm4gLTEKK30KKworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBm YWlsICJDYW5ub3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9CisK KyMKKyMgQ2hlY2sgRmluaXNoQnJlYWtwb2ludHMgYWdhaW5zdCBDKysgZXhj ZXB0aW9ucworIworCitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251 bWJlciAiQnJlYWsgYWZ0ZXIgZXhjZXB0aW9uIDIiXQorCitnZGJfdGVzdCAi c291cmNlICRweWZpbGUiICIuKlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIg XAorICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKKyAgICAgICAg IAorZ2RiX2JyZWFrcG9pbnQgInRocm93X2V4Y2VwdGlvbl8xIgorZ2RiX3Rl c3QgImNvbnRpbnVlIiAiQnJlYWtwb2ludCAuKnRocm93X2V4Y2VwdGlvbl8x LioiICJydW4gdG8gZXhjZXB0aW9uIDEiCisKK2dkYl90ZXN0ICJweXRob24g cHJpbnQgbGVuKGdkYi5icmVha3BvaW50cygpKSIgIjMiICJjaGVjayBCUCBj b3VudCIKK2dkYl90ZXN0ICJweXRob24gRXhjZXB0aW9uRmluaXNoQnJlYWtw b2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAiaW5pdCBFeGNlcHRpb25GaW5p c2hCcmVha3BvaW50IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBleGNlcHRp b24iCitnZGJfdGVzdCAiY29udGludWUiICIuKnN0b3BwZWQgYXQgRXhjZXB0 aW9uRmluaXNoQnJlYWtwb2ludC4qIiAiY2hlY2sgRmluaXNoQnJlYWtwb2lu dCBpbiBjYXRjaCgpIgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBsZW4oZ2Ri LmJyZWFrcG9pbnRzKCkpIiAiMyIgImNoZWNrIGZpbmlzaCBCUCByZW1vdmFs IgorCitnZGJfdGVzdCAiY29udGludWUiICIuKkJyZWFrcG9pbnQuKiB0aHJv d19leGNlcHRpb25fMS4qIiAiY29udGludWUgdG8gc2Vjb25kIGV4Y2VwdGlv biIKK2dkYl90ZXN0ICJweXRob24gRXhjZXB0aW9uRmluaXNoQnJlYWtwb2lu dChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAiaW5pdCBFeGNlcHRpb25GaW5pc2hC cmVha3BvaW50IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBleGNlcHRpb24i CitnZGJfdGVzdCAiY29udGludWUiICIuKmV4Y2VwdGlvbiBkaWQgbm90IGZp bmlzaC4qIiAiRmluaXNoQnJlYWtwb2ludCB3aXRoIGV4Y2VwdGlvbiB0aHJv d24gbm90IGNhdWdodCIKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIucHkgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLnB5Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTRjZjEKLS0tIC9k ZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmlu aXNoLWJyZWFrcG9pbnQyLnB5CkBAIC0wLDAgKzEsMzQgQEAKKyMgQ29weXJp Z2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo ZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgcHl0aG9uIEZpbmlzaAorIyBC cmVha3BvaW50cy4KKworY2xhc3MgRXhjZXB0aW9uRmluaXNoQnJlYWtwb2lu dChnZGIuRmluaXNoQnJlYWtwb2ludCk6CisgICAgZGVmIF9faW5pdF9fKHNl bGYsIGZyYW1lKToKKyAgICAgICAgZ2RiLkZpbmlzaEJyZWFrcG9pbnQuX19p bml0X18oc2VsZiwgZnJhbWUsIGludGVybmFsPTEpCisgICAgICAgIHNlbGYu c2lsZW50ID0gVHJ1ZTsKKyAgICAgICAgcHJpbnQgImluaXQgRXhjZXB0aW9u RmluaXNoQnJlYWtwb2ludCIKKyAgICAgICAgCisgICAgZGVmIHN0b3Aoc2Vs Zik6CisgICAgICAgIHByaW50ICJzdG9wcGVkIGF0IEV4Y2VwdGlvbkZpbmlz aEJyZWFrcG9pbnQiCisgICAgICAgIGdkYi5wb3N0X2V2ZW50KHNlbGYuZGVs ZXRlKQorICAgICAgICByZXR1cm4gVHJ1ZSAKKyAgICAKKyAgICBkZWYgb3V0 X29mX3Njb3BlKHNlbGYpOgorICAgICAgICBwcmludCAiZXhjZXB0aW9uIGRp ZCBub3QgZmluaXNoIC4uLiIKKworCitwcmludCAiUHl0aG9uIHNjcmlwdCBp bXBvcnRlZCIKLS0gCjEuNy42LjQKCg== --f46d043be1c83d6e3604b05733a0--