From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 634 invoked by alias); 1 May 2012 23:51:33 -0000 Received: (qmail 615 invoked by uid 22791); 1 May 2012 23:51:25 -0000 X-SWARE-Spam-Status: No, hits=-3.8 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_AV,TW_CF,TW_CP,TW_FN,TW_TM,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-qa0-f47.google.com (HELO mail-qa0-f47.google.com) (209.85.216.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 01 May 2012 23:51:01 +0000 Received: by qabg1 with SMTP id g1so2353604qab.20 for ; Tue, 01 May 2012 16:51:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=e0DwM72ZKL2jK+lYY+aRvoYjlGam4dYj6hyFUNDGtVg=; b=Jhjkj4m4v9qor1RSwDFUtil7y6PbL2KMCF71SXNRrDIRfBjCfssBZiXxo0MGPgJME8 be8O6rknjQwFiRJNUw+AgXbxRfQR/rGQ4mfBavRp77c1vZOab+zHpI3w5CFZDUxLGutT Xv3Rtz/A413k6E02YBHm2z3GZWr0P53AnN7isIwSqkwwpBPoO99DveWYdlmVTILLD6Ra RuvNFpkvFbMh1N4K9XdJr3/H8gEHaVbkSSd2P8O+W9BvFtx3xAKSqH2NR97i6dUwqdFx p/3d366acV8bWOCFh8BJK5i0iMb9ExOS4ToQHGDzUcystK1m0uQidpQMU1ano+kNgmMR ZwNQ== Received: by 10.224.108.193 with SMTP id g1mr22658843qap.7.1335916260840; Tue, 01 May 2012 16:51:00 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.108.193 with SMTP id g1mr22658830qap.7.1335916260705; Tue, 01 May 2012 16:51:00 -0700 (PDT) Received: by 10.229.178.140 with HTTP; Tue, 1 May 2012 16:51:00 -0700 (PDT) In-Reply-To: References: <20120307004630.A503DB21B6@azwildcat.mtv.corp.google.com> Date: Tue, 01 May 2012 23:51:00 -0000 Message-ID: Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064) From: Sriraman Tallam To: "H.J. Lu" Cc: Richard Guenther , Jan Hubicka , Uros Bizjak , reply@codereview.appspotmail.com, gcc-patches@gcc.gnu.org, David Li Content-Type: multipart/mixed; boundary=20cf3074b0fa2b44be04bf023e5f X-System-Of-Record: true X-Gm-Message-State: ALoCoQlQsmPg4Xb51b8yEdJ/0/TFgoBsRDmKxVmstF19BE9FPLpdTfG/S3t6vsYKH/VSciiTrGuaMkKZ3Nvg8HgqckVSnhN+jE59sViZtBKEr0UgxGiLCD3oMLwzPDg5p/N8ttiWB2KrKnC6hxU9v+cNVpdrwHh2pg== X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-05/txt/msg00065.txt.bz2 --20cf3074b0fa2b44be04bf023e5f Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2394 Hi, New patch attached, updated test case and fixed bugs related to __PRETTY_FUNCTION_. Patch also available for review here: http://codereview.appspot.com/5752064 Thanks, -Sri. On Fri, Apr 27, 2012 at 8:36 AM, H.J. Lu wrote: > On Fri, Apr 27, 2012 at 7:53 AM, Sriraman Tallam wr= ote: >> On Fri, Apr 27, 2012 at 7:38 AM, H.J. Lu wrote: >>> On Fri, Apr 27, 2012 at 7:35 AM, Sriraman Tallam = wrote: >>>> On Fri, Apr 27, 2012 at 6:38 AM, H.J. Lu wrote: >>>>> On Thu, Apr 26, 2012 at 10:08 PM, Sriraman Tallam wrote: >>>>>> Hi, >>>>>> >>>>>> =A0 I have made the following changes in this new patch which is att= ached: >>>>>> >>>>>> * Use target attribute itself to create function versions. >>>>>> * Handle any number of ISA names and arch=3D =A0args to target attri= bute, >>>>>> generating the right dispatchers. >>>>>> * Integrate with the CPU runtime detection checked in this week. >>>>>> * Overload resolution: If the caller's target matches any of the >>>>>> version function's target, then a direct call to the version is >>>>>> generated, no need to go through the dispatching. >>>>>> >>>>>> Patch also available for review here: >>>>>> http://codereview.appspot.com/5752064 >>>>>> >>>>> >>>>> Does it work with >>>>> >>>>> int foo (); >>>>> int foo () __attribute__ ((targetv("arch=3Dcorei7"))); >>>>> >>>>> int (*foo_p) () =3D foo? >>>> >>>> Yes, this will work. foo_p will be the address of the dispatcher >>>> function and hence doing (*foo_p)() will call the right version. >>> >>> Even when foo_p is a global variable and compiled with -fPIC? >> >> I am not sure I understand what the complication is here, but FWIW, I >> tried this example and it works >> >> int foo () >> { >> =A0return 0; >> } >> >> int =A0__attribute__ ((target ("arch=3Dcorei7))) >> foo () >> { >> =A0return 1; >> } >> >> int (*foo_p)() =3D foo; >> int main () >> { >> =A0return (*foo_p)(); >> } >> >> g++ -fPIC -O2 example.cc >> >> >> Did you have something else in mind? Could you please elaborate if you >> a have a particular case in mind. >> > > That is what I meant. =A0But I didn't see it in your testcase. > Can you add it to your testcase? > > Also you should verify the correct function is called in > your testcase at run-time. > > > Thanks. > > > -- > H.J. --20cf3074b0fa2b44be04bf023e5f Content-Type: text/plain; charset=US-ASCII; name="mv_fe_patch.txt" Content-Disposition: attachment; filename="mv_fe_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h1pm0seg0 Content-length: 88894 T3ZlcnZpZXcgb2YgdGhlIHBhdGNoIHdoaWNoIGFkZHMgZnJvbnQtZW5kIHN1 cHBvcnQgdG8gc3BlY2lmeSBmdW5jdGlvbiB2ZXJzaW9ucy4KCkV4YW1wbGU6 CgppbnQgZm9vICgpOyAgLyogRGVmYXVsdCB2ZXJzaW9uICovCmludCBmb28g KCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXZ4LHBvcGNudCIpKSk7LypT cGVjaWFsaXplZCBmb3IgYXZ4IGFuZCBwb3BjbnQgKi8KaW50IGZvbyAoKSBf X2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmUyLHNzc2UzIikpKTsv KlNwZWNpYWxpemVkIGZvciBjb3JlMiBhbmQgc3NzZTMqLwoKaW50IG1haW4g KCkKewogaW50ICgqcCkoKSA9ICZmb287CiByZXR1cm4gZm9vICgpICsgKCpw KSgpOwp9CgppbnQgZm9vICgpCnsKIHJldHVybiAwOwp9CgppbnQgX19hdHRy aWJ1dGVfXyAoKHRhcmdldCgiYXZ4LHBvcGNudCIpKSkKZm9vICgpCnsKIHJl dHVybiAwOwp9CgppbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1j b3JlMixzc3NlMyIpKSkKZm9vICgpCnsKIHJldHVybiAwOwp9CgpUaGUgYWJv dmUgZXhhbXBsZSBoYXMgZm9vIGRlZmluZWQgMyB0aW1lcywgYnV0IGFsbCAz IGRlZmluaXRpb25zIG9mIGZvbyBhcmUKZGlmZmVyZW50IHZlcnNpb25zIG9m IHRoZSBzYW1lIGZ1bmN0aW9uLiBUaGUgY2FsbCB0byBmb28gaW4gbWFpbiwg ZGlyZWN0bHkgYW5kCnZpYSBhIHBvaW50ZXIsIGFyZSBjYWxscyB0byB0aGUg bXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9uIGZvbyB3aGljaCBpcyBkaXNwYXRj aGVkCnRvIHRoZSByaWdodCBmb28gYXQgcnVuLXRpbWUuCgpXaGF0IGRvZXMg dGhlIHBhdGNoIGRvPwoKKiBUcmFja2luZyBkZWNscyB0aGF0IGNvcnJlc3Bv bmQgdG8gZnVuY3Rpb24gdmVyc2lvbnMgb2YgZnVuY3Rpb24KbmFtZSwgc2F5 ICJmb28iOgoKV25lbiB0aGUgZnJvbnQtZW5kIHNlZXMgbW9yZSB0aGFuIG9u ZSBkZWNsIGZvciAiZm9vIiwgd2l0aCBhdGxlYXN0IG9uZSBkZWNsCnRhZ2dl ZCB3aXRoICJ0YXJnZXQiICBhdHRyaWJ1dGVzLCBpdCBtYXJrcyBpdCBhcyBm dW5jdGlvbiB2ZXJzaW9ucy4gVG8KcHJldmVudCBkdXBsaWNhdGUgZGVmaW5p dGlvbiBlcnJvcnMgd2l0aCBvdGhlciB2ZXJzaW9ucyBvZiAiZm9vIiwgSSBj aGFuZ2UKImRlY2xzX21hdGNoIiBmdW5jdGlvbiBpbiBjcC9kZWNsLmMgdG8g cmV0dXJuIGZhbHNlIHdoZW4gMiBkZWNscyBoYXZlIHRoZQpzYW1lIHNpZ25h dHVyZSBidXQgZGlmZmVyZW50IHRhcmdldCBhdHRyaWJ1dGVzLiBUaGlzIHdp bGwgbWFrZSBhbGwgZnVuY3Rpb24KdmVyc2lvbnMgb2YgImZvbyIgdG8gYmUg YWRkZWQgdG8gdGhlIG92ZXJsb2FkIGxpc3Qgb2YgImZvbyIuCgoqIENoYW5n ZSB0aGUgYXNzZW1ibGVyIG5hbWVzIG9mIHRoZSBmdW5jdGlvbiB2ZXJzaW9u cy4KClRoZSBmcm9udC1lbmQgY2hhbmdlcyB0aGUgYXNzZW1ibGVyIG5hbWVz IG9mIHRoZSBmdW5jdGlvbiB2ZXJzaW9ucyBieSBzdWZmaXhpbmcKdGhlIHNv cnRlZCBsaXN0IG9mIGFyZ3MgdG8gInRhcmdldCIgdG8gdGhlIGZ1bmN0aW9u IG5hbWUgb2YgImZvbyIuIEZvciBleGFtcGxlLApoZSBhc3NlbWJsZXIgbmFt ZSBvZiAidm9pZCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNz ZTQiKSkpIiB3aWxsCmJlY29tZSBfWjNmb292LnNzZTQuCgoqIFNlcGFyYXRl bHkgZ3JvdXAgYWxsIGZ1bmN0aW9uIHZlcnNpb25zIG9mICJmb28iIHRvZ2V0 aGVyLCBpbiBtdWx0aXZlcnNpb24uYzoKCkZpbGUgbXVsdGl2ZXJzaW9uLmMg bWFpbnRhaW5zIGEgaGFzaHRhYiwgZGVjbF92ZXJzaW9uX2h0YWIsICB0aGF0 IG1hcHMKdGhlICBkZWZhdWx0IGZ1bmN0aW9uIGRlY2wgb2YgImZvbyIgdG8g dGhlIGxpc3Qgb2YgYWxsIG90aGVyIHZlcnNpb25zCm9mIHRoaXMgZnVuY3Rp b24gImZvbyIuIFRoaXMgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBkaXNw YXRjaGVyIGZvcgp0aGlzIGZ1bmN0aW9uLgoKKiBPdmVybG9hZCByZXNvbHV0 aW9uOgoKIEZ1bmN0aW9uICJidWlsZF9vdmVyX2NhbGwiIGluIGNwL2NhbGwu YyBzZWVzIGEgY2FsbCB0byBmdW5jdGlvbgoiZm9vIiwgd2hpY2ggaXMgbXVs dGktdmVyc2lvbmVkLiBUaGUgb3ZlcmxvYWQgcmVzb2x1dGlvbiBoYXBwZW5z IGluCmZ1bmN0aW9uICJqb3VzdCIgaW4gImNwL2NhbGwuYyIuIEhlcmUsIHRo ZSBjYWxsIHRvICJmb28iIGhhcyBhbGwKcG9zc2libGUgdmVyc2lvbnMgb2Yg ImZvbyIgYXMgY2FuZGlkYXRlcy4gSWYgdGhlIGNhbGxlciBoYXMgdGFyZ2V0 CmF0dHJpYnV0ZXMgYW5kIGlmIGl0IG1hdGNoZXMgYW55IG9mIHRoZSBmdW5j dGlvbiB2ZXJzaW9uJ3MgdGFyZ2V0CmF0dHJpYnV0ZXMsIHRoZW4gYSBkaXJl Y3QgY2FsbCBpcyBtYWRlIHRvIHRoYXQgZnVuY3Rpb24gdmVyc2lvbi4KCkZv ciBleGFtcGxlOgoKaW50IGJheiBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgi YXZ4LHBvcGNudCIpKSkKewogIGZvbyAoKTsKfQoKaXQgYmF6IGNhbGxzIGZv byB3aGljaCBpcyBtdWx0aS12ZXJzaW9uZWQsIHRoZW4gdGhlIGNhbGwgdG8g Zm9vIGhlcmUKd2lsbCBiZWNvbWUgYSBkaXJlY3QgY2FsbCB0byB0aGUgdmVy c2lvbiBvZiBmb28gdGFyZ2V0ZWQgdG8gYXZ4LHBvcGNudC4KCldoZW4gYSBk aXJlY3QgY2FsbCB0byBhIHZlcnNpb24gY2Fubm90IGJlIG1hZGUgdGhlbiwg dGhlIGRlZmF1bHQKdmVyc2lvbiBvZiAiZm9vIiBpcyB0aGUgd2lubmluZyBj YW5kaWRhdGUuIEJ1dCwgImJ1aWxkX292ZXJfY2FsbCIgcmVhbGl6ZXMKdGhh dCB0aGlzIGlzIGEgdmVyc2lvbmVkIGZ1bmN0aW9uIGFuZCByZXBsYWNlcyB0 aGUgY2FsbC1zaXRlIG9mIGZvbyB3aXRoIGEKImlmdW5jIiBjYWxsIGZvciBm b28sIGJ5IHF1ZXJ5aW5nIGEgZnVuY3Rpb24gaW4gIm11bHRpdmVyc2lvbi5j IiB3aGljaApidWlsZHMgdGhlIGlmdW5jIGRlY2wuIEFmdGVyIHRoaXMsIGFs bCBjYWxsLXNpdGVzIG9mICJmb28iIGNvbnRhaW4gdGhlCmNhbGwgdG8gdGhl IGlmdW5jLgoKKiBDcmVhdGluZyB0aGUgZGlzcGF0Y2hlcjoKClRoZSBkaXNw YXRjaGVyIGlzIGluZGVwZW5kZW50bHkgY3JlYXRlZCBpbiBhIG5ldyBwYXNz LCBjYWxsZWQKInBhc3NfZGlzcGF0Y2hfdmVyc2lvbiIsIHRoYXQgcnVucyBp bW1lZGlhdGVseSBhZnRlciBjZmcgYW5kIGNncmFwaCBhcmUKY3JlYXRlZC4g VGhlIGRpc3BhdGNoZXIgbG9va3MgYXQgYWxsIHBvc3NpYmxlIHZlcnNpb25z IGFuZCBxdWVyaWVzIHRoZQp0YXJnZXQgdG8gZ2l2ZSBpdCB0aGUgQ1BVIGRl dGVjdGlvbiBwcmVkaWNhdGVzIGl0IG11c3QgdXNlIHRvIGRpc3BhdGNoCmVh Y2ggdmVyc2lvbi4gVGhlbiwgdGhlIGRpc3BhdGNoZXIgYm9keSBpcyBjcmVh dGVkIGFuZCB0aGUgaWZ1bmMgaXMKbWFwcGVkIHRvIHVzZSB0aGlzIGRpc3Bh dGNoZXIuCgpOb3RpY2UgdGhhdCBvbmx5IHRoZSBkaXNwYXRjaGVyIGNyZWF0 aW9uIGlzIGRvbmUgYWZ0ZXIgdGhlIGZyb250LWVuZC4KRXZlcnl0aGluZyBl bHNlIG9jY3VycyBpbiB0aGUgZnJvbnQtZW5kIGl0c2VsZi4gSSBjb3VsZCBo YXZlIGNyZWF0ZWQKdGhlIGRpc3BhdGNoZXIgYWxzbyBpbiB0aGUgZnJvbnQt ZW5kLiBJIGRpZCBub3QgZG8gc28gYmVjYXVzZSBJCnRob3VnaHQga2VlcGlu ZyBpdCBhcyBhIHNlcGFyYXRlIHBhc3MgbWFkZSBzZW5zZSB0byBlYXNpbHkg YWRkIG1vcmUKZGlzcGF0Y2ggbWVjaGFuaXNtcy4gTGlrZSB3aGVuIElGVU5D IGlzIG5vdCBhdmFpbGFibGUsIHJlcGxhY2UgaXQgd2l0aAogY29udHJvbC1m bG93IHRvIG1ha2UgZGlyZWN0IGNhbGxzIHRvIHRoZSBmdW5jdGlvbiB2ZXJz aW9ucy4gQWxzbywKbWFraW5nIHRoZSBkaXNwYXRjaGVyIGFmdGVyIGNmZyBp cyBjcmVhdGVkIHdhcyBlYXN5LgoKCgkqIGRvYy90bS50ZXhpLmluOiBBZGQg ZGVzY3JpcHRpb24gZm9yIFRBUkdFVF9ESVNQQVRDSF9WRVJTSU9OLgoJKiBk b2MvdG0udGV4aTogUmVnZW5lcmF0ZS4KCSogdGFyZ2V0LmRlZiAoZGlzcGF0 Y2hfdmVyc2lvbik6IE5ldyB0YXJnZXQgaG9vay4KCSogdHJlZS5oIChERUNM X0ZVTkNUSU9OX1ZFUlNJT05FRCk6IE5ldyBtYWNyby4KCSh0cmVlX2Z1bmN0 aW9uX2RlY2wpOiBOZXcgYml0LWZpZWxkIHZlcnNpb25lZF9mdW5jdGlvbi4K CSogdHJlZS1wYXNzLmggKHBhc3NfZGlzcGF0Y2hfdmVyc2lvbnMpOiBOZXcg cGFzcy4KCSogbXVsdGl2ZXJzaW9uLmM6IE5ldyBmaWxlLgoJKiBtdWx0aXZl cnNpb24uaDogTmV3IGZpbGUuCgkqIGNncmFwaHVuaXQuYzoKCShjZ3JhcGhf ZmluYWxpemVfZnVuY3Rpb24pOiBGb3JjZSBvdXRwdXQgb2YgdmVyc2lvbmVk IGlubGluZQoJZnVuY3Rpb25zLgoJKiBjcC9jbGFzcy5jOiBJbmNsdWRlIG11 bHRpdmVyc2lvbi5oCgkoYWRkX21ldGhvZCk6IGFnZ3JlZ2F0ZSBmdW5jdGlv biB2ZXJzaW9ucy4gQ2hhbmdlIGFzc2VtYmxlciBuYW1lcyBvZgoJdmVyc2lv bmVkIGZ1bmN0aW9ucy4KCShyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRl ZF9mdW5jdGlvbik6IE1hdGNoIGFkZHJlc3Mgb2YgZnVuY3Rpb24KCXZlcnNp b24gd2l0aCBkZWZhdWx0IGZ1bmN0aW9uLiAgUmV0dXJuIGFkZHJlc3Mgb2Yg aWZ1bmMgZGlzcGF0Y2hlcgoJZm9yIGFkZHJlc3Mgb2YgdmVyc2lvbmVkIGZ1 bmN0aW9ucy4KCShjeHhfY29tZGF0X2dyb3VwKTogVXNlIGRlY2wgbmFtZXMg Zm9yIGNvbWRhdCBncm91cHMgb2YgdmVyc2lvbmVkCglmdW5jdGlvbnMuCgkq IGNwL2RlY2wuYyAoZGVjbHNfbWF0Y2gpOiBNYWtlIGRlY2xzIHVubWF0Y2hl ZCBmb3IgdmVyc2lvbmVkCglmdW5jdGlvbnMuCgkoZHVwbGljYXRlX2RlY2xz KTogUmVtb3ZlIGFtYmlndWl0eSBmb3IgdmVyc2lvbmVkIGZ1bmN0aW9ucy4g Tm90aWZ5CglvZiBkZWxldGVkIGZ1bmN0aW9uIHZlcnNpb24gZGVjbHMuCgko c3RhcnRfZGVjbCk6IENoYW5nZSBhc3NlbWJsZXIgbmFtZSBvZiB2ZXJzaW9u ZWQgZnVuY3Rpb25zLgoJKHN0YXJ0X2Z1bmN0aW9uKTogQ2hhbmdlIGFzc2Vt YmxlciBuYW1lIG9mIHZlcnNpb25lZCBmdW5jdGlvbnMuCgkoY3h4X2NvbWRh dF9ncm91cCk6IE1ha2UgY29tZGF0IGdyb3VwIG9mIHZlcnNpb25lZCBmdW5j dGlvbnMgYmUgdGhlCglzYW1lLgoJKiBjcC9zZW1hbnRpY3MuYyAoZXhwYW5k X29yX2RlZmVyX2ZuXzEpOiBNYXJrIGFzIG5lZWRlZCB2ZXJzaW9uZWQKCWZ1 bmN0aW9ucyB0aGF0IGFyZSBhbHNvIG1hcmtlZCBpbmxpbmUuCgkqIGNwL2Rl Y2wyLmM6IEluY2x1ZGUgbXVsdGl2ZXJzaW9uLmgKCShjaGVja19jbGFzc2Zu KTogQ2hlY2sgYXR0cmlidXRlcyBvZiB2ZXJzaW9uZWQgZnVuY3Rpb25zIGZv ciBtYXRjaC4KCSogY3AvY2FsbC5jOiBJbmNsdWRlIG11bHRpdmVyc2lvbi5o CgkoYnVpbGRfb3Zlcl9jYWxsKTogTWFrZSBjYWxscyB0byBtdWx0aXZlcnNp b25lZCBmdW5jdGlvbnMgdG8gY2FsbCB0aGUKCWRpc3BhdGNoZXIuCgkoam91 c3QpOiBGb3IgY2FsbHMgdG8gbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9ucywg bWFrZSB0aGUgZGVmYXVsdAoJZnVuY3Rpb24gd2luLgoJKiBjcC9tYW5nbGUu YyAod3JpdGVfdW5xdWFsaWZpZWRfbmFtZSk6IFVzZSBhc3NlbWJsZXIgbmFt ZSBmb3IKCXZlcnNpb25lZCBmdW5jdGlvbnMuCgkqIHRpbWV2YXIuZGVmIChU Vl9NVUxUSVZFUlNJT05fRElTUEFUQ0gpOiBOZXcgdGltZSB2YXIuCgkqIHZh cmFzbS5jIChmaW5pc2hfYWxpYXNlc18xKTogQ2hlY2sgaWYgdGhlIGFsaWFz IHBvaW50cyB0byBhIGZ1bmN0aW9uCgl3aXRoIGEgYm9keSBiZWZvcmUgZ2l2 aW5nIGFuIGVycm9yLgoJKiBNYWtlZmlsZS5pbjogQWRkIG11bHRpdmVyc2lv bi5vCgkqIHBhc3Nlcy5jOiBBZGQgcGFzc19kaXNwYXRjaF92ZXJzaW9ucyB0 byB0aGUgcGFzcyBsaXN0LgoJKiBjb25maWcvaTM4Ni9pMzg2LmMgKGFkZF9j b25kaXRpb25fdG9fYmIpOiBOZXcgZnVuY3Rpb24uCgkoZ2V0X2J1aWx0aW5f Y29kZV9mb3JfdmVyc2lvbik6IE5ldyBmdW5jdGlvbi4KCShpeDg2X2Rpc3Bh dGNoX3ZlcnNpb24pOiBOZXcgZnVuY3Rpb24uCgkoVEFSR0VUX0RJU1BBVENI X1ZFUlNJT04pOiBOZXcgbWFjcm8uCgkqIHRlc3RzdWl0ZS9nKysuZGcvbXYx LkM6IE5ldyB0ZXN0LgoKSW5kZXg6IGdjYy9kb2MvdG0udGV4aQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvZG9jL3RtLnRleGkJKHJldmlzaW9u IDE4Njg4MykKKysrIGdjYy9kb2MvdG0udGV4aQkod29ya2luZyBjb3B5KQpA QCAtMTA5OTcsNiArMTA5OTcsMTQgQEAgVGhlIHJlc3VsdCBpcyBhbm90aGVy IHRyZWUgY29udGFpbmluZyBhIHNpbXBsaWZpZWQKIGNhbGwncyByZXN1bHQu ICBJZiBAdmFye2lnbm9yZX0gaXMgdHJ1ZSB0aGUgdmFsdWUgd2lsbCBiZSBp Z25vcmVkLgogQGVuZCBkZWZ0eXBlZm4KIAorQGRlZnR5cGVmbiB7VGFyZ2V0 IEhvb2t9IGludCBUQVJHRVRfRElTUEFUQ0hfVkVSU0lPTiAodHJlZSBAdmFy e2Rpc3BhdGNoX2RlY2x9LCB2b2lkICpAdmFye2ZuZGVjbHN9LCBiYXNpY19i bG9jayAqQHZhcntlbXB0eV9iYn0pCitGb3IgbXVsdGktdmVyc2lvbmVkIGZ1 bmN0aW9uLCB0aGlzIGhvb2sgc2V0cyB1cCB0aGUgZGlzcGF0Y2hlci4KK0B2 YXJ7ZGlzcGF0Y2hfZGVjbH0gaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBi ZSB1c2VkIHRvIGRpc3BhdGNoIHRoZQordmVyc2lvbi4gQHZhcntmbmRlY2xz fSBhcmUgdGhlIGZ1bmN0aW9uIGNob2ljZXMgZm9yIGRpc3BhdGNoLgorQHZh cntlbXB0eV9iYn0gaXMgYW4gYmFzaWMgYmxvY2sgaW4gQHZhcntkaXNwYXRj aF9kZWNsfSB3aGVyZSB0aGUKK2NvZGUgdG8gZG8gdGhlIGRpc3BhdGNoIHdp bGwgYmUgYWRkZWQuCitAZW5kIGRlZnR5cGVmbgorCiBAZGVmdHlwZWZuIHtU YXJnZXQgSG9va30ge2NvbnN0IGNoYXIgKn0gVEFSR0VUX0lOVkFMSURfV0lU SElOX0RPTE9PUCAoY29uc3RfcnR4IEB2YXJ7aW5zbn0pCiAKIFRha2UgYW4g aW5zdHJ1Y3Rpb24gaW4gQHZhcntpbnNufSBhbmQgcmV0dXJuIE5VTEwgaWYg aXQgaXMgdmFsaWQgd2l0aGluIGEKSW5kZXg6IGdjYy9kb2MvdG0udGV4aS5p bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvZG9jL3RtLnRleGku aW4JKHJldmlzaW9uIDE4Njg4MykKKysrIGdjYy9kb2MvdG0udGV4aS5pbgko d29ya2luZyBjb3B5KQpAQCAtMTA4NzcsNiArMTA4NzcsMTQgQEAgVGhlIHJl c3VsdCBpcyBhbm90aGVyIHRyZWUgY29udGFpbmluZyBhIHNpbXBsaWZpZWQK IGNhbGwncyByZXN1bHQuICBJZiBAdmFye2lnbm9yZX0gaXMgdHJ1ZSB0aGUg dmFsdWUgd2lsbCBiZSBpZ25vcmVkLgogQGVuZCBkZWZ0eXBlZm4KIAorQGhv b2sgVEFSR0VUX0RJU1BBVENIX1ZFUlNJT04KK0ZvciBtdWx0aS12ZXJzaW9u ZWQgZnVuY3Rpb24sIHRoaXMgaG9vayBzZXRzIHVwIHRoZSBkaXNwYXRjaGVy LgorQHZhcntkaXNwYXRjaF9kZWNsfSBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3 aWxsIGJlIHVzZWQgdG8gZGlzcGF0Y2ggdGhlCit2ZXJzaW9uLiBAdmFye2Zu ZGVjbHN9IGFyZSB0aGUgZnVuY3Rpb24gY2hvaWNlcyBmb3IgZGlzcGF0Y2gu CitAdmFye2VtcHR5X2JifSBpcyBhbiBiYXNpYyBibG9jayBpbiBAdmFye2Rp c3BhdGNoX2RlY2x9IHdoZXJlIHRoZQorY29kZSB0byBkbyB0aGUgZGlzcGF0 Y2ggd2lsbCBiZSBhZGRlZC4KK0BlbmQgZGVmdHlwZWZuCisKIEBob29rIFRB UkdFVF9JTlZBTElEX1dJVEhJTl9ET0xPT1AKIAogVGFrZSBhbiBpbnN0cnVj dGlvbiBpbiBAdmFye2luc259IGFuZCByZXR1cm4gTlVMTCBpZiBpdCBpcyB2 YWxpZCB3aXRoaW4gYQpJbmRleDogZ2NjL3RhcmdldC5kZWYKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gZ2NjL3RhcmdldC5kZWYJKHJldmlzaW9uIDE4 Njg4MykKKysrIGdjYy90YXJnZXQuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0x MjQ5LDYgKzEyNDksMTUgQEAgREVGSE9PSwogIHRyZWUsICh0cmVlIGZuZGVj bCwgaW50IG5fYXJncywgdHJlZSAqYXJncCwgYm9vbCBpZ25vcmUpLAogIGhv b2tfdHJlZV90cmVlX2ludF90cmVlcF9ib29sX251bGwpCiAKKy8qIFRhcmdl dCBob29rIHRvIGdlbmVyYXRlIHRoZSBkaXNwYXRjaGluZyBjb2RlIGZvciBj YWxscyB0byBtdWx0aS12ZXJzaW9uZWQKKyAgIGZ1bmN0aW9ucy4gIERJU1BB VENIX0RFQ0wgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBoYXZlIHRoZSBk aXNwYXRjaGluZworICAgbG9naWMuICBGTkRFQ0xTIGFyZSB0aGUgbGlzdCBv ZiBjaG9pY2VzIGZvciBkaXNwYXRjaCBhbmQgRU1QVFlfQkIgaXMgdGhlCisg ICBiYXNpYyBibG9jIGluIERJU1BBVENIX0RFQ0wgd2hpY2ggd2lsbCBjb250 YWluIHRoZSBjb2RlLiAgKi8KK0RFRkhPT0sKKyhkaXNwYXRjaF92ZXJzaW9u LAorICIiLAorIGludCwgKHRyZWUgZGlzcGF0Y2hfZGVjbCwgdm9pZCAqZm5k ZWNscywgYmFzaWNfYmxvY2sgKmVtcHR5X2JiKSwgTlVMTCkKKwogLyogUmV0 dXJucyBhIGNvZGUgZm9yIGEgdGFyZ2V0LXNwZWNpZmljIGJ1aWx0aW4gdGhh dCBpbXBsZW1lbnRzCiAgICByZWNpcHJvY2FsIG9mIHRoZSBmdW5jdGlvbiwg b3IgTlVMTF9UUkVFIGlmIG5vdCBhdmFpbGFibGUuICAqLwogREVGSE9PSwpJ bmRleDogZ2NjL3RyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBn Y2MvdHJlZS5oCShyZXZpc2lvbiAxODY4ODMpCisrKyBnY2MvdHJlZS5oCSh3 b3JraW5nIGNvcHkpCkBAIC0zNTM5LDYgKzM1MzksMTIgQEAgZXh0ZXJuIFZF Qyh0cmVlLCBnYykgKipkZWNsX2RlYnVnX2FyZ3NfaW5zZXJ0ICh0cmUKICNk ZWZpbmUgREVDTF9GVU5DVElPTl9TUEVDSUZJQ19PUFRJTUlaQVRJT04oTk9E RSkgXAogICAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlv bl9kZWNsLmZ1bmN0aW9uX3NwZWNpZmljX29wdGltaXphdGlvbikKIAorLyog SW4gRlVOQ1RJT05fREVDTCwgdGhpcyBpcyBzZXQgaWYgdGhpcyBmdW5jdGlv biBoYXMgb3RoZXIgdmVyc2lvbnMgZ2VuZXJhdGVkCisgICB1c2luZyAidGFy Z2V0IiBhdHRyaWJ1dGVzLiAgVGhlIGRlZmF1bHQgdmVyc2lvbiBpcyB0aGUg b25lIHdoaWNoIGRvZXMgbm90CisgICBoYXZlIGFueSAidGFyZ2V0IiBhdHRy aWJ1dGUgc2V0LiAqLworI2RlZmluZSBERUNMX0ZVTkNUSU9OX1ZFUlNJT05F RChOT0RFKVwKKyAgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVu Y3Rpb25fZGVjbC52ZXJzaW9uZWRfZnVuY3Rpb24pCisKIC8qIEZVTkNUSU9O X0RFQ0wgaW5oZXJpdHMgZnJvbSBERUNMX05PTl9DT01NT04gYmVjYXVzZSBv ZiB0aGUgdXNlIG9mIHRoZQogICAgYXJndW1lbnRzL3Jlc3VsdC9zYXZlZF90 cmVlIGZpZWxkcyBieSBmcm9udCBlbmRzLiAgIEl0IHdhcyBlaXRoZXIgaW5o ZXJpdAogICAgRlVOQ1RJT05fREVDTCBmcm9tIG5vbl9jb21tb24sIG9yIGlu aGVyaXQgbm9uX2NvbW1vbiBmcm9tIEZVTkNUSU9OX0RFQ0wsCkBAIC0zNTgz LDggKzM1ODksOCBAQCBzdHJ1Y3QgR1RZKCgpKSB0cmVlX2Z1bmN0aW9uX2Rl Y2wgewogICB1bnNpZ25lZCBsb29waW5nX2NvbnN0X29yX3B1cmVfZmxhZyA6 IDE7CiAgIHVuc2lnbmVkIGhhc19kZWJ1Z19hcmdzX2ZsYWcgOiAxOwogICB1 bnNpZ25lZCB0bV9jbG9uZV9mbGFnIDogMTsKLQotICAvKiAxIGJpdCBsZWZ0 ICovCisgIHVuc2lnbmVkIHZlcnNpb25lZF9mdW5jdGlvbiA6IDE7CisgIC8q IE5vIGJpdHMgbGVmdC4gICovCiB9OwogCiAvKiBUaGUgc291cmNlIGxhbmd1 YWdlIG9mIHRoZSB0cmFuc2xhdGlvbi11bml0LiAgKi8KSW5kZXg6IGdjYy90 cmVlLXBhc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdHJl ZS1wYXNzLmgJKHJldmlzaW9uIDE4Njg4MykKKysrIGdjYy90cmVlLXBhc3Mu aAkod29ya2luZyBjb3B5KQpAQCAtNDUzLDYgKzQ1Myw3IEBAIGV4dGVybiBz dHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfdG1fbWVtb3B0OwogZXh0ZXJu IHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc190bV9lZGdlczsKIGV4dGVy biBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfc3BsaXRfZnVuY3Rpb25z OwogZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19mZWVkYmFj a19zcGxpdF9mdW5jdGlvbnM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRf cGFzcyBwYXNzX2Rpc3BhdGNoX3ZlcnNpb25zOwogCiAvKiBJUEEgUGFzc2Vz ICovCiBleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19p cGFfbG93ZXJfZW11dGxzOwpJbmRleDogZ2NjL211bHRpdmVyc2lvbi5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9tdWx0aXZlcnNpb24uYwko cmV2aXNpb24gMCkKKysrIGdjYy9tdWx0aXZlcnNpb24uYwkocmV2aXNpb24g MCkKQEAgLTAsMCArMSw4MzIgQEAKKy8qIEZ1bmN0aW9uIE11bHRpdmVyc2lv bmluZy4KKyAgIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IFNyaXJhbWFuIFRh bGxhbSAodG1zcmlyYW1AZ29vZ2xlLmNvbSkKKworVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2 ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNI QU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3Ig bW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUK KzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gKi8KKworLyogSG9s ZHMgdGhlIHN0YXRlIGZvciBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb25zIGhl cmUuIFRoZSBmcm9udC1lbmQKKyAgIHVwZGF0ZXMgdGhlIHN0YXRlIGFzIGFu ZCB3aGVuIGZ1bmN0aW9uIHZlcnNpb25zIGFyZSBlbmNvdW50ZXJlZC4KKyAg IFRoaXMgaXMgdGhlbiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkaXNwYXRjaCBj b2RlLiAgQWxzbywgdGhlCisgICBvcHRpbWl6YXRpb24gcGFzc2VzIHRvIGNs b25lIGhvdCBwYXRocyBpbnZvbHZpbmcgdmVyc2lvbmVkIGZ1bmN0aW9ucwor ICAgd2lsbCBiZSBkb25lIGhlcmUuCisKKyAgIEZ1bmN0aW9uIHZlcnNpb25z IGFyZSBjcmVhdGVkIGJ5IHVzaW5nIHRoZSBzYW1lIGZ1bmN0aW9uIHNpZ25h dHVyZSBidXQKKyAgIGFsc28gdGFnZ2luZyBhdHRyaWJ1dGUgInRhcmdldCIg dG8gc3BlY2lmeSB0aGUgcGxhdGZvcm0gdHlwZSBmb3Igd2hpY2gKKyAgIHRo ZSB2ZXJzaW9uIG11c3QgYmUgZXhlY3V0ZWQuICBIZXJlIGlzIGFuIGV4YW1w bGU6CisKKyAgIGludCBmb28gKCkKKyAgIHsKKyAgICAgcHJpbnRmICgiRXhl Y3V0ZSBhcyBkZWZhdWx0Iik7CisgICAgIHJldHVybiAwOworICAgfQorCisg ICBpbnQgIF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJhcmNoPWNvcmVpNyIp KSkKKyAgIGZvbyAoKQorICAgeworICAgICBwcmludGYgKCJFeGVjdXRlIGZv ciBjb3JlaTciKTsKKyAgICAgcmV0dXJuIDA7CisgICB9CisgICAKKyAgIGlu dCBtYWluICgpCisgICB7CisgICAgIHJldHVybiBmb28gKCk7CisgICB9IAor CisgICBUaGUgY2FsbCB0byBmb28gaW4gbWFpbiBpcyByZXBsYWNlZCB3aXRo IGEgY2FsbCB0byBhbiBJRlVOQyBmdW5jdGlvbiB0aGF0CisgICBjb250YWlu cyB0aGUgZGlzcGF0Y2ggY29kZSB0byBjYWxsIHRoZSBjb3JyZWN0IGZ1bmN0 aW9uIHZlcnNpb24gYXQKKyAgIHJ1bi10aW1lLiAgKi8KKworCisjaW5jbHVk ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAi Y29yZXR5cGVzLmgiCisjaW5jbHVkZSAidG0uaCIKKyNpbmNsdWRlICJ0cmVl LmgiCisjaW5jbHVkZSAidHJlZS1pbmxpbmUuaCIKKyNpbmNsdWRlICJsYW5n aG9va3MuaCIKKyNpbmNsdWRlICJmbGFncy5oIgorI2luY2x1ZGUgImNncmFw aC5oIgorI2luY2x1ZGUgImRpYWdub3N0aWMuaCIKKyNpbmNsdWRlICJ0b3Bs ZXYuaCIKKyNpbmNsdWRlICJ0aW1ldmFyLmgiCisjaW5jbHVkZSAicGFyYW1z LmgiCisjaW5jbHVkZSAiZmliaGVhcC5oIgorI2luY2x1ZGUgImludGwuaCIK KyNpbmNsdWRlICJ0cmVlLXBhc3MuaCIKKyNpbmNsdWRlICJoYXNodGFiLmgi CisjaW5jbHVkZSAiY292ZXJhZ2UuaCIKKyNpbmNsdWRlICJnZ2MuaCIKKyNp bmNsdWRlICJ0cmVlLWZsb3cuaCIKKyNpbmNsdWRlICJydGwuaCIKKyNpbmNs dWRlICJpcGEtcHJvcC5oIgorI2luY2x1ZGUgImJhc2ljLWJsb2NrLmgiCisj aW5jbHVkZSAidG9wbGV2LmgiCisjaW5jbHVkZSAiZGJnY250LmgiCisjaW5j bHVkZSAidHJlZS1kdW1wLmgiCisjaW5jbHVkZSAib3V0cHV0LmgiCisjaW5j bHVkZSAidmVjcHJpbS5oIgorI2luY2x1ZGUgImdpbXBsZS1wcmV0dHktcHJp bnQuaCIKKyNpbmNsdWRlICJpcGEtaW5saW5lLmgiCisjaW5jbHVkZSAidGFy Z2V0LmgiCisjaW5jbHVkZSAibXVsdGl2ZXJzaW9uLmgiCisKK3R5cGVkZWYg dm9pZCAqIHZvaWRfcDsKKworREVGX1ZFQ19QICh2b2lkX3ApOworREVGX1ZF Q19BTExPQ19QICh2b2lkX3AsIGhlYXApOworCisvKiBFYWNoIGZ1bmN0aW9u IGRlY2wgdGhhdCBpcyBhIGZ1bmN0aW9uIHZlcnNpb24gZ2V0cyBhbiBpbnN0 YW5jZSBvZiB0aGlzCisgICBzdHJ1Y3R1cmUuICAgU2luY2UgdGhpcyBpcyBj YWxsZWQgYnkgdGhlIGZyb250LWVuZCwgZGVjbCBtZXJnaW5nIGNhbgorICAg aGFwcGVuLCB3aGVyZSBhIGRlY2wgY3JlYXRlZCBmb3IgYSBuZXcgZGVjbGFy YXRpb24gaXMgbWVyZ2VkIHdpdGggCisgICB0aGUgb2xkLiBJbiB0aGlzIGNh c2UsIHRoZSBuZXcgZGVjbCBpcyBkZWxldGVkIGFuZCB0aGUgSVNfREVMRVRF RAorICAgZmllbGQgaXMgc2V0IGZvciB0aGUgc3RydWN0IGluc3RhbmNlIGNv cnJlc3BvbmRpbmcgdG8gdGhlIG5ldyBkZWNsLgorICAgSUZVTkNfREVDTCBp cyB0aGUgZGVjbCBvZiB0aGUgaWZ1bmMgZnVuY3Rpb24gZm9yIGRlZmF1bHQg ZGVjbHMuCisgICBJRlVOQ19SRVNPTFZFUl9ERUNMIGlzIHRoZSBkZWNsIG9m IHRoZSBkaXNwYXRjaCBmdW5jdGlvbi4gIFZFUlNJT05TCisgICBpcyBhIHZl Y3RvciBjb250YWluaW5nIHRoZSBsaXN0IG9mIGZ1bmN0aW9uIHZlcnNpb25z ICB0aGF0IGFyZQorICAgdGhlIGNhbmRpZGF0ZXMgZm9yIGRpc3BhdGNoLiAg Ki8KKwordHlwZWRlZiBzdHJ1Y3QgdmVyc2lvbl9mdW5jdGlvbl9kIHsKKyAg dHJlZSBkZWNsOworICB0cmVlIGlmdW5jX2RlY2w7CisgIHRyZWUgaWZ1bmNf cmVzb2x2ZXJfZGVjbDsKKyAgVkVDICh2b2lkX3AsIGhlYXApICp2ZXJzaW9u czsKKyAgYm9vbCBpc19kZWxldGVkOworfSB2ZXJzaW9uX2Z1bmN0aW9uOwor CisvKiBIYXNobWFwIGhhcyBhbiBlbnRyeSBmb3IgZXZlcnkgZnVuY3Rpb24g ZGVjbCB0aGF0IGhhcyBvdGhlciBmdW5jdGlvbgorICAgdmVyc2lvbnMuICBG b3IgZnVuY3Rpb24gZGVjbHMgdGhhdCBhcmUgdGhlIGRlZmF1bHQsIGl0IGFs c28gc3RvcmVzIHRoZQorICAgbGlzdCBvZiBhbGwgdGhlIG90aGVyIGZ1bmN0 aW9uIHZlcnNpb25zLiAgRWFjaCBlbnRyeSBpcyBhIHN0cnVjdHVyZQorICAg b2YgdHlwZSB2ZXJzaW9uX2Z1bmN0aW9uX2QuICAqLworc3RhdGljIGh0YWJf dCBkZWNsX3ZlcnNpb25faHRhYiA9IE5VTEw7CisKKy8qIEhhc2h0YWJsZSBo ZWxwZXJzIGZvciBkZWNsX3ZlcnNpb25faHRhYi4gKi8KKworc3RhdGljIGhh c2h2YWxfdAorZGVjbF92ZXJzaW9uX2h0YWJfaGFzaF9kZXNjcmlwdG9yIChj b25zdCB2b2lkICpwKQoreworICBjb25zdCB2ZXJzaW9uX2Z1bmN0aW9uICp0 ID0gKGNvbnN0IHZlcnNpb25fZnVuY3Rpb24gKikgcDsKKyAgcmV0dXJuIGh0 YWJfaGFzaF9wb2ludGVyICh0LT5kZWNsKTsKK30KKworLyogSGFzaHRhYmxl IGhlbHBlciBmb3IgZGVjbF92ZXJzaW9uX2h0YWIuICovCisKK3N0YXRpYyBp bnQKK2RlY2xfdmVyc2lvbl9odGFiX2VxX2Rlc2NyaXB0b3IgKGNvbnN0IHZv aWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKyAgY29uc3QgdmVyc2lvbl9m dW5jdGlvbiAqdDEgPSAoY29uc3QgdmVyc2lvbl9mdW5jdGlvbiAqKSBwMTsK KyAgcmV0dXJuIGh0YWJfZXFfcG9pbnRlciAoKGNvbnN0IHZvaWRfcCkgdDEt PmRlY2wsIHAyKTsKK30KKworLyogQ3JlYXRlIHRoZSBkZWNsX3ZlcnNpb25f aHRhYi4gICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2RlY2xfdmVyc2lvbl9o dGFiICh2b2lkKQoreworICBpZiAoZGVjbF92ZXJzaW9uX2h0YWIgPT0gTlVM TCkKKyAgICBkZWNsX3ZlcnNpb25faHRhYiA9IGh0YWJfY3JlYXRlICgxMCwg ZGVjbF92ZXJzaW9uX2h0YWJfaGFzaF9kZXNjcmlwdG9yLAorCQkJCSAgICAg ZGVjbF92ZXJzaW9uX2h0YWJfZXFfZGVzY3JpcHRvciwgTlVMTCk7Cit9CisK Ky8qIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdmVyc2lvbl9mdW5jdGlvbiBm b3IgZGVjbCBERUNMLiAgKi8KKworc3RhdGljIHZlcnNpb25fZnVuY3Rpb24q CituZXdfdmVyc2lvbl9mdW5jdGlvbiAoY29uc3QgdHJlZSBkZWNsKQorewor ICB2ZXJzaW9uX2Z1bmN0aW9uICp2OworICB2ID0gKHZlcnNpb25fZnVuY3Rp b24gKil4bWFsbG9jKHNpemVvZiAodmVyc2lvbl9mdW5jdGlvbikpOworICB2 LT5kZWNsID0gZGVjbDsKKyAgdi0+aWZ1bmNfZGVjbCA9IE5VTEw7CisgIHYt PmlmdW5jX3Jlc29sdmVyX2RlY2wgPSBOVUxMOworICB2LT52ZXJzaW9ucyA9 IE5VTEw7CisgIHYtPmlzX2RlbGV0ZWQgPSBmYWxzZTsKKyAgcmV0dXJuIHY7 Cit9CisKKy8qIENvbXBhcmF0b3IgZnVuY3Rpb24gdG8gYmUgdXNlZCBpbiBx c29ydCByb3V0aW5lIHRvIHNvcnQgYXR0cmlidXRlCisgICBzcGVjaWZpY2F0 aW9uIHN0cmluZ3MgdG8gInRhcmdldCIuICAqLworCitzdGF0aWMgaW50Cith dHRyX3N0cmNtcCAoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQor eworICBjb25zdCBjaGFyICpjMSA9ICooY2hhciAqY29uc3QqKXYxOworICBj b25zdCBjaGFyICpjMiA9ICooY2hhciAqY29uc3QqKXYyOworICByZXR1cm4g c3RyY21wIChjMSwgYzIpOworfQorCisvKiBTVFIgaXMgdGhlIGFyZ3VtZW50 IHRvIHRhcmdldCBhdHRyaWJ1dGUuICBUaGlzIGZ1bmN0aW9uIHRva2VuaXpl cworICAgdGhlIGNvbW1hIHNlcGFyYXRlZCBhcmd1bWVudHMsIHNvcnRzIHRo ZW0gYW5kIHJldHVybnMgYSBzdHJpbmcgd2hpY2gKKyAgIGlzIGEgdW5pcXVl IGlkZW50aWZpZXIgZm9yIHRoZSBjb21tYSBzZXBhcmF0ZWQgYXJndW1lbnRz LiAgKi8KKworc3RhdGljIGNoYXIgKgorc29ydGVkX2F0dHJfc3RyaW5nIChj b25zdCBjaGFyICpzdHIpCit7CisgIGNoYXIgKiphcmdzID0gTlVMTDsKKyAg Y2hhciAqYXR0cl9zdHIsICpyZXRfc3RyOworICBjaGFyICphdHRyID0gTlVM TDsKKyAgdW5zaWduZWQgaW50IGFyZ251bSA9IDE7CisgIHVuc2lnbmVkIGlu dCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBzdHJsZW4gKHN0cik7IGkrKykK KyAgICBpZiAoc3RyW2ldID09ICcsJykKKyAgICAgIGFyZ251bSsrOworCisg IGF0dHJfc3RyID0gKGNoYXIgKil4bWFsbG9jIChzdHJsZW4gKHN0cikgKyAx KTsKKyAgc3RyY3B5IChhdHRyX3N0ciwgc3RyKTsKKworICBmb3IgKGkgPSAw OyBpIDwgc3RybGVuIChhdHRyX3N0cik7IGkrKykKKyAgICBpZiAoYXR0cl9z dHJbaV0gPT0gJz0nKQorICAgICAgYXR0cl9zdHJbaV0gPSAnXyc7CisKKyAg aWYgKGFyZ251bSA9PSAxKQorICAgIHJldHVybiBhdHRyX3N0cjsKKworICBh cmdzID0gKGNoYXIgKiopeG1hbGxvYyAoYXJnbnVtICogc2l6ZW9mIChjaGFy ICopKTsKKworICBpID0gMDsKKyAgYXR0ciA9IHN0cnRvayAoYXR0cl9zdHIs ICIsIik7CisgIHdoaWxlIChhdHRyICE9IE5VTEwpCisgICAgeworICAgICAg YXJnc1tpXSA9IGF0dHI7CisgICAgICBpKys7CisgICAgICBhdHRyID0gc3Ry dG9rIChOVUxMLCAiLCIpOworICAgIH0KKworICBxc29ydCAoYXJncywgYXJn bnVtLCBzaXplb2YgKGNoYXIqKSwgYXR0cl9zdHJjbXApOworCisgIHJldF9z dHIgPSAoY2hhciAqKXhtYWxsb2MgKHN0cmxlbiAoc3RyKSArIDEpOworICBz dHJjcHkgKHJldF9zdHIsIGFyZ3NbMF0pOworICBmb3IgKGkgPSAxOyBpIDwg YXJnbnVtOyBpKyspCisgICAgeworICAgICAgc3RyY2F0IChyZXRfc3RyLCAi XyIpOworICAgICAgc3RyY2F0IChyZXRfc3RyLCBhcmdzW2ldKTsKKyAgICB9 CisKKyAgZnJlZSAoYXJncyk7CisgIGZyZWUgKGF0dHJfc3RyKTsKKyAgcmV0 dXJuIHJldF9zdHI7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSB3aGVuIG9ubHkg b25lIG9mIERFQ0wxIGFuZCBERUNMMiBpcyBtYXJrZWQgd2l0aCAidGFyZ2V0 IgorICAgb3IgaWYgdGhlICJ0YXJnZXQiIGF0dHJpYnV0ZSBzdHJpbmdzIG9m IERFQ0wxIGFuZCBERUNMMiBkb250IG1hdGNoLiAgKi8KKworYm9vbAoraGFz X2RpZmZlcmVudF92ZXJzaW9uX2F0dHJpYnV0ZXMgKGNvbnN0IHRyZWUgZGVj bDEsIGNvbnN0IHRyZWUgZGVjbDIpCit7CisgIHRyZWUgYXR0cjEsIGF0dHIy OworICBjaGFyICpjMSwgKmMyOworICBib29sIHJldCA9IGZhbHNlOworCisg IGlmIChUUkVFX0NPREUgKGRlY2wxKSAhPSBGVU5DVElPTl9ERUNMCisgICAg ICB8fCBUUkVFX0NPREUgKGRlY2wyKSAhPSBGVU5DVElPTl9ERUNMKQorICAg IHJldHVybiBmYWxzZTsKKworICBhdHRyMSA9IGxvb2t1cF9hdHRyaWJ1dGUg KCJ0YXJnZXQiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wxKSk7CisgIGF0dHIy ID0gbG9va3VwX2F0dHJpYnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRF UyAoZGVjbDIpKTsKKworICBpZiAoYXR0cjEgPT0gTlVMTF9UUkVFICYmIGF0 dHIyID09IE5VTExfVFJFRSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYg KChhdHRyMSA9PSBOVUxMX1RSRUUgJiYgYXR0cjIgIT0gTlVMTF9UUkVFKQor ICAgICAgfHwgKGF0dHIxICE9IE5VTExfVFJFRSAmJiBhdHRyMiA9PSBOVUxM X1RSRUUpKQorICAgIHJldHVybiB0cnVlOworCisgIGMxID0gc29ydGVkX2F0 dHJfc3RyaW5nICgKKwlUUkVFX1NUUklOR19QT0lOVEVSIChUUkVFX1ZBTFVF IChUUkVFX1ZBTFVFIChhdHRyMSkpKSk7CisgIGMyID0gc29ydGVkX2F0dHJf c3RyaW5nICgKKwlUUkVFX1NUUklOR19QT0lOVEVSIChUUkVFX1ZBTFVFIChU UkVFX1ZBTFVFIChhdHRyMikpKSk7CisKKyAgaWYgKHN0cmNtcCAoYzEsIGMy KSAhPSAwKQorICAgICByZXQgPSB0cnVlOworCisgIGZyZWUgKGMxKTsKKyAg ZnJlZSAoYzIpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qIElmIHRoaXMg ZGVjbCBjb3JyZXNwb25kcyB0byBhIGZ1bmN0aW9uIGFuZCBoYXMgInRhcmdl dCIgYXR0cmlidXRlLAorICAgYXBwZW5kIHRoZSBhdHRyaWJ1dGUgc3RyaW5n IHRvIGl0cyBhc3NlbWJsZXIgbmFtZS4gICovCisKK3N0YXRpYyB2b2lkCit2 ZXJzaW9uX2Fzc2VtYmxlcl9uYW1lIChjb25zdCB0cmVlIGRlY2wpCit7Cisg IHRyZWUgdmVyc2lvbl9hdHRyOworICBjb25zdCBjaGFyICpvcmlnX25hbWUs ICp2ZXJzaW9uX3N0cmluZywgKmF0dHJfc3RyOworICBjaGFyICphc3NlbWJs ZXJfbmFtZTsKKyAgdHJlZSBhc3NlbWJsZXJfbmFtZV90cmVlOworICAKKyAg aWYgKFRSRUVfQ09ERSAoZGVjbCkgIT0gRlVOQ1RJT05fREVDTCkKKyAgICBy ZXR1cm47CisKKyAgaWYgKERFQ0xfREVDTEFSRURfSU5MSU5FX1AgKGRlY2wp CisgICAgICAmJmxvb2t1cF9hdHRyaWJ1dGUgKCJnbnVfaW5saW5lIiwKKwkJ CSAgREVDTF9BVFRSSUJVVEVTIChkZWNsKSkpCisgICAgZXJyb3JfYXQgKERF Q0xfU09VUkNFX0xPQ0FUSU9OIChkZWNsKSwKKwkgICAgICAiRnVuY3Rpb24g dmVyc2lvbnMgY2Fubm90IGJlIG1hcmtlZCBhcyBnbnVfaW5saW5lLCIKKwkg ICAgICAiIGJvZGllcyBoYXZlIHRvIGJlIGdlbmVyYXRlZFxuIik7CisKKyAg aWYgKERFQ0xfVklSVFVBTF9QIChkZWNsKQorICAgICAgfHwgREVDTF9WSU5E RVggKGRlY2wpKQorICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElP TiAoZGVjbCksCisJICAgICAgIlZpcnR1YWwgZnVuY3Rpb24gdmVyc2lvbmlu ZyBub3Qgc3VwcG9ydGVkXG4iKTsKKworICB2ZXJzaW9uX2F0dHIgPSBsb29r dXBfYXR0cmlidXRlICgidGFyZ2V0IiwgREVDTF9BVFRSSUJVVEVTIChkZWNs KSk7CisgIC8qIHRhcmdldCBhdHRyaWJ1dGUgc3RyaW5nIGlzIE5VTEwgZm9y IGRlZmF1bHQgZnVuY3Rpb25zLiAgKi8KKyAgaWYgKHZlcnNpb25fYXR0ciA9 PSBOVUxMX1RSRUUpCisgICAgcmV0dXJuOworCisgIG9yaWdfbmFtZSA9IElE RU5USUZJRVJfUE9JTlRFUiAoREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCkp OworICB2ZXJzaW9uX3N0cmluZworICAgID0gVFJFRV9TVFJJTkdfUE9JTlRF UiAoVFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAodmVyc2lvbl9hdHRyKSkpOwor CisgIGF0dHJfc3RyID0gc29ydGVkX2F0dHJfc3RyaW5nICh2ZXJzaW9uX3N0 cmluZyk7CisgIGFzc2VtYmxlcl9uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAo c3RybGVuIChvcmlnX25hbWUpCisJCQkJICAgICArIHN0cmxlbiAoYXR0cl9z dHIpICsgMik7CisKKyAgc3ByaW50ZiAoYXNzZW1ibGVyX25hbWUsICIlcy4l cyIsIG9yaWdfbmFtZSwgYXR0cl9zdHIpOworICBpZiAoZHVtcF9maWxlKQor ICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIkFzc2VtYmxlciBuYW1lIHNldCB0 byAlcyBmb3IgZnVuY3Rpb24gdmVyc2lvbiAlc1xuIiwKKwkgICAgIGFzc2Vt Ymxlcl9uYW1lLCBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoZGVj bCkpKTsKKworICBhc3NlbWJsZXJfbmFtZV90cmVlID0gZ2V0X2lkZW50aWZp ZXIgKGFzc2VtYmxlcl9uYW1lKTsKKworICBTRVRfREVDTF9BU1NFTUJMRVJf TkFNRSAoZGVjbCwgYXNzZW1ibGVyX25hbWVfdHJlZSk7CisgIFNFVF9ERUNM X1JUTCAoZGVjbCwgTlVMTCk7Cit9CisKK3ZvaWQKK21hcmtfZnVuY3Rpb25f YXNfdmVyc2lvbiAoY29uc3QgdHJlZSBkZWNsKQoreworICBpZiAoREVDTF9G VU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpKQorICAgIHJldHVybjsKKyAgREVD TF9GVU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpID0gMTsKKyAgdmVyc2lvbl9h c3NlbWJsZXJfbmFtZSAoZGVjbCk7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBp ZiBmdW5jdGlvbiBERUNMIGhhcyB0YXJnZXQgYXR0cmlidXRlIHNldC4gIFRo aXMgY291bGQgYmUKKyAgIGEgdmVyc2lvbi4gICovCisKK2Jvb2wKK2lzX3Rh cmdldF9hdHRyaWJ1dGVfc2V0IChjb25zdCB0cmVlIGRlY2wpCit7CisgIHJl dHVybiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9ERUNMCisJICAm JiAobG9va3VwX2F0dHJpYnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRF UyAoZGVjbCkpCisJICAgICAgIT0gTlVMTF9UUkVFKSk7Cit9CisKKy8qIFJl dHVybnMgdHJ1ZSBpZiBkZWNsIGlzIG11bHRpLXZlcnNpb25lZCBhbmQgREVD TCBpcyB0aGUgZGVmYXVsdCBmdW5jdGlvbiwKKyAgIHRoYXQgaXMgaXQgaXMg bm90IHRhZ2dlZCB3aXRoICJ0YXJnZXQiIGF0dHJpYnV0ZS4gICovCisKK2Jv b2wKK2lzX2RlZmF1bHRfZnVuY3Rpb24gKGNvbnN0IHRyZWUgZGVjbCkKK3sK KyAgcmV0dXJuIChUUkVFX0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wK KwkgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsKQorCSAgJiYg KGxvb2t1cF9hdHRyaWJ1dGUgKCJ0YXJnZXQiLCBERUNMX0FUVFJJQlVURVMg KGRlY2wpKQorCSAgICAgID09IE5VTExfVFJFRSkpOwkKK30KKworLyogRm9y IGZ1bmN0aW9uIGRlY2wgREVDTCwgZmluZCB0aGUgdmVyc2lvbl9mdW5jdGlv biBzdHJ1Y3QgaW4gdGhlCisgICBkZWNsX3ZlcnNpb25faHRhYi4gICovCisK K3N0YXRpYyB2ZXJzaW9uX2Z1bmN0aW9uICoKK2ZpbmRfZnVuY3Rpb25fdmVy c2lvbiAoY29uc3QgdHJlZSBkZWNsKQoreworICB2b2lkICpzbG90OworCisg IGlmICghREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpKQorICAgIHJl dHVybiBOVUxMOworCisgIGlmICghZGVjbF92ZXJzaW9uX2h0YWIpCisgICAg cmV0dXJuIE5VTEw7CisKKyAgc2xvdCA9IGh0YWJfZmluZF93aXRoX2hhc2gg KGRlY2xfdmVyc2lvbl9odGFiLCBkZWNsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaHRhYl9oYXNoX3BvaW50ZXIgKGRlY2wpKTsKKworICBp ZiAoc2xvdCAhPSBOVUxMKQorICAgIHJldHVybiAodmVyc2lvbl9mdW5jdGlv biAqKXNsb3Q7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJlY29yZCBE RUNMIGFzIGEgZnVuY3Rpb24gdmVyc2lvbiBieSBjcmVhdGluZyBhIHZlcnNp b25fZnVuY3Rpb24gc3RydWN0CisgICBmb3IgaXQgYW5kIHN0b3JpbmcgaXQg aW4gdGhlIGhhc2h0YWJsZS4gICovCisKK3N0YXRpYyB2ZXJzaW9uX2Z1bmN0 aW9uICoKK2FkZF9mdW5jdGlvbl92ZXJzaW9uIChjb25zdCB0cmVlIGRlY2wp Cit7CisgIHZvaWQgKipzbG90OworICB2ZXJzaW9uX2Z1bmN0aW9uICp2Owor CisgIGlmICghREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpKQorICAg IHJldHVybiBOVUxMOworCisgIGNyZWF0ZV9kZWNsX3ZlcnNpb25faHRhYiAo KTsKKworICBzbG90ID0gaHRhYl9maW5kX3Nsb3Rfd2l0aF9oYXNoIChkZWNs X3ZlcnNpb25faHRhYiwgKGNvbnN0IHZvaWRfcClkZWNsLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBodGFiX2hhc2hfcG9pbnRlciAo KGNvbnN0IHZvaWRfcClkZWNsKSwKKwkJCQkgICBJTlNFUlQpOworCisgIGlm ICgqc2xvdCAhPSBOVUxMKQorICAgIHJldHVybiAodmVyc2lvbl9mdW5jdGlv biAqKSpzbG90OworCisgIHYgPSBuZXdfdmVyc2lvbl9mdW5jdGlvbiAoZGVj bCk7CisgICpzbG90ID0gdjsKKworICByZXR1cm4gdjsKK30KKworLyogUHVz aCBWIGludG8gVkVDIG9ubHkgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2Vu dC4gIElmIGFscmVhZHkgcHJlc2VudAorICAgcmV0dXJucyBmYWxzZS4gICov CisKK3N0YXRpYyBib29sCitwdXNoX2Z1bmN0aW9uX3ZlcnNpb24gKHZlcnNp b25fZnVuY3Rpb24gKnYsIFZFQyAodm9pZF9wLCBoZWFwKSAqKnZlYykKK3sK KyAgaW50IGl4OworICB2b2lkX3AgZWxlOyAKKyAgZm9yIChpeCA9IDA7IFZF Q19pdGVyYXRlICh2b2lkX3AsICp2ZWMsIGl4LCBlbGUpOyArK2l4KQorICAg IHsKKyAgICAgIGlmIChlbGUgPT0gKHZvaWRfcCl2KQorICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgfQorCisgIFZFQ19zYWZlX3B1c2ggKHZvaWRfcCwg aGVhcCwgKnZlYywgKHZvaWQqKXYpOworICByZXR1cm4gdHJ1ZTsKK30KKyAK Ky8qIE1hcmsgREVDTCBhcyBkZWxldGVkLiAgVGhpcyBpcyBjYWxsZWQgYnkg dGhlIGZyb250LWVuZCB3aGVuIGEgZHVwbGljYXRlCisgICBkZWNsIGlzIG1l cmdlZCB3aXRoIHRoZSBvcmlnaW5hbCBkZWNsIGFuZCB0aGUgZHVwbGljYXRl IGRlY2wgaXMgZGVsZXRlZC4KKyAgIFRoaXMgZnVuY3Rpb24gbWFya3MgdGhl IGR1cGxpY2F0ZV9kZWNsIGFzIGludmFsaWQuICBDYWxsZWQgYnkKKyAgIGR1 cGxpY2F0ZV9kZWNscyBpbiBjcC9kZWNsLmMuICAqLworCit2b2lkCittYXJr X2RlbGV0ZV9kZWNsX3ZlcnNpb24gKGNvbnN0IHRyZWUgZGVjbCkKK3sKKyAg dmVyc2lvbl9mdW5jdGlvbiAqZGVjbF92OworCisgIGRlY2xfdiA9IGZpbmRf ZnVuY3Rpb25fdmVyc2lvbiAoZGVjbCk7CisKKyAgaWYgKGRlY2xfdiA9PSBO VUxMKQorICAgIHJldHVybjsKKworICBkZWNsX3YtPmlzX2RlbGV0ZWQgPSB0 cnVlOworCisgIGlmIChpc19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsKQorICAg ICAgJiYgZGVjbF92LT52ZXJzaW9ucyAhPSBOVUxMKQorICAgIHsKKyAgICAg IFZFQ190cnVuY2F0ZSAodm9pZF9wLCBkZWNsX3YtPnZlcnNpb25zLCAwKTsK KyAgICAgIFZFQ19mcmVlICh2b2lkX3AsIGhlYXAsIGRlY2xfdi0+dmVyc2lv bnMpOworICAgICAgZGVjbF92LT52ZXJzaW9ucyA9IE5VTEw7CisgICAgfQor fQorCisvKiBNYXJrIERFQ0wxIGFuZCBERUNMMiB0byBiZSBmdW5jdGlvbiB2 ZXJzaW9ucyBpbiB0aGUgc2FtZSBncm91cC4gIE9uZQorICAgb2YgREVDTDEg YW5kIERFQ0wyIG11c3QgYmUgdGhlIGRlZmF1bHQsIG90aGVyd2lzZSB0aGlz IGZ1bmN0aW9uIGRvZXMKKyAgIG5vdGhpbmcuICBUaGlzIGZ1bmN0aW9uIGFn Z3JlZ2F0ZXMgdGhlIHZlcnNpb25zLiAgKi8KKworaW50Citncm91cF9mdW5j dGlvbl92ZXJzaW9ucyAoY29uc3QgdHJlZSBkZWNsMSwgY29uc3QgdHJlZSBk ZWNsMikKK3sKKyAgdHJlZSBkZWZhdWx0X2RlY2wsIHZlcnNpb25fZGVjbDsK KyAgdmVyc2lvbl9mdW5jdGlvbiAqZGVmYXVsdF92LCAqdmVyc2lvbl92Owor CisgIGdjY19hc3NlcnQgKERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNs MSkKKwkgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZGVjbDIp KTsKKworICAvKiBUaGUgdmVyc2lvbiBkZWNscyBhcmUgYWRkZWQgb25seSB0 byB0aGUgZGVmYXVsdCBkZWNsLiAgKi8KKyAgaWYgKCFpc19kZWZhdWx0X2Z1 bmN0aW9uIChkZWNsMSkKKyAgICAgICYmICFpc19kZWZhdWx0X2Z1bmN0aW9u IChkZWNsMikpCisgICAgcmV0dXJuIDA7CisKKyAgLyogVGhpcyBjYW4gaGFw cGVuIHdpdGggZHVwbGljYXRlIGRlY2xhcmF0aW9ucy4gIEp1c3QgaWdub3Jl LiAgKi8KKyAgaWYgKGlzX2RlZmF1bHRfZnVuY3Rpb24gKGRlY2wxKQorICAg ICAgJiYgaXNfZGVmYXVsdF9mdW5jdGlvbiAoZGVjbDIpKQorICAgIHJldHVy biAwOworCisgIGRlZmF1bHRfZGVjbCA9IChpc19kZWZhdWx0X2Z1bmN0aW9u IChkZWNsMSkpID8gZGVjbDEgOiBkZWNsMjsKKyAgdmVyc2lvbl9kZWNsID0g KGRlZmF1bHRfZGVjbCA9PSBkZWNsMSkgPyBkZWNsMiA6IGRlY2wxOworCisg IGdjY19hc3NlcnQgKGRlZmF1bHRfZGVjbCAhPSB2ZXJzaW9uX2RlY2wpOwor ICBjcmVhdGVfZGVjbF92ZXJzaW9uX2h0YWIgKCk7CisKKyAgLyogSWYgdGhl IHZlcnNpb24gZnVuY3Rpb24gaXMgZm91bmQsIGl0IGhhcyBiZWVuIGFkZGVk LiAgKi8KKyAgaWYgKGZpbmRfZnVuY3Rpb25fdmVyc2lvbiAodmVyc2lvbl9k ZWNsKSkKKyAgICByZXR1cm4gMDsKKworICBkZWZhdWx0X3YgPSBhZGRfZnVu Y3Rpb25fdmVyc2lvbiAoZGVmYXVsdF9kZWNsKTsKKyAgdmVyc2lvbl92ID0g YWRkX2Z1bmN0aW9uX3ZlcnNpb24gKHZlcnNpb25fZGVjbCk7CisKKyAgaWYg KGRlZmF1bHRfdi0+dmVyc2lvbnMgPT0gTlVMTCkKKyAgICBkZWZhdWx0X3Yt PnZlcnNpb25zID0gVkVDX2FsbG9jICh2b2lkX3AsIGhlYXAsIDEpOworCisg IHB1c2hfZnVuY3Rpb25fdmVyc2lvbiAodmVyc2lvbl92LCAmZGVmYXVsdF92 LT52ZXJzaW9ucyk7CisgIHJldHVybiAwOworfQorCisvKiBNYWtlcyBhIGZ1 bmN0aW9uIGF0dHJpYnV0ZSBvZiB0aGUgZm9ybSBOQU1FKEFSR19OQU1FKSBh bmQgY2hhaW5zCisgICBpdCB0byBDSEFJTi4gICovCisKK3N0YXRpYyB0cmVl CittYWtlX2F0dHJpYnV0ZSAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hh ciAqYXJnX25hbWUsIHRyZWUgY2hhaW4pCit7CisgIHRyZWUgYXR0cl9uYW1l OworICB0cmVlIGF0dHJfYXJnX25hbWU7CisgIHRyZWUgYXR0cl9hcmdzOwor ICB0cmVlIGF0dHI7CisKKyAgYXR0cl9uYW1lID0gZ2V0X2lkZW50aWZpZXIg KG5hbWUpOworICBhdHRyX2FyZ19uYW1lID0gYnVpbGRfc3RyaW5nIChzdHJs ZW4gKGFyZ19uYW1lKSwgYXJnX25hbWUpOworICBhdHRyX2FyZ3MgPSB0cmVl X2NvbnMgKE5VTExfVFJFRSwgYXR0cl9hcmdfbmFtZSwgTlVMTF9UUkVFKTsK KyAgYXR0ciA9IHRyZWVfY29ucyAoYXR0cl9uYW1lLCBhdHRyX2FyZ3MsIGNo YWluKTsKKyAgcmV0dXJuIGF0dHI7Cit9CisKKy8qIFJldHVybiBhIG5ldyBu YW1lIGJ5IGFwcGVuZGluZyBTVUZGSVggdG8gdGhlIERFQ0wgbmFtZS4gIElm CisgICBtYWtlX3VuaXF1ZSBpcyB0cnVlLCBhcHBlbmQgdGhlIGZ1bGwgcGF0 aCBuYW1lLiAgKi8KKworc3RhdGljIGNoYXIgKgorbWFrZV9uYW1lICh0cmVl IGRlY2wsIGNvbnN0IGNoYXIgKnN1ZmZpeCwgYm9vbCBtYWtlX3VuaXF1ZSkK K3sKKyAgY2hhciAqZ2xvYmFsX3Zhcl9uYW1lOworICBpbnQgbmFtZV9sZW47 CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIgKnVuaXF1ZV9u YW1lID0gTlVMTDsKKworICBuYW1lID0gSURFTlRJRklFUl9QT0lOVEVSIChE RUNMX0FTU0VNQkxFUl9OQU1FIChkZWNsKSk7CisKKyAgLyogR2V0IGEgdW5p cXVlIG5hbWUgdGhhdCBjYW4gYmUgdXNlZCBnbG9iYWxseSB3aXRob3V0IGFu eSBjaGFuY2VzCisgICAgIG9mIGNvbGxpc2lvbiBhdCBsaW5rIHRpbWUuICAq LworICBpZiAobWFrZV91bmlxdWUpCisgICAgdW5pcXVlX25hbWUgPSBJREVO VElGSUVSX1BPSU5URVIgKGdldF9maWxlX2Z1bmN0aW9uX25hbWUgKCJcMCIp KTsKKworICBuYW1lX2xlbiA9IHN0cmxlbiAobmFtZSkgKyBzdHJsZW4gKHN1 ZmZpeCkgKyAyOworCisgIGlmIChtYWtlX3VuaXF1ZSkKKyAgICBuYW1lX2xl biArPSBzdHJsZW4gKHVuaXF1ZV9uYW1lKSArIDE7CisgIGdsb2JhbF92YXJf bmFtZSA9IChjaGFyICopIHhtYWxsb2MgKG5hbWVfbGVuKTsKKworICAvKiBV c2UgJy4nIHRvIGNvbmNhdGVuYXRlIG5hbWVzIGFzIGl0IGlzIGRlbWFuZ2xl ciBmcmllbmRseS4gICovCisgIGlmIChtYWtlX3VuaXF1ZSkKKyAgICAgIHNu cHJpbnRmIChnbG9iYWxfdmFyX25hbWUsIG5hbWVfbGVuLCAiJXMuJXMuJXMi LCBuYW1lLAorCQl1bmlxdWVfbmFtZSwgc3VmZml4KTsKKyAgZWxzZQorICAg ICAgc25wcmludGYgKGdsb2JhbF92YXJfbmFtZSwgbmFtZV9sZW4sICIlcy4l cyIsIG5hbWUsIHN1ZmZpeCk7CisKKyAgcmV0dXJuIGdsb2JhbF92YXJfbmFt ZTsKK30KKworLyogTWFrZSB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gZGVjbCBm b3IgaWZ1bmMgKElGVU5DX0RFQ0wpIHRvIGRpc3BhdGNoCisgICB0aGUgdmVy c2lvbnMgb2YgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9uIERFRkFVTFRfREVD TC4gIENyZWF0ZSBhbmQKKyAgIGVtcHR5IGJhc2ljIGJsb2NrIGluIHRoZSBy ZXNvbHZlciBhbmQgc3RvcmUgdGhlIHBvaW50ZXIgaW4KKyAgIEVNUFRZX0JC LiAgUmV0dXJuIHRoZSBkZWNsIG9mIHRoZSByZXNvbHZlciBmdW5jdGlvbi4g ICovCisKK3N0YXRpYyB0cmVlCittYWtlX2lmdW5jX3Jlc29sdmVyX2Z1bmMg KGNvbnN0IHRyZWUgZGVmYXVsdF9kZWNsLAorCQkJICBjb25zdCB0cmVlIGlm dW5jX2RlY2wsCisJCQkgIGJhc2ljX2Jsb2NrICplbXB0eV9iYikKK3sKKyAg Y2hhciAqcmVzb2x2ZXJfbmFtZTsKKyAgdHJlZSBkZWNsLCB0eXBlLCBkZWNs X25hbWUsIHQ7CisgIGJhc2ljX2Jsb2NrIG5ld19iYjsKKyAgdHJlZSBvbGRf Y3VycmVudF9mdW5jdGlvbl9kZWNsOworICBib29sIG1ha2VfdW5pcXVlID0g ZmFsc2U7CisKKyAgLyogSUZVTkMncyBoYXZlIHRvIGJlIGdsb2JhbGx5IHZp c2libGUuICBTbywgaWYgdGhlIGRlZmF1bHRfZGVjbCBpcworICAgICBub3Qs IHRoZW4gdGhlIG5hbWUgb2YgdGhlIElGVU5DIHNob3VsZCBiZSBtYWRlIHVu aXF1ZS4gICovCisgIGlmIChUUkVFX1BVQkxJQyAoZGVmYXVsdF9kZWNsKSA9 PSAwKQorICAgIG1ha2VfdW5pcXVlID0gdHJ1ZTsKKworICAvKiBBcHBlbmQg dGhlIGZpbGVuYW1lIHRvIHRoZSByZXNvbHZlciBmdW5jdGlvbiBpZiB0aGUg dmVyc2lvbnMgYXJlCisgICAgIG5vdCBleHRlcm5hbGx5IHZpc2libGUuICBU aGlzIGlzIGJlY2F1c2UgdGhlIHJlc29sdmVyIGZ1bmN0aW9uIGhhcworICAg ICB0byBiZSBleHRlcm5hbGx5IHZpc2libGUgZm9yIHRoZSBsb2FkZXIgdG8g ZmluZCBpdC4gIFNvLCBhcHBlbmRpbmcKKyAgICAgdGhlIGZpbGVuYW1lIHdp bGwgcHJldmVudCBjb25mbGljdHMgd2l0aCBhIHJlc29sdmVyIGZ1bmN0aW9u IGZyb20KKyAgICAgYW5vdGhlciBtb2R1bGUgd2hpY2ggaXMgYmFzZWQgb24g dGhlIHNhbWUgdmVyc2lvbiBuYW1lLiAgKi8KKyAgcmVzb2x2ZXJfbmFtZSA9 IG1ha2VfbmFtZSAoZGVmYXVsdF9kZWNsLCAicmVzb2x2ZXIiLCBtYWtlX3Vu aXF1ZSk7CisKKyAgLyogVGhlIHJlc29sdmVyIGZ1bmN0aW9uIHNob3VsZCBy ZXR1cm4gYSAodm9pZCAqKS4gKi8KKyAgdHlwZSA9IGJ1aWxkX2Z1bmN0aW9u X3R5cGVfbGlzdCAocHRyX3R5cGVfbm9kZSwgTlVMTF9UUkVFKTsKKworICBk ZWNsID0gYnVpbGRfZm5fZGVjbCAocmVzb2x2ZXJfbmFtZSwgdHlwZSk7Cisg IGRlY2xfbmFtZSA9IGdldF9pZGVudGlmaWVyIChyZXNvbHZlcl9uYW1lKTsK KyAgU0VUX0RFQ0xfQVNTRU1CTEVSX05BTUUgKGRlY2wsIGRlY2xfbmFtZSk7 CisKKyAgREVDTF9OQU1FIChkZWNsKSA9IGRlY2xfbmFtZTsKKyAgVFJFRV9V U0VEIChkZWNsKSA9IFRSRUVfVVNFRCAoZGVmYXVsdF9kZWNsKTsKKyAgREVD TF9BUlRJRklDSUFMIChkZWNsKSA9IDE7CisgIERFQ0xfSUdOT1JFRF9QIChk ZWNsKSA9IDA7CisgIC8qIElGVU5DIHJlc29sdmVycyBoYXZlIHRvIGJlIGV4 dGVybmFsbHkgdmlzaWJsZS4gICovCisgIFRSRUVfUFVCTElDIChkZWNsKSA9 IDE7CisgIERFQ0xfVU5JTkxJTkFCTEUgKGRlY2wpID0gMTsKKworICBERUNM X0VYVEVSTkFMIChkZWNsKSA9IERFQ0xfRVhURVJOQUwgKGRlZmF1bHRfZGVj bCk7CisgIERFQ0xfRVhURVJOQUwgKGlmdW5jX2RlY2wpID0gMDsKKworICBE RUNMX0NPTlRFWFQgKGRlY2wpID0gTlVMTF9UUkVFOworICBERUNMX0lOSVRJ QUwgKGRlY2wpID0gbWFrZV9ub2RlIChCTE9DSyk7CisgIERFQ0xfU1RBVElD X0NPTlNUUlVDVE9SIChkZWNsKSA9IDA7CisgIFRSRUVfUkVBRE9OTFkgKGRl Y2wpID0gMDsKKyAgREVDTF9QVVJFX1AgKGRlY2wpID0gMDsKKyAgREVDTF9D T01EQVQgKGRlY2wpID0gREVDTF9DT01EQVQgKGRlZmF1bHRfZGVjbCk7Cisg IGlmIChERUNMX0NPTURBVF9HUk9VUCAoZGVmYXVsdF9kZWNsKSkKKyAgICB7 CisgICAgICBtYWtlX2RlY2xfb25lX29ubHkgKGRlY2wsIERFQ0xfQ09NREFU X0dST1VQIChkZWZhdWx0X2RlY2wpKTsKKyAgICB9CisgIC8qIEJ1aWxkIHJl c3VsdCBkZWNsIGFuZCBhZGQgdG8gZnVuY3Rpb25fZGVjbC4gKi8KKyAgdCA9 IGJ1aWxkX2RlY2wgKFVOS05PV05fTE9DQVRJT04sIFJFU1VMVF9ERUNMLCBO VUxMX1RSRUUsIHB0cl90eXBlX25vZGUpOworICBERUNMX0FSVElGSUNJQUwg KHQpID0gMTsKKyAgREVDTF9JR05PUkVEX1AgKHQpID0gMTsKKyAgREVDTF9S RVNVTFQgKGRlY2wpID0gdDsKKworICBnaW1wbGlmeV9mdW5jdGlvbl90cmVl IChkZWNsKTsKKyAgb2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGN1cnJl bnRfZnVuY3Rpb25fZGVjbDsKKyAgcHVzaF9jZnVuIChERUNMX1NUUlVDVF9G VU5DVElPTiAoZGVjbCkpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBk ZWNsOworICBpbml0X2VtcHR5X3RyZWVfY2ZnX2Zvcl9mdW5jdGlvbiAoREVD TF9TVFJVQ1RfRlVOQ1RJT04gKGRlY2wpKTsKKyAgY2Z1bi0+Y3Vycl9wcm9w ZXJ0aWVzIHw9CisgICAgKFBST1BfZ2ltcGxlX2xjZiB8IFBST1BfZ2ltcGxl X2xlaCB8IFBST1BfY2ZnIHwgUFJPUF9yZWZlcmVuY2VkX3ZhcnMgfAorICAg ICBQUk9QX3NzYSk7CisgIG5ld19iYiA9IGNyZWF0ZV9lbXB0eV9iYiAoRU5U UllfQkxPQ0tfUFRSKTsKKyAgbWFrZV9lZGdlIChFTlRSWV9CTE9DS19QVFIs IG5ld19iYiwgRURHRV9GQUxMVEhSVSk7CisgIG1ha2VfZWRnZSAobmV3X2Ji LCBFWElUX0JMT0NLX1BUUiwgMCk7CisgICplbXB0eV9iYiA9IG5ld19iYjsK KworICBjZ3JhcGhfYWRkX25ld19mdW5jdGlvbiAoZGVjbCwgdHJ1ZSk7Cisg IGNncmFwaF9jYWxsX2Z1bmN0aW9uX2luc2VydGlvbl9ob29rcyAoY2dyYXBo X2dldF9jcmVhdGVfbm9kZSAoZGVjbCkpOworICBjZ3JhcGhfbWFya19mb3Jj ZV9vdXRwdXRfbm9kZSAoY2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZGVjbCkp OworCisgIGlmIChERUNMX0NPTURBVF9HUk9VUCAoZGVmYXVsdF9kZWNsKSkK KyAgICB7CisgICAgICBnY2NfYXNzZXJ0IChjZ3JhcGhfZ2V0X25vZGUgKGRl ZmF1bHRfZGVjbCkpOworICAgICAgY2dyYXBoX2FkZF90b19zYW1lX2NvbWRh dF9ncm91cCAoY2dyYXBoX2dldF9ub2RlIChkZWNsKSwKKwkJCQkgICAgICAg Y2dyYXBoX2dldF9ub2RlIChkZWZhdWx0X2RlY2wpKTsKKyAgICB9CisKKyAg cG9wX2NmdW4gKCk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IG9sZF9j dXJyZW50X2Z1bmN0aW9uX2RlY2w7CisKKyAgZ2NjX2Fzc2VydCAoaWZ1bmNf ZGVjbCAhPSBOVUxMKTsKKyAgLyogTWFyayBpZnVuY19kZWNsIGFzICJpZnVu YyIgd2l0aCByZXNvbHZlciBhcyByZXNvbHZlcl9uYW1lLiAgKi8KKyAgREVD TF9BVFRSSUJVVEVTIChpZnVuY19kZWNsKSAKKyAgICA9IG1ha2VfYXR0cmli dXRlICgiaWZ1bmMiLCByZXNvbHZlcl9uYW1lLCBERUNMX0FUVFJJQlVURVMg KGlmdW5jX2RlY2wpKTsKKworICAvKiBDcmVhdGUgdGhlIGFsaWFzIGhlcmUu ICAqLworICBjZ3JhcGhfY3JlYXRlX2Z1bmN0aW9uX2FsaWFzIChpZnVuY19k ZWNsLCBkZWNsKTsKKyAgcmV0dXJuIGRlY2w7Cit9CisKKy8qIE1ha2UgYW5k IGlmdW5jIGRlY2xhcmF0aW9uIGZvciB0aGUgbXVsdGktdmVyc2lvbmVkIGZ1 bmN0aW9uIERFQ0wuICBDYWxscyB0bworICAgREVDTCBmdW5jdGlvbiB3aWxs IGJlIHJlcGxhY2VkIHdpdGggY2FsbHMgdG8gdGhlIGlmdW5jLiAgIFJldHVy biB0aGUgZGVjbAorICAgb2YgdGhlIGlmdW5jIGNyZWF0ZWQuICAqLworCitz dGF0aWMgdHJlZQorbWFrZV9pZnVuY19mdW5jIChjb25zdCB0cmVlIGRlY2wp Cit7CisgIHRyZWUgaWZ1bmNfZGVjbDsKKyAgY2hhciAqaWZ1bmNfbmFtZSwg KnJlc29sdmVyX25hbWU7CisgIHRyZWUgZm5fdHlwZSwgaWZ1bmNfdHlwZTsK KyAgYm9vbCBtYWtlX3VuaXF1ZSA9IGZhbHNlOworCisgIGlmIChUUkVFX1BV QkxJQyAoZGVjbCkgPT0gMCkKKyAgICBtYWtlX3VuaXF1ZSA9IHRydWU7CisK KyAgaWZ1bmNfbmFtZSA9IG1ha2VfbmFtZSAoZGVjbCwgImlmdW5jIiwgbWFr ZV91bmlxdWUpOworICByZXNvbHZlcl9uYW1lID0gbWFrZV9uYW1lIChkZWNs LCAicmVzb2x2ZXIiLCBtYWtlX3VuaXF1ZSk7CisgIGdjY19hc3NlcnQgKHJl c29sdmVyX25hbWUpOworCisgIGZuX3R5cGUgPSBUUkVFX1RZUEUgKGRlY2wp OworICBpZnVuY190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoVFJFRV9U WVBFIChmbl90eXBlKSwKKwkJCQkgICAgVFlQRV9BUkdfVFlQRVMgKGZuX3R5 cGUpKTsKKyAgCisgIGlmdW5jX2RlY2wgPSBidWlsZF9mbl9kZWNsIChpZnVu Y19uYW1lLCBpZnVuY190eXBlKTsKKyAgVFJFRV9VU0VEIChpZnVuY19kZWNs KSA9IDE7CisgIERFQ0xfQ09OVEVYVCAoaWZ1bmNfZGVjbCkgPSBOVUxMX1RS RUU7CisgIERFQ0xfSU5JVElBTCAoaWZ1bmNfZGVjbCkgPSBlcnJvcl9tYXJr X25vZGU7CisgIERFQ0xfQVJUSUZJQ0lBTCAoaWZ1bmNfZGVjbCkgPSAxOwor ICAvKiBNYXJrIHRoaXMgaWZ1bmMgYXMgZXh0ZXJuYWwsIHRoZSByZXNvbHZl ciB3aWxsIGZsaXAgaXQgYWdhaW4gaWYKKyAgICAgaXQgZ2V0cyBnZW5lcmF0 ZWQuICAqLworICBERUNMX0VYVEVSTkFMIChpZnVuY19kZWNsKSA9IDE7Cisg IC8qIElGVU5DcyBoYXZlIHRvIGJlIGV4dGVybmFsbHkgdmlzaWJsZS4gICov CisgIFRSRUVfUFVCTElDIChpZnVuY19kZWNsKSA9IDE7CisKKyAgcmV0dXJu IGlmdW5jX2RlY2w7ICAKK30KKworLyogRm9yIG11bHRpLXZlcnNpb25lZCBm dW5jdGlvbiBkZWNsLCB3aGljaCBzaG91bGQgYWxzbyBiZSB0aGUgZGVmYXVs dCwKKyAgIHJldHVybiB0aGUgZGVjbCBvZiB0aGUgaWZ1bmMgcmVzb2x2ZXIs IGNyZWF0ZSBpdCBpZiBpdCBkb2VzIG5vdAorICAgZXhpc3QuICAqLworCit0 cmVlCitnZXRfaWZ1bmNfZm9yX3ZlcnNpb24gKGNvbnN0IHRyZWUgZGVjbCkK K3sKKyAgdmVyc2lvbl9mdW5jdGlvbiAqZGVjbF92OworICBpbnQgaXg7Cisg IHZvaWRfcCBlbGU7CisKKyAgLyogREVDTCBoYXMgdG8gYmUgdGhlIGRlZmF1 bHQgdmVyc2lvbiwgb3RoZXJ3aXNlIGl0IGlzIG1pc3NpbmcgYW5kCisgICAg IHRoYXQgaXMgbm90IGFsbG93ZWQuICAqLworICBpZiAoIWlzX2RlZmF1bHRf ZnVuY3Rpb24gKGRlY2wpKQorICAgIHsKKyAgICAgIGVycm9yX2F0IChERUNM X1NPVVJDRV9MT0NBVElPTiAoZGVjbCksICJEZWZhdWx0IHZlcnNpb24gbm90 IGZvdW5kIik7CisgICAgICByZXR1cm4gZGVjbDsKKyAgICB9CisKKyAgZGVj bF92ID0gZmluZF9mdW5jdGlvbl92ZXJzaW9uIChkZWNsKTsKKyAgZ2NjX2Fz c2VydCAoZGVjbF92ICE9IE5VTEwpOworICBpZiAoZGVjbF92LT5pZnVuY19k ZWNsID09IE5VTEwpCisgICAgeworICAgICAgdHJlZSBpZnVuY19kZWNsOwor ICAgICAgaWZ1bmNfZGVjbCA9IG1ha2VfaWZ1bmNfZnVuYyAoZGVjbCk7Cisg ICAgICBkZWNsX3YtPmlmdW5jX2RlY2wgPSBpZnVuY19kZWNsOworICAgIH0K KworICBpZiAoY2dyYXBoX2dldF9ub2RlIChkZWNsKSkKKyAgICBjZ3JhcGhf bWFya19mb3JjZV9vdXRwdXRfbm9kZSAoY2dyYXBoX2dldF9ub2RlIChkZWNs KSk7CisKKyAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlICh2b2lkX3AsIGRl Y2xfdi0+dmVyc2lvbnMsIGl4LCBlbGUpOyArK2l4KQorICAgIHsKKyAgICAg IHZlcnNpb25fZnVuY3Rpb24gKnYgPSAodmVyc2lvbl9mdW5jdGlvbiAqKSBl bGU7CisgICAgICAvKiBUaGlzIGNvdWxkIGJlIGEgZGVsZXRlZCB2ZXJzaW9u LiAgSGFwcGVucyB3aXRoCisJIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbnMuICov CisgICAgICBpZiAodi0+aXNfZGVsZXRlZCkKKwljb250aW51ZTsKKyAgICAg IGdjY19hc3NlcnQgKHYtPmRlY2wgIT0gTlVMTCk7CisgICAgICBpZiAoY2dy YXBoX2dldF9ub2RlICh2LT5kZWNsKSkKKwljZ3JhcGhfbWFya19mb3JjZV9v dXRwdXRfbm9kZSAoY2dyYXBoX2dldF9ub2RlICh2LT5kZWNsKSk7CisgICAg fQorCisgIHJldHVybiBkZWNsX3YtPmlmdW5jX2RlY2w7Cit9CisKKy8qIEdl bmVyYXRlIHRoZSBkaXNwYXRjaGluZyBjb2RlIHRvIGRpc3BhdGNoIG11bHRp LXZlcnNpb25lZCBmdW5jdGlvbgorICAgREVDTC4gIE1ha2UgYSBuZXcgZnVu Y3Rpb24gZGVjbCBmb3IgZGlzcGF0Y2hpbmcgYW5kIGNhbGwgdGhlIHRhcmdl dAorICAgaG9vayB0byBwcm9jZXNzIHRoZSAidGFyZ2V0IiBhdHRyaWJ1dGVz IGFuZCBwcm92aWRlIHRoZSBjb2RlIHRvCisgICBkaXNwYXRjaCB0aGUgcmln aHQgZnVuY3Rpb24gYXQgcnVuLXRpbWUuICAqLworCitzdGF0aWMgdHJlZQor bWFrZV9pZnVuY19yZXNvbHZlcl9mb3JfdmVyc2lvbiAoY29uc3QgdHJlZSBk ZWNsKQoreworICB2ZXJzaW9uX2Z1bmN0aW9uICpkZWNsX3Y7CisgIHRyZWUg aWZ1bmNfcmVzb2x2ZXJfZGVjbCwgaWZ1bmNfZGVjbDsKKyAgYmFzaWNfYmxv Y2sgZW1wdHlfYmI7CisgIGludCBpeDsKKyAgdm9pZF9wIGVsZTsKKyAgVkVD ICh0cmVlLCBoZWFwKSAqZm5fdmVyX3ZlYyA9IE5VTEw7CisgIHRyZWUgb2xk X2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKworICBnY2NfYXNzZXJ0IChpc19k ZWZhdWx0X2Z1bmN0aW9uIChkZWNsKSk7CisKKyAgZGVjbF92ID0gZmluZF9m dW5jdGlvbl92ZXJzaW9uIChkZWNsKTsKKyAgZ2NjX2Fzc2VydCAoZGVjbF92 ICE9IE5VTEwpOworCisgIGlmIChkZWNsX3YtPmlmdW5jX3Jlc29sdmVyX2Rl Y2wgIT0gTlVMTCkKKyAgICByZXR1cm4gZGVjbF92LT5pZnVuY19yZXNvbHZl cl9kZWNsOworCisgIGlmdW5jX2RlY2wgPSBkZWNsX3YtPmlmdW5jX2RlY2w7 CisKKyAgaWYgKGlmdW5jX2RlY2wgPT0gTlVMTCkKKyAgICBpZnVuY19kZWNs ID0gZGVjbF92LT5pZnVuY19kZWNsID0gbWFrZV9pZnVuY19mdW5jIChkZWNs KTsKKworICBpZnVuY19yZXNvbHZlcl9kZWNsID0gbWFrZV9pZnVuY19yZXNv bHZlcl9mdW5jIChkZWNsLCBpZnVuY19kZWNsLAorCQkJCQkJICAmZW1wdHlf YmIpOworCisgIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBjdXJyZW50 X2Z1bmN0aW9uX2RlY2w7CisgIHB1c2hfY2Z1biAoREVDTF9TVFJVQ1RfRlVO Q1RJT04gKGlmdW5jX3Jlc29sdmVyX2RlY2wpKTsKKyAgY3VycmVudF9mdW5j dGlvbl9kZWNsID0gaWZ1bmNfcmVzb2x2ZXJfZGVjbDsKKworICBmbl92ZXJf dmVjID0gVkVDX2FsbG9jICh0cmVlLCBoZWFwLCAyKTsKKyAgVkVDX3NhZmVf cHVzaCAodHJlZSwgaGVhcCwgZm5fdmVyX3ZlYywgZGVjbCk7CisKKyAgZm9y IChpeCA9IDA7IFZFQ19pdGVyYXRlICh2b2lkX3AsIGRlY2xfdi0+dmVyc2lv bnMsIGl4LCBlbGUpOyArK2l4KQorICAgIHsKKyAgICAgIHZlcnNpb25fZnVu Y3Rpb24gKnYgPSAodmVyc2lvbl9mdW5jdGlvbiAqKSBlbGU7CisgICAgICBn Y2NfYXNzZXJ0ICh2LT5kZWNsICE9IE5VTEwpOworICAgICAgLyogQ2hlY2sg Zm9yIHZpcnR1YWwgZnVuY3Rpb25zIGhlcmUgYWdhaW4sIGFzIGJ5IHRoaXMg dGltZSBpdCBzaG91bGQKKwkgaGF2ZSBiZWVuIGRldGVybWluZWQgaWYgdGhp cyBmdW5jdGlvbiBuZWVkcyBhIHZ0YWJsZSBpbmRleCBvcgorCSBub3QuICBU aGlzIGhhcHBlbnMgZm9yIG1ldGhvZHMgaW4gZGVyaXZlZCBjbGFzc2VzIHRo YXQgb3ZlcnJpZGUKKwkgdmlydHVhbCBtZXRob2RzIGluIGJhc2UgY2xhc3Nl cyBidXQgYXJlIG5vdCBleHBsaWNpdGx5IG1hcmtlZCBhcworCSB2aXJ0dWFs LiAgKi8KKyAgICAgIGlmIChERUNMX1ZJTkRFWCAodi0+ZGVjbCkpCisgICAg ICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAodi0+ZGVjbCks CisJCSAgIlZpcnR1YWwgZnVuY3Rpb24gdmVyc2lvbmluZyBub3Qgc3VwcG9y dGVkXG4iKTsKKyAgICAgIGlmICghdi0+aXNfZGVsZXRlZCkKKwlWRUNfc2Fm ZV9wdXNoICh0cmVlLCBoZWFwLCBmbl92ZXJfdmVjLCB2LT5kZWNsKTsKKyAg ICB9CisKKyAgZ2NjX2Fzc2VydCAodGFyZ2V0bS5kaXNwYXRjaF92ZXJzaW9u KTsKKyAgdGFyZ2V0bS5kaXNwYXRjaF92ZXJzaW9uIChpZnVuY19yZXNvbHZl cl9kZWNsLCBmbl92ZXJfdmVjLCAmZW1wdHlfYmIpOworICBkZWNsX3YtPmlm dW5jX3Jlc29sdmVyX2RlY2wgPSBpZnVuY19yZXNvbHZlcl9kZWNsOworCisg IHBvcF9jZnVuICgpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBvbGRf Y3VycmVudF9mdW5jdGlvbl9kZWNsOworICByZXR1cm4gaWZ1bmNfcmVzb2x2 ZXJfZGVjbDsKK30KKworLyogTWFpbiBlbnRyeSBwb2ludCB0byBwYXNzX2Rp c3BhdGNoX3ZlcnNpb25zLiBGb3IgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9u cywKKyAgIGdlbmVyYXRlIHRoZSBkaXNwYXRjaGluZyBjb2RlLiAgKi8KKwor c3RhdGljIHVuc2lnbmVkIGludAorZG9fZGlzcGF0Y2hfdmVyc2lvbnMgKHZv aWQpCit7CisgIC8qIEEgbmV3IHBhc3MgZm9yIGdlbmVyYXRpbmcgZGlzcGF0 Y2ggY29kZSBmb3IgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9ucy4KKyAgICAg T3RoZXIgZm9ybXMgb2YgZGlzcGF0Y2ggY2FuIGJlIGFkZGVkIHdoZW4gaWZ1 bmMgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlCisgICAgIGxpa2UganVzdCBj YWxsaW5nIHRoZSBmdW5jdGlvbiBkaXJlY3RseSBhZnRlciBjaGVja2luZyBm b3IgdGFyZ2V0IHR5cGUuCisgICAgIEN1cnJlbnRseSwgZGlzcGF0Y2hpbmcg aXMgZG9uZSB0aHJvdWdoIElGVU5DLiAgVGhpcyBwYXNzIHdpbGwgYmVjb21l CisgICAgIG1vcmUgbWVhbmluZ2Z1bCB3aGVuIG90aGVyIGRpc3BhdGNoIG1l Y2hhbmlzbXMgYXJlIGFkZGVkLiAgKi8KKworICAvKiBDbG9uaW5nIGEgZnVu Y3Rpb24gdG8gcHJvZHVjZSBtb3JlIHZlcnNpb25zIHdpbGwgaGFwcGVuIGhl cmUgd2hlbiB0aGUKKyAgICAgdXNlciByZXF1ZXN0cyB0aGF0IHZpYSB0aGUg dGFyZ2V0IGF0dHJpYnV0ZS4gRm9yIGV4YW1wbGUsCisgICAgIGludCBmb28g KCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgoImFyY2g9Y29yZTIiKSwgKCJh cmNoPWNvcmVpNyIpKSkpOworICAgICBtZWFucyB0aGF0IHRoZSB1c2VyIHdh bnRzIHRoZSBzYW1lIGJvZHkgb2YgZm9vIHRvIGJlIHZlcnNpb25lZCBmb3Ig Y29yZTIKKyAgICAgYW5kIGNvcmVpNy4gIEluIHRoYXQgY2FzZSwgdGhpcyBm dW5jdGlvbiB3aWxsIGJlIGNsb25lZCBkdXJpbmcgdGhpcworICAgICBwYXNz LiAgKi8KKyAgCisgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoY3Vy cmVudF9mdW5jdGlvbl9kZWNsKQorICAgICAgJiYgaXNfZGVmYXVsdF9mdW5j dGlvbiAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSkKKyAgICB7CisgICAgICB0 cmVlIGRlY2wgPSBtYWtlX2lmdW5jX3Jlc29sdmVyX2Zvcl92ZXJzaW9uIChj dXJyZW50X2Z1bmN0aW9uX2RlY2wpOworICAgICAgaWYgKGR1bXBfZmlsZSAm JiBkZWNsKQorCWR1bXBfZnVuY3Rpb25fdG9fZmlsZSAoZGVjbCwgZHVtcF9m aWxlLCBUREZfQkxPQ0tTKTsKKyAgICB9CisgIHJldHVybiAwOworfQorCitz dGF0aWMgIGJvb2wKK2dhdGVfZGlzcGF0Y2hfdmVyc2lvbnMgKHZvaWQpCit7 CisgIHJldHVybiB0cnVlOworfQorCisvKiBBIHBhc3MgdG8gZ2VuZXJhdGUg dGhlIGRpc3BhdGNoIGNvZGUgdG8gZXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUg dmVyc2lvbgorICAgb2YgYSBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb24gYXQg cnVuLXRpbWUuICAqLworCitzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nf ZGlzcGF0Y2hfdmVyc2lvbnMgPQoreworIHsKKyAgR0lNUExFX1BBU1MsCisg ICJkaXNwYXRjaF9tdWx0aXZlcnNpb25fZnVuY3Rpb25zIiwgICAgLyogbmFt ZSAqLworICBnYXRlX2Rpc3BhdGNoX3ZlcnNpb25zLAkJLyogZ2F0ZSAqLwor ICBkb19kaXNwYXRjaF92ZXJzaW9ucywJCQkvKiBleGVjdXRlICovCisgIE5V TEwsCQkJCQkvKiBzdWIgKi8KKyAgTlVMTCwJCQkJCS8qIG5leHQgKi8KKyAg MCwJCQkJCS8qIHN0YXRpY19wYXNzX251bWJlciAqLworICBUVl9NVUxUSVZF UlNJT05fRElTUEFUQ0gsCQkvKiB0dl9pZCAqLworICBQUk9QX2NmZywJCQkJ LyogcHJvcGVydGllc19yZXF1aXJlZCAqLworICBQUk9QX2NmZywJCQkJLyog cHJvcGVydGllc19wcm92aWRlZCAqLworICAwLAkJCQkJLyogcHJvcGVydGll c19kZXN0cm95ZWQgKi8KKyAgMCwJCQkJCS8qIHRvZG9fZmxhZ3Nfc3RhcnQg Ki8KKyAgMAkJCQkJLyogdG9kb19mbGFnc19maW5pc2ggKi8KKyB9Cit9OwpJ bmRleDogZ2NjL2NncmFwaHVuaXQuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvY2dyYXBodW5pdC5jCShyZXZpc2lvbiAxODY4ODMpCisrKyBn Y2MvY2dyYXBodW5pdC5jCSh3b3JraW5nIGNvcHkpCkBAIC00MTEsNiArNDEx LDEzIEBAIGNncmFwaF9maW5hbGl6ZV9mdW5jdGlvbiAodHJlZSBkZWNsLCBi b29sIG5lc3RlZCkKICAgICAgICYmICFERUNMX0RJU1JFR0FSRF9JTkxJTkVf TElNSVRTIChkZWNsKSkKICAgICBub2RlLT5zeW1ib2wuZm9yY2Vfb3V0cHV0 ID0gMTsKIAorICAvKiBXaXRoIGZ1bmN0aW9uIHZlcnNpb25zLCBrZWVwIGlu bGluZSBmdW5jdGlvbnMgYW5kIGRvIG5vdCB3b3JyeSBhYm91dAorICAgICBp bmxpbmUgbGltaXRzLiAgKi8KKyAgaWYgKERFQ0xfRlVOQ1RJT05fVkVSU0lP TkVEIChkZWNsKQorICAgICAgJiYgREVDTF9ERUNMQVJFRF9JTkxJTkVfUCAo ZGVjbCkKKyAgICAgICYmICFERUNMX0VYVEVSTkFMIChkZWNsKSkKKyAgICBu b2RlLT5zeW1ib2wuZm9yY2Vfb3V0cHV0ID0gMTsKKwogICAvKiBXaGVuIG5v dCBvcHRpbWl6aW5nLCBhbHNvIG91dHB1dCB0aGUgc3RhdGljIGZ1bmN0aW9u cy4gKHNlZQogICAgICBQUjI0NTYxKSwgYnV0IGRvbid0IGRvIHNvIGZvciBh bHdheXNfaW5saW5lIGZ1bmN0aW9ucywgZnVuY3Rpb25zCiAgICAgIGRlY2xh cmVkIGlubGluZSBhbmQgbmVzdGVkIGZ1bmN0aW9ucy4gIFRoZXNlIHdlcmUg b3B0aW1pemVkIG91dApJbmRleDogZ2NjL211bHRpdmVyc2lvbi5oCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9tdWx0aXZlcnNpb24uaAkocmV2 aXNpb24gMCkKKysrIGdjYy9tdWx0aXZlcnNpb24uaAkocmV2aXNpb24gMCkK QEAgLTAsMCArMSw1NSBAQAorLyogRnVuY3Rpb24gTXVsdGl2ZXJzaW9uaW5n LgorICAgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgU3JpcmFtYW4gVGFsbGFt ICh0bXNyaXJhbUBnb29nbGUuY29tKQorCitUaGlzIGZpbGUgaXMgcGFydCBv ZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNp b24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB QklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3Jl IGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRo IEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAqLworCisvKiBUaGlzIGlz IHRoZSBoZWFkZXIgZmlsZSB3aGljaCBwcm92aWRlcyB0aGUgZnVuY3Rpb25z IHRvIGtlZXAgdHJhY2sKKyAgIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBtdWx0 aS12ZXJzaW9uZWQgYW5kIHRvIGdlbmVyYXRlIHRoZSBkaXNwYXRjaAorICAg Y29kZSB0byBjYWxsIHRoZSByaWdodCB2ZXJzaW9uIGF0IHJ1bi10aW1lLiAg Ki8KKworI2lmbmRlZiBHQ0NfTVVMVElWRVJTSU9OX0gKKyNkZWZpbmUgR0ND X01VTFRJVkVSSU9OX0gKKworI2luY2x1ZGUgInRyZWUuaCIKKworLyogTWFy ayBERUNMMSBhbmQgREVDTDIgYXMgZnVuY3Rpb24gdmVyc2lvbnMuICAqLwor aW50IGdyb3VwX2Z1bmN0aW9uX3ZlcnNpb25zIChjb25zdCB0cmVlIGRlY2wx LCBjb25zdCB0cmVlIGRlY2wyKTsKKworLyogTWFyayBERUNMIGFzIGRlbGV0 ZWQgYW5kIG5vIGxvbmdlciBhIHZlcnNpb24uICAqLwordm9pZCBtYXJrX2Rl bGV0ZV9kZWNsX3ZlcnNpb24gKGNvbnN0IHRyZWUgZGVjbCk7CisKKy8qIFJl dHVybnMgdHJ1ZSBpZiBERUNMIGlzIHRoZSBkZWZhdWx0IHZlcnNpb24gdG8g YmUgZXhlY3V0ZWQgaWYgYWxsCisgICBvdGhlciB2ZXJzaW9ucyBhcmUgaW5h cHByb3ByaWF0ZSBhdCBydW4tdGltZS4gICovCitib29sIGlzX2RlZmF1bHRf ZnVuY3Rpb24gKGNvbnN0IHRyZWUgZGVjbCk7CisKKy8qIEdldHMgdGhlIElG VU5DIGRpc3BhdGNoZXIgZm9yIHRoaXMgbXVsdGktdmVyc2lvbmVkIGZ1bmN0 aW9uIERFQ0wuIERFQ0wKKyAgIG11c3QgYmUgdGhlIGRlZmF1bHQgZnVuY3Rp b24gaW4gdGhlIG11bHRpLXZlcnNpb25lZCBncm91cC4gICovCit0cmVlIGdl dF9pZnVuY19mb3JfdmVyc2lvbiAoY29uc3QgdHJlZSBkZWNsKTsKKworLyog UmV0dXJucyB0cnVlIHdoZW4gb25seSBvbmUgb2YgREVDTDEgYW5kIERFQ0wy IGlzIG1hcmtlZCB3aXRoICJ0YXJnZXQiCisgICBvciBpZiB0aGUgInRhcmdl dCIgYXR0cmlidXRlIHN0cmluZ3Mgb2YgIERFQ0wxIGFuZCBERUNMMiBkb250 IG1hdGNoLiAgKi8KK2Jvb2wgaGFzX2RpZmZlcmVudF92ZXJzaW9uX2F0dHJp YnV0ZXMgKGNvbnN0IHRyZWUgZGVjbDEsIGNvbnN0IHRyZWUgZGVjbDIpOwor CisvKiBGdW5jdGlvbiBERUNMIGlzIG1hcmtlZCB0byBiZSBhIG11bHRpLXZl cnNpb25lZCBmdW5jdGlvbi4gIElmIERFQ0wgaXMKKyAgIG5vdCB0aGUgZGVm YXVsdCB2ZXJzaW9uLCB0aGUgYXNzZW1ibGVyIG5hbWUgb2YgREVDTCBpcyBj aGFuZ2VkIHRvIGluY2x1ZGUKKyAgIHRoZSBhdHRyaWJ1dGUgc3RyaW5nIHRv IGtlZXAgdGhlIG5hbWUgdW5hbWJpZ3VvdXMuICAqLwordm9pZCBtYXJrX2Z1 bmN0aW9uX2FzX3ZlcnNpb24gKGNvbnN0IHRyZWUgZGVjbCk7CisKKy8qIENo ZWNrIGlmIGRlY2wgaXMgRlVOQ1RJT05fREVDTCB3aXRoIHRhcmdldCBhdHRy aWJ1dGUgc2V0LiAgKi8KK2Jvb2wgaXNfdGFyZ2V0X2F0dHJpYnV0ZV9zZXQg KGNvbnN0IHRyZWUgZGVjbCk7CisjZW5kaWYKSW5kZXg6IGdjYy90ZXN0c3Vp dGUvZysrLmRnL212MS5DCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdj Yy90ZXN0c3VpdGUvZysrLmRnL212MS5DCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvbXYxLkMJKHJldmlzaW9uIDApCkBAIC0wLDAg KzEsMzkgQEAKKy8qIFNpbXBsZSB0ZXN0IGNhc2UgdG8gY2hlY2sgaWYgTXVs dGl2ZXJzaW9uaW5nIHdvcmtzLiAgKi8KKy8qIHsgZGctZG8gcnVuIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8yIC1mUElDIiB9ICovCisKKyNpbmNsdWRl IDxhc3NlcnQuaD4KKworaW50IGZvbyAoKTsKK2ludCBmb28gKCkgX19hdHRy aWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1jb3JlaTcsc3NlNC4yLHBvcGNudCIp KSk7CisvKiBUaGUgdGFyZ2V0IG9wZXJhbmRzIGluIHRoaXMgZGVjbGFyYXRp b24gYW5kIHRoZSBkZWZpbml0aW9uIGFyZSByZS1vcmRlcmVkLgorICAgVGhp cyBzaG91bGQgc3RpbGwgd29yay4gICovCitpbnQgZm9vICgpIF9fYXR0cmli dXRlX18gKCh0YXJnZXQoInNzc2UzLGF2eDIiKSkpOworCitpbnQgKCpwKSgp ID0gJmZvbzsKK2ludCBtYWluICgpCit7CisgIHJldHVybiBmb28gKCkgKyAo KnApKCk7Cit9CisKK2ludCBmb28gKCkKK3sKKyAgcmV0dXJuIDA7Cit9CisK K2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmVpNyxzc2U0 LjIscG9wY250IikpKQorZm9vICgpCit7CisgIGFzc2VydCAoX19idWlsdGlu X2NwdV9pcyAoImNvcmVpNyIpCisJICAmJiBfX2J1aWx0aW5fY3B1X3N1cHBv cnRzICgic3NlNC4yIikKKwkgICYmIF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMg KCJwb3BjbnQiKSk7CisgIHJldHVybiAwOworfQorCitpbnQgX19hdHRyaWJ1 dGVfXyAoKHRhcmdldCgiYXZ4Mixzc3NlMyIpKSkKK2ZvbyAoKQoreworICBh c3NlcnQgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJhdngyIikKKwkgICYm IF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJzc3NlMyIpKTsKKyAgcmV0dXJu IDA7Cit9CkluZGV4OiBnY2MvY3AvY2xhc3MuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvY3AvY2xhc3MuYwkocmV2aXNpb24gMTg2ODgzKQor KysgZ2NjL2NwL2NsYXNzLmMJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4 LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKICNpbmNsdWRlICJ0cmVlLWR1bXAuaCIKICNpbmNsdWRl ICJzcGxheS10cmVlLmgiCiAjaW5jbHVkZSAicG9pbnRlci1zZXQuaCIKKyNp bmNsdWRlICJtdWx0aXZlcnNpb24uaCIKIAogLyogVGhlIG51bWJlciBvZiBu ZXN0ZWQgY2xhc3NlcyBiZWluZyBwcm9jZXNzZWQuICBJZiB3ZSBhcmUgbm90 IGluIHRoZQogICAgc2NvcGUgb2YgYW55IGNsYXNzLCB0aGlzIGlzIHplcm8u ICAqLwpAQCAtMTA5Miw3ICsxMDkzLDIxIEBAIGFkZF9tZXRob2QgKHRyZWUg dHlwZSwgdHJlZSBtZXRob2QsIHRyZWUgdXNpbmdfZGVjCiAJICAgICAgfHwg c2FtZV90eXBlX3AgKFRSRUVfVFlQRSAoZm5fdHlwZSksCiAJCQkgICAgICBU UkVFX1RZUEUgKG1ldGhvZF90eXBlKSkpKQogCXsKLQkgIGlmICh1c2luZ19k ZWNsKQorCSAgLyogRm9yIGZ1bmN0aW9uIHZlcnNpb25zLCB0aGVpciBwYXJt cyBhbmQgdHlwZXMgbWF0Y2gKKwkgICAgIGJ1dCB0aGV5IGFyZSBub3QgZHVw bGljYXRlcy4gIFJlY29yZCBmdW5jdGlvbiB2ZXJzaW9ucworCSAgICAgYXMg YW5kIHdoZW4gdGhleSBhcmUgZm91bmQuICAqLworCSAgaWYgKFRSRUVfQ09E RSAoZm4pID09IEZVTkNUSU9OX0RFQ0wKKwkgICAgICAmJiBUUkVFX0NPREUg KG1ldGhvZCkgPT0gRlVOQ1RJT05fREVDTAorCSAgICAgICYmIChpc190YXJn ZXRfYXR0cmlidXRlX3NldCAoZm4pCisJCSAgfHwgaXNfdGFyZ2V0X2F0dHJp YnV0ZV9zZXQgKG1ldGhvZCkpCisJICAgICAgJiYgaGFzX2RpZmZlcmVudF92 ZXJzaW9uX2F0dHJpYnV0ZXMgKGZuLCBtZXRob2QpKQorIAkgICAgeworCSAg ICAgIG1hcmtfZnVuY3Rpb25fYXNfdmVyc2lvbiAoZm4pOworCSAgICAgIG1h cmtfZnVuY3Rpb25fYXNfdmVyc2lvbiAobWV0aG9kKTsKKwkgICAgICBncm91 cF9mdW5jdGlvbl92ZXJzaW9ucyAoZm4sIG1ldGhvZCk7CisJICAgICAgY29u dGludWU7CisJICAgIH0KKwkgIGVsc2UgaWYgKHVzaW5nX2RlY2wpCiAJICAg IHsKIAkgICAgICBpZiAoREVDTF9DT05URVhUIChmbikgPT0gdHlwZSkKIAkJ LyogRGVmZXIgdG8gdGhlIGxvY2FsIGZ1bmN0aW9uLiAgKi8KQEAgLTExNTAs NiArMTE2NSw3IEBAIGFkZF9tZXRob2QgKHRyZWUgdHlwZSwgdHJlZSBtZXRo b2QsIHRyZWUgdXNpbmdfZGVjCiAgIGVsc2UKICAgICAvKiBSZXBsYWNlIHRo ZSBjdXJyZW50IHNsb3QuICAqLwogICAgIFZFQ19yZXBsYWNlICh0cmVlLCBt ZXRob2RfdmVjLCBzbG90LCBvdmVybG9hZCk7CisKICAgcmV0dXJuIHRydWU7 CiB9CiAKQEAgLTY5MzAsOCArNjk0NiwxMSBAQCByZXNvbHZlX2FkZHJlc3Nf b2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbiAodHJlZSB0YXJnZQogCSAgaWYgKERF Q0xfQU5USUNJUEFURUQgKGZuKSkKIAkgICAgY29udGludWU7CiAKLQkgIC8q IFNlZSBpZiB0aGVyZSdzIGEgbWF0Y2guICAqLwotCSAgaWYgKHNhbWVfdHlw ZV9wICh0YXJnZXRfZm5fdHlwZSwgc3RhdGljX2ZuX3R5cGUgKGZuKSkpCisJ ICAvKiBTZWUgaWYgdGhlcmUncyBhIG1hdGNoLiAgIEZvciBmdW5jdGlvbnMg dGhhdCBhcmUgbXVsdGktdmVyc2lvbmVkCisJICAgICBtYXRjaCBpdCB0byB0 aGUgZGVmYXVsdCBmdW5jdGlvbi4gICovCisJICBpZiAoc2FtZV90eXBlX3Ag KHRhcmdldF9mbl90eXBlLCBzdGF0aWNfZm5fdHlwZSAoZm4pKQorCSAgICAg ICYmICghREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGZuKQorCQkgIHx8IGlz X2RlZmF1bHRfZnVuY3Rpb24gKGZuKSkpCiAJICAgIG1hdGNoZXMgPSB0cmVl X2NvbnMgKGZuLCBOVUxMX1RSRUUsIG1hdGNoZXMpOwogCX0KICAgICB9CkBA IC03MDkzLDYgKzcxMTIsMjIgQEAgcmVzb2x2ZV9hZGRyZXNzX29mX292ZXJs b2FkZWRfZnVuY3Rpb24gKHRyZWUgdGFyZ2UKICAgICAgIHBlcmZvcm1fb3Jf ZGVmZXJfYWNjZXNzX2NoZWNrIChhY2Nlc3NfcGF0aCwgZm4sIGZuKTsKICAg ICB9CiAKKyAgLyogSWYgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBp cyBtdWx0aS12ZXJzaW9uZWQgaXMgcmVxdWVzdGVkLCB0aGUKKyAgICAgcG9p bnRlciB0byB0aGUgZGlzcGF0Y2hlciBmdW5jdGlvbiBpcyByZXR1cm5lZCBp bnN0ZWFkLiAgVGhpcyB3b3JrcworICAgICB3ZWxsIGJlY2F1c2UgaW5kaXJl Y3RseSBjYWxsaW5nIHRoZSBmdW5jdGlvbiB3aWxsIGRpc3BhdGNoIHRoZSBy aWdodAorICAgICBmdW5jdGlvbiB2ZXJzaW9uIGF0IHJ1bi10aW1lLiBBbHNv LCB0aGUgZnVuY3Rpb24gYWRkcmVzcyBpcyBrZXB0CisgICAgIHVuaXF1ZS4g ICovCisgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4pCisgICAg ICAmJiBpc19kZWZhdWx0X2Z1bmN0aW9uIChmbikpCisgICAgeworICAgICAg dHJlZSBpZnVuY19kZWNsOworICAgICAgaWZ1bmNfZGVjbCA9IGdldF9pZnVu Y19mb3JfdmVyc2lvbiAoZm4pOworICAgICAgcmV0cm9maXRfbGFuZ19kZWNs IChpZnVuY19kZWNsKTsKKyAgICAgIGdjY19hc3NlcnQgKGlmdW5jX2RlY2wg IT0gTlVMTCk7CisgICAgICBtYXJrX3VzZWQgKGZuKTsKKyAgICAgIHJldHVy biBidWlsZF9mb2xkX2FkZHJfZXhwciAoaWZ1bmNfZGVjbCk7CisgICAgfQor CiAgIGlmIChUWVBFX1BUUkZOX1AgKHRhcmdldF90eXBlKSB8fCBUWVBFX1BU Uk1FTUZVTkNfUCAodGFyZ2V0X3R5cGUpKQogICAgIHJldHVybiBjcF9idWls ZF9hZGRyX2V4cHIgKGZuLCBmbGFncyk7CiAgIGVsc2UKSW5kZXg6IGdjYy9j cC9kZWNsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NwL2Rl Y2wuYwkocmV2aXNpb24gMTg2ODgzKQorKysgZ2NjL2NwL2RlY2wuYwkod29y a2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBhbG9uZyB3aXRoIEdDQzsg c2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUg InBvaW50ZXItc2V0LmgiCiAjaW5jbHVkZSAic3BsYXktdHJlZS5oIgogI2lu Y2x1ZGUgInBsdWdpbi5oIgorI2luY2x1ZGUgIm11bHRpdmVyc2lvbi5oIgog CiAvKiBQb3NzaWJsZSBjYXNlcyBvZiBiYWQgc3BlY2lmaWVycyB0eXBlIHVz ZWQgYnkgYmFkX3NwZWNpZmllcnMuICovCiBlbnVtIGJhZF9zcGVjX3BsYWNl IHsKQEAgLTk3Myw2ICs5NzQsMjEgQEAgZGVjbHNfbWF0Y2ggKHRyZWUgbmV3 ZGVjbCwgdHJlZSBvbGRkZWNsKQogICAgICAgaWYgKHQxICE9IHQyKQogCXJl dHVybiAwOwogCisgICAgICAvKiBUaGUgZGVjbHMgZG9udCBtYXRjaCBpZiB0 aGV5IGNvcnJlc3BvbmQgdG8gdHdvIGRpZmZlcmVudCB2ZXJzaW9ucworCSBv ZiB0aGUgc2FtZSBmdW5jdGlvbi4gICovCisgICAgICBpZiAoY29tcHBhcm1z IChwMSwgcDIpCisJICAmJiBzYW1lX3R5cGVfcCAoVFJFRV9UWVBFIChmMSks IFRSRUVfVFlQRSAoZjIpKSAKKwkgICYmIGhhc19kaWZmZXJlbnRfdmVyc2lv bl9hdHRyaWJ1dGVzIChuZXdkZWNsLCBvbGRkZWNsKSkKKwl7CisJICAvKiBP bmUgb2YgdGhlIGRlY2xzIGNvdWxkIGJlIHRoZSBkZWZhdWx0IHdpdGhvdXQg dGhlICJ0YXJnZXQiCisJICAgICBhdHRyaWJ1dGUuIFNldCBpdCB0byBiZSBh IHZlcnNpb25lZCBmdW5jdGlvbiBoZXJlLiAgKi8KKwkgIG1hcmtfZnVuY3Rp b25fYXNfdmVyc2lvbiAobmV3ZGVjbCk7CisJICBtYXJrX2Z1bmN0aW9uX2Fz X3ZlcnNpb24gKG9sZGRlY2wpOworCSAgLyogQWNjdW11bGF0ZSBhbGwgdGhl IHZlcnNpb25zIG9mIGEgZnVuY3Rpb24uICAqLworCSAgZ3JvdXBfZnVuY3Rp b25fdmVyc2lvbnMgKG9sZGRlY2wsIG5ld2RlY2wpOworCSAgcmV0dXJuIDA7 CisJfQorCiAgICAgICBpZiAoQ1BfREVDTF9DT05URVhUIChuZXdkZWNsKSAh PSBDUF9ERUNMX0NPTlRFWFQgKG9sZGRlY2wpCiAJICAmJiAhIChERUNMX0VY VEVSTl9DX1AgKG5ld2RlY2wpCiAJCSYmIERFQ0xfRVhURVJOX0NfUCAob2xk ZGVjbCkpKQpAQCAtMTQ5MCw3ICsxNTA2LDExIEBAIGR1cGxpY2F0ZV9kZWNs cyAodHJlZSBuZXdkZWNsLCB0cmVlIG9sZGRlY2wsIGJvb2wKIAkgICAgICBl cnJvciAoInByZXZpb3VzIGRlY2xhcmF0aW9uICVxKyNEIGhlcmUiLCBvbGRk ZWNsKTsKIAkgICAgICByZXR1cm4gTlVMTF9UUkVFOwogCSAgICB9Ci0JICBl bHNlIGlmIChjb21wcGFybXMgKFRZUEVfQVJHX1RZUEVTIChUUkVFX1RZUEUg KG5ld2RlY2wpKSwKKwkgIC8qIEZvciBmdW5jdGlvbiB2ZXJzaW9ucywgcGFy YW1zIGFuZCB0eXBlcyBtYXRjaCwgYnV0IHRoZXkKKwkgICAgIGFyZSBub3Qg YW1iaWd1b3VzLiAgKi8KKwkgIGVsc2UgaWYgKCghREVDTF9GVU5DVElPTl9W RVJTSU9ORUQgKG5ld2RlY2wpCisJCSAgICAmJiAhREVDTF9GVU5DVElPTl9W RVJTSU9ORUQgKG9sZGRlY2wpKQorCQkgICAmJiBjb21wcGFybXMgKFRZUEVf QVJHX1RZUEVTIChUUkVFX1RZUEUgKG5ld2RlY2wpKSwKIAkJCSAgICAgIFRZ UEVfQVJHX1RZUEVTIChUUkVFX1RZUEUgKG9sZGRlY2wpKSkpCiAJICAgIHsK IAkgICAgICBlcnJvciAoIm5ldyBkZWNsYXJhdGlvbiAlcSNEIiwgbmV3ZGVj bCk7CkBAIC0yMjYyLDYgKzIyODIsMTYgQEAgZHVwbGljYXRlX2RlY2xzICh0 cmVlIG5ld2RlY2wsIHRyZWUgb2xkZGVjbCwgYm9vbAogICBlbHNlIGlmIChE RUNMX1BSRVNFUlZFX1AgKG5ld2RlY2wpKQogICAgIERFQ0xfUFJFU0VSVkVf UCAob2xkZGVjbCkgPSAxOwogCisgIC8qIElmIHRoZSBvbGRkZWNsIGlzIGEg dmVyc2lvbiwgc28gaXMgdGhlIG5ld2RlY2wuICAqLworICBpZiAoVFJFRV9D T0RFIChuZXdkZWNsKSA9PSBGVU5DVElPTl9ERUNMCisgICAgICAmJiBERUNM X0ZVTkNUSU9OX1ZFUlNJT05FRCAob2xkZGVjbCkpCisgICAgeworICAgICAg REVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKG5ld2RlY2wpID0gMTsKKyAgICAg IC8qIFJlY29yZCB0aGF0IG5ld2RlY2wgaXMgbm90IGEgdmFsaWQgdmVyc2lv biBhbmQgaGFzCisJIGJlZW4gZGVsZXRlZC4gICovCisgICAgICBtYXJrX2Rl bGV0ZV9kZWNsX3ZlcnNpb24gKG5ld2RlY2wpOworICAgIH0KKwogICBpZiAo VFJFRV9DT0RFIChuZXdkZWNsKSA9PSBGVU5DVElPTl9ERUNMKQogICAgIHsK ICAgICAgIGludCBmdW5jdGlvbl9zaXplOwpAQCAtMzgxMCw2ICszODQwLDcg QEAgY3BfbWFrZV9mbmFtZV9kZWNsIChsb2NhdGlvbl90IGxvYywgdHJlZSBp ZCwgaW50IHQKIAkJCSAgICA/IE5VTEwgOiBmbmFtZV9hc19zdHJpbmcgKHR5 cGVfZGVwKSk7CiAgIHRyZWUgdHlwZTsKICAgdHJlZSBpbml0ID0gY3BfZm5h bWVfaW5pdCAobmFtZSwgJnR5cGUpOworCiAgIHRyZWUgZGVjbCA9IGJ1aWxk X2RlY2wgKGxvYywgVkFSX0RFQ0wsIGlkLCB0eXBlKTsKIAogICBpZiAobmFt ZSkKQEAgLTE0MDM1LDcgKzE0MDY2LDExIEBAIGN4eF9jb21kYXRfZ3JvdXAg KHRyZWUgZGVjbCkKIAkgIGVsc2UKIAkgICAgYnJlYWs7CiAJfQotICAgICAg bmFtZSA9IERFQ0xfQVNTRU1CTEVSX05BTUUgKGRlY2wpOworICAgICAgaWYg KFRSRUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVDTAorCSAgJiYgREVD TF9GVU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpKQorCW5hbWUgPSBERUNMX05B TUUgKGRlY2wpOworICAgICAgZWxzZQorICAgICAgICBuYW1lID0gREVDTF9B U1NFTUJMRVJfTkFNRSAoZGVjbCk7CiAgICAgfQogCiAgIHJldHVybiBuYW1l OwpJbmRleDogZ2NjL2NwL3NlbWFudGljcy5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy9jcC9zZW1hbnRpY3MuYwkocmV2aXNpb24gMTg2ODgz KQorKysgZ2NjL2NwL3NlbWFudGljcy5jCSh3b3JraW5nIGNvcHkpCkBAIC0z NzgzLDggKzM3ODMsMTEgQEAgZXhwYW5kX29yX2RlZmVyX2ZuXzEgKHRyZWUg Zm4pCiAgICAgICAvKiBJZiB0aGUgdXNlciB3YW50cyB1cyB0byBrZWVwIGFs bCBpbmxpbmUgZnVuY3Rpb25zLCB0aGVuIG1hcmsKIAkgdGhpcyBmdW5jdGlv biBhcyBuZWVkZWQgc28gdGhhdCBmaW5pc2hfZmlsZSB3aWxsIG1ha2Ugc3Vy ZSB0bwogCSBvdXRwdXQgaXQgbGF0ZXIuICBTaW1pbGFybHksIGFsbCBkbGxl eHBvcnQnZCBmdW5jdGlvbnMgbXVzdAotCSBiZSBlbWl0dGVkOyB0aGVyZSBt YXkgYmUgY2FsbGVycyBpbiBvdGhlciBETExzLiAgKi8KLSAgICAgIGlmICgo ZmxhZ19rZWVwX2lubGluZV9mdW5jdGlvbnMKKwkgYmUgZW1pdHRlZDsgdGhl cmUgbWF5IGJlIGNhbGxlcnMgaW4gb3RoZXIgRExMcy4KKwkgQWxzbywgbWFy ayB0aGlzIGZ1bmN0aW9uIGFzIG5lZWRlZCBpZiBpdCBpcyBtYXJrZWQgaW5s aW5lIGJ1dAorCSBpcyBhIG11bHRpLXZlcnNpb25lZCBmdW5jdGlvbi4gICov CisgICAgICBpZiAoKChmbGFnX2tlZXBfaW5saW5lX2Z1bmN0aW9ucworCSAg ICB8fCBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4pKQogCSAgICYmIERF Q0xfREVDTEFSRURfSU5MSU5FX1AgKGZuKQogCSAgICYmICFERUNMX1JFQUxM WV9FWFRFUk4gKGZuKSkKIAkgIHx8IChmbGFnX2tlZXBfaW5saW5lX2RsbGV4 cG9ydApJbmRleDogZ2NjL2NwL2RlY2wyLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL2NwL2RlY2wyLmMJKHJldmlzaW9uIDE4Njg4MykKKysr IGdjYy9jcC9kZWNsMi5jCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3 IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCiAjaW5jbHVkZSAic3BsYXktdHJlZS5oIgogI2luY2x1ZGUg Imxhbmdob29rcy5oIgogI2luY2x1ZGUgImMtZmFtaWx5L2MtYWRhLXNwZWMu aCIKKyNpbmNsdWRlICJtdWx0aXZlcnNpb24uaCIKIAogZXh0ZXJuIGNwcF9y ZWFkZXIgKnBhcnNlX2luOwogCkBAIC02NzcsOSArNjc4LDEzIEBAIGNoZWNr X2NsYXNzZm4gKHRyZWUgY3R5cGUsIHRyZWUgZnVuY3Rpb24sIHRyZWUgdGVt CiAJICBpZiAoaXNfdGVtcGxhdGUgIT0gKFRSRUVfQ09ERSAoZm5kZWNsKSA9 PSBURU1QTEFURV9ERUNMKSkKIAkgICAgY29udGludWU7CiAKKwkgIC8qIFdo aWxlIGZpbmRpbmcgYSBtYXRjaCwgc2FtZSB0eXBlcyBhbmQgcGFyYW1zIGFy ZSBub3QgZW5vdWdoCisJICAgICBpZiB0aGUgZnVuY3Rpb24gaXMgdmVyc2lv bmVkLiAgQWxzbyBjaGVjayB2ZXJzaW9uICgidGFyZ2V0IikKKwkgICAgIGF0 dHJpYnV0ZXMuICAqLwogCSAgaWYgKHNhbWVfdHlwZV9wIChUUkVFX1RZUEUg KFRSRUVfVFlQRSAoZnVuY3Rpb24pKSwKIAkJCSAgIFRSRUVfVFlQRSAoVFJF RV9UWVBFIChmbmRlY2wpKSkKIAkgICAgICAmJiBjb21wcGFybXMgKHAxLCBw MikKKwkgICAgICAmJiAhaGFzX2RpZmZlcmVudF92ZXJzaW9uX2F0dHJpYnV0 ZXMgKGZ1bmN0aW9uLCBmbmRlY2wpCiAJICAgICAgJiYgKCFpc190ZW1wbGF0 ZQogCQkgIHx8IGNvbXBfdGVtcGxhdGVfcGFybXMgKHRlbXBsYXRlX3Bhcm1z LAogCQkJCQkgIERFQ0xfVEVNUExBVEVfUEFSTVMgKGZuZGVjbCkpKQpJbmRl eDogZ2NjL2NwL2NhbGwuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBn Y2MvY3AvY2FsbC5jCShyZXZpc2lvbiAxODY4ODMpCisrKyBnY2MvY3AvY2Fs bC5jCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIGFsb25nIHdp dGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAj aW5jbHVkZSAibGFuZ2hvb2tzLmgiCiAjaW5jbHVkZSAiYy1mYW1pbHkvYy1v YmpjLmgiCiAjaW5jbHVkZSAidGltZXZhci5oIgorI2luY2x1ZGUgIm11bHRp dmVyc2lvbi5oIgogCiAvKiBUaGUgdmFyaW91cyBraW5kcyBvZiBjb252ZXJz aW9uLiAgKi8KIApAQCAtMzkwMyw2ICszOTA0LDE2IEBAIGJ1aWxkX25ld19m dW5jdGlvbl9jYWxsICh0cmVlIGZuLCBWRUModHJlZSxnYykgKiphCiAgICAg ewogICAgICAgaWYgKGNvbXBsYWluICYgdGZfZXJyb3IpCiAJeworCSAgLyog SWYgdGhlIGNhbGwgaXMgdG8gYSBtdWx0aXZlcnNpb25lZCBmdW5jdGlvbiB3 aXRob3V0CisJICAgICBhIGRlZmF1bHQgdmVyc2lvbiwgb3ZlcmxvYWQgcmVz b2x1dGlvbiB3aWxsIGZhaWwuICAqLworCSAgaWYgKGNhbmRpZGF0ZXMKKwkg ICAgICAmJiBUUkVFX0NPREUgKGNhbmRpZGF0ZXMtPmZuKSA9PSBGVU5DVElP Tl9ERUNMCisJICAgICAgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGNh bmRpZGF0ZXMtPmZuKSkKKwkgICAgZXJyb3JfYXQgKGxvY2F0aW9uX29mIChE RUNMX05BTUUgKE9WTF9DVVJSRU5UIChmbikpKSwKKwkJICAgICAgIkNhbGwg dG8gbXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb24gJTwlRCglQSklPiB3aXRoIgor CQkgICAgICAiIG5vIGRlZmF1bHQgdmVyc2lvbiIsIERFQ0xfTkFNRSAoT1ZM X0NVUlJFTlQgKGZuKSksCisJCSAgICAgIGJ1aWxkX3RyZWVfbGlzdF92ZWMg KCphcmdzKSk7CisKIAkgIGlmICghYW55X3ZpYWJsZV9wICYmIGNhbmRpZGF0 ZXMgJiYgISBjYW5kaWRhdGVzLT5uZXh0CiAJICAgICAgJiYgKFRSRUVfQ09E RSAoY2FuZGlkYXRlcy0+Zm4pID09IEZVTkNUSU9OX0RFQ0wpKQogCSAgICBy ZXR1cm4gY3BfYnVpbGRfZnVuY3Rpb25fY2FsbF92ZWMgKGNhbmRpZGF0ZXMt PmZuLCBhcmdzLCBjb21wbGFpbik7CkBAIC02ODA5LDYgKzY4MjAsMTkgQEAg YnVpbGRfb3Zlcl9jYWxsIChzdHJ1Y3Qgel9jYW5kaWRhdGUgKmNhbmQsIGlu dCBmbGEKICAgaWYgKCFhbHJlYWR5X3VzZWQpCiAgICAgbWFya191c2VkIChm bik7CiAKKyAgLyogRm9yIGEgY2FsbCB0byBhIG11bHRpLXZlcnNpb25lZCBm dW5jdGlvbiwgdGhlIGNhbGwgc2hvdWxkIGFjdHVhbGx5IGJlIHRvCisgICAg IHRoZSBkaXNwYXRjaGVyLiAgKi8KKyAgaWYgKERFQ0xfRlVOQ1RJT05fVkVS U0lPTkVEIChmbikKKyAgICAgICYmIGlzX2RlZmF1bHRfZnVuY3Rpb24gKGZu KSkKKyAgICB7CisgICAgICB0cmVlIGlmdW5jX2RlY2w7CisgICAgICBpZnVu Y19kZWNsID0gZ2V0X2lmdW5jX2Zvcl92ZXJzaW9uIChmbik7CisgICAgICBy ZXRyb2ZpdF9sYW5nX2RlY2wgKGlmdW5jX2RlY2wpOworICAgICAgZ2NjX2Fz c2VydCAoaWZ1bmNfZGVjbCAhPSBOVUxMKTsKKyAgICAgIHJldHVybiBidWls ZF9jYWxsX2V4cHJfbG9jX2FycmF5IChVTktOT1dOX0xPQ0FUSU9OLCBpZnVu Y19kZWNsLAorCQkJCQluYXJncywgYXJnYXJyYXkpOworICAgIH0KKwogICBp ZiAoREVDTF9WSU5ERVggKGZuKSAmJiAoZmxhZ3MgJiBMT09LVVBfTk9OVklS VFVBTCkgPT0gMCkKICAgICB7CiAgICAgICB0cmVlIHQ7CkBAIC04MDY3LDYg KzgwOTEsNjAgQEAgam91c3QgKHN0cnVjdCB6X2NhbmRpZGF0ZSAqY2FuZDEs IHN0cnVjdCB6X2NhbmRpZGEKICAgc2l6ZV90IGk7CiAgIHNpemVfdCBsZW47 CiAKKyAgLyogRm9yIENhbmRpZGF0ZXMgb2YgYSBtdWx0aS12ZXJzaW9uZWQg ZnVuY3Rpb24sIGZpcnN0IGNoZWNrIGlmIHRoZQorICAgICB0YXJnZXQgZmxh Z3Mgb2YgdGhlIGNhbGxlciBtYXRjaCBhbnkgb2YgdGhlIGNhbmRpZGF0ZXMu IElmIHNvLAorICAgICB0aGUgY2FsbGVyIGNhbiBkaXJlY3RseSBjYWxsIHRo aXMgY2FuZGlkYXRlIG90aGVyd2lzZSB0aGUgb25lIG1hcmtlZAorICAgICBk ZWZhdWx0IHdpbnMuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGRlZmF1bHQgZGVj bCBpcyB1c2VkIGFzIGtleSB0bworICAgICBhZ2dyZWdhdGUgYWxsIHRoZSBv dGhlciB2ZXJzaW9ucyBwcm92aWRlZCBmb3IgaXQgaW4gbXVsdGl2ZXJzaW9u LmMuCisgICAgIFdoZW4gZ2VuZXJhdGluZyB0aGUgYWN0dWFsIGNhbGwsIHRo ZSBhcHByb3ByaWF0ZSBkaXNwYXRjaGVyIGlzIGNyZWF0ZWQKKyAgICAgdG8g Y2FsbCB0aGUgcmlnaHQgZnVuY3Rpb24gdmVyc2lvbiBhdCBydW4tdGltZS4g ICovCisKKyAgaWYgKChUUkVFX0NPREUgKGNhbmQxLT5mbikgPT0gRlVOQ1RJ T05fREVDTAorICAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChj YW5kMS0+Zm4pKQorICAgICAgfHwoVFJFRV9DT0RFIChjYW5kMi0+Zm4pID09 IEZVTkNUSU9OX0RFQ0wKKwkgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQg KGNhbmQyLT5mbikpKQorICAgIHsKKyAgICAgIC8qIEJvdGggZnVuY3Rpb25z IG11c3QgYmUgbWFya2VkIHZlcnNpb25lZC4gICovCisgICAgICBnY2NfYXNz ZXJ0IChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoY2FuZDEtPmZuKQorCQkg ICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChjYW5kMi0+Zm4pKTsKKwor ICAgICAgLyogVHJ5IHRvIHNlZSBpZiBhIGRpcmVjdCBjYWxsIGNhbiBiZSBt YWRlIHRvIGEgdmVyc2lvbi4gIFRoaXMgaXMKKwkgcG9zc2libGUgaWYgdGhl IGNhbGxlciBhbmQgY2FsbGVlIGhhdmUgdGhlIHNhbWUgdGFyZ2V0IGZsYWdz LgorCSBJZiBjYW5kLT5mbiBpcyBtYXJrZWQgd2l0aCB0YXJnZXQgYXR0cmli dXRlcywgIGNoZWNrIGlmIHRoZQorCSB0YXJnZXQgYXBwcm92ZXMgaW5saW5p bmcgdGhpcyBpbnRvIHRoZSBjYWxsZXIuICBJZiBzbywgdGhpcyBpcworCSB0 aGUgdmVyc2lvbiB3ZSB3YW50LiAgKi8KKworICAgICAgaWYgKGlzX3Rhcmdl dF9hdHRyaWJ1dGVfc2V0IChjYW5kMS0+Zm4pCisJICAmJiB0YXJnZXRtLnRh cmdldF9vcHRpb24uY2FuX2lubGluZV9wIChjdXJyZW50X2Z1bmN0aW9uX2Rl Y2wsCisJCQkJCQkgY2FuZDEtPmZuKSkKKwlyZXR1cm4gMTsKKworICAgICAg aWYgKGlzX3RhcmdldF9hdHRyaWJ1dGVfc2V0IChjYW5kMi0+Zm4pCisJICAm JiB0YXJnZXRtLnRhcmdldF9vcHRpb24uY2FuX2lubGluZV9wIChjdXJyZW50 X2Z1bmN0aW9uX2RlY2wsCisJCQkJCQkgY2FuZDItPmZuKSkKKwlyZXR1cm4g LTE7CisKKyAgICAgIC8qIEEgZGlyZWN0IGNhbGwgdG8gYSB2ZXJzaW9uIGlz IG5vdCBwb3NzaWJsZSwgc28gZmluZCB0aGUgZGVmYXVsdAorCSBmdW5jdGlv biBhbmQgcmV0dXJuIGl0LiAgVGhpcyB3aWxsIGxhdGVyIGJlIGNvbnZlcnRl ZCB0byBkaXNwYXRjaAorCSB0aGUgcmlnaHQgdmVyc2lvbiBhdCBydW4gdGlt ZS4gICovCisKKyAgICAgIGlmIChpc19kZWZhdWx0X2Z1bmN0aW9uIChjYW5k MS0+Zm4pKQorCXsKKyAgICAgICAgICBtYXJrX3VzZWQgKGNhbmQyLT5mbik7 CisJICByZXR1cm4gMTsKKwl9CisKKyAgICAgIGlmIChpc19kZWZhdWx0X2Z1 bmN0aW9uIChjYW5kMi0+Zm4pKQorCXsKKyAgICAgICAgICBtYXJrX3VzZWQg KGNhbmQxLT5mbik7CisJICByZXR1cm4gLTE7CisJfQorCisgICAgICAvKiBJ ZiBhIGRlZmF1bHQgZnVuY3Rpb24gaXMgYWJzZW50LCB0aGlzIHdpbGwgbmV2 ZXIgZ2V0IHJlc29sdmVkIGxlYWRpbmcKKwkgdG8gYW4gYW1iaWd1b3VzIGNh bGwgZXJyb3IuICAqLworICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgIC8q IENhbmRpZGF0ZXMgdGhhdCBpbnZvbHZlIGJhZCBjb252ZXJzaW9ucyBhcmUg YWx3YXlzIHdvcnNlIHRoYW4gdGhvc2UKICAgICAgdGhhdCBkb24ndC4gICov CiAgIGlmIChjYW5kMS0+dmlhYmxlID4gY2FuZDItPnZpYWJsZSkKSW5kZXg6 IGdjYy90aW1ldmFyLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBn Y2MvdGltZXZhci5kZWYJKHJldmlzaW9uIDE4Njg4MykKKysrIGdjYy90aW1l dmFyLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYgKzI1Myw3IEBAIERF RlRJTUVWQVIgKFRWX1RSRUVfSUZDT01CSU5FICAgICAgICAsICJ0cmVlIGlm LWNvCiBERUZUSU1FVkFSIChUVl9UUkVFX1VOSU5JVCAgICAgICAgICAgLCAi dW5pbml0IHZhciBhbmFseXNpcyIpCiBERUZUSU1FVkFSIChUVl9QTFVHSU5f SU5JVCAgICAgICAgICAgLCAicGx1Z2luIGluaXRpYWxpemF0aW9uIikKIERF RlRJTUVWQVIgKFRWX1BMVUdJTl9SVU4gICAgICAgICAgICAsICJwbHVnaW4g ZXhlY3V0aW9uIikKK0RFRlRJTUVWQVIgKFRWX01VTFRJVkVSU0lPTl9ESVNQ QVRDSCAsICJtdWx0aXZlcnNpb24gZGlzcGF0Y2giKQogCiAvKiBFdmVyeXRo aW5nIGVsc2UgaW4gcmVzdF9vZl9jb21waWxhdGlvbiBub3QgaW5jbHVkZWQg YWJvdmUuICAqLwogREVGVElNRVZBUiAoVFZfRUFSTFlfTE9DQUwJICAgICAs ICJlYXJseSBsb2NhbCBwYXNzZXMiKQpJbmRleDogZ2NjL01ha2VmaWxlLmlu Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9NYWtlZmlsZS5pbgko cmV2aXNpb24gMTg2ODgzKQorKysgZ2NjL01ha2VmaWxlLmluCSh3b3JraW5n IGNvcHkpCkBAIC0xMjk0LDYgKzEyOTQsNyBAQCBPQkpTID0gXAogCW1jZi5v IFwKIAltb2RlLXN3aXRjaGluZy5vIFwKIAltb2R1bG8tc2NoZWQubyBcCisJ bXVsdGl2ZXJzaW9uLm8gXAogCW9tZWdhLm8gXAogCW9tcC1sb3cubyBcCiAJ b3B0YWJzLm8gXApAQCAtMzAzMCw2ICszMDMxLDExIEBAIHJlZS5vIDogcmVl LmMgJChDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmgKICAgICQo REZfSCkgJChUSU1FVkFSX0gpIHRyZWUtcGFzcy5oICQoUkVDT0dfSCkgJChF WFBSX0gpIFwKICAgICQoUkVHU19IKSAkKFRSRUVfSCkgJChUTV9QX0gpIGlu c24tY29uZmlnLmggJChJTlNOX0FUVFJfSCkgJChESUFHTk9TVElDX0NPUkVf SCkgXAogICAgJChUQVJHRVRfSCkgJChPUFRBQlNfSCkgaW5zbi1jb2Rlcy5o IHJ0bGhvb2tzLWRlZi5oICQoUEFSQU1TX0gpICQoQ0dSQVBIX0gpCittdWx0 aXZlcnNpb24ubyA6IG11bHRpdmVyc2lvbi5jICQoQ09ORklHX0gpICQoU1lT VEVNX0gpIGNvcmV0eXBlcy5oICQoVE1fSCkgXAorICAgJChUUkVFX0gpIGxh bmdob29rcy5oICQoVFJFRV9JTkxJTkVfSCkgJChGTEFHU19IKSAkKENHUkFQ SF9IKSBpbnRsLmggXAorICAgJChESUFHTk9TVElDX0gpICQoRklCSEVBUF9I KSAkKFBBUkFNU19IKSAkKFRJTUVWQVJfSCkgdHJlZS1wYXNzLmggXAorICAg JChIQVNIVEFCX0gpICQoQ09WRVJBR0VfSCkgJChHR0NfSCkgJChUUkVFX0ZM T1dfSCkgJChSVExfSCkgJChJUEFfUFJPUF9IKSBcCisgICAkKEJBU0lDX0JM T0NLX0gpICQoVE9QTEVWX0gpICQoVFJFRV9EVU1QX0gpIGlwYS1pbmxpbmUu aAogY3Byb3AubyA6IGNwcm9wLmMgJChDT05GSUdfSCkgJChTWVNURU1fSCkg Y29yZXR5cGVzLmggJChUTV9IKSAkKFJUTF9IKSBcCiAgICAkKFJFR1NfSCkg aGFyZC1yZWctc2V0LmggJChGTEFHU19IKSBpbnNuLWNvbmZpZy5oICQoR0dD X0gpIFwKICAgICQoUkVDT0dfSCkgJChFWFBSX0gpICQoQkFTSUNfQkxPQ0tf SCkgJChGVU5DVElPTl9IKSBvdXRwdXQuaCB0b3BsZXYuaCAkKERJQUdOT1NU SUNfQ09SRV9IKSBcCkluZGV4OiBnY2MvcGFzc2VzLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gZ2NjL3Bhc3Nlcy5jCShyZXZpc2lvbiAxODY4ODMp CisrKyBnY2MvcGFzc2VzLmMJKHdvcmtpbmcgY29weSkKQEAgLTEyODcsNiAr MTI4Nyw3IEBAIGluaXRfb3B0aW1pemF0aW9uX3Bhc3NlcyAodm9pZCkKICAg TkVYVF9QQVNTIChwYXNzX2J1aWxkX2NmZyk7CiAgIE5FWFRfUEFTUyAocGFz c193YXJuX2Z1bmN0aW9uX3JldHVybik7CiAgIE5FWFRfUEFTUyAocGFzc19i dWlsZF9jZ3JhcGhfZWRnZXMpOworICBORVhUX1BBU1MgKHBhc3NfZGlzcGF0 Y2hfdmVyc2lvbnMpOwogICAqcCA9IE5VTEw7CiAKICAgLyogSW50ZXJwcm9j ZWR1cmFsIG9wdGltaXphdGlvbiBwYXNzZXMuICAqLwpJbmRleDogZ2NjL2Nw L21hbmdsZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jcC9t YW5nbGUuYwkocmV2aXNpb24gMTg2ODgzKQorKysgZ2NjL2NwL21hbmdsZS5j CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ1LDcgKzEyNDUsMTIgQEAgd3JpdGVf dW5xdWFsaWZpZWRfbmFtZSAoY29uc3QgdHJlZSBkZWNsKQogICAgIHsKICAg ICAgIE1BTkdMRV9UUkFDRV9UUkVFICgibG9jYWwtc291cmNlLW5hbWUiLCBk ZWNsKTsKICAgICAgIHdyaXRlX2NoYXIgKCdMJyk7Ci0gICAgICB3cml0ZV9z b3VyY2VfbmFtZSAoREVDTF9OQU1FIChkZWNsKSk7CisgICAgICBpZiAoVFJF RV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9ERUNMCisJICAmJiBERUNMX0ZV TkNUSU9OX1ZFUlNJT05FRCAoZGVjbCkKKwkgICYmIERFQ0xfQVNTRU1CTEVS X05BTUVfU0VUX1AgKGRlY2wpKQorCXdyaXRlX3NvdXJjZV9uYW1lIChERUNM X0FTU0VNQkxFUl9OQU1FIChkZWNsKSk7CisgICAgICBlbHNlCisJd3JpdGVf c291cmNlX25hbWUgKERFQ0xfTkFNRSAoZGVjbCkpOwogICAgICAgLyogVGhl IGRlZmF1bHQgZGlzY3JpbWluYXRvciBpcyAxLCBhbmQgdGhhdCdzIGFsbCB3 ZSBldmVyIHVzZSwKIAkgc28gdGhlcmUncyBubyBjb2RlIHRvIG91dHB1dCBv bmUgaGVyZS4gICovCiAgICAgfQpAQCAtMTI2MCw3ICsxMjY1LDE0IEBAIHdy aXRlX3VucXVhbGlmaWVkX25hbWUgKGNvbnN0IHRyZWUgZGVjbCkKICAgICAg ICAgICAgICAgICYmIExBTUJEQV9UWVBFX1AgKHR5cGUpKQogICAgICAgICB3 cml0ZV9jbG9zdXJlX3R5cGVfbmFtZSAodHlwZSk7CiAgICAgICBlbHNlCi0g ICAgICAgIHdyaXRlX3NvdXJjZV9uYW1lIChERUNMX05BTUUgKGRlY2wpKTsK Kwl7CisJICBpZiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9ERUNM CisJICAgICAgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpCisJ ICAgICAgJiYgREVDTF9BU1NFTUJMRVJfTkFNRV9TRVRfUCAoZGVjbCkpCisJ ICAgIHdyaXRlX3NvdXJjZV9uYW1lIChERUNMX0FTU0VNQkxFUl9OQU1FIChk ZWNsKSk7CisJICBlbHNlCisJICAgIHdyaXRlX3NvdXJjZV9uYW1lIChERUNM X05BTUUgKGRlY2wpKTsKKwl9CiAgICAgfQogfQogCkluZGV4OiBnY2MvY29u ZmlnL2kzODYvaTM4Ni5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdj Yy9jb25maWcvaTM4Ni9pMzg2LmMJKHJldmlzaW9uIDE4Njg4MykKKysrIGdj Yy9jb25maWcvaTM4Ni9pMzg2LmMJKHdvcmtpbmcgY29weSkKQEAgLTI3Njc4 LDYgKzI3Njc4LDMyNiBAQCBpeDg2X2luaXRfbW14X3NzZV9idWlsdGlucyAo dm9pZCkKICAgICB9CiB9CiAKKworLyogVGhpcyBhZGRzIGEgY29uZGl0aW9u IHRvIHRoZSBiYXNpY19ibG9jayBORVdfQkIgaW4gZnVuY3Rpb24gRlVOQ1RJ T05fREVDTAorICAgdG8gcmV0dXJuIGEgcG9pbnRlciB0byBWRVJTSU9OX0RF Q0wgaWYgdGhlIG91dGNvbWUgb2YgdGhlIGV4cHJlc3Npb24KKyAgIGZvcm1l ZCBieSBQUkVESUNBVEVfQ0hBSU4gaXMgdHJ1ZS4gIFRoaXMgZnVuY3Rpb24g d2lsbCBiZSBjYWxsZWQgZHVyaW5nCisgICB2ZXJzaW9uIGRpc3BhdGNoIHRv IGRlY2lkZSB3aGljaCBmdW5jdGlvbiB2ZXJzaW9uIHRvIGV4ZWN1dGUuICBJ dCByZXR1cm5zCisgICB0aGUgYmFzaWMgYmxvY2sgYXQgdGhlIGVuZCB0byB3 aGljaCBtb3JlIGNvbmRpdGlvbnMgY2FuIGJlIGFkZGVkLiAgKi8KKworc3Rh dGljIGJhc2ljX2Jsb2NrCithZGRfY29uZGl0aW9uX3RvX2JiICh0cmVlIGZ1 bmN0aW9uX2RlY2wsIHRyZWUgdmVyc2lvbl9kZWNsLAorCQkgICAgIHRyZWUg cHJlZGljYXRlX2NoYWluLCBiYXNpY19ibG9jayBuZXdfYmIpCit7CisgIGdp bXBsZSByZXR1cm5fc3RtdDsKKyAgdHJlZSBjb252ZXJ0X2V4cHIsIHJlc3Vs dF92YXI7CisgIGdpbXBsZSBjb252ZXJ0X3N0bXQ7CisgIGdpbXBsZSBjYWxs X2NvbmRfc3RtdDsKKyAgZ2ltcGxlIGlmX2Vsc2Vfc3RtdDsKKworICBiYXNp Y19ibG9jayBiYjEsIGJiMiwgYmIzOworICBlZGdlIGUxMiwgZTIzOworCisg IHRyZWUgY29uZF92YXIsIGFuZF9leHByX3ZhciA9IE5VTExfVFJFRTsKKyAg Z2ltcGxlX3NlcSBnc2VxOworCisgIHRyZWUgb2xkX2N1cnJlbnRfZnVuY3Rp b25fZGVjbDsKKyAgdHJlZSBwcmVkaWNhdGVfZGVjbCwgcHJlZGljYXRlX2Fy ZzsKKworICBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsID0gY3VycmVudF9m dW5jdGlvbl9kZWNsOworICBwdXNoX2NmdW4gKERFQ0xfU1RSVUNUX0ZVTkNU SU9OIChmdW5jdGlvbl9kZWNsKSk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVj bCA9IGZ1bmN0aW9uX2RlY2w7CisKKyAgZ2NjX2Fzc2VydCAobmV3X2JiICE9 IE5VTEwpOworICBnc2VxID0gYmJfc2VxIChuZXdfYmIpOworCisKKyAgY29u dmVydF9leHByID0gYnVpbGQxIChDT05WRVJUX0VYUFIsIHB0cl90eXBlX25v ZGUsCisJICAgICAJCSBidWlsZF9mb2xkX2FkZHJfZXhwciAodmVyc2lvbl9k ZWNsKSk7CisgIHJlc3VsdF92YXIgPSBjcmVhdGVfdG1wX3ZhciAocHRyX3R5 cGVfbm9kZSwgTlVMTCk7CisgIGNvbnZlcnRfc3RtdCA9IGdpbXBsZV9idWls ZF9hc3NpZ24gKHJlc3VsdF92YXIsIGNvbnZlcnRfZXhwcik7IAorICByZXR1 cm5fc3RtdCA9IGdpbXBsZV9idWlsZF9yZXR1cm4gKHJlc3VsdF92YXIpOwor CisgIGlmIChwcmVkaWNhdGVfY2hhaW4gPT0gTlVMTF9UUkVFKQorICAgIHsK KyAgICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCBjb252ZXJ0X3N0 bXQpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIHJldHVy bl9zdG10KTsKKyAgICAgIHNldF9iYl9zZXEgKG5ld19iYiwgZ3NlcSk7Cisg ICAgICBnaW1wbGVfc2V0X2JiIChjb252ZXJ0X3N0bXQsIG5ld19iYik7Cisg ICAgICBnaW1wbGVfc2V0X2JiIChyZXR1cm5fc3RtdCwgbmV3X2JiKTsKKyAg ICAgIHBvcF9jZnVuICgpOworICAgICAgY3VycmVudF9mdW5jdGlvbl9kZWNs ID0gb2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAgICAgIHJldHVybiBu ZXdfYmI7CisgICAgfQorCisgIHdoaWxlIChwcmVkaWNhdGVfY2hhaW4gIT0g TlVMTCkKKyAgICB7CisgICAgICBjb25kX3ZhciA9IGNyZWF0ZV90bXBfdmFy IChpbnRlZ2VyX3R5cGVfbm9kZSwgTlVMTCk7CisgICAgICBwcmVkaWNhdGVf ZGVjbCA9IFRSRUVfUFVSUE9TRSAocHJlZGljYXRlX2NoYWluKTsKKyAgICAg IHByZWRpY2F0ZV9hcmcgPSBUUkVFX1ZBTFVFIChwcmVkaWNhdGVfY2hhaW4p OworICAgICAgY2FsbF9jb25kX3N0bXQgPSBnaW1wbGVfYnVpbGRfY2FsbCAo cHJlZGljYXRlX2RlY2wsIDEsIHByZWRpY2F0ZV9hcmcpOworICAgICAgZ2lt cGxlX2NhbGxfc2V0X2xocyAoY2FsbF9jb25kX3N0bXQsIGNvbmRfdmFyKTsK KworICAgICAgZ2ltcGxlX3NldF9ibG9jayAoY2FsbF9jb25kX3N0bXQsIERF Q0xfSU5JVElBTCAoZnVuY3Rpb25fZGVjbCkpOworICAgICAgZ2ltcGxlX3Nl dF9iYiAoY2FsbF9jb25kX3N0bXQsIG5ld19iYik7CisgICAgICBnaW1wbGVf c2VxX2FkZF9zdG10ICgmZ3NlcSwgY2FsbF9jb25kX3N0bXQpOworCisgICAg ICBwcmVkaWNhdGVfY2hhaW4gPSBUUkVFX0NIQUlOIChwcmVkaWNhdGVfY2hh aW4pOworICAgICAgCisgICAgICBpZiAoYW5kX2V4cHJfdmFyID09IE5VTEwp CisgICAgICAgIGFuZF9leHByX3ZhciA9IGNvbmRfdmFyOworICAgICAgZWxz ZQorCXsKKwkgIGdpbXBsZSBhc3NpZ25fc3RtdDsKKwkgIC8qIFVzZSBNSU5f RVhQUiB0byBjaGVjayBpZiBhbnkgaW50ZWdlciBpcyB6ZXJvPy4KKwkgICAg IGFuZF9leHByX3ZhciA9IG1pbl9leHByIDxjb25kX3ZhciwgYW5kX2V4cHJf dmFyPiAgKi8KKwkgIGFzc2lnbl9zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2ln biAoYW5kX2V4cHJfdmFyLAorCQkJICBidWlsZDIgKE1JTl9FWFBSLCBpbnRl Z2VyX3R5cGVfbm9kZSwKKwkJCQkgIGNvbmRfdmFyLCBhbmRfZXhwcl92YXIp KTsKKworCSAgZ2ltcGxlX3NldF9ibG9jayAoYXNzaWduX3N0bXQsIERFQ0xf SU5JVElBTCAoZnVuY3Rpb25fZGVjbCkpOworCSAgZ2ltcGxlX3NldF9iYiAo YXNzaWduX3N0bXQsIG5ld19iYik7CisJICBnaW1wbGVfc2VxX2FkZF9zdG10 ICgmZ3NlcSwgYXNzaWduX3N0bXQpOworCX0KKyAgICB9CisKKyAgaWZfZWxz ZV9zdG10ID0gZ2ltcGxlX2J1aWxkX2NvbmQgKEdUX0VYUFIsIGFuZF9leHBy X3ZhciwKKwkgIAkJICAgICAgICAgICAgaW50ZWdlcl96ZXJvX25vZGUsCisJ CQkJICAgIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKyAgZ2ltcGxlX3NldF9i bG9jayAoaWZfZWxzZV9zdG10LCBERUNMX0lOSVRJQUwgKGZ1bmN0aW9uX2Rl Y2wpKTsKKyAgZ2ltcGxlX3NldF9iYiAoaWZfZWxzZV9zdG10LCBuZXdfYmIp OworICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmZ3NlcSwgaWZfZWxzZV9zdG10 KTsKKworICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmZ3NlcSwgY29udmVydF9z dG10KTsKKyAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIHJldHVybl9z dG10KTsKKyAgc2V0X2JiX3NlcSAobmV3X2JiLCBnc2VxKTsKKworICBiYjEg PSBuZXdfYmI7CisgIGUxMiA9IHNwbGl0X2Jsb2NrIChiYjEsIGlmX2Vsc2Vf c3RtdCk7CisgIGJiMiA9IGUxMi0+ZGVzdDsKKyAgZTEyLT5mbGFncyAmPSB+ RURHRV9GQUxMVEhSVTsKKyAgZTEyLT5mbGFncyB8PSBFREdFX1RSVUVfVkFM VUU7CisKKyAgZTIzID0gc3BsaXRfYmxvY2sgKGJiMiwgcmV0dXJuX3N0bXQp OworCisgIGdpbXBsZV9zZXRfYmIgKGNvbnZlcnRfc3RtdCwgYmIyKTsKKyAg Z2ltcGxlX3NldF9iYiAocmV0dXJuX3N0bXQsIGJiMik7CisKKyAgYmIzID0g ZTIzLT5kZXN0OworICBtYWtlX2VkZ2UgKGJiMSwgYmIzLCBFREdFX0ZBTFNF X1ZBTFVFKTsgCisKKyAgcmVtb3ZlX2VkZ2UgKGUyMyk7CisgIG1ha2VfZWRn ZSAoYmIyLCBFWElUX0JMT0NLX1BUUiwgMCk7CisKKyAgcmVidWlsZF9jZ3Jh cGhfZWRnZXMgKCk7CisKKyAgcG9wX2NmdW4gKCk7CisgIGN1cnJlbnRfZnVu Y3Rpb25fZGVjbCA9IG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisKKyAg cmV0dXJuIGJiMzsKK30KKworLyogVGhpcyBwYXJzZXMgdGhlIGF0dHJpYnV0 ZSBhcmd1bWVudHMgdG8gdGFyZ2V0IGluIERFQ0wgYW5kIGRldGVybWluZXMK KyAgIHRoZSByaWdodCBidWlsdGluIHRvIHVzZSB0byBtYXRjaCB0aGUgcGxh dGZvcm0gc3BlY2lmaWNhdGlvbi4KKyAgIEZvciBub3csIG9ubHkgb25lIHRh cmdldCBhcmd1bWVudCAoImFyY2g9IiBvciAiPC1tPnh4eCIpIGlzIGFsbG93 ZWQuICAqLworCitzdGF0aWMgdHJlZSAKK2dldF9idWlsdGluX2NvZGVfZm9y X3ZlcnNpb24gKHRyZWUgZGVjbCkKK3sKKyAgdHJlZSBhdHRyczsKKyAgc3Ry dWN0IGNsX3RhcmdldF9vcHRpb24gY3VyX3RhcmdldDsKKyAgdHJlZSB0YXJn ZXRfbm9kZTsKKyAgc3RydWN0IGNsX3RhcmdldF9vcHRpb24gKm5ld190YXJn ZXQ7CisgIGNvbnN0IGNoYXIgKmFyZ19zdHIgPSBOVUxMOworICBjb25zdCBj aGFyICphdHRyc19zdHIgPSBOVUxMOworICBjaGFyICp0b2tfc3RyID0gTlVM TDsKKyAgY2hhciAqdG9rZW47CisgIC8qIFRoZXNlIGFyZSB0aGUgdGFyZ2V0 IGF0dHJpYnV0ZSBzdHJpbmdzIGZvciB3aGljaCBhIGRpc3BhdGNoZXIgaXMK KyAgICAgYXZhaWxhYmxlLCBmcm9tIGZvbGRfYnVpbHRpbl9jcHUuICAqLwor ICBjb25zdCBjaGFyICpmZWF0dXJlX2xpc3RbXSA9IHsibW14IiwgInBvcGNu dCIsICJzc2UiLCAic3NlMiIsICJzc2UzIiwKKwkJCQkic3NzZTMiLCAic3Nl NC4xIiwgInNzZTQuMiIsICJhdngiLCAiYXZ4MiJ9OworICB1bnNpZ25lZCBp bnQgTlVNX0ZFQVRVUkVTID0gc2l6ZW9mIChmZWF0dXJlX2xpc3QpIC8gc2l6 ZW9mIChjb25zdCBjaGFyICopOworICB1bnNpZ25lZCBpbnQgaTsKKyAgdHJl ZSBwcmVkaWNhdGVfY2hhaW4gPSBOVUxMX1RSRUU7CisgIHRyZWUgcHJlZGlj YXRlX2RlY2wsIHByZWRpY2F0ZV9hcmc7CisKKyAgYXR0cnMgPSBsb29rdXBf YXR0cmlidXRlICgidGFyZ2V0IiwgREVDTF9BVFRSSUJVVEVTIChkZWNsKSk7 CisgIGdjY19hc3NlcnQgKGF0dHJzICE9IE5VTEwpOworCisgIGF0dHJzID0g VFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAoYXR0cnMpKTsKKworICBnY2NfYXNz ZXJ0IChUUkVFX0NPREUgKGF0dHJzKSA9PSBTVFJJTkdfQ1NUKTsKKyAgYXR0 cnNfc3RyID0gVFJFRV9TVFJJTkdfUE9JTlRFUiAoYXR0cnMpOworCisgIC8q IEhhbmRsZSBhcmNoPSBpZiBzcGVjaWZpZWQuICAqLworICBpZiAoc3Ryc3Ry IChhdHRyc19zdHIsICJhcmNoPSIpICE9IE5VTEwpCisgICAgeworICAgICAg Y2xfdGFyZ2V0X29wdGlvbl9zYXZlICgmY3VyX3RhcmdldCwgJmdsb2JhbF9v cHRpb25zKTsKKyAgICAgIHRhcmdldF9ub2RlID0gaXg4Nl92YWxpZF90YXJn ZXRfYXR0cmlidXRlX3RyZWUgKGF0dHJzKTsKKyAgICAKKyAgICAgIGdjY19h c3NlcnQgKHRhcmdldF9ub2RlKTsKKyAgICAgIG5ld190YXJnZXQgPSBUUkVF X1RBUkdFVF9PUFRJT04gKHRhcmdldF9ub2RlKTsKKyAgICAgIGdjY19hc3Nl cnQgKG5ld190YXJnZXQpOworICAgICAgCisgICAgICBpZiAobmV3X3Rhcmdl dC0+YXJjaF9zcGVjaWZpZWQgJiYgbmV3X3RhcmdldC0+YXJjaCA+IDApCisJ eworCSAgc3dpdGNoIChuZXdfdGFyZ2V0LT5hcmNoKQorCSAgICB7CisJICAg IGNhc2UgUFJPQ0VTU09SX0NPUkUyXzMyOgorCSAgICBjYXNlIFBST0NFU1NP Ul9DT1JFMl82NDoKKwkgICAgICBhcmdfc3RyID0gImNvcmUyIjsKKwkgICAg ICBicmVhazsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQ09SRUk3XzMyOgorCSAg ICBjYXNlIFBST0NFU1NPUl9DT1JFSTdfNjQ6CisJICAgICAgYXJnX3N0ciA9 ICJjb3JlaTciOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIFBST0NFU1NP Ul9BVE9NOgorCSAgICAgIGFyZ19zdHIgPSAiYXRvbSI7CisJICAgICAgYnJl YWs7CisJICAgIGNhc2UgUFJPQ0VTU09SX0FNREZBTTEwOgorCSAgICAgIGFy Z19zdHIgPSAiYW1kZmFtMTBoIjsKKwkgICAgICBicmVhazsKKwkgICAgY2Fz ZSBQUk9DRVNTT1JfQkRWRVIxOgorCSAgICAgIGFyZ19zdHIgPSAiYmR2ZXIx IjsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQkRWRVIy OgorCSAgICAgIGFyZ19zdHIgPSAiYmR2ZXIyIjsKKwkgICAgICBicmVhazsK KwkgICAgfSAgCisJfSAgICAKKyAgICAKKyAgICAgIGNsX3RhcmdldF9vcHRp b25fcmVzdG9yZSAoJmdsb2JhbF9vcHRpb25zLCAmY3VyX3RhcmdldCk7Cisg ICAgICBpZiAoYXJnX3N0ciA9PSBOVUxMKQorCXsKKwkgIGVycm9yX2F0IChE RUNMX1NPVVJDRV9MT0NBVElPTiAoZGVjbCksCisJICAgIAkiTm8gZGlzcGF0 Y2hlciBmb3VuZCBmb3IgdGhlIHZlcnNpb25pbmcgYXR0cmlidXRlcyIpOwor CSAgcmV0dXJuIE5VTEw7CisJfQorICAgIAorICAgICAgcHJlZGljYXRlX2Rl Y2wgPSBpeDg2X2J1aWx0aW5zIFsoaW50KSBJWDg2X0JVSUxUSU5fQ1BVX0lT XTsKKyAgICAgIC8qIEZvciBhIEMgc3RyaW5nIGxpdGVyYWwgdGhlIGxlbmd0 aCBpbmNsdWRlcyB0aGUgdHJhaWxpbmcgTlVMTC4gICovCisgICAgICBwcmVk aWNhdGVfYXJnID0gYnVpbGRfc3RyaW5nX2xpdGVyYWwgKHN0cmxlbiAoYXJn X3N0cikgKyAxLCBhcmdfc3RyKTsKKyAgICAgIHByZWRpY2F0ZV9jaGFpbiA9 IHRyZWVfY29ucyAocHJlZGljYXRlX2RlY2wsIHByZWRpY2F0ZV9hcmcsCisJ CQkJICAgcHJlZGljYXRlX2NoYWluKTsKKyAgICB9CisKKyAgLyogUHJvY2Vz cyBmZWF0dXJlIG5hbWUuICAqLworICB0b2tfc3RyID0gIChjaGFyICopIHht YWxsb2MgKHN0cmxlbiAoYXR0cnNfc3RyKSArIDEpOworICBzdHJjcHkgKHRv a19zdHIsIGF0dHJzX3N0cik7CisgIHRva2VuID0gc3RydG9rICh0b2tfc3Ry LCAiLCIpOworICBwcmVkaWNhdGVfZGVjbCA9IGl4ODZfYnVpbHRpbnMgWyhp bnQpIElYODZfQlVJTFRJTl9DUFVfU1VQUE9SVFNdOworCisgIHdoaWxlICh0 b2tlbiAhPSBOVUxMKQorICAgIHsKKyAgICAgIC8qIERvIG5vdCBwcm9jZXNz ICJhcmNoPSIgICovCisgICAgICBpZiAoc3RybmNtcCAodG9rZW4sICJhcmNo PSIsIDUpID09IDApCisJeworCSAgdG9rZW4gPSBzdHJ0b2sgKE5VTEwsICIs Iik7CisJICBjb250aW51ZTsKKwl9CisgICAgICBmb3IgKGkgPSAwOyBpIDwg TlVNX0ZFQVRVUkVTOyArK2kpCisJeworCSAgaWYgKHN0cmNtcCAodG9rZW4s IGZlYXR1cmVfbGlzdFtpXSkgPT0gMCkKKwkgICAgeworCSAgICAgIHByZWRp Y2F0ZV9hcmcgPSBidWlsZF9zdHJpbmdfbGl0ZXJhbCAoCisJCQkJc3RybGVu IChmZWF0dXJlX2xpc3RbaV0pICsgMSwKKwkJCQlmZWF0dXJlX2xpc3RbaV0p OworCSAgICAgIHByZWRpY2F0ZV9jaGFpbiA9IHRyZWVfY29ucyAocHJlZGlj YXRlX2RlY2wsIHByZWRpY2F0ZV9hcmcsCisJCQkJCSAgIHByZWRpY2F0ZV9j aGFpbik7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICBpZiAo aSA9PSBOVU1fRkVBVFVSRVMpCisJeworCSAgZXJyb3JfYXQgKERFQ0xfU09V UkNFX0xPQ0FUSU9OIChkZWNsKSwKKwkJICAgICJObyBkaXNwYXRjaGVyIGZv dW5kIGZvciAlcyIsIHRva2VuKTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAg ICAgIHRva2VuID0gc3RydG9rIChOVUxMLCAiLCIpOworICAgIH0KKyAgZnJl ZSAodG9rX3N0cik7CisKKyAgaWYgKHByZWRpY2F0ZV9jaGFpbiA9PSBOVUxM X1RSRUUpCisgICAgeworICAgICAgZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xP Q0FUSU9OIChkZWNsKSwKKwkgICAgICAgICJObyBkaXNwYXRjaGVyIGZvdW5k IGZvciB0aGUgdmVyc2lvbmluZyBhdHRyaWJ1dGVzIDogJXMiLAorCSAgICAg ICAgYXR0cnNfc3RyKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor ICBwcmVkaWNhdGVfY2hhaW4gPSBucmV2ZXJzZSAocHJlZGljYXRlX2NoYWlu KTsKKyAgcmV0dXJuIHByZWRpY2F0ZV9jaGFpbjsgCit9IAorCisvKiBUaGlz IGlzIHRoZSB0YXJnZXQgaG9vayB0byBnZW5lcmF0ZSB0aGUgZGlzcGF0Y2gg ZnVuY3Rpb24gZm9yCisgICBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb25zLiAg RElTUEFUQ0hfREVDTCBpcyB0aGUgZnVuY3Rpb24gd2hpY2ggd2lsbAorICAg Y29udGFpbiB0aGUgZGlzcGF0Y2ggbG9naWMuICBGTkRFQ0xTIGFyZSB0aGUg ZnVuY3Rpb24gY2hvaWNlcyBmb3IKKyAgIGRpc3BhdGNoLCBhbmQgaXMgYSB0 cmVlIGNoYWluLiAgRU1QVFlfQkIgaXMgdGhlIGJhc2ljIGJsb2NrIHBvaW50 ZXIKKyAgIGluIERJU1BBVENIX0RFQ0wgaW4gd2hpY2ggdGhlIGRpc3BhdGNo IGNvZGUgaXMgZ2VuZXJhdGVkLiAgKi8KKworc3RhdGljIGludAoraXg4Nl9k aXNwYXRjaF92ZXJzaW9uICh0cmVlIGRpc3BhdGNoX2RlY2wsCisJCSAgICAg ICB2b2lkICpmbmRlY2xzX3AsCisJCSAgICAgICBiYXNpY19ibG9jayAqZW1w dHlfYmIpCit7CisgIHRyZWUgZGVmYXVsdF9kZWNsOworICBnaW1wbGUgaWZ1 bmNfY3B1X2luaXRfc3RtdDsKKyAgZ2ltcGxlX3NlcSBnc2VxOworICB0cmVl IG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgIGludCBpeDsKKyAgdHJl ZSBlbGU7CisgIFZFQyAodHJlZSwgaGVhcCkgKmZuZGVjbHM7CisKKyAgZ2Nj X2Fzc2VydCAoZGlzcGF0Y2hfZGVjbCAhPSBOVUxMCisJICAgICAgJiYgZm5k ZWNsc19wICE9IE5VTEwKKwkgICAgICAmJiBlbXB0eV9iYiAhPSBOVUxMKTsK KworICAvKmZuZGVjbHNfcCBpcyBhY3R1YWxseSBhIHZlY3Rvci4gICovCisg IGZuZGVjbHMgPSAoVkVDICh0cmVlLCBoZWFwKSAqKWZuZGVjbHNfcDsKKwor ICAvKiBBdGxlYXN0IG9uZSBtb3JlIHZlcnNpb24gb3RoZXIgdGhhbiB0aGUg ZGVmYXVsdC4gICovCisgIGdjY19hc3NlcnQgKFZFQ19sZW5ndGggKHRyZWUs IGZuZGVjbHMpID49IDIpOworCisgIC8qIFRoZSBmaXJzdCB2ZXJzaW9uIGlu IHRoZSB2ZWN0b3IgaXMgdGhlIGRlZmF1bHQgZGVjbC4gICovCisgIGRlZmF1 bHRfZGVjbCA9IFZFQ19pbmRleCAodHJlZSwgZm5kZWNscywgMCk7CisKKyAg b2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGN1cnJlbnRfZnVuY3Rpb25f ZGVjbDsKKyAgcHVzaF9jZnVuIChERUNMX1NUUlVDVF9GVU5DVElPTiAoZGlz cGF0Y2hfZGVjbCkpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBkaXNw YXRjaF9kZWNsOworCisgIGdzZXEgPSBiYl9zZXEgKCplbXB0eV9iYik7Cisg IGlmdW5jX2NwdV9pbml0X3N0bXQgPSBnaW1wbGVfYnVpbGRfY2FsbF92ZWMg KAorICAgICAgICAgICAgICAgICAgICAgaXg4Nl9idWlsdGlucyBbKGludCkg SVg4Nl9CVUlMVElOX0NQVV9JTklUXSwgTlVMTCk7CisgIGdpbXBsZV9zZXFf YWRkX3N0bXQgKCZnc2VxLCBpZnVuY19jcHVfaW5pdF9zdG10KTsKKyAgZ2lt cGxlX3NldF9iYiAoaWZ1bmNfY3B1X2luaXRfc3RtdCwgKmVtcHR5X2JiKTsK KyAgc2V0X2JiX3NlcSAoKmVtcHR5X2JiLCBnc2VxKTsKKworICBwb3BfY2Z1 biAoKTsKKyAgY3VycmVudF9mdW5jdGlvbl9kZWNsID0gb2xkX2N1cnJlbnRf ZnVuY3Rpb25fZGVjbDsKKworCisgIGZvciAoaXggPSAxOyBWRUNfaXRlcmF0 ZSAodHJlZSwgZm5kZWNscywgaXgsIGVsZSk7ICsraXgpCisgICAgeworICAg ICAgdHJlZSB2ZXJzaW9uX2RlY2wgPSBlbGU7CisgICAgICB0cmVlIHByZWRp Y2F0ZV9jaGFpbiA9IE5VTExfVFJFRTsKKyAgICAgIC8qIEdldCBhdHRyaWJ1 dGUgc3RyaW5nLCBwYXJzZSBpdCBhbmQgZmluZCB0aGUgcmlnaHQgcHJlZGlj YXRlIGRlY2wuCisgICAgICAgICBUaGUgcHJlZGljYXRlIGZ1bmN0aW9uIGNv dWxkIGJlIGEgbGVuZ3RoeSBjb21iaW5hdGlvbiBvZiBtYW55CisJIGZlYXR1 cmVzLCBsaWtlIGFyY2gtdHlwZSBhbmQgdmFyaW91cyBpc2EtdmFyaWFudHMu ICAqLworICAgICAgcHJlZGljYXRlX2NoYWluID0gZ2V0X2J1aWx0aW5fY29k ZV9mb3JfdmVyc2lvbiAodmVyc2lvbl9kZWNsKTsKKworICAgICAgaWYgKHBy ZWRpY2F0ZV9jaGFpbiA9PSBOVUxMX1RSRUUpCisJY29udGludWU7CisKKyAg ICAgICplbXB0eV9iYiA9IGFkZF9jb25kaXRpb25fdG9fYmIgKGRpc3BhdGNo X2RlY2wsIHZlcnNpb25fZGVjbCwKKwkJCQkgICAgICAgcHJlZGljYXRlX2No YWluLCAqZW1wdHlfYmIpOworCisgICAgfQorICAvKiBkaXNwYXRjaCBkZWZh dWx0IHZlcnNpb24gYXQgdGhlIGVuZC4gICovCisgICplbXB0eV9iYiA9IGFk ZF9jb25kaXRpb25fdG9fYmIgKGRpc3BhdGNoX2RlY2wsIGRlZmF1bHRfZGVj bCwKKwkJCQkgICBOVUxMLCAqZW1wdHlfYmIpOworICByZXR1cm4gMDsKK30K KwogLyogVGhpcyBidWlsZHMgdGhlIHByb2Nlc3Nvcl9tb2RlbCBzdHJ1Y3Qg dHlwZSBkZWZpbmVkIGluCiAgICBsaWJnY2MvY29uZmlnL2kzODYvaTM4Ni1j cHVpbmZvLmMgICovCiAKQEAgLTM5NDYzLDYgKzM5NzgzLDkgQEAgaXg4Nl9h dXRvdmVjdG9yaXplX3ZlY3Rvcl9zaXplcyAodm9pZCkKICN1bmRlZiBUQVJH RVRfRk9MRF9CVUlMVElOCiAjZGVmaW5lIFRBUkdFVF9GT0xEX0JVSUxUSU4g aXg4Nl9mb2xkX2J1aWx0aW4KIAorI3VuZGVmIFRBUkdFVF9ESVNQQVRDSF9W RVJTSU9OCisjZGVmaW5lIFRBUkdFVF9ESVNQQVRDSF9WRVJTSU9OIGl4ODZf ZGlzcGF0Y2hfdmVyc2lvbgorCiAjdW5kZWYgVEFSR0VUX0VOVU1fVkFfTElT VF9QCiAjZGVmaW5lIFRBUkdFVF9FTlVNX1ZBX0xJU1RfUCBpeDg2X2VudW1f dmFfbGlzdAogCg== --20cf3074b0fa2b44be04bf023e5f--