From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11218 invoked by alias); 2 Nov 2012 02:53:55 -0000 Received: (qmail 11207 invoked by uid 22791); 2 Nov 2012 02:53:51 -0000 X-SWARE-Spam-Status: No, hits=-5.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,TW_AV,TW_CP,TW_FN,TW_TM X-Spam-Check-By: sourceware.org Received: from mail-ob0-f175.google.com (HELO mail-ob0-f175.google.com) (209.85.214.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 02 Nov 2012 02:53:32 +0000 Received: by mail-ob0-f175.google.com with SMTP id eq6so3359272obc.20 for ; Thu, 01 Nov 2012 19:53:31 -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=QKdk+1fIstlwfbf+a1bGd86d/fITqeZJ5twhpSRbHdU=; b=H2ZifHwKany0oh3OJSPl1UDIQUB6lV4asUXi4htAuWlUsQrGt030AANmKCVpzVDLKe upMI5Ho63MEdiu33ZwLTpY8hiBazhgy6dBf9KQxgo2nuZ4VYBTSPv6oS49xAa5NxMRqD pHq0H/T3l60PkAtaAa/voSH8nQ4cP0v30Co5dewJaZxQkclzhJ7NQHAnR6dAsxrc3VQ6 rs6hgVAsccpFa1eRMyXM2Iey4A7pfYpRk134QXDLuJ7e4d6djTe5PzIBZagbdVXpiGCM 4BAWuaoRkkxfHyaFGhjsyNA1/ShRb4+P7gcb3j63BwrNHoUjknI71g4v5wy4fLmbbV3o X4MA== MIME-Version: 1.0 Received: by 10.60.14.165 with SMTP id q5mr317068oec.28.1351824810973; Thu, 01 Nov 2012 19:53:30 -0700 (PDT) Received: by 10.182.176.106 with HTTP; Thu, 1 Nov 2012 19:53:30 -0700 (PDT) In-Reply-To: <50912F66.3030707@redhat.com> References: <5008708E.1030109@redhat.com> <506F27AF.3070805@redhat.com> <50816D63.3020908@google.com> <20121026155447.GA4348@atrey.karlin.mff.cuni.cz> <50902624.3020705@redhat.com> <50912F66.3030707@redhat.com> Date: Fri, 02 Nov 2012 02:53:00 -0000 Message-ID: Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064) From: Sriraman Tallam To: Jason Merrill Cc: gcc-patches List , Jan Hubicka , Diego Novillo Content-Type: multipart/mixed; boundary=e89a8fb1f468a81b6004cd7a3d58 X-System-Of-Record: true X-Gm-Message-State: ALoCoQk10Ep0eF1oz2gpCJpTzSdjRW236JKGa7z+5Yw1EBtC8e7PtdJejc7wfw1SefV4PKKU0TbZOrb588l6lsjsLXhzhCRe+C1AjocLPqZExN+iYHiANWjqsjHdqWBQN+IL7pzVhm/XXEOPoI44oGUH8qMTqP7sWmURCz6kc65+yE+TlgotP1YJv7reFwfbO3uy5PWEoOzD 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-11/txt/msg00171.txt.bz2 --e89a8fb1f468a81b6004cd7a3d58 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1905 Hi Jason, I have made all the changes you mentioned and attached the new patch. Summary of the important things changed: * The versions are collected at declaration time itself now. * extern "C" functions are disallowed from being versions for now. extern "C" functions have to be handled exactly like how the C front-end would handle versioned functions. I will do this when I get to the C front-end. * Finalizing cgraph nodes is removed from front-end code. Thanks, -Sri. On Wed, Oct 31, 2012 at 7:02 AM, Jason Merrill wrote: > On 10/30/2012 05:49 PM, Sriraman Tallam wrote: >> >> AFAIU, this should not be a problem. For duplicate declarations, >> duplicate_decls should merge them and they should never be seen here. >> Did I miss something? > > > With extern "C" functions you can have multiple declarations of the same > function in different namespaces that are not duplicates, but still match. > And I can't think what that test is supposed to be catching, anyway. > > >> No, I thought about this but I did not want to handle this case in >> this iteration. The dispatcher is created only once and if more >> functions are declared later, they will not be dispatched atleast in >> this iteration. > > > I still think that instead of collecting the set of functions in overload > resolution, they should be collected at declaration time and added to a > vector in the cgraph information for use when generating the body of the > dispatcher. > > >> You talked about doing the dispatcher >> building later, but I did it here since I am doing it only once. > > > I still don't think this is the right place for it. > > >> dispatcher_node does not have a body until it is generated in >> cgraphunit.c, so cgraph does not mark this field before this is >> processed in cgraph_analyze_function. > > > That seems like something to address in your cgraph changes. > > Jason > --e89a8fb1f468a81b6004cd7a3d58 Content-Type: text/plain; charset=US-ASCII; name="mv_fe_patch_11012012.txt" Content-Disposition: attachment; filename="mv_fe_patch_11012012.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h90pkkqa0 Content-length: 110736 T3ZlcnZpZXcgb2YgdGhlIHBhdGNoIHdoaWNoIGFkZHMgc3VwcG9ydCB0byBz cGVjaWZ5IGZ1bmN0aW9uIHZlcnNpb25zLiAgVGhpcyBpcwpvbmx5IGVuYWJs ZWQgZm9yIHRhcmdldCBpMzg2LgoKRXhhbXBsZToKCmludCBmb28gKCk7ICAv KiBEZWZhdWx0IHZlcnNpb24gKi8KaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0KCJhdngscG9wY250IikpKTsvKlNwZWNpYWxpemVkIGZvciBh dnggYW5kIHBvcGNudCAqLwppbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoImFyY2g9Y29yZTIsc3NzZTMiKSkpOy8qU3BlY2lhbGl6ZWQgZm9y IGNvcmUyIGFuZCBzc3NlMyovCgppbnQgbWFpbiAoKQp7CiBpbnQgKCpwKSgp ID0gJmZvbzsKIHJldHVybiBmb28gKCkgKyAoKnApKCk7Cn0KCmludCBmb28g KCkKewogcmV0dXJuIDA7Cn0KCmludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0 KCJhdngscG9wY250IikpKQpmb28gKCkKewogcmV0dXJuIDA7Cn0KCmludCBf X2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmUyLHNzc2UzIikpKQpm b28gKCkKewogcmV0dXJuIDA7Cn0KClRoZSBhYm92ZSBleGFtcGxlIGhhcyBm b28gZGVmaW5lZCAzIHRpbWVzLCBidXQgYWxsIDMgZGVmaW5pdGlvbnMgb2Yg Zm9vIGFyZQpkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rp b24uIFRoZSBjYWxsIHRvIGZvbyBpbiBtYWluLCBkaXJlY3RseSBhbmQKdmlh IGEgcG9pbnRlciwgYXJlIGNhbGxzIHRvIHRoZSBtdWx0aS12ZXJzaW9uZWQg ZnVuY3Rpb24gZm9vIHdoaWNoIGlzIGRpc3BhdGNoZWQKdG8gdGhlIHJpZ2h0 IGZvbyBhdCBydW4tdGltZS4KCkZyb250LWVuZCBjaGFuZ2VzOgoKVGhlIGZy b250LWVuZCBjaGFuZ2VzIGFyZSBjYWxscyBhdCBhcHByb3ByaWF0ZSBwbGFj ZXMgdG8gdGFyZ2V0IGhvb2tzIHRoYXQKZGV0ZXJtaW5lIHRoZSBmb2xsb3dp bmc6CgoqIERldGVybWluZSBpZiB0d28gZnVuY3Rpb24gZGVjbHMgd2l0aCB0 aGUgc2FtZSBzaWduYXR1cmUgYXJlIHZlcnNpb25zLgoqIERldGVybWluZSB0 aGUgYXNzZW1ibGVyIG5hbWUgb2YgYSBmdW5jdGlvbiB2ZXJzaW9uLgoqIEdl bmVyYXRlIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGZvciBhIHNldCBvZiBm dW5jdGlvbiB2ZXJzaW9ucy4KKiBDb21wYXJlIHZlcnNpb25zIHRvIHNlZSBp ZiBvbmUgaGFzIGEgaGlnaGVyIHByaW9yaXR5IG92ZXIgdGhlIG90aGVyLgoK QWxsIHRoZSBpbXBsZW1lbnRhdGlvbiBoYXBwZW5zIGluIHRoZSB0YXJnZXQt c3BlY2lmaWMgY29uZmlnL2kzODYvaTM4Ni5jLgoKV2hhdCBkb2VzIHRoZSBw YXRjaCBkbz8KCiogVHJhY2tpbmcgZGVjbHMgdGhhdCBjb3JyZXNwb25kIHRv IGZ1bmN0aW9uIHZlcnNpb25zIG9mIGZ1bmN0aW9uCm5hbWUsIHNheSAiZm9v IjoKCldoZW4gdGhlIGZyb250LWVuZCBzZWVzIG1vcmUgdGhhbiBvbmUgZGVj bCBmb3IgImZvbyIsIGl0IGNhbGxzIGEgdGFyZ2V0IGhvb2sgdG8KZGV0ZXJt aW5lIGlmIHRoZXkgYXJlIHZlcnNpb25zLiBUbyBwcmV2ZW50IGR1cGxpY2F0 ZSBkZWZpbml0aW9uIGVycm9ycyB3aXRoIG90aGVyCiB2ZXJzaW9ucyBvZiAi Zm9vIiwgImRlY2xzX21hdGNoIiBmdW5jdGlvbiBpbiBjcC9kZWNsLmMgaXMg bWFkZSB0byByZXR1cm4gZmFsc2UKIHdoZW4gMiBkZWNscyBoYXZlIGFyZSBk ZWVtZWQgdmVyc2lvbnMgYnkgdGhlIHRhcmdldC4gVGhpcyB3aWxsIG1ha2Ug YWxsIGZ1bmN0aW9uCnZlcnNpb25zIG9mICJmb28iIHRvIGJlIGFkZGVkIHRv IHRoZSBvdmVybG9hZCBsaXN0IG9mICJmb28iLgoKKiBDaGFuZ2UgdGhlIGFz c2VtYmxlciBuYW1lcyBvZiB0aGUgZnVuY3Rpb24gdmVyc2lvbnMuCgpGb3Ig aTM4NiwgdGhlIHRhcmdldCBjaGFuZ2VzIHRoZSBhc3NlbWJsZXIgbmFtZXMg b2YgdGhlIGZ1bmN0aW9uIHZlcnNpb25zIGJ5CiBzdWZmaXhpbmcgdGhlIHNv cnRlZCBsaXN0IG9mIGFyZ3MgdG8gInRhcmdldCIgdG8gdGhlIGZ1bmN0aW9u IG5hbWUgb2YgImZvbyIuIEZvcgpleGFtcGxlLCBoZSBhc3NlbWJsZXIgbmFt ZSBvZiAidm9pZCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNz ZTQiKSkpIiB3aWxsCmJlY29tZSBfWjNmb292LnNzZTQuICBUaGUgdGFyZ2V0 IGhvb2sgbWFuZ2xlX2RlY2xfYXNzZW1ibGVyX25hbWUgaXMgdXNlZCBmb3Ig dGhpcy4KCiogT3ZlcmxvYWQgcmVzb2x1dGlvbjoKCiBGdW5jdGlvbiAiYnVp bGRfb3Zlcl9jYWxsIiBpbiBjcC9jYWxsLmMgc2VlcyBhIGNhbGwgdG8gZnVu Y3Rpb24KImZvbyIsIHdoaWNoIGlzIG11bHRpLXZlcnNpb25lZC4gVGhlIG92 ZXJsb2FkIHJlc29sdXRpb24gaGFwcGVucyBpbgpmdW5jdGlvbiAiam91c3Qi IGluICJjcC9jYWxsLmMiLiBIZXJlLCB0aGUgY2FsbCB0byAiZm9vIiBoYXMg YWxsCnBvc3NpYmxlIHZlcnNpb25zIG9mICJmb28iIGFzIGNhbmRpZGF0ZXMu IEFsbCB0aGUgY2FuZGlkYXRlcyBvZiAiZm9vIiBhcmUKc3RvcmVkIGluIHRo ZSBjZ3JhcGggc2lkZSBkYXRhIHN0cnVjdHVyZS4gRWFjaCB2ZXJzaW9uIG9m IGZvbyBpcyBjaGFpbmVkIGluIGEgCmRvdWJseS1saW5rZWQgbGlzdCB3aXRo IHRoZSBkZWZhdWx0IGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBlbGVtZW50LiAg VGhpcyBhbGxvd3MKYW55IHBhc3MgdG8gYWNjZXNzIGFsbCB0aGUgc2VtYW50 aWNhbGx5IGlkZW50aWNhbCB2ZXJzaW9ucy4gQSBjYWxsIHRvIGEKbXVsdGkt dmVyc2lvbmVkIGZ1bmN0aW9uIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBjYWxs IHRvIGEgZGlzcGF0Y2hlciBmdW5jdGlvbiwKZGV0ZXJtaW5lZCBieSBhIHRh cmdldCBob29rLCB0byBleGVjdXRlIHRoZSByaWdodCBmdW5jdGlvbiB2ZXJz aW9uIGF0IHJ1bi10aW1lLgoKT3B0aW1pemF0aW9uIHRvIGRpcmVjdGx5IGNh bGwgYSB2ZXJzaW9uIHdoZW4gcG9zc2libGU6CkFsc28sIGluIGpvdXN0LCB3 aGVyZSBvdmVybG9hZCByZXNvbHV0aW9uIGhhcHBlbnMsIGEgbXVsdGl2ZXJz aW9uZWQgZnVuY3Rpb24KcmVzb2x1dGlvbiBpcyBtYWRlIHRvIHJldHVybiB0 aGUgbW9zdCBzcGVjaWFsaXplZCB2ZXJzaW9uLiAgVGhpcyBpcyB0aGUgdmVy c2lvbgp0aGF0IHdpbGwgYmUgY2hlY2tlZCBmb3IgZGlzcGF0Y2hpbmcgZmly c3QgYW5kIGlzIGRldGVybWluZWQgYnkgdGhlIHRhcmdldC4KTm93LCBpZiB0 aGUgY2FsbGVyIGNhbiBpbmxpbmUgdGhpcyBmdW5jdGlvbiB2ZXJzaW9uIHRo ZW4gYSBkaXJlY3QgY2FsbCBpcyBtYWRlCnRvIHRoaXMgZnVuY3Rpb24gdmVy c2lvbiByYXRoZXIgdGhhbiBnbyB0aHJvdWdoIHRoZSBkaXNwYXRjaGVyLiBX aGVuIGEgZGlyZWN0CmNhbGwgY2Fubm90IGJlIG1hZGUsIGEgY2FsbCB0byB0 aGUgZGlzcGF0Y2hlciBmdW5jdGlvbiBpcyBjcmVhdGVkLgoKKiBDcmVhdGlu ZyB0aGUgZGlzcGF0Y2hlciBib2R5LgoKVGhlIGRpc3BhdGNoZXIgYm9keSwg Y2FsbGVkIHRoZSByZXNvbHZlciBpcyBtYWRlIG9ubHkgd2hlbiB0aGVyZSBp cyBhIGNhbGwgdG8gYQptdWx0aXZlcnNpb25lZCBmdW5jdGlvbiBkaXNwYXRj aGVyIG9yIHRoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gaXMgdGFrZW4uIFRo aXMKaXMgZ2VuZXJhdGVkIGR1cmluZyBjZ3JhcGhfYW5hbHl6ZV9mdW5jdGlv bi4gVGhpcyBpcyBkb25lIGJ5IGFub3RoZXIgdGFyZ2V0IGhvb2suCgoqIERp c3BhdGNoIG9yZGVyaW5nLgoKVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmdW5j dGlvbiB2ZXJzaW9ucyBhcmUgY2hlY2tlZCBkdXJpbmcgZGlzcGF0Y2ggaXMg YmFzZWQKb24gYSBwcmlvcml0eSB2YWx1ZSBhc3NpZ25lZCBmb3IgdGhlIElT QSB0aGF0IGlzIGNhdGVyZWQuIE1vcmUgc3BlY2lhbGl6ZWQgCnZlcnNpb25z IGFyZSBjaGVja2VkIGZvciBkaXNwYXRjaGluZyBmaXJzdC4gIFRoaXMgaXMg dG8gbWl0aWdhdGUgdGhlIGFtYmlndWl0eQp0aGF0IGNhbiBhcmlzZSB3aGVu IG1vcmUgdGhhbiBvbmUgZnVuY3Rpb24gdmVyc2lvbiBpcyB2YWxpZCBmb3Ig ZXhlY3V0aW9uIG9uCmEgcGFydGljdWxhciBwbGF0Zm9ybS4gIFRoaXMgaXMg bm90IGEgcGVyZmVjdCBzb2x1dGlvbiwgYW5kIGluIGZ1dHVyZSB0aGUgdXNl cgpzaG91bGQgYmUgYWxsb3dlZCB0byBhc3NpZ24gYSBkaXNwYXRjaGluZyBw cmlvcml0eSB2YWx1ZSB0byBlYWNoIHZlcnNpb24uCgpGdW5jdGlvbiBNViBp biB0aGUgSW50ZWwgY29tcGlsZXI6CgpUaGUgaW50ZWwgY29tcGlsZXIgc3Vw cG9ydHMgZnVuY3Rpb24gbXVsdGl2ZXJzaW9uaW5nIGFuZCB0aGUgc3ludGF4 IGlzCnNpbWlsYXIgdG8gdGhlIHBhdGNoIHByb3Bvc2VkIGhlcmUuICBIZXJl IGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvCmdlbmVyYXRlIG11bHRpcGxlIGZ1 bmN0aW9uIHZlcnNpb25zIHdpdGggdGhlIGludGVsIGNvbXBpbGVyLgoKLyog Q3JlYXRlIGEgc3R1YiBmdW5jdGlvbiB0byBzcGVjaWZ5IHRoZSB2YXJpb3Vz IHZlcnNpb25zIG9mIGZ1bmN0aW9uIHRoYXQKICAgd2lsbCBiZSBjcmVhdGVk LCB1c2luZyBkZWNsc3BlYyBhdHRyaWJ1dGUgY3B1X2Rpc3BhdGNoLiAgKi8K X19kZWNsc3BlYyAoY3B1X2Rpc3BhdGNoIChjb3JlX2k3X3NzZTRfMiwgYXRv bSwgZ2VuZXJpYykpCnZvaWQgZm9vICgpIHt9OwoKLyogQm9kaWVzIG9mIGVh Y2ggZnVuY3Rpb24gdmVyc2lvbi4gICovCgovKiBJbnRlbCBDb3JlaTcgcHJv Y2Vzc29yICsgU1NFNC4yIHZlcnNpb24uICAqLwpfX2RlY2xzcGVjIChjcHVf c3BlY2lmaWMoY29yZV9pN19zc2U0XzIpKQp2b2lkIGZvbyAoKQp7CiAgcHJp bnRmICgiY29yZWk3ICsgc3NlNC4yIik7Cn0KCi8qIEF0b20gcHJvY2Vzc29y LiAgKi8KX19kZWNsc3BlYyAoY3B1X3NwZWNpZmljKGF0b20pKQp2b2lkIGZv byAoKQp7CiAgcHJpbnRmICgiYXRvbSIpOwp9CgovKiBUaGUgZ2VuZXJpYyBv ciB0aGUgZGVmYXVsdCB2ZXJzaW9uLiAgKi8KX19kZWNsc3BlYyAoY3B1X3Nw ZWNpZmljKGdlbmVyaWMpKQp2b2lkIGZvbyAoKQp7CiAgcHJpbnRmICgiVGhp cyBpcyBnZW5lcmljIik7Cn0KCkEgbmV3IGZ1bmN0aW9uIHZlcnNpb24gaXMg Z2VuZXJhdGVkIGJ5IGRlZmluaW5nIGEgbmV3IGZ1bmN0aW9uIHdpdGggdGhl IHNhbWUKc2lnbmF0dXJlIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGNwdV9zcGVj aWZpYyBkZWNsc3BlYyBhdHRyaWJ1dGUgc3RyaW5nLiAgVGhlCnNldCBvZiBj cHVfc3BlY2lmaWMgc3RyaW5ncyB0aGF0IGFyZSBhbGxvd2VkIGlzIHRoZSBm b2xsb3dpbmc6CgoiY29yZV8ybmRfZ2VuX2F2eCIKImNvcmVfYWVzX3BjbG11 bHFkcSIKImNvcmVfaTdfc3NlNF8yIgoiY29yZV8yX2R1b19zc2U0XzEiCiJj b3JlXzJfZHVvX3Nzc2UzIgoiYXRvbSIKInBlbnRpdW1fNF9zc2UzIgoicGVu dGl1bV80IgoicGVudGl1bV9tIgoicGVudGl1bV9paWkiCiJnZW5lcmljIgoK Q29tcGFyaXNvbiB3aXRoIHRoZSBHQ0MgTVYgaW1wbGVtZW50YXRpb24gaW4g dGhpcyBwYXRjaDoKCiogVmVyc2lvbiBjcmVhdGlvbiBzeW50YXg6CgpUaGUg aW1wbGVtZW50YXRpb24gaW4gdGhpcyBwYXRjaCBhbHNvIGhhcyBhIHNpbWls YXIgc3ludGF4IHRvIHNwZWNpZnkgZnVuY3Rpb24KdmVyc2lvbnMuIFRoZSBm aXJzdCBzdHViIGZ1bmN0aW9uIGlzIG5vdCBuZWVkZWQuICBIZXJlIGlzIHRo ZSBjb2RlIHRvIGdlbmVyYXRlCnRoZSBmdW5jdGlvbiB2ZXJzaW9ucyB3aXRo IHRoaXMgcGF0Y2g6CgovKiBJbnRlbCBDb3JlaTcgcHJvY2Vzc29yICsgU1NF NC4yIHZlcnNpb24uICAqLwpfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgiYXJj aD1jb3JlaTcsIHNzZTQuMiIpKSkKdm9pZCBmb28gKCkKewogIHByaW50ZiAo ImNvcmVpNyArIHNzZTQuMiIpOwp9CgovKiBBdG9tIHByb2Nlc3Nvci4gICov Cl9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJhcmNoPWF0b20iKSkpCnZvaWQg Zm9vICgpCnsKICBwcmludGYgKCJhdG9tIik7Cn0KCnZvaWQgZm9vICgpCnsK fQoKVGhlIHRhcmdldCBhdHRyaWJ1dGUgY2FuIGhhdmUgb25lIG9mIHRoZSBm b2xsb3dpbmcgYXJjaCBuYW1lczoKCiJhbWQiCiJpbnRlbCIKImF0b20iCiJj b3JlMiIKImNvcmVpNyIKIm5laGFsZW0iCiJ3ZXN0bWVyZSIKInNhbmR5YnJp ZGdlIgoiYW1kZmFtMTBoIgoiYmFyY2Vsb25hIgoic2hhbmdoYWkiCiJpc3Rh bmJ1bCIKImFtZGZhbTE1aCIKImJkdmVyMSIKImJkdmVyMiIKCmFuZCBhbnkg bnVtYmVyIG9mIHRoZSBmb2xsb3dpbmcgSVNBIG5hbWVzOgoKImNtb3YiCiJt bXgiCiJwb3BjbnQiCiJzc2UiCiJzc2UyIgoic3NlMyIKInNzc2UzIgoic3Nl NC4xIgoic3NlNC4yIgoiYXZ4IgoiYXZ4MiIKCgoJKiBkb2MvdG0udGV4aS5p biAoVEFSR0VUX09QVElPTl9GVU5DVElPTl9WRVJTSU9OUyk6IE5ldyBob29r IGRlc2NyaXB0aW9uLgoJKiAoVEFSR0VUX0NPTVBBUkVfVkVSU0lPTl9QUklP UklUWSk6IE5ldyBob29rIGRlc2NyaXB0aW9uLgoJKiAoVEFSR0VUX0dFVF9G VU5DVElPTl9WRVJTSU9OU19ESVNQQVRDSEVSKTogTmV3IGhvb2sgZGVzY3Jp cHRpb24uCgkqIChUQVJHRVRfR0VORVJBVEVfVkVSU0lPTl9ESVNQQVRDSEVS X0JPRFkpOiBOZXcgaG9vayBkZXNjcmlwdGlvbi4KCSogZG9jL3RtLnRleGk6 IFJlZ2VuZXJhdGUuCgkqIHRhcmdldC5kZWYgKGNvbXBhcmVfdmVyc2lvbl9w cmlvcml0eSk6IE5ldyB0YXJnZXQgaG9vay4KCSogKGdlbmVyYXRlX3ZlcnNp b25fZGlzcGF0Y2hlcl9ib2R5KTogTmV3IHRhcmdldCBob29rLgoJKiAoZ2V0 X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIpOiBOZXcgdGFyZ2V0IGhv b2suCgkqIChmdW5jdGlvbl92ZXJzaW9ucyk6IE5ldyB0YXJnZXQgaG9vay4K CSogY2dyYXBoLmMgKGNncmFwaF9mbnZlcl9odGFiKTogTmV3IGh0YWIuCgko Y2dyYXBoX2ZuX3Zlcl9odGFiX2hhc2gpOiBOZXcgZnVuY3Rpb24uCgkoY2dy YXBoX2ZuX3Zlcl9odGFiX2VxKTogTmV3IGZ1bmN0aW9uLgoJKHZlcnNpb25f aW5mb19ub2RlKTogTmV3IHBvaW50ZXIuCgkoaW5zZXJ0X25ld19jZ3JhcGhf bm9kZV92ZXJzaW9uKTogTmV3IGZ1bmN0aW9uLgoJKGdldF9jZ3JhcGhfbm9k ZV92ZXJzaW9uKTogTmV3IGZ1bmN0aW9uLgoJKGRlbGV0ZV9mdW5jdGlvbl92 ZXJzaW9uKTogTmV3IGZ1bmN0aW9uLgoJKHJlY29yZF9mdW5jdGlvbl92ZXJz aW9ucyk6IE5ldyBmdW5jdGlvbi4KCSogY2dyYXBoLmggKGNncmFwaF9mdW5j dGlvbl92ZXJzaW9uX2luZm8pOiBOZXcgc3RydWN0LgoJKGluc2VydF9uZXdf Y2dyYXBoX25vZGVfdmVyc2lvbik6IE5ldyBmdW5jdGlvbi4KCShnZXRfY2dy YXBoX25vZGVfdmVyc2lvbik6IE5ldyBmdW5jdGlvbi4KCShkZWxldGVfZnVu Y3Rpb25fdmVyc2lvbik6IE5ldyBmdW5jdGlvbi4KCShyZWNvcmRfZnVuY3Rp b25fdmVyc2lvbnMpOiBOZXcgZnVuY3Rpb24uCgkoY2dyYXBoX25vZGUpOiBO ZXcgYml0ZmllbGQgZGlzcGF0Y2hlcl9mdW5jdGlvbi4KCShpbml0X2xvd2Vy ZWRfZW1wdHlfZnVuY3Rpb24pOiBFeHBvc2UgZnVuY3Rpb24uCgkqIHRyZWUu aCAoREVDTF9GVU5DVElPTl9WRVJTSU9ORUQpOiBOZXcgbWFjcm8uCgkodHJl ZV9mdW5jdGlvbl9kZWNsKTogTmV3IGJpdC1maWVsZCB2ZXJzaW9uZWRfZnVu Y3Rpb24uCgkqIGNncmFwaHVuaXQuYyAoY2dyYXBoX2FuYWx5emVfZnVuY3Rp b24pOiBHZW5lcmF0ZSBib2R5IG9mIG11bHRpdmVyc2lvbgoJZnVuY3Rpb24g ZGlzcGF0Y2hlci4KCShjZ3JhcGhfYW5hbHl6ZV9mdW5jdGlvbnMpOiBBbmFs eXplIGRpc3BhdGNoZXIgZnVuY3Rpb24uCgkoaW5pdF9sb3dlcmVkX2VtcHR5 X2Z1bmN0aW9uKTogTWFrZSBub24tc3RhdGljLiBOZXcgcGFyYW1ldGVyIGlu X3NzYS4KCUNoYW5nZSBlZGdlIGZsYWcgdG8gRURHRV9GQUxMVEhSVS4KCShh c3NlbWJsZV90aHVuayk6IEFkZCBwYXJhbWV0ZXIgdG8gY2FsbCB0byBpbml0 X2xvd2VyZWRfZW1wdHlfZnVuY3Rpb24uCgkqIGNwL2NsYXNzLmM6CgkoYWRk X21ldGhvZCk6IENoYW5nZSBhc3NlbWJsZXIgbmFtZXMgb2YgZnVuY3Rpb24g dmVyc2lvbnMuCgkocmVzb2x2ZV9hZGRyZXNzX29mX292ZXJsb2FkZWRfZnVu Y3Rpb24pOkNyZWF0ZSBkaXNwYXRjaGVyIGRlY2wgYW5kCglyZXR1cm4gYWRk cmVzcyBvZiBkaXNwYXRjaGVyIGluc3RlYWQuCgkqIGNwL2RlY2wuYyAoZGVj bHNfbWF0Y2gpOiBNYWtlIGRlY2xzIHVubWF0Y2hlZCBmb3IgdmVyc2lvbmVk CglmdW5jdGlvbnMuCgkoZHVwbGljYXRlX2RlY2xzKTogUmVtb3ZlIGFtYmln dWl0eSBmb3IgdmVyc2lvbmVkIGZ1bmN0aW9ucy4gCgkqIGNwL2RlY2wyLmM6 KGNoZWNrX2NsYXNzZm4pOiBDaGVjayBhdHRyaWJ1dGVzIG9mIHZlcnNpb25l ZCBmdW5jdGlvbnMKCWZvciBtYXRjaC4KCSogY3AvY2FsbC5jOiAoYnVpbGRf b3Zlcl9jYWxsKTogTWFrZSBjYWxscyB0byBtdWx0aXZlcnNpb25lZCBmdW5j dGlvbnMKCXRvIGNhbGwgdGhlIGRpc3BhdGNoZXIuCgkoam91c3QpOiBGb3Ig Y2FsbHMgdG8gbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9ucywgbWFrZSB0aGUg bW9zdAoJc3BlY2lhbGl6ZWQgZnVuY3Rpb24gdmVyc2lvbiB3aW4uCgkoZ2V0 X2Z1bmN0aW9uX3ZlcnNpb25fZGlzcGF0Y2hlcik6IE5ldyBmdW5jdGlvbi4K CSogTWFrZWZpbGUuaW46IEFkZCBtdWx0aXZlcnNpb24ubwoJKiBjb25maWcv aTM4Ni9pMzg2LmMgKGFkZF9jb25kaXRpb25fdG9fYmIpOiBOZXcgZnVuY3Rp b24uCgkoZ2V0X2J1aWx0aW5fY29kZV9mb3JfdmVyc2lvbik6IE5ldyBmdW5j dGlvbi4KCShpeDg2X2NvbXBhcmVfdmVyc2lvbl9wcmlvcml0eSk6IE5ldyBm dW5jdGlvbi4KCShmZWF0dXJlX2NvbXBhcmUpOiBOZXcgZnVuY3Rpb24uCgko ZGlzcGF0Y2hfZnVuY3Rpb25fdmVyc2lvbnMpOiBOZXcgZnVuY3Rpb24uCgko aXg4Nl9mdW5jdGlvbl92ZXJzaW9ucyk6IE5ldyBmdW5jdGlvbi4KCShhdHRy X3N0cmNtcCk6IE5ldyBmdW5jdGlvbi4KCShzb3J0ZWRfYXR0cl9zdHJpbmcp OiBOZXcgZnVuY3Rpb24uCgkoaXg4Nl9tYW5nbGVfZnVuY3Rpb25fdmVyc2lv bl9hc3NlbWJsZXJfbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShpeDg2X21hbmds ZV9kZWNsX2Fzc2VtYmxlcl9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKG1ha2Vf bmFtZSk6IE5ldyBmdW5jdGlvbi4KCShtYWtlX2Rpc3BhdGNoZXJfZGVjbCk6 IE5ldyBmdW5jdGlvbi4KCShpc19mdW5jdGlvbl9kZWZhdWx0X3ZlcnNpb24p OiBOZXcgZnVuY3Rpb24uCgkoaXg4Nl9nZXRfZnVuY3Rpb25fdmVyc2lvbnNf ZGlzcGF0Y2hlcik6IE5ldyBmdW5jdGlvbi4KCShtYWtlX2F0dHJpYnV0ZSk6 IE5ldyBmdW5jdGlvbi4KCShtYWtlX3Jlc29sdmVyX2Z1bmMpOiBOZXcgZnVu Y3Rpb24uCgkoaXg4Nl9nZW5lcmF0ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9k eSk6IE5ldyBmdW5jdGlvbi4KCShUQVJHRVRfQ09NUEFSRV9WRVJTSU9OX1BS SU9SSVRZKTogTmV3IG1hY3JvLgoJKFRBUkdFVF9HRVRfRlVOQ1RJT05fVkVS U0lPTlNfRElTUEFUQ0hFUik6IE5ldyBtYWNyby4KCShUQVJHRVRfR0VORVJB VEVfVkVSU0lPTl9ESVNQQVRDSEVSX0JPRFkpOiBOZXcgbWFjcm8uCgkoVEFS R0VUX09QVElPTl9GVU5DVElPTl9WRVJTSU9OUyk6IE5ldyBtYWNyby4KCShU QVJHRVRfTUFOR0xFX0RFQ0xfQVNTRU1CTEVSX05BTUUpOiBOZXcgbWFjcm8u CgkqIHRlc3RzdWl0ZS9nKysuZGcvbXYxLkM6IE5ldyB0ZXN0LgoJKiB0ZXN0 c3VpdGUvZysrLmRnL212Mi5DOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2cr Ky5kZy9tdjMuQzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9nKysuZGcvbXY0 LkM6IE5ldyB0ZXN0LgoKSW5kZXg6IGdjYy9kb2MvdG0udGV4aQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvZG9jL3RtLnRleGkJKHJldmlzaW9u IDE5Mjk2OCkKKysrIGdjYy9kb2MvdG0udGV4aQkod29ya2luZyBjb3B5KQpA QCAtOTkyOSw2ICs5OTI5LDE0IEBAIGNoYW5nZWQgdmlhIHRoZSBvcHRpbWl6 ZSBhdHRyaWJ1dGUgb3IgcHJhZ21hLCBzZWUKIEBjb2Rle1RBUkdFVF9PVkVS UklERV9PUFRJT05TX0FGVEVSX0NIQU5HRX0KIEBlbmQgZGVmdHlwZWZuCiAK K0BkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSBib29sIFRBUkdFVF9PUFRJT05f RlVOQ1RJT05fVkVSU0lPTlMgKHRyZWUgQHZhcntkZWNsMX0sIHRyZWUgQHZh cntkZWNsMn0pCitUaGlzIHRhcmdldCBob29rIHJldHVybnMgQGNvZGV7dHJ1 ZX0gaWYgQHZhcntERUNMMX0gYW5kIEB2YXJ7REVDTDJ9IGFyZQordmVyc2lv bnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24uICBAdmFye0RFQ0wxfSBhbmQgQHZh cntERUNMMn0gYXJlIGZ1bmN0aW9uCit2ZXJzaW9ucyBpZiBhbmQgb25seSBp ZiB0aGV5IGhhdmUgdGhlIHNhbWUgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZAor ZGlmZmVyZW50IHRhcmdldCBzcGVjaWZpYyBhdHRyaWJ1dGVzLCB0aGF0IGlz LCB0aGV5IGFyZSBjb21waWxlZCBmb3IKK2RpZmZlcmVudCB0YXJnZXQgbWFj aGluZXMuCitAZW5kIGRlZnR5cGVmbgorCiBAZGVmdHlwZWZuIHtUYXJnZXQg SG9va30gYm9vbCBUQVJHRVRfQ0FOX0lOTElORV9QICh0cmVlIEB2YXJ7Y2Fs bGVyfSwgdHJlZSBAdmFye2NhbGxlZX0pCiBUaGlzIHRhcmdldCBob29rIHJl dHVybnMgQGNvZGV7ZmFsc2V9IGlmIHRoZSBAdmFye2NhbGxlcn0gZnVuY3Rp b24KIGNhbm5vdCBpbmxpbmUgQHZhcntjYWxsZWV9LCBiYXNlZCBvbiB0YXJn ZXQgc3BlY2lmaWMgaW5mb3JtYXRpb24uICBCeQpAQCAtMTA5NTIsNiArMTA5 NjAsMjkgQEAgVGhlIHJlc3VsdCBpcyBhbm90aGVyIHRyZWUgY29udGFpbmlu ZyBhIHNpbXBsaWZpZWQKIGNhbGwncyByZXN1bHQuICBJZiBAdmFye2lnbm9y ZX0gaXMgdHJ1ZSB0aGUgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLgogQGVuZCBk ZWZ0eXBlZm4KIAorQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGludCBUQVJH RVRfQ09NUEFSRV9WRVJTSU9OX1BSSU9SSVRZICh0cmVlIEB2YXJ7ZGVjbDF9 LCB0cmVlIEB2YXJ7ZGVjbDJ9KQorVGhpcyBob29rIGlzIHVzZWQgdG8gY29t cGFyZSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZXMgaW4gdHdvIGZ1bmN0aW9ucyB0 bworZGV0ZXJtaW5lIHdoaWNoIGZ1bmN0aW9uJ3MgZmVhdHVyZXMgZ2V0IGhp Z2hlciBwcmlvcml0eS4gIFRoaXMgaXMgdXNlZAorZHVyaW5nIGZ1bmN0aW9u IG11bHRpLXZlcnNpb25pbmcgdG8gZmlndXJlIG91dCB0aGUgb3JkZXIgaW4g d2hpY2ggdHdvCit2ZXJzaW9ucyBtdXN0IGJlIGRpc3BhdGNoZWQuICBBIGZ1 bmN0aW9uIHZlcnNpb24gd2l0aCBhIGhpZ2hlciBwcmlvcml0eQoraXMgY2hl Y2tlZCBmb3IgZGlzcGF0Y2hpbmcgZWFybGllci4gIEB2YXJ7ZGVjbDF9IGFu ZCBAdmFye2RlY2wyfSBhcmUKKyB0aGUgdHdvIGZ1bmN0aW9uIGRlY2xzIHRo YXQgd2lsbCBiZSBjb21wYXJlZC4KK0BlbmQgZGVmdHlwZWZuCisKK0BkZWZ0 eXBlZm4ge1RhcmdldCBIb29rfSB0cmVlIFRBUkdFVF9HRVRfRlVOQ1RJT05f VkVSU0lPTlNfRElTUEFUQ0hFUiAodm9pZCAqQHZhcntkZWNsfSkKK1RoaXMg aG9vayBpcyB1c2VkIHRvIGdldCB0aGUgZGlzcGF0Y2hlciBmdW5jdGlvbiBm b3IgYSBzZXQgb2YgZnVuY3Rpb24KK3ZlcnNpb25zLiAgVGhlIGRpc3BhdGNo ZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGludm9rZSB0aGUgcmlnaHQgZnVu Y3Rpb24KK3ZlcnNpb24gYXQgcnVuLXRpbWUuIEB2YXJ7ZGVjbH0gaXMgb25l IHZlcnNpb24gZnJvbSBhIHNldCBvZiBzZW1hbnRpY2FsbHkKK2lkZW50aWNh bCB2ZXJzaW9ucy4KK0BlbmQgZGVmdHlwZWZuCisKK0BkZWZ0eXBlZm4ge1Rh cmdldCBIb29rfSB0cmVlIFRBUkdFVF9HRU5FUkFURV9WRVJTSU9OX0RJU1BB VENIRVJfQk9EWSAodm9pZCAqQHZhcnthcmd9KQorVGhpcyBob29rIGlzIHVz ZWQgdG8gZ2VuZXJhdGUgdGhlIGRpc3BhdGNoZXIgbG9naWMgdG8gaW52b2tl IHRoZSByaWdodAorZnVuY3Rpb24gdmVyc2lvbiBhdCBydW4tdGltZSBmb3Ig YSBnaXZlbiBzZXQgb2YgZnVuY3Rpb24gdmVyc2lvbnMuCitAdmFye2FyZ30g cG9pbnRzIHRvIHRoZSBjYWxsZ3JhcGggbm9kZSBvZiB0aGUgZGlzcGF0Y2hl ciBmdW5jdGlvbiB3aG9zZQorYm9keSBtdXN0IGJlIGdlbmVyYXRlZC4KK0Bl bmQgZGVmdHlwZWZuCisKIEBkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB7Y29u c3QgY2hhciAqfSBUQVJHRVRfSU5WQUxJRF9XSVRISU5fRE9MT09QIChjb25z dF9ydHggQHZhcntpbnNufSkKIAogVGFrZSBhbiBpbnN0cnVjdGlvbiBpbiBA dmFye2luc259IGFuZCByZXR1cm4gTlVMTCBpZiBpdCBpcyB2YWxpZCB3aXRo aW4gYQpJbmRleDogZ2NjL2RvYy90bS50ZXhpLmluCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy9kb2MvdG0udGV4aS5pbgkocmV2aXNpb24gMTky OTY4KQorKysgZ2NjL2RvYy90bS50ZXhpLmluCSh3b3JraW5nIGNvcHkpCkBA IC05NzkwLDYgKzk3OTAsMTQgQEAgY2hhbmdlZCB2aWEgdGhlIG9wdGltaXpl IGF0dHJpYnV0ZSBvciBwcmFnbWEsIHNlZQogQGNvZGV7VEFSR0VUX09WRVJS SURFX09QVElPTlNfQUZURVJfQ0hBTkdFfQogQGVuZCBkZWZ0eXBlZm4KIAor QGhvb2sgVEFSR0VUX09QVElPTl9GVU5DVElPTl9WRVJTSU9OUworVGhpcyB0 YXJnZXQgaG9vayByZXR1cm5zIEBjb2Rle3RydWV9IGlmIEB2YXJ7REVDTDF9 IGFuZCBAdmFye0RFQ0wyfSBhcmUKK3ZlcnNpb25zIG9mIHRoZSBzYW1lIGZ1 bmN0aW9uLiAgQHZhcntERUNMMX0gYW5kIEB2YXJ7REVDTDJ9IGFyZSBmdW5j dGlvbgordmVyc2lvbnMgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZSBz YW1lIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQKK2RpZmZlcmVudCB0YXJnZXQg c3BlY2lmaWMgYXR0cmlidXRlcywgdGhhdCBpcywgdGhleSBhcmUgY29tcGls ZWQgZm9yCitkaWZmZXJlbnQgdGFyZ2V0IG1hY2hpbmVzLgorQGVuZCBkZWZ0 eXBlZm4KKwogQGhvb2sgVEFSR0VUX0NBTl9JTkxJTkVfUAogVGhpcyB0YXJn ZXQgaG9vayByZXR1cm5zIEBjb2Rle2ZhbHNlfSBpZiB0aGUgQHZhcntjYWxs ZXJ9IGZ1bmN0aW9uCiBjYW5ub3QgaW5saW5lIEB2YXJ7Y2FsbGVlfSwgYmFz ZWQgb24gdGFyZ2V0IHNwZWNpZmljIGluZm9ybWF0aW9uLiAgQnkKQEAgLTEw Nzk4LDYgKzEwODA2LDI5IEBAIFRoZSByZXN1bHQgaXMgYW5vdGhlciB0cmVl IGNvbnRhaW5pbmcgYSBzaW1wbGlmaWVkCiBjYWxsJ3MgcmVzdWx0LiAgSWYg QHZhcntpZ25vcmV9IGlzIHRydWUgdGhlIHZhbHVlIHdpbGwgYmUgaWdub3Jl ZC4KIEBlbmQgZGVmdHlwZWZuCiAKK0Bob29rIFRBUkdFVF9DT01QQVJFX1ZF UlNJT05fUFJJT1JJVFkKK1RoaXMgaG9vayBpcyB1c2VkIHRvIGNvbXBhcmUg dGhlIHRhcmdldCBhdHRyaWJ1dGVzIGluIHR3byBmdW5jdGlvbnMgdG8KK2Rl dGVybWluZSB3aGljaCBmdW5jdGlvbidzIGZlYXR1cmVzIGdldCBoaWdoZXIg cHJpb3JpdHkuICBUaGlzIGlzIHVzZWQKK2R1cmluZyBmdW5jdGlvbiBtdWx0 aS12ZXJzaW9uaW5nIHRvIGZpZ3VyZSBvdXQgdGhlIG9yZGVyIGluIHdoaWNo IHR3bwordmVyc2lvbnMgbXVzdCBiZSBkaXNwYXRjaGVkLiAgQSBmdW5jdGlv biB2ZXJzaW9uIHdpdGggYSBoaWdoZXIgcHJpb3JpdHkKK2lzIGNoZWNrZWQg Zm9yIGRpc3BhdGNoaW5nIGVhcmxpZXIuICBAdmFye2RlY2wxfSBhbmQgQHZh cntkZWNsMn0gYXJlCisgdGhlIHR3byBmdW5jdGlvbiBkZWNscyB0aGF0IHdp bGwgYmUgY29tcGFyZWQuCitAZW5kIGRlZnR5cGVmbgorCitAaG9vayBUQVJH RVRfR0VUX0ZVTkNUSU9OX1ZFUlNJT05TX0RJU1BBVENIRVIKK1RoaXMgaG9v ayBpcyB1c2VkIHRvIGdldCB0aGUgZGlzcGF0Y2hlciBmdW5jdGlvbiBmb3Ig YSBzZXQgb2YgZnVuY3Rpb24KK3ZlcnNpb25zLiAgVGhlIGRpc3BhdGNoZXIg ZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGludm9rZSB0aGUgcmlnaHQgZnVuY3Rp b24KK3ZlcnNpb24gYXQgcnVuLXRpbWUuIEB2YXJ7ZGVjbH0gaXMgb25lIHZl cnNpb24gZnJvbSBhIHNldCBvZiBzZW1hbnRpY2FsbHkKK2lkZW50aWNhbCB2 ZXJzaW9ucy4KK0BlbmQgZGVmdHlwZWZuCisKK0Bob29rIFRBUkdFVF9HRU5F UkFURV9WRVJTSU9OX0RJU1BBVENIRVJfQk9EWQorVGhpcyBob29rIGlzIHVz ZWQgdG8gZ2VuZXJhdGUgdGhlIGRpc3BhdGNoZXIgbG9naWMgdG8gaW52b2tl IHRoZSByaWdodAorZnVuY3Rpb24gdmVyc2lvbiBhdCBydW4tdGltZSBmb3Ig YSBnaXZlbiBzZXQgb2YgZnVuY3Rpb24gdmVyc2lvbnMuCitAdmFye2FyZ30g cG9pbnRzIHRvIHRoZSBjYWxsZ3JhcGggbm9kZSBvZiB0aGUgZGlzcGF0Y2hl ciBmdW5jdGlvbiB3aG9zZQorYm9keSBtdXN0IGJlIGdlbmVyYXRlZC4KK0Bl bmQgZGVmdHlwZWZuCisKIEBob29rIFRBUkdFVF9JTlZBTElEX1dJVEhJTl9E T0xPT1AKIAogVGFrZSBhbiBpbnN0cnVjdGlvbiBpbiBAdmFye2luc259IGFu ZCByZXR1cm4gTlVMTCBpZiBpdCBpcyB2YWxpZCB3aXRoaW4gYQpJbmRleDog Z2NjL3RhcmdldC5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj L3RhcmdldC5kZWYJKHJldmlzaW9uIDE5Mjk2OCkKKysrIGdjYy90YXJnZXQu ZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xMjk4LDYgKzEyOTgsMzcgQEAgREVG SE9PSwogIHRyZWUsICh0cmVlIGZuZGVjbCwgaW50IG5fYXJncywgdHJlZSAq YXJncCwgYm9vbCBpZ25vcmUpLAogIGhvb2tfdHJlZV90cmVlX2ludF90cmVl cF9ib29sX251bGwpCiAKKy8qIFRhcmdldCBob29rIGlzIHVzZWQgdG8gY29t cGFyZSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZXMgaW4gdHdvIGZ1bmN0aW9ucyB0 bworICAgZGV0ZXJtaW5lIHdoaWNoIGZ1bmN0aW9uJ3MgZmVhdHVyZXMgZ2V0 IGhpZ2hlciBwcmlvcml0eS4gIFRoaXMgaXMgdXNlZAorICAgZHVyaW5nIGZ1 bmN0aW9uIG11bHRpLXZlcnNpb25pbmcgdG8gZmlndXJlIG91dCB0aGUgb3Jk ZXIgaW4gd2hpY2ggdHdvCisgICB2ZXJzaW9ucyBtdXN0IGJlIGRpc3BhdGNo ZWQuICBBIGZ1bmN0aW9uIHZlcnNpb24gd2l0aCBhIGhpZ2hlciBwcmlvcml0 eQorICAgaXMgY2hlY2tlZCBmb3IgZGlzcGF0Y2hpbmcgZWFybGllci4gIERF Q0wxIGFuZCBERUNMMiBhcmUKKyAgIHRoZSB0d28gZnVuY3Rpb24gZGVjbHMg dGhhdCB3aWxsIGJlIGNvbXBhcmVkLiBJdCByZXR1cm5zIHBvc2l0aXZlIHZh bHVlCisgICBpZiBERUNMMSBpcyBoaWdoZXIgcHJpb3JpdHksICBuZWdhdGl2 ZSB2YWx1ZSBpZiBERUNMMiBpcyBoaWdoZXIgcHJpb3JpdHkKKyAgIGFuZCAw IGlmIHRoZXkgYXJlIHRoZSBzYW1lLiAqLworREVGSE9PSworKGNvbXBhcmVf dmVyc2lvbl9wcmlvcml0eSwKKyAiIiwKKyBpbnQsICh0cmVlIGRlY2wxLCB0 cmVlIGRlY2wyKSwgTlVMTCkKKworLyogIFRhcmdldCBob29rIGlzIHVzZWQg dG8gZ2VuZXJhdGUgdGhlIGRpc3BhdGNoZXIgbG9naWMgdG8gaW52b2tlIHRo ZSByaWdodAorICAgIGZ1bmN0aW9uIHZlcnNpb24gYXQgcnVuLXRpbWUgZm9y IGEgZ2l2ZW4gc2V0IG9mIGZ1bmN0aW9uIHZlcnNpb25zLgorICAgIEFSRyBw b2ludHMgdG8gdGhlIGNhbGxncmFwaCBub2RlIG9mIHRoZSBkaXNwYXRjaGVy IGZ1bmN0aW9uIHdob3NlIGJvZHkKKyAgICBtdXN0IGJlIGdlbmVyYXRlZC4g ICovCitERUZIT09LCisoZ2VuZXJhdGVfdmVyc2lvbl9kaXNwYXRjaGVyX2Jv ZHksCisgIiIsCisgdHJlZSwgKHZvaWQgKmFyZyksIE5VTEwpIAorCisvKiBU YXJnZXQgaG9vayBpcyB1c2VkIHRvIGdldCB0aGUgZGlzcGF0Y2hlciBmdW5j dGlvbiBmb3IgYSBzZXQgb2YgZnVuY3Rpb24KKyAgIHZlcnNpb25zLiAgVGhl IGRpc3BhdGNoZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGludm9rZSB0aGUg cmlnaHQgZnVuY3Rpb24KKyAgIHZlcnNpb24gYXQgcnVuLXRpbWUuICBERUNM IGlzIG9uZSB2ZXJzaW9uIGZyb20gYSBzZXQgb2Ygc2VtYW50aWNhbGx5Cisg ICBpZGVudGljYWwgdmVyc2lvbnMuICAqLworREVGSE9PSworKGdldF9mdW5j dGlvbl92ZXJzaW9uc19kaXNwYXRjaGVyLAorICIiLAorIHRyZWUsICh2b2lk ICpkZWNsKSwgTlVMTCkKKwogLyogUmV0dXJucyBhIGNvZGUgZm9yIGEgdGFy Z2V0LXNwZWNpZmljIGJ1aWx0aW4gdGhhdCBpbXBsZW1lbnRzCiAgICByZWNp cHJvY2FsIG9mIHRoZSBmdW5jdGlvbiwgb3IgTlVMTF9UUkVFIGlmIG5vdCBh dmFpbGFibGUuICAqLwogREVGSE9PSwpAQCAtMjc3NCw2ICsyODA1LDE2IEBA IERFRkhPT0sKICB2b2lkLCAodm9pZCksCiAgaG9va192b2lkX3ZvaWQpCiAK Ky8qIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIERFQ0wxIGFuZCBE RUNMMiBhcmUgdmVyc2lvbnMgb2YgdGhlIHNhbWUKKyAgIGZ1bmN0aW9uLiAg REVDTDEgYW5kIERFQ0wyIGFyZSBmdW5jdGlvbiB2ZXJzaW9ucyBpZiBhbmQg b25seSBpZiB0aGV5CisgICBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9uIHNpZ25h dHVyZSBhbmQgZGlmZmVyZW50IHRhcmdldCBzcGVjaWZpYyBhdHRyaWJ1dGVz LAorICAgdGhhdCBpcywgdGhleSBhcmUgY29tcGlsZWQgZm9yIGRpZmZlcmVu dCB0YXJnZXQgbWFjaGluZXMuICAqLworREVGSE9PSworKGZ1bmN0aW9uX3Zl cnNpb25zLAorICIiLAorIGJvb2wsICh0cmVlIGRlY2wxLCB0cmVlIGRlY2wy KSwKKyBob29rX2Jvb2xfdHJlZV90cmVlX2ZhbHNlKQorCiAvKiBGdW5jdGlv biB0byBkZXRlcm1pbmUgaWYgb25lIGZ1bmN0aW9uIGNhbiBpbmxpbmUgYW5v dGhlciBmdW5jdGlvbi4gICovCiAjdW5kZWYgSE9PS19QUkVGSVgKICNkZWZp bmUgSE9PS19QUkVGSVggIlRBUkdFVF8iCkluZGV4OiBnY2MvY2dyYXBoLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NncmFwaC5jCShyZXZp c2lvbiAxOTI5NjgpCisrKyBnY2MvY2dyYXBoLmMJKHdvcmtpbmcgY29weSkK QEAgLTEzMiw2ICsxMzIsMTQ0IEBAIHN0YXRpYyBHVFkoKCkpIHN0cnVjdCBj Z3JhcGhfZWRnZSAqZnJlZV9lZGdlczsKIC8qIERpZCBwcm9jc3Nfc2FtZV9i b2R5X2FsaWFzZXMgcnVuPyAgKi8KIGJvb2wgc2FtZV9ib2R5X2FsaWFzZXNf ZG9uZTsKIAorLyogTWFwIGEgY2dyYXBoX25vZGUgdG8gY2dyYXBoX2Z1bmN0 aW9uX3ZlcnNpb25faW5mbyB1c2luZyB0aGlzIGh0YWIuCisgICBUaGUgY2dy YXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyBoYXMgYSBUSElTX05PREUgZmll bGQgdGhhdCBpcyB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgY2dyYXBoX25vZGUu LiAgKi8KKworc3RhdGljIGh0YWJfdCBHVFkoKHBhcmFtX2lzIChzdHJ1Y3Qg Y2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqKSkpCisgIGNncmFwaF9m bnZlcl9odGFiID0gTlVMTDsKKworLyogSGFzaCBmdW5jdGlvbiBmb3IgY2dy YXBoX2ZudmVyX2h0YWIuICAqLworc3RhdGljIGhhc2h2YWxfdAorY2dyYXBo X2ZudmVyX2h0YWJfaGFzaCAoY29uc3Qgdm9pZCAqcHRyKQoreworICBpbnQg dWlkID0gKChjb25zdCBzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25f aW5mbyAqKXB0ciktPnRoaXNfbm9kZS0+dWlkOworICByZXR1cm4gKGhhc2h2 YWxfdCkodWlkKTsKK30KKworLyogZXEgZnVuY3Rpb24gZm9yIGNncmFwaF9m bnZlcl9odGFiLiAgKi8KK3N0YXRpYyBpbnQKK2NncmFwaF9mbnZlcl9odGFi X2VxIChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCit7CisgIGNv bnN0IHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICpuMQor ICAgID0gKGNvbnN0IHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9p bmZvICopcDE7CisgIGNvbnN0IHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVy c2lvbl9pbmZvICpuMgorICAgID0gKGNvbnN0IHN0cnVjdCBjZ3JhcGhfZnVu Y3Rpb25fdmVyc2lvbl9pbmZvICopcDI7CisKKyAgcmV0dXJuIG4xLT50aGlz X25vZGUtPnVpZCA9PSBuMi0+dGhpc19ub2RlLT51aWQ7Cit9CisKKy8qIE1h cmsgYXMgR0Mgcm9vdCBhbGwgYWxsb2NhdGVkIG5vZGVzLiAgKi8KK3N0YXRp YyBHVFkoKCkpIHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZv ICoKKyAgdmVyc2lvbl9pbmZvX25vZGUgPSBOVUxMOworCisvKiBHZXQgdGhl IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gbm9kZSBjb3JyZXNwb25k aW5nIHRvIG5vZGUuICAqLworc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJz aW9uX2luZm8gKgorZ2V0X2NncmFwaF9ub2RlX3ZlcnNpb24gKHN0cnVjdCBj Z3JhcGhfbm9kZSAqbm9kZSkKK3sKKyAgc3RydWN0IGNncmFwaF9mdW5jdGlv bl92ZXJzaW9uX2luZm8gKnJldDsKKyAgc3RydWN0IGNncmFwaF9mdW5jdGlv bl92ZXJzaW9uX2luZm8ga2V5OworICBrZXkudGhpc19ub2RlID0gbm9kZTsK KworICBpZiAoY2dyYXBoX2ZudmVyX2h0YWIgPT0gTlVMTCkKKyAgICByZXR1 cm4gTlVMTDsKKworICByZXQgPSAoc3RydWN0IGNncmFwaF9mdW5jdGlvbl92 ZXJzaW9uX2luZm8gKikKKyAgICBodGFiX2ZpbmQgKGNncmFwaF9mbnZlcl9o dGFiLCAma2V5KTsKKworICByZXR1cm4gcmV0OworfQorCisvKiBJbnNlcnQg YSBuZXcgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyBub2RlIGludG8g Y2dyYXBoX2ZudmVyX2h0YWIKKyAgIGNvcnJlc3BvbmRpbmcgdG8gY2dyYXBo X25vZGUgTk9ERS4gICovCitzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNp b25faW5mbyAqCitpbnNlcnRfbmV3X2NncmFwaF9ub2RlX3ZlcnNpb24gKHN0 cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKK3sKKyAgdm9pZCAqKnNsb3Q7Cisg IAorICB2ZXJzaW9uX2luZm9fbm9kZSA9IE5VTEw7CisgIHZlcnNpb25faW5m b19ub2RlID0gZ2djX2FsbG9jX2NsZWFyZWRfY2dyYXBoX2Z1bmN0aW9uX3Zl cnNpb25faW5mbyAoKTsKKyAgdmVyc2lvbl9pbmZvX25vZGUtPnRoaXNfbm9k ZSA9IG5vZGU7CisKKyAgaWYgKGNncmFwaF9mbnZlcl9odGFiID09IE5VTEwp CisgICAgY2dyYXBoX2ZudmVyX2h0YWIgPSBodGFiX2NyZWF0ZV9nZ2MgKDIs IGNncmFwaF9mbnZlcl9odGFiX2hhc2gsCisJCQkJICAgICAgICAgY2dyYXBo X2ZudmVyX2h0YWJfZXEsIE5VTEwpOworCisgIHNsb3QgPSBodGFiX2ZpbmRf c2xvdCAoY2dyYXBoX2ZudmVyX2h0YWIsIHZlcnNpb25faW5mb19ub2RlLCBJ TlNFUlQpOworICBnY2NfYXNzZXJ0IChzbG90ICE9IE5VTEwpOworICAqc2xv dCA9IHZlcnNpb25faW5mb19ub2RlOworICByZXR1cm4gdmVyc2lvbl9pbmZv X25vZGU7Cit9CisKKy8qIFJlbW92ZSB0aGUgY2dyYXBoX2Z1bmN0aW9uX3Zl cnNpb25faW5mbyBhbmQgY2dyYXBoX25vZGUgZm9yIERFQ0wuICBUaGlzCisg ICBERUNMIGlzIGEgZHVwbGljYXRlIGRlY2xhcmF0aW9uLiAgKi8KK3ZvaWQK K2RlbGV0ZV9mdW5jdGlvbl92ZXJzaW9uICh0cmVlIGRlY2wpCit7CisgIHN0 cnVjdCBjZ3JhcGhfbm9kZSAqZGVjbF9ub2RlID0gY2dyYXBoX2dldF9jcmVh dGVfbm9kZSAoZGVjbCk7CisgIHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVy c2lvbl9pbmZvICpkZWNsX3YgPSBOVUxMOworCisgIGlmIChkZWNsX25vZGUg PT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgZGVjbF92ID0gZ2V0X2NncmFw aF9ub2RlX3ZlcnNpb24gKGRlY2xfbm9kZSk7CisKKyAgaWYgKGRlY2xfdiA9 PSBOVUxMKQorICAgIHJldHVybjsKKworICBpZiAoZGVjbF92LT5wcmV2ICE9 IE5VTEwpCisgICBkZWNsX3YtPnByZXYtPm5leHQgPSBkZWNsX3YtPm5leHQ7 CisKKyAgaWYgKGRlY2xfdi0+bmV4dCAhPSBOVUxMKQorICAgIGRlY2xfdi0+ bmV4dC0+cHJldiA9IGRlY2xfdi0+cHJldjsKKworICBpZiAoY2dyYXBoX2Zu dmVyX2h0YWIgIT0gTlVMTCkKKyAgICBodGFiX3JlbW92ZV9lbHQgKGNncmFw aF9mbnZlcl9odGFiLCBkZWNsX3YpOworCisgIGNncmFwaF9yZW1vdmVfbm9k ZSAoZGVjbF9ub2RlKTsKK30KKworLyogUmVjb3JkIHRoYXQgREVDTDEgYW5k IERFQ0wyIGFyZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsIGZ1bmN0aW9uCisg ICB2ZXJzaW9ucy4gICovCit2b2lkCityZWNvcmRfZnVuY3Rpb25fdmVyc2lv bnMgKHRyZWUgZGVjbDEsIHRyZWUgZGVjbDIpCit7CisgIHN0cnVjdCBjZ3Jh cGhfbm9kZSAqZGVjbDFfbm9kZSA9IGNncmFwaF9nZXRfY3JlYXRlX25vZGUg KGRlY2wxKTsKKyAgc3RydWN0IGNncmFwaF9ub2RlICpkZWNsMl9ub2RlID0g Y2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZGVjbDIpOworICBzdHJ1Y3QgY2dy YXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqZGVjbDFfdiA9IE5VTEw7Cisg IHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICpkZWNsMl92 ID0gTlVMTDsKKyAgc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2lu Zm8gKmJlZm9yZTsKKyAgc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9u X2luZm8gKmFmdGVyOworCisgIGdjY19hc3NlcnQgKGRlY2wxX25vZGUgIT0g TlVMTCAmJiBkZWNsMl9ub2RlICE9IE5VTEwpOworICBkZWNsMV92ID0gZ2V0 X2NncmFwaF9ub2RlX3ZlcnNpb24gKGRlY2wxX25vZGUpOworICBkZWNsMl92 ID0gZ2V0X2NncmFwaF9ub2RlX3ZlcnNpb24gKGRlY2wyX25vZGUpOworCisg IGlmIChkZWNsMV92ICE9IE5VTEwgJiYgZGVjbDJfdiAhPSBOVUxMKQorICAg IHJldHVybjsKKworICBpZiAoZGVjbDFfdiA9PSBOVUxMKQorICAgIGRlY2wx X3YgPSBpbnNlcnRfbmV3X2NncmFwaF9ub2RlX3ZlcnNpb24gKGRlY2wxX25v ZGUpOworCisgIGlmIChkZWNsMl92ID09IE5VTEwpCisgICAgZGVjbDJfdiA9 IGluc2VydF9uZXdfY2dyYXBoX25vZGVfdmVyc2lvbiAoZGVjbDJfbm9kZSk7 CisKKyAgLyogQ2hhaW4gZGVjbDJfdiBhbmQgZGVjbDFfdi4gIEFsbCBzZW1h bnRpY2FsbHkgaWRlbnRpY2FsIHZlcnNpb25zCisgICAgIHdpbGwgYmUgY2hh aW5lZCB0b2dldGhlci4gICovCisKKyAgYmVmb3JlID0gZGVjbDFfdjsKKyAg YWZ0ZXIgPSBkZWNsMl92OworCisgIHdoaWxlIChiZWZvcmUtPm5leHQgIT0g TlVMTCkKKyAgICBiZWZvcmUgPSBiZWZvcmUtPm5leHQ7CisKKyAgd2hpbGUg KGFmdGVyLT5wcmV2ICE9IE5VTEwpCisgICAgYWZ0ZXI9IGFmdGVyLT5wcmV2 OworCisgIGJlZm9yZS0+bmV4dCA9IGFmdGVyOworICBhZnRlci0+cHJldiA9 IGJlZm9yZTsKK30KKwogLyogTWFjcm9zIHRvIGFjY2VzcyB0aGUgbmV4dCBp dGVtIGluIHRoZSBsaXN0IG9mIGZyZWUgY2dyYXBoIG5vZGVzIGFuZAogICAg ZWRnZXMuICovCiAjZGVmaW5lIE5FWFRfRlJFRV9OT0RFKE5PREUpIGNncmFw aCAoKE5PREUpLT5zeW1ib2wubmV4dCkKSW5kZXg6IGdjYy9jZ3JhcGguaAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY2dyYXBoLmgJKHJldmlz aW9uIDE5Mjk2OCkKKysrIGdjYy9jZ3JhcGguaAkod29ya2luZyBjb3B5KQpA QCAtMjc5LDYgKzI3OSw4IEBAIHN0cnVjdCBHVFkoKCkpIGNncmFwaF9ub2Rl IHsKICAgLyogPz8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMu ICBXZSBoYXZlIGVub3VnaCBiaXRzIGluCiAgICAgIGNncmFwaCB0byBjYWxj dWxhdGUgaXQuICAqLwogICB1bnNpZ25lZCB0bV9jbG9uZSA6IDE7CisgIC8q IFRydWUgaWYgdGhpcyBkZWNsIGlzIGEgZGlzcGF0Y2hlciBmb3IgZnVuY3Rp b24gdmVyc2lvbnMuICAqLworICB1bnNpZ25lZCBkaXNwYXRjaGVyX2Z1bmN0 aW9uIDogMTsKIH07CiAKIERFRl9WRUNfUChzeW10YWJfbm9kZSk7CkBAIC0y OTEsNiArMjkzLDQ3IEBAIERFRl9WRUNfUChjZ3JhcGhfbm9kZV9wdHIpOwog REVGX1ZFQ19BTExPQ19QKGNncmFwaF9ub2RlX3B0cixoZWFwKTsKIERFRl9W RUNfQUxMT0NfUChjZ3JhcGhfbm9kZV9wdHIsZ2MpOwogCisvKiBGdW5jdGlv biBNdWx0aXZlcnNpb25pbmcgaW5mby4gICovCitzdHJ1Y3QgR1RZKCgpKSBj Z3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvIHsKKyAgLyogVGhlIGNncmFw aF9ub2RlIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gdmVyc2lvbiBpbmZvIGlz IHN0b3JlZC4gICovCisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqdGhpc19ub2Rl OworICAvKiBDaGFpbnMgYWxsIHRoZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2Fs IGZ1bmN0aW9uIHZlcnNpb25zLiAgVGhlCisgICAgIGZpcnN0IGZ1bmN0aW9u IGluIHRoaXMgY2hhaW4gaXMgdGhlIHZlcnNpb25faW5mbyBub2RlIG9mIHRo ZQorICAgICBkZWZhdWx0IGZ1bmN0aW9uLiAgKi8KKyAgc3RydWN0IGNncmFw aF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKnByZXY7CisgIC8qIElmIHRoaXMg dmVyc2lvbiBub2RlIGNvcnJlc3BvbmRzIHRvIGEgZGlzcGF0Y2hlciBmb3Ig ZnVuY3Rpb24KKyAgICAgdmVyc2lvbnMsIHRoaXMgcG9pbnRzIHRvIHRoZSB2 ZXJzaW9uIGluZm8gbm9kZSBvZiB0aGUgZGVmYXVsdAorICAgICBmdW5jdGlv biwgdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGNoYWluLiAgKi8KKyAgc3RydWN0 IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKm5leHQ7CisgIC8qIElm IHRoaXMgbm9kZSBjb3JyZXNwb25kcyB0byBhIGZ1bmN0aW9uIHZlcnNpb24s IHRoaXMgcG9pbnRzCisgICAgIHRvIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9u IGRlY2wsIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IG11c3QKKyAgICAg YmUgY2FsbGVkIHRvIGV4ZWN1dGUgdGhlIHJpZ2h0IGZ1bmN0aW9uIHZlcnNp b24gYXQgcnVuLXRpbWUuCisKKyAgICAgSWYgdGhpcyBjZ3JhcGggbm9kZSBp cyBhIGRpc3BhdGNoZXIgKGlmIGRpc3BhdGNoZXJfZnVuY3Rpb24gaXMKKyAg ICAgdHJ1ZSwgaW4gdGhlIGNncmFwaF9ub2RlIHN0cnVjdCkgZm9yIGZ1bmN0 aW9uIHZlcnNpb25zLCB0aGlzCisgICAgIHBvaW50cyB0byByZXNvbHZlciBm dW5jdGlvbiwgd2hpY2ggaG9sZHMgdGhlIGZ1bmN0aW9uIGJvZHkgb2YgdGhl CisgICAgIGRpc3BhdGNoZXIuIFRoZSBkaXNwYXRjaGVyIGRlY2wgaXMgYW4g YWxpYXMgdG8gdGhlIHJlc29sdmVyCisgICAgIGZ1bmN0aW9uIGRlY2wuICAq LworICB0cmVlIGRpc3BhdGNoZXJfcmVzb2x2ZXI7Cit9OworCisvKiBHZXQg dGhlIGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gbm9kZSBjb3JyZXNw b25kaW5nIHRvIG5vZGUuICAqLworc3RydWN0IGNncmFwaF9mdW5jdGlvbl92 ZXJzaW9uX2luZm8gKgorICBnZXRfY2dyYXBoX25vZGVfdmVyc2lvbiAoc3Ry dWN0IGNncmFwaF9ub2RlICpub2RlKTsKKworLyogSW5zZXJ0IGEgbmV3IGNn cmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gbm9kZSBpbnRvIGNncmFwaF9m bnZlcl9odGFiCisgICBjb3JyZXNwb25kaW5nIHRvIGNncmFwaF9ub2RlIE5P REUuICAqLworc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8g KgorICBpbnNlcnRfbmV3X2NncmFwaF9ub2RlX3ZlcnNpb24gKHN0cnVjdCBj Z3JhcGhfbm9kZSAqbm9kZSk7CisKKy8qIFJlY29yZCB0aGF0IERFQ0wxIGFu ZCBERUNMMiBhcmUgc2VtYW50aWNhbGx5IGlkZW50aWNhbCBmdW5jdGlvbgor ICAgdmVyc2lvbnMuICAqLwordm9pZCByZWNvcmRfZnVuY3Rpb25fdmVyc2lv bnMgKHRyZWUgZGVjbDEsIHRyZWUgZGVjbDIpOworCisvKiBSZW1vdmUgdGhl IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gYW5kIGNncmFwaF9ub2Rl IGZvciBERUNMLiAgVGhpcworICAgREVDTCBpcyBhIGR1cGxpY2F0ZSBkZWNs YXJhdGlvbi4gICovCit2b2lkIGRlbGV0ZV9mdW5jdGlvbl92ZXJzaW9uICh0 cmVlIGRlY2wpOworCiAvKiBBIGNncmFwaCBub2RlIHNldCBpcyBhIGNvbGxl Y3Rpb24gb2YgY2dyYXBoIG5vZGVzLiAgQSBjZ3JhcGggbm9kZQogICAgY2Fu IGFwcGVhciBpbiBtdWx0aXBsZSBzZXRzLiAgKi8KIHN0cnVjdCBjZ3JhcGhf bm9kZV9zZXRfZGVmCkBAIC02MTcsNiArNjYwLDkgQEAgdm9pZCBpbml0X2Nn cmFwaCAodm9pZCk7CiBib29sIGNncmFwaF9wcm9jZXNzX25ld19mdW5jdGlv bnMgKHZvaWQpOwogdm9pZCBjZ3JhcGhfcHJvY2Vzc19zYW1lX2JvZHlfYWxp YXNlcyAodm9pZCk7CiB2b2lkIGZpeHVwX3NhbWVfY3BwX2FsaWFzX3Zpc2li aWxpdHkgKHN5bXRhYl9ub2RlIG5vZGUsIHN5bXRhYl9ub2RlIHRhcmdldCwg dHJlZSBhbGlhcyk7CisvKiAgSW5pdGlhbGl6ZSBkYXRhc3RydWN0dXJlcyBz byBERUNMIGlzIGEgZnVuY3Rpb24gaW4gbG93ZXJlZCBnaW1wbGUgZm9ybS4K KyAgICBJTl9TU0EgaXMgdHJ1ZSBpZiB0aGUgZ2ltcGxlIGlzIGluIFNTQS4g ICovCitiYXNpY19ibG9jayBpbml0X2xvd2VyZWRfZW1wdHlfZnVuY3Rpb24g KHRyZWUgZGVjbCwgYm9vbCBpbl9zc2EpOwogCiAvKiBJbiBjZ3JhcGhjbG9u ZXMuYyAgKi8KIApJbmRleDogZ2NjL3RyZWUuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvdHJlZS5oCShyZXZpc2lvbiAxOTI5NjgpCisrKyBn Y2MvdHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgwLDYgKzM0ODAsMTIg QEAgZXh0ZXJuIFZFQyh0cmVlLCBnYykgKipkZWNsX2RlYnVnX2FyZ3NfaW5z ZXJ0ICh0cmUKICNkZWZpbmUgREVDTF9GVU5DVElPTl9TUEVDSUZJQ19PUFRJ TUlaQVRJT04oTk9ERSkgXAogICAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5P REUpLT5mdW5jdGlvbl9kZWNsLmZ1bmN0aW9uX3NwZWNpZmljX29wdGltaXph dGlvbikKIAorLyogSW4gRlVOQ1RJT05fREVDTCwgdGhpcyBpcyBzZXQgaWYg dGhpcyBmdW5jdGlvbiBoYXMgb3RoZXIgdmVyc2lvbnMgZ2VuZXJhdGVkCisg ICB1c2luZyAidGFyZ2V0IiBhdHRyaWJ1dGVzLiAgVGhlIGRlZmF1bHQgdmVy c2lvbiBpcyB0aGUgb25lIHdoaWNoIGRvZXMgbm90CisgICBoYXZlIGFueSAi dGFyZ2V0IiBhdHRyaWJ1dGUgc2V0LiAqLworI2RlZmluZSBERUNMX0ZVTkNU SU9OX1ZFUlNJT05FRChOT0RFKVwKKyAgIChGVU5DVElPTl9ERUNMX0NIRUNL IChOT0RFKS0+ZnVuY3Rpb25fZGVjbC52ZXJzaW9uZWRfZnVuY3Rpb24pCisK IC8qIEZVTkNUSU9OX0RFQ0wgaW5oZXJpdHMgZnJvbSBERUNMX05PTl9DT01N T04gYmVjYXVzZSBvZiB0aGUgdXNlIG9mIHRoZQogICAgYXJndW1lbnRzL3Jl c3VsdC9zYXZlZF90cmVlIGZpZWxkcyBieSBmcm9udCBlbmRzLiAgIEl0IHdh cyBlaXRoZXIgaW5oZXJpdAogICAgRlVOQ1RJT05fREVDTCBmcm9tIG5vbl9j b21tb24sIG9yIGluaGVyaXQgbm9uX2NvbW1vbiBmcm9tIEZVTkNUSU9OX0RF Q0wsCkBAIC0zNTI0LDggKzM1MzAsOCBAQCBzdHJ1Y3QgR1RZKCgpKSB0cmVl X2Z1bmN0aW9uX2RlY2wgewogICB1bnNpZ25lZCBsb29waW5nX2NvbnN0X29y X3B1cmVfZmxhZyA6IDE7CiAgIHVuc2lnbmVkIGhhc19kZWJ1Z19hcmdzX2Zs YWcgOiAxOwogICB1bnNpZ25lZCB0bV9jbG9uZV9mbGFnIDogMTsKLQotICAv KiAxIGJpdCBsZWZ0ICovCisgIHVuc2lnbmVkIHZlcnNpb25lZF9mdW5jdGlv biA6IDE7CisgIC8qIE5vIGJpdHMgbGVmdC4gICovCiB9OwogCiAvKiBUaGUg c291cmNlIGxhbmd1YWdlIG9mIHRoZSB0cmFuc2xhdGlvbi11bml0LiAgKi8K SW5kZXg6IGdjYy9jZ3JhcGh1bml0LmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gZ2NjL2NncmFwaHVuaXQuYwkocmV2aXNpb24gMTkyOTY4KQorKysg Z2NjL2NncmFwaHVuaXQuYwkod29ya2luZyBjb3B5KQpAQCAtNjI5LDYgKzYy OSwyMSBAQCBjZ3JhcGhfYW5hbHl6ZV9mdW5jdGlvbiAoc3RydWN0IGNncmFw aF9ub2RlICpub2RlKQogICAgICAgY2dyYXBoX2NyZWF0ZV9lZGdlIChub2Rl LCBjZ3JhcGhfZ2V0X25vZGUgKG5vZGUtPnRodW5rLmFsaWFzKSwKIAkJCSAg TlVMTCwgMCwgQ0dSQVBIX0ZSRVFfQkFTRSk7CiAgICAgfQorICBlbHNlIGlm IChub2RlLT5kaXNwYXRjaGVyX2Z1bmN0aW9uKQorICAgIHsKKyAgICAgIC8q IEdlbmVyYXRlIHRoZSBkaXNwYXRjaGVyIGJvZHkgb2YgbXVsdGktdmVyc2lv bmVkIGZ1bmN0aW9ucy4gICovCisgICAgICBzdHJ1Y3QgY2dyYXBoX2Z1bmN0 aW9uX3ZlcnNpb25faW5mbyAqZGlzcGF0Y2hlcl92ZXJzaW9uX2luZm8KKwk9 IGdldF9jZ3JhcGhfbm9kZV92ZXJzaW9uIChub2RlKTsKKyAgICAgIGlmIChk aXNwYXRjaGVyX3ZlcnNpb25faW5mbyAhPSBOVUxMCisgICAgICAgICAgJiYg KGRpc3BhdGNoZXJfdmVyc2lvbl9pbmZvLT5kaXNwYXRjaGVyX3Jlc29sdmVy CisJICAgICAgPT0gTlVMTF9UUkVFKSkKKwl7CisJICB0cmVlIHJlc29sdmVy ID0gTlVMTF9UUkVFOworCSAgZ2NjX2Fzc2VydCAodGFyZ2V0bS5nZW5lcmF0 ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9keSk7CisJICByZXNvbHZlciA9IHRh cmdldG0uZ2VuZXJhdGVfdmVyc2lvbl9kaXNwYXRjaGVyX2JvZHkgKG5vZGUp OworCSAgZ2NjX2Fzc2VydCAocmVzb2x2ZXIgIT0gTlVMTF9UUkVFKTsKKwl9 CisgICAgfQogICBlbHNlCiAgICAgewogICAgICAgcHVzaF9jZnVuIChERUNM X1NUUlVDVF9GVU5DVElPTiAoZGVjbCkpOwpAQCAtOTE3LDcgKzkzMiw4IEBA IGNncmFwaF9hbmFseXplX2Z1bmN0aW9ucyAodm9pZCkKIAkJIGdjYy5jLXRv cnR1cmUvY29tcGlsZS8yMDAxMTExOS0xLmMgICovCiAJICAgICAgaWYgKCFE RUNMX1NUUlVDVF9GVU5DVElPTiAoZGVjbCkKIAkJICAmJiAoIWNub2RlLT5h bGlhcyB8fCAhY25vZGUtPnRodW5rLmFsaWFzKQotCQkgICYmICFjbm9kZS0+ dGh1bmsudGh1bmtfcCkKKwkJICAmJiAhY25vZGUtPnRodW5rLnRodW5rX3AK KwkJICAmJiAhY25vZGUtPmRpc3BhdGNoZXJfZnVuY3Rpb24pCiAJCXsKIAkJ ICBjZ3JhcGhfcmVzZXRfbm9kZSAoY25vZGUpOwogCQkgIGNub2RlLT5sb2Nh bC5yZWRlZmluZWRfZXh0ZXJuX2lubGluZSA9IHRydWU7CkBAIC0xMTk4LDEz ICsxMjE0LDEzIEBAIG1hcmtfZnVuY3Rpb25zX3RvX291dHB1dCAodm9pZCkK IH0KIAogLyogREVDTCBpcyBGVU5DVElPTl9ERUNMLiAgSW5pdGlhbGl6ZSBk YXRhc3RydWN0dXJlcyBzbyBERUNMIGlzIGEgZnVuY3Rpb24KLSAgIGluIGxv d2VyZWQgZ2ltcGxlIGZvcm0uCisgICBpbiBsb3dlcmVkIGdpbXBsZSBmb3Jt LiAgSU5fU1NBIGlzIHRydWUgaWYgdGhlIGdpbXBsZSBpcyBpbiBTU0EuCiAg ICAKICAgIFNldCBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgYW5kIGNmdW4gdG8g bmV3bHkgY29uc3RydWN0ZWQgZW1wdHkgZnVuY3Rpb24gYm9keS4KICAgIHJl dHVybiBiYXNpYyBibG9jayBpbiB0aGUgZnVuY3Rpb24gYm9keS4gICovCiAK LXN0YXRpYyBiYXNpY19ibG9jawotaW5pdF9sb3dlcmVkX2VtcHR5X2Z1bmN0 aW9uICh0cmVlIGRlY2wpCitiYXNpY19ibG9jaworaW5pdF9sb3dlcmVkX2Vt cHR5X2Z1bmN0aW9uICh0cmVlIGRlY2wsIGJvb2wgaW5fc3NhKQogewogICBi YXNpY19ibG9jayBiYjsKIApAQCAtMTIxMiw5ICsxMjI4LDE0IEBAIG1hcmtf ZnVuY3Rpb25zX3RvX291dHB1dCAodm9pZCkKICAgYWxsb2NhdGVfc3RydWN0 X2Z1bmN0aW9uIChkZWNsLCBmYWxzZSk7CiAgIGdpbXBsZV9yZWdpc3Rlcl9j ZmdfaG9va3MgKCk7CiAgIGluaXRfZW1wdHlfdHJlZV9jZmcgKCk7Ci0gIGlu aXRfdHJlZV9zc2EgKGNmdW4pOwotICBpbml0X3NzYV9vcGVyYW5kcyAoY2Z1 bik7Ci0gIGNmdW4tPmdpbXBsZV9kZi0+aW5fc3NhX3AgPSB0cnVlOworCisg IGlmIChpbl9zc2EpCisgICAgeworICAgICAgaW5pdF90cmVlX3NzYSAoY2Z1 bik7CisgICAgICBpbml0X3NzYV9vcGVyYW5kcyAoY2Z1bik7CisgICAgICBj ZnVuLT5naW1wbGVfZGYtPmluX3NzYV9wID0gdHJ1ZTsKKyAgICB9CisKICAg REVDTF9JTklUSUFMIChkZWNsKSA9IG1ha2Vfbm9kZSAoQkxPQ0spOwogCiAg IERFQ0xfU0FWRURfVFJFRSAoZGVjbCkgPSBlcnJvcl9tYXJrX25vZGU7CkBA IC0xMjIzLDcgKzEyNDQsNyBAQCBtYXJrX2Z1bmN0aW9uc190b19vdXRwdXQg KHZvaWQpCiAKICAgLyogQ3JlYXRlIEJCIGZvciBib2R5IG9mIHRoZSBmdW5j dGlvbiBhbmQgY29ubmVjdCBpdCBwcm9wZXJseS4gICovCiAgIGJiID0gY3Jl YXRlX2Jhc2ljX2Jsb2NrIChOVUxMLCAodm9pZCAqKSAwLCBFTlRSWV9CTE9D S19QVFIpOwotICBtYWtlX2VkZ2UgKEVOVFJZX0JMT0NLX1BUUiwgYmIsIDAp OworICBtYWtlX2VkZ2UgKEVOVFJZX0JMT0NLX1BUUiwgYmIsIEVER0VfRkFM TFRIUlUpOwogICBtYWtlX2VkZ2UgKGJiLCBFWElUX0JMT0NLX1BUUiwgMCk7 CiAKICAgcmV0dXJuIGJiOwpAQCAtMTQyMSw3ICsxNDQyLDcgQEAgYXNzZW1i bGVfdGh1bmsgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKICAgICAgIGVs c2UKIAlyZXNkZWNsID0gREVDTF9SRVNVTFQgKHRodW5rX2ZuZGVjbCk7CiAK LSAgICAgIGJiID0gdGhlbl9iYiA9IGVsc2VfYmIgPSByZXR1cm5fYmIgPSBp bml0X2xvd2VyZWRfZW1wdHlfZnVuY3Rpb24gKHRodW5rX2ZuZGVjbCk7Cisg ICAgICBiYiA9IHRoZW5fYmIgPSBlbHNlX2JiID0gcmV0dXJuX2JiID0gaW5p dF9sb3dlcmVkX2VtcHR5X2Z1bmN0aW9uICh0aHVua19mbmRlY2wsIHRydWUp OwogCiAgICAgICBic2kgPSBnc2lfc3RhcnRfYmIgKGJiKTsKIApJbmRleDog Z2NjL2NwL2NsYXNzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj L2NwL2NsYXNzLmMJKHJldmlzaW9uIDE5Mjk2OCkKKysrIGdjYy9jcC9jbGFz cy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg3LDYgKzEwODcsMzUgQEAgYWRk X21ldGhvZCAodHJlZSB0eXBlLCB0cmVlIG1ldGhvZCwgdHJlZSB1c2luZ19k ZWMKIAkgICAgICB8fCBzYW1lX3R5cGVfcCAoVFJFRV9UWVBFIChmbl90eXBl KSwKIAkJCSAgICAgIFRSRUVfVFlQRSAobWV0aG9kX3R5cGUpKSkpCiAJewor CSAgLyogRm9yIGZ1bmN0aW9uIHZlcnNpb25zLCB0aGVpciBwYXJtcyBhbmQg dHlwZXMgbWF0Y2gKKwkgICAgIGJ1dCB0aGV5IGFyZSBub3QgZHVwbGljYXRl cy4gIFJlY29yZCBmdW5jdGlvbiB2ZXJzaW9ucworCSAgICAgYXMgYW5kIHdo ZW4gdGhleSBhcmUgZm91bmQuICBleHRlcm4gIkMiIGZ1bmN0aW9ucyBhcmUK KwkgICAgIG5vdCB0cmVhdGVkIGFzIHZlcnNpb25zLiAgKi8KKwkgIGlmIChU UkVFX0NPREUgKGZuKSA9PSBGVU5DVElPTl9ERUNMCisJICAgICAgJiYgVFJF RV9DT0RFIChtZXRob2QpID09IEZVTkNUSU9OX0RFQ0wKKwkgICAgICAmJiAh REVDTF9FWFRFUk5fQ19QIChmbikKKwkgICAgICAmJiAhREVDTF9FWFRFUk5f Q19QIChtZXRob2QpCisJICAgICAgJiYgKERFQ0xfRlVOQ1RJT05fU1BFQ0lG SUNfVEFSR0VUIChmbikKKwkJICB8fCBERUNMX0ZVTkNUSU9OX1NQRUNJRklD X1RBUkdFVCAobWV0aG9kKSkKKwkgICAgICAmJiB0YXJnZXRtLnRhcmdldF9v cHRpb24uZnVuY3Rpb25fdmVyc2lvbnMgKGZuLCBtZXRob2QpKQorIAkgICAg eworCSAgICAgIC8qIE1hcmsgZnVuY3Rpb25zIGFzIHZlcnNpb25zIGlmIG5l Y2Vzc2FyeS4gIE1vZGlmeSB0aGUgbWFuZ2xlZAorCQkgZGVjbCBuYW1lIGlm IG5lY2Vzc2FyeS4gICovCisJICAgICAgaWYgKCFERUNMX0ZVTkNUSU9OX1ZF UlNJT05FRCAoZm4pKQorCQl7CisJCSAgREVDTF9GVU5DVElPTl9WRVJTSU9O RUQgKGZuKSA9IDE7CisJCSAgaWYgKERFQ0xfQVNTRU1CTEVSX05BTUVfU0VU X1AgKGZuKSkKKwkJICAgIG1hbmdsZV9kZWNsIChmbik7CisJCX0KKwkgICAg ICBpZiAoIURFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChtZXRob2QpKQorCQl7 CisJCSAgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKG1ldGhvZCkgPSAxOwor CQkgIGlmIChERUNMX0FTU0VNQkxFUl9OQU1FX1NFVF9QIChtZXRob2QpKQor CQkgICAgbWFuZ2xlX2RlY2wgKG1ldGhvZCk7CisJCX0KKwkgICAgICByZWNv cmRfZnVuY3Rpb25fdmVyc2lvbnMgKGZuLCBtZXRob2QpOworCSAgICAgIGNv bnRpbnVlOworCSAgICB9CiAJICBpZiAoREVDTF9JTkhFUklURURfQ1RPUl9C QVNFIChtZXRob2QpKQogCSAgICB7CiAJICAgICAgaWYgKERFQ0xfSU5IRVJJ VEVEX0NUT1JfQkFTRSAoZm4pKQpAQCAtNzE2MiwxMyArNzE5MSwyNyBAQCBy ZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbiAodHJlZSB0 YXJnZQogICAgIHsKICAgICAgIC8qIFRoZXJlIHdlcmUgdG9vIG1hbnkgbWF0 Y2hlcy4gIEZpcnN0IGNoZWNrIGlmIHRoZXkncmUgYWxsCiAJIHRoZSBzYW1l IGZ1bmN0aW9uLiAgKi8KLSAgICAgIHRyZWUgbWF0Y2g7CisgICAgICB0cmVl IG1hdGNoID0gTlVMTF9UUkVFOwogCiAgICAgICBmbiA9IFRSRUVfUFVSUE9T RSAobWF0Y2hlcyk7Ci0gICAgICBmb3IgKG1hdGNoID0gVFJFRV9DSEFJTiAo bWF0Y2hlcyk7IG1hdGNoOyBtYXRjaCA9IFRSRUVfQ0hBSU4gKG1hdGNoKSkK LQlpZiAoIWRlY2xzX21hdGNoIChmbiwgVFJFRV9QVVJQT1NFIChtYXRjaCkp KQotCSAgYnJlYWs7CiAKKyAgICAgIC8qIEZvciBtdWx0aS12ZXJzaW9uZWQg ZnVuY3Rpb25zLCBtb3JlIHRoYW4gb25lIG1hdGNoIGlzIGp1c3QgZmluZS4K KwkgQ2FsbCBkZWNsc19tYXRjaCB0byBtYWtlIHN1cmUgdGhleSBhcmUgZGlm ZmVyZW50IGJlY2F1c2UgdGhleSBhcmUKKwkgdmVyc2lvbmVkLiAgKi8KKyAg ICAgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4pKQorCXsKKyAg ICAgICAgICBmb3IgKG1hdGNoID0gVFJFRV9DSEFJTiAobWF0Y2hlcyk7IG1h dGNoOyBtYXRjaCA9IFRSRUVfQ0hBSU4gKG1hdGNoKSkKKyAgCSAgICBpZiAo IURFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChUUkVFX1BVUlBPU0UgKG1hdGNo KSkKKwkgICAgICAgIHx8IGRlY2xzX21hdGNoIChmbiwgVFJFRV9QVVJQT1NF IChtYXRjaCkpKQorCSAgICAgIGJyZWFrOworCX0KKyAgICAgIGVsc2UKKwl7 CisgICAgICAgICAgZm9yIChtYXRjaCA9IFRSRUVfQ0hBSU4gKG1hdGNoZXMp OyBtYXRjaDsgbWF0Y2ggPSBUUkVFX0NIQUlOIChtYXRjaCkpCisgIAkgICAg aWYgKCFkZWNsc19tYXRjaCAoZm4sIFRSRUVfUFVSUE9TRSAobWF0Y2gpKSkK KwkgICAgICBicmVhazsKKwl9CisKICAgICAgIGlmIChtYXRjaCkKIAl7CiAJ ICBpZiAoZmxhZ3MgJiB0Zl9lcnJvcikKQEAgLTcyMzAsNiArNzI3MywyOSBA QCByZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbiAodHJl ZSB0YXJnZQogICAgICAgcGVyZm9ybV9vcl9kZWZlcl9hY2Nlc3NfY2hlY2sg KGFjY2Vzc19wYXRoLCBmbiwgZm4sIGZsYWdzKTsKICAgICB9CiAKKyAgLyog SWYgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBtdWx0aS12ZXJz aW9uZWQgaXMgcmVxdWVzdGVkLCB0aGUKKyAgICAgcG9pbnRlciB0byB0aGUg ZGlzcGF0Y2hlciBmdW5jdGlvbiBpcyByZXR1cm5lZCBpbnN0ZWFkLiAgVGhp cyB3b3JrcworICAgICB3ZWxsIGJlY2F1c2UgaW5kaXJlY3RseSBjYWxsaW5n IHRoZSBmdW5jdGlvbiB3aWxsIGRpc3BhdGNoIHRoZSByaWdodAorICAgICBm dW5jdGlvbiB2ZXJzaW9uIGF0IHJ1bi10aW1lLiAgKi8KKyAgaWYgKERFQ0xf RlVOQ1RJT05fVkVSU0lPTkVEIChmbikpCisgICAgeworICAgICAgc3RydWN0 IGNncmFwaF9ub2RlICpub2RlID0gTlVMTDsKKyAgICAgIHRyZWUgZGlzcGF0 Y2hlcl9kZWNsID0gTlVMTDsKKyAgICAgIGdjY19hc3NlcnQgKHRhcmdldG0u Z2V0X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIpOworICAgICAgZGlz cGF0Y2hlcl9kZWNsID0gdGFyZ2V0bS5nZXRfZnVuY3Rpb25fdmVyc2lvbnNf ZGlzcGF0Y2hlciAoZm4pOworICAgICAgaWYgKCFkaXNwYXRjaGVyX2RlY2wp CisJeworCSAgZXJyb3JfYXQgKGlucHV0X2xvY2F0aW9uLCAiUG9pbnRlciB0 byBhIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9uIgorCQkgICAgIiB3aXRob3V0 IGEgZGVmYXVsdCBpcyBub3QgYWxsb3dlZCIpOworCSAgcmV0dXJuIGVycm9y X21hcmtfbm9kZTsKKwl9CisgICAgICByZXRyb2ZpdF9sYW5nX2RlY2wgKGRp c3BhdGNoZXJfZGVjbCk7CisgICAgICBtYXJrX3VzZWQgKGZuKTsKKyAgICAg IG5vZGUgPSBjZ3JhcGhfZ2V0X2NyZWF0ZV9ub2RlIChkaXNwYXRjaGVyX2Rl Y2wpOworICAgICAgZ2NjX2Fzc2VydCAobm9kZSAhPSBOVUxMKTsKKyAgICAg IGZuID0gZGlzcGF0Y2hlcl9kZWNsOworICAgIH0KKwogICBpZiAoVFlQRV9Q VFJGTl9QICh0YXJnZXRfdHlwZSkgfHwgVFlQRV9QVFJNRU1GVU5DX1AgKHRh cmdldF90eXBlKSkKICAgICByZXR1cm4gY3BfYnVpbGRfYWRkcl9leHByIChm biwgZmxhZ3MpOwogICBlbHNlCkluZGV4OiBnY2MvY3AvZGVjbC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jcC9kZWNsLmMJKHJldmlzaW9u IDE5Mjk2OCkKKysrIGdjYy9jcC9kZWNsLmMJKHdvcmtpbmcgY29weSkKQEAg LTUzLDYgKzUzLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBD T1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJwb2ludGVyLXNldC5o IgogI2luY2x1ZGUgInNwbGF5LXRyZWUuaCIKICNpbmNsdWRlICJwbHVnaW4u aCIKKyNpbmNsdWRlICJjZ3JhcGguaCIKIAogLyogUG9zc2libGUgY2FzZXMg b2YgYmFkIHNwZWNpZmllcnMgdHlwZSB1c2VkIGJ5IGJhZF9zcGVjaWZpZXJz LiAqLwogZW51bSBiYWRfc3BlY19wbGFjZSB7CkBAIC05ODEsNiArOTgyLDM2 IEBAIGRlY2xzX21hdGNoICh0cmVlIG5ld2RlY2wsIHRyZWUgb2xkZGVjbCkK ICAgICAgIGlmICh0MSAhPSB0MikKIAlyZXR1cm4gMDsKIAorICAgICAgLyog VGhlIGRlY2xzIGRvbnQgbWF0Y2ggaWYgdGhleSBjb3JyZXNwb25kIHRvIHR3 byBkaWZmZXJlbnQgdmVyc2lvbnMKKwkgb2YgdGhlIHNhbWUgZnVuY3Rpb24u ICAgRGlzYWxsb3cgZXh0ZXJuICJDIiBmdW5jdGlvbnMgdG8gYmUKKwkgdmVy c2lvbnMgZm9yIG5vdy4gICovCisgICAgICBpZiAoY29tcHBhcm1zIChwMSwg cDIpCisJICAmJiBzYW1lX3R5cGVfcCAoVFJFRV9UWVBFIChmMSksIFRSRUVf VFlQRSAoZjIpKQorCSAgJiYgIURFQ0xfRVhURVJOX0NfUCAobmV3ZGVjbCkK KwkgICYmICFERUNMX0VYVEVSTl9DX1AgKG9sZGRlY2wpCisJICAmJiB0YXJn ZXRtLnRhcmdldF9vcHRpb24uZnVuY3Rpb25fdmVyc2lvbnMgKG5ld2RlY2ws IG9sZGRlY2wpKQorCXsKKwkgIC8qIE1hcmsgZnVuY3Rpb25zIGFzIHZlcnNp b25zIGlmIG5lY2Vzc2FyeS4gIE1vZGlmeSB0aGUgbWFuZ2xlZCBkZWNsCisJ ICAgICBuYW1lIGlmIG5lY2Vzc2FyeS4gICovCisJICBpZiAoREVDTF9GVU5D VElPTl9WRVJTSU9ORUQgKG5ld2RlY2wpCisJICAgICAgJiYgREVDTF9GVU5D VElPTl9WRVJTSU9ORUQgKG9sZGRlY2wpKQorCSAgICByZXR1cm4gMDsKKwkg IGlmICghREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKG5ld2RlY2wpKQorCSAg ICB7CisJICAgICAgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKG5ld2RlY2wp ID0gMTsKKwkgICAgICBpZiAoREVDTF9BU1NFTUJMRVJfTkFNRV9TRVRfUCAo bmV3ZGVjbCkpCisJICAgICAgICBtYW5nbGVfZGVjbCAobmV3ZGVjbCk7CisJ ICAgIH0KKwkgIGlmICghREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKG9sZGRl Y2wpKQorCSAgICB7CisJICAgICAgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQg KG9sZGRlY2wpID0gMTsKKwkgICAgICBpZiAoREVDTF9BU1NFTUJMRVJfTkFN RV9TRVRfUCAob2xkZGVjbCkpCisJICAgICAgIG1hbmdsZV9kZWNsIChvbGRk ZWNsKTsKKwkgICAgfQorCSAgcmVjb3JkX2Z1bmN0aW9uX3ZlcnNpb25zIChv bGRkZWNsLCBuZXdkZWNsKTsKKwkgIHJldHVybiAwOworCX0KKwogICAgICAg aWYgKENQX0RFQ0xfQ09OVEVYVCAobmV3ZGVjbCkgIT0gQ1BfREVDTF9DT05U RVhUIChvbGRkZWNsKQogCSAgJiYgISAoREVDTF9FWFRFUk5fQ19QIChuZXdk ZWNsKQogCQkmJiBERUNMX0VYVEVSTl9DX1AgKG9sZGRlY2wpKSkKQEAgLTE0 OTksNyArMTUzMCwxMSBAQCBkdXBsaWNhdGVfZGVjbHMgKHRyZWUgbmV3ZGVj bCwgdHJlZSBvbGRkZWNsLCBib29sCiAJICAgICAgZXJyb3IgKCJwcmV2aW91 cyBkZWNsYXJhdGlvbiAlcSsjRCBoZXJlIiwgb2xkZGVjbCk7CiAJICAgICAg cmV0dXJuIE5VTExfVFJFRTsKIAkgICAgfQotCSAgZWxzZSBpZiAoY29tcHBh cm1zIChUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFIChuZXdkZWNsKSksCisJ ICAvKiBGb3IgZnVuY3Rpb24gdmVyc2lvbnMsIHBhcmFtcyBhbmQgdHlwZXMg bWF0Y2gsIGJ1dCB0aGV5CisJICAgICBhcmUgbm90IGFtYmlndW91cy4gICov CisJICBlbHNlIGlmICgoIURFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChuZXdk ZWNsKQorCQkgICAgJiYgIURFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChvbGRk ZWNsKSkKKwkJICAgJiYgY29tcHBhcm1zIChUWVBFX0FSR19UWVBFUyAoVFJF RV9UWVBFIChuZXdkZWNsKSksCiAJCQkgICAgICBUWVBFX0FSR19UWVBFUyAo VFJFRV9UWVBFIChvbGRkZWNsKSkpKQogCSAgICB7CiAJICAgICAgZXJyb3Ig KCJuZXcgZGVjbGFyYXRpb24gJXEjRCIsIG5ld2RlY2wpOwpAQCAtMjI3Miw2 ICsyMzA3LDE1IEBAIGR1cGxpY2F0ZV9kZWNscyAodHJlZSBuZXdkZWNsLCB0 cmVlIG9sZGRlY2wsIGJvb2wKICAgZWxzZSBpZiAoREVDTF9QUkVTRVJWRV9Q IChuZXdkZWNsKSkKICAgICBERUNMX1BSRVNFUlZFX1AgKG9sZGRlY2wpID0g MTsKIAorICAvKiBJZiB0aGUgb2xkZGVjbCBpcyBhIHZlcnNpb24sIHNvIGlz IHRoZSBuZXdkZWNsLiAgKi8KKyAgaWYgKFRSRUVfQ09ERSAobmV3ZGVjbCkg PT0gRlVOQ1RJT05fREVDTAorICAgICAgJiYgREVDTF9GVU5DVElPTl9WRVJT SU9ORUQgKG9sZGRlY2wpKQorICAgIHsKKyAgICAgIERFQ0xfRlVOQ1RJT05f VkVSU0lPTkVEIChuZXdkZWNsKSA9IDE7CisgICAgICAvKiBuZXdkZWNsIHdp bGwgYmUgcHVyZ2VkIGFuZCBpcyBubyBsb25nZXIgYSB2ZXJzaW9uLiAgKi8K KyAgICAgIGRlbGV0ZV9mdW5jdGlvbl92ZXJzaW9uIChuZXdkZWNsKTsKKyAg ICB9CisKICAgaWYgKFRSRUVfQ09ERSAobmV3ZGVjbCkgPT0gRlVOQ1RJT05f REVDTCkKICAgICB7CiAgICAgICBpbnQgZnVuY3Rpb25fc2l6ZTsKSW5kZXg6 IGdjYy9jcC9kZWNsMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdj Yy9jcC9kZWNsMi5jCShyZXZpc2lvbiAxOTI5NjgpCisrKyBnY2MvY3AvZGVj bDIuYwkod29ya2luZyBjb3B5KQpAQCAtNjc0LDkgKzY3NCwxMyBAQCBjaGVj a19jbGFzc2ZuICh0cmVlIGN0eXBlLCB0cmVlIGZ1bmN0aW9uLCB0cmVlIHRl bQogCSAgaWYgKGlzX3RlbXBsYXRlICE9IChUUkVFX0NPREUgKGZuZGVjbCkg PT0gVEVNUExBVEVfREVDTCkpCiAJICAgIGNvbnRpbnVlOwogCisJICAvKiBX aGlsZSBmaW5kaW5nIGEgbWF0Y2gsIHNhbWUgdHlwZXMgYW5kIHBhcmFtcyBh cmUgbm90IGVub3VnaAorCSAgICAgaWYgdGhlIGZ1bmN0aW9uIGlzIHZlcnNp b25lZC4gIEFsc28gY2hlY2sgdmVyc2lvbiAoInRhcmdldCIpCisJICAgICBh dHRyaWJ1dGVzLiAgKi8KIAkgIGlmIChzYW1lX3R5cGVfcCAoVFJFRV9UWVBF IChUUkVFX1RZUEUgKGZ1bmN0aW9uKSksCiAJCQkgICBUUkVFX1RZUEUgKFRS RUVfVFlQRSAoZm5kZWNsKSkpCiAJICAgICAgJiYgY29tcHBhcm1zIChwMSwg cDIpCisJICAgICAgJiYgIXRhcmdldG0udGFyZ2V0X29wdGlvbi5mdW5jdGlv bl92ZXJzaW9ucyAoZnVuY3Rpb24sIGZuZGVjbCkKIAkgICAgICAmJiAoIWlz X3RlbXBsYXRlCiAJCSAgfHwgY29tcF90ZW1wbGF0ZV9wYXJtcyAodGVtcGxh dGVfcGFybXMsCiAJCQkJCSAgREVDTF9URU1QTEFURV9QQVJNUyAoZm5kZWNs KSkpCkluZGV4OiBnY2MvY3AvY2FsbC5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy9jcC9jYWxsLmMJKHJldmlzaW9uIDE5Mjk2OCkKKysrIGdj Yy9jcC9jYWxsLmMJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAg YWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKICNpbmNsdWRlICJsYW5naG9va3MuaCIKICNpbmNsdWRlICJjLWZh bWlseS9jLW9iamMuaCIKICNpbmNsdWRlICJ0aW1ldmFyLmgiCisjaW5jbHVk ZSAiY2dyYXBoLmgiCiAKIC8qIFRoZSB2YXJpb3VzIGtpbmRzIG9mIGNvbnZl cnNpb24uICAqLwogCkBAIC02NTE0LDYgKzY1MTUsMzEgQEAgbWFnaWNfdmFy YXJnc19wICh0cmVlIGZuKQogICByZXR1cm4gZmFsc2U7CiB9CiAKKy8qIFJl dHVybnMgdGhlIGRlY2wgb2YgdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24gaWYg Rk4gaXMgYSBmdW5jdGlvbiB2ZXJzaW9uLiAgKi8KKworc3RhdGljIHRyZWUK K2dldF9mdW5jdGlvbl92ZXJzaW9uX2Rpc3BhdGNoZXIgKHRyZWUgZm4pCit7 CisgIHRyZWUgZGlzcGF0Y2hlcl9kZWNsID0gTlVMTDsKKworICBnY2NfYXNz ZXJ0IChUUkVFX0NPREUgKGZuKSA9PSBGVU5DVElPTl9ERUNMCisJICAgICAg JiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGZuKSk7CisKKyAgZ2NjX2Fz c2VydCAodGFyZ2V0bS5nZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlzcGF0Y2hl cik7CisgIGRpc3BhdGNoZXJfZGVjbCA9IHRhcmdldG0uZ2V0X2Z1bmN0aW9u X3ZlcnNpb25zX2Rpc3BhdGNoZXIgKGZuKTsKKworICBpZiAoZGlzcGF0Y2hl cl9kZWNsID09IE5VTEwpCisgICAgeworICAgICAgZXJyb3JfYXQgKGlucHV0 X2xvY2F0aW9uLCAiQ2FsbCB0byBtdWx0aXZlcnNpb25lZCBmdW5jdGlvbiIK KyAgICAgICAgICAgICAgICAiIHdpdGhvdXQgYSBkZWZhdWx0IGlzIG5vdCBh bGxvd2VkIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgcmV0 cm9maXRfbGFuZ19kZWNsIChkaXNwYXRjaGVyX2RlY2wpOworICBnY2NfYXNz ZXJ0IChkaXNwYXRjaGVyX2RlY2wgIT0gTlVMTCk7CisgIHJldHVybiBkaXNw YXRjaGVyX2RlY2w7Cit9CisKIC8qIFN1YnJvdXRpbmUgb2YgdGhlIHZhcmlv dXMgYnVpbGRfKl9jYWxsIGZ1bmN0aW9ucy4gIE92ZXJsb2FkIHJlc29sdXRp b24KICAgIGhhcyBjaG9zZW4gYSB3aW5uaW5nIGNhbmRpZGF0ZSBDQU5EOyBi dWlsZCB1cCBhIENBTExfRVhQUiBhY2NvcmRpbmdseS4KICAgIEFSR1MgaXMg YSBUUkVFX0xJU1Qgb2YgdGhlIHVuY29udmVydGVkIGFyZ3VtZW50cyB0byB0 aGUgY2FsbC4gIEZMQUdTIGlzIGEKQEAgLTY5NjYsNiArNjk5MiwyMyBAQCBi dWlsZF9vdmVyX2NhbGwgKHN0cnVjdCB6X2NhbmRpZGF0ZSAqY2FuZCwgaW50 IGZsYQogICBpZiAoIWFscmVhZHlfdXNlZCkKICAgICBtYXJrX3VzZWQgKGZu KTsKIAorICAvKiBGb3IgY2FsbHMgdG8gYSBtdWx0aS12ZXJzaW9uZWQgZnVu Y3Rpb24sIG92ZXJsb2FkIHJlc29sdXRpb24KKyAgICAgcmV0dXJucyB0aGUg ZnVuY3Rpb24gd2l0aCB0aGUgaGlnaGVzdCB0YXJnZXQgcHJpb3JpdHksIHRo YXQgaXMsCisgICAgIHRoZSB2ZXJzaW9uIHRoYXQgd2lsbCBjaGVja2VkIGZv ciBkaXNwYXRjaGluZyBmaXJzdC4gIElmIHRoaXMKKyAgICAgdmVyc2lvbiBp cyBpbmxpbmFibGUsIGEgZGlyZWN0IGNhbGwgdG8gdGhpcyB2ZXJzaW9uIGNh biBiZSBtYWRlCisgICAgIG90aGVyd2lzZSB0aGUgY2FsbCBzaG91bGQgZ28g dGhyb3VnaCB0aGUgZGlzcGF0Y2hlci4gICovCisKKyAgaWYgKERFQ0xfRlVO Q1RJT05fVkVSU0lPTkVEIChmbikKKyAgICAgICYmICF0YXJnZXRtLnRhcmdl dF9vcHRpb24uY2FuX2lubGluZV9wIChjdXJyZW50X2Z1bmN0aW9uX2RlY2ws IGZuKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgY2dyYXBoX25vZGUgKmRpc3Bh dGNoZXJfbm9kZSA9IE5VTEw7CisgICAgICBmbiA9IGdldF9mdW5jdGlvbl92 ZXJzaW9uX2Rpc3BhdGNoZXIgKGZuKTsKKyAgICAgIGlmIChmbiA9PSBOVUxM KQorCXJldHVybiBOVUxMOworICAgICAgZGlzcGF0Y2hlcl9ub2RlID0gY2dy YXBoX2dldF9jcmVhdGVfbm9kZSAoZm4pOworICAgICAgZ2NjX2Fzc2VydCAo ZGlzcGF0Y2hlcl9ub2RlICE9IE5VTEwpOworICAgIH0KKwogICBpZiAoREVD TF9WSU5ERVggKGZuKSAmJiAoZmxhZ3MgJiBMT09LVVBfTk9OVklSVFVBTCkg PT0gMCkKICAgICB7CiAgICAgICB0cmVlIHQ7CkBAIC04NDgxLDYgKzg1MjQs MzggQEAgam91c3QgKHN0cnVjdCB6X2NhbmRpZGF0ZSAqY2FuZDEsIHN0cnVj dCB6X2NhbmRpZGEKIAl9CiAgICAgfQogCisgIC8qIEZvciBjYW5kaWRhdGVz IG9mIGEgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9uLCAgbWFrZSB0aGUgdmVy c2lvbiB3aXRoCisgICAgIHRoZSBoaWdoZXN0IHByaW9yaXR5IHdpbi4gIFRo aXMgdmVyc2lvbiB3aWxsIGJlIGNoZWNrZWQgZm9yIGRpc3BhdGNoaW5nCisg ICAgIGZpcnN0LiAgSWYgdGhpcyB2ZXJzaW9uIGNhbiBiZSBpbmxpbmVkIGlu dG8gdGhlIGNhbGxlciwgdGhlIGZyb250LWVuZAorICAgICB3aWxsIHNpbXBs eSBtYWtlIGEgZGlyZWN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4gICovCisK KyAgaWYgKFRSRUVfQ09ERSAoY2FuZDEtPmZuKSA9PSBGVU5DVElPTl9ERUNM CisgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoY2FuZDEtPmZu KQorICAgICAgJiYgVFJFRV9DT0RFIChjYW5kMi0+Zm4pID09IEZVTkNUSU9O X0RFQ0wKKyAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChjYW5k Mi0+Zm4pKQorICAgIHsKKyAgICAgIHRyZWUgZjEgPSBUUkVFX1RZUEUgKGNh bmQxLT5mbik7CisgICAgICB0cmVlIGYyID0gVFJFRV9UWVBFIChjYW5kMi0+ Zm4pOworICAgICAgdHJlZSBwMSA9IFRZUEVfQVJHX1RZUEVTIChmMSk7Cisg ICAgICB0cmVlIHAyID0gVFlQRV9BUkdfVFlQRVMgKGYyKTsKKyAgICAgCisg ICAgICAvKiBDaGVjayBpZiBjYW5kMS0+Zm4gYW5kIGNhbmQyLT5mbiBhcmUg dmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24uICBJdAorICAgICAgICAg aXMgcG9zc2libGUgdGhhdCBjYW5kMS0+Zm4gYW5kIGNhbmQyLT5mbiBhcmUg ZnVuY3Rpb24gdmVyc2lvbnMgYnV0IG9mCisgICAgICAgICBkaWZmZXJlbnQg ZnVuY3Rpb25zLiAgQ2hlY2sgdHlwZXMgdG8gc2VlIGlmIHRoZXkgYXJlIHZl cnNpb25zIG9mIHRoZSBzYW1lCisgICAgICAgICBmdW5jdGlvbi4gICovCisg ICAgICBpZiAoY29tcHBhcm1zIChwMSwgcDIpCisJICAmJiBzYW1lX3R5cGVf cCAoVFJFRV9UWVBFIChmMSksIFRSRUVfVFlQRSAoZjIpKSkKKwl7CisJICAv KiBBbHdheXMgbWFrZSB0aGUgdmVyc2lvbiB3aXRoIHRoZSBoaWdoZXIgcHJp b3JpdHksIG1vcmUKKwkgICAgIHNwZWNpYWxpemVkLCB3aW4uICAqLworCSAg Z2NjX2Fzc2VydCAodGFyZ2V0bS5jb21wYXJlX3ZlcnNpb25fcHJpb3JpdHkp OworCSAgaWYgKHRhcmdldG0uY29tcGFyZV92ZXJzaW9uX3ByaW9yaXR5IChj YW5kMS0+Zm4sIGNhbmQyLT5mbikgPj0gMCkKKwkgICAgcmV0dXJuIDE7CisJ ICBlbHNlCisJICAgIHJldHVybiAtMTsKKwl9CisgICAgfQorCiAgIC8qIElm IHRoZSB0d28gZnVuY3Rpb24gZGVjbGFyYXRpb25zIHJlcHJlc2VudCB0aGUg c2FtZSBmdW5jdGlvbiAodGhpcyBjYW4KICAgICAgaGFwcGVuIHdpdGggZGVj bGFyYXRpb25zIGluIG11bHRpcGxlIHNjb3BlcyBhbmQgYXJnLWRlcGVuZGVu dCBsb29rdXApLAogICAgICBhcmJpdHJhcmlseSBjaG9vc2Ugb25lLiAgQnV0 IGZpcnN0IG1ha2Ugc3VyZSB0aGUgZGVmYXVsdCBhcmdzIHdlJ3JlCkluZGV4 OiBnY2MvY29uZmlnL2kzODYvaTM4Ni5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy9jb25maWcvaTM4Ni9pMzg2LmMJKHJldmlzaW9uIDE5Mjk2 OCkKKysrIGdjYy9jb25maWcvaTM4Ni9pMzg2LmMJKHdvcmtpbmcgY29weSkK QEAgLTYyLDYgKzYyLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmls ZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJvcHRzLmgiCiAj aW5jbHVkZSAiZGlhZ25vc3RpYy5oIgogI2luY2x1ZGUgImR1bXBmaWxlLmgi CisjaW5jbHVkZSAidHJlZS1wYXNzLmgiCisjaW5jbHVkZSAidHJlZS1mbG93 LmgiCiAKIGVudW0gdXBwZXJfMTI4Yml0c19zdGF0ZQogewpAQCAtMjg0NzAs NiArMjg0NzIsOTgxIEBAIGl4ODZfaW5pdF9tbXhfc3NlX2J1aWx0aW5zICh2 b2lkKQogICAgIH0KIH0KIAorLyogVGhpcyBhZGRzIGEgY29uZGl0aW9uIHRv IHRoZSBiYXNpY19ibG9jayBORVdfQkIgaW4gZnVuY3Rpb24gRlVOQ1RJT05f REVDTAorICAgdG8gcmV0dXJuIGEgcG9pbnRlciB0byBWRVJTSU9OX0RFQ0wg aWYgdGhlIG91dGNvbWUgb2YgdGhlIGV4cHJlc3Npb24KKyAgIGZvcm1lZCBi eSBQUkVESUNBVEVfQ0hBSU4gaXMgdHJ1ZS4gIFRoaXMgZnVuY3Rpb24gd2ls bCBiZSBjYWxsZWQgZHVyaW5nCisgICB2ZXJzaW9uIGRpc3BhdGNoIHRvIGRl Y2lkZSB3aGljaCBmdW5jdGlvbiB2ZXJzaW9uIHRvIGV4ZWN1dGUuICBJdCBy ZXR1cm5zCisgICB0aGUgYmFzaWMgYmxvY2sgYXQgdGhlIGVuZCwgdG8gd2hp Y2ggbW9yZSBjb25kaXRpb25zIGNhbiBiZSBhZGRlZC4gICovCisKK3N0YXRp YyBiYXNpY19ibG9jaworYWRkX2NvbmRpdGlvbl90b19iYiAodHJlZSBmdW5j dGlvbl9kZWNsLCB0cmVlIHZlcnNpb25fZGVjbCwKKwkJICAgICB0cmVlIHBy ZWRpY2F0ZV9jaGFpbiwgYmFzaWNfYmxvY2sgbmV3X2JiKQoreworICBnaW1w bGUgcmV0dXJuX3N0bXQ7CisgIHRyZWUgY29udmVydF9leHByLCByZXN1bHRf dmFyOworICBnaW1wbGUgY29udmVydF9zdG10OworICBnaW1wbGUgY2FsbF9j b25kX3N0bXQ7CisgIGdpbXBsZSBpZl9lbHNlX3N0bXQ7CisKKyAgYmFzaWNf YmxvY2sgYmIxLCBiYjIsIGJiMzsKKyAgZWRnZSBlMTIsIGUyMzsKKworICB0 cmVlIGNvbmRfdmFyLCBhbmRfZXhwcl92YXIgPSBOVUxMX1RSRUU7CisgIGdp bXBsZV9zZXEgZ3NlcTsKKworICB0cmVlIHByZWRpY2F0ZV9kZWNsLCBwcmVk aWNhdGVfYXJnOworCisgIHB1c2hfY2Z1biAoREVDTF9TVFJVQ1RfRlVOQ1RJ T04gKGZ1bmN0aW9uX2RlY2wpKTsKKworICBnY2NfYXNzZXJ0IChuZXdfYmIg IT0gTlVMTCk7CisgIGdzZXEgPSBiYl9zZXEgKG5ld19iYik7CisKKworICBj b252ZXJ0X2V4cHIgPSBidWlsZDEgKENPTlZFUlRfRVhQUiwgcHRyX3R5cGVf bm9kZSwKKwkgICAgIAkJIGJ1aWxkX2ZvbGRfYWRkcl9leHByICh2ZXJzaW9u X2RlY2wpKTsKKyAgcmVzdWx0X3ZhciA9IGNyZWF0ZV90bXBfdmFyIChwdHJf dHlwZV9ub2RlLCBOVUxMKTsKKyAgY29udmVydF9zdG10ID0gZ2ltcGxlX2J1 aWxkX2Fzc2lnbiAocmVzdWx0X3ZhciwgY29udmVydF9leHByKTsgCisgIHJl dHVybl9zdG10ID0gZ2ltcGxlX2J1aWxkX3JldHVybiAocmVzdWx0X3Zhcik7 CisKKyAgaWYgKHByZWRpY2F0ZV9jaGFpbiA9PSBOVUxMX1RSRUUpCisgICAg eworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGNvbnZlcnRf c3RtdCk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmZ3NlcSwgcmV0 dXJuX3N0bXQpOworICAgICAgc2V0X2JiX3NlcSAobmV3X2JiLCBnc2VxKTsK KyAgICAgIGdpbXBsZV9zZXRfYmIgKGNvbnZlcnRfc3RtdCwgbmV3X2JiKTsK KyAgICAgIGdpbXBsZV9zZXRfYmIgKHJldHVybl9zdG10LCBuZXdfYmIpOwor ICAgICAgcG9wX2NmdW4gKCk7CisgICAgICByZXR1cm4gbmV3X2JiOworICAg IH0KKworICB3aGlsZSAocHJlZGljYXRlX2NoYWluICE9IE5VTEwpCisgICAg eworICAgICAgY29uZF92YXIgPSBjcmVhdGVfdG1wX3ZhciAoaW50ZWdlcl90 eXBlX25vZGUsIE5VTEwpOworICAgICAgcHJlZGljYXRlX2RlY2wgPSBUUkVF X1BVUlBPU0UgKHByZWRpY2F0ZV9jaGFpbik7CisgICAgICBwcmVkaWNhdGVf YXJnID0gVFJFRV9WQUxVRSAocHJlZGljYXRlX2NoYWluKTsKKyAgICAgIGNh bGxfY29uZF9zdG10ID0gZ2ltcGxlX2J1aWxkX2NhbGwgKHByZWRpY2F0ZV9k ZWNsLCAxLCBwcmVkaWNhdGVfYXJnKTsKKyAgICAgIGdpbXBsZV9jYWxsX3Nl dF9saHMgKGNhbGxfY29uZF9zdG10LCBjb25kX3Zhcik7CisKKyAgICAgIGdp bXBsZV9zZXRfYmxvY2sgKGNhbGxfY29uZF9zdG10LCBERUNMX0lOSVRJQUwg KGZ1bmN0aW9uX2RlY2wpKTsKKyAgICAgIGdpbXBsZV9zZXRfYmIgKGNhbGxf Y29uZF9zdG10LCBuZXdfYmIpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3Rt dCAoJmdzZXEsIGNhbGxfY29uZF9zdG10KTsKKworICAgICAgcHJlZGljYXRl X2NoYWluID0gVFJFRV9DSEFJTiAocHJlZGljYXRlX2NoYWluKTsKKyAgICAg IAorICAgICAgaWYgKGFuZF9leHByX3ZhciA9PSBOVUxMKQorICAgICAgICBh bmRfZXhwcl92YXIgPSBjb25kX3ZhcjsKKyAgICAgIGVsc2UKKwl7CisJICBn aW1wbGUgYXNzaWduX3N0bXQ7CisJICAvKiBVc2UgTUlOX0VYUFIgdG8gY2hl Y2sgaWYgYW55IGludGVnZXIgaXMgemVybz8uCisJICAgICBhbmRfZXhwcl92 YXIgPSBtaW5fZXhwciA8Y29uZF92YXIsIGFuZF9leHByX3Zhcj4gICovCisJ ICBhc3NpZ25fc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGFuZF9leHBy X3ZhciwKKwkJCSAgYnVpbGQyIChNSU5fRVhQUiwgaW50ZWdlcl90eXBlX25v ZGUsCisJCQkJICBjb25kX3ZhciwgYW5kX2V4cHJfdmFyKSk7CisKKwkgIGdp bXBsZV9zZXRfYmxvY2sgKGFzc2lnbl9zdG10LCBERUNMX0lOSVRJQUwgKGZ1 bmN0aW9uX2RlY2wpKTsKKwkgIGdpbXBsZV9zZXRfYmIgKGFzc2lnbl9zdG10 LCBuZXdfYmIpOworCSAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGFz c2lnbl9zdG10KTsKKwl9CisgICAgfQorCisgIGlmX2Vsc2Vfc3RtdCA9IGdp bXBsZV9idWlsZF9jb25kIChHVF9FWFBSLCBhbmRfZXhwcl92YXIsCisJICAJ CSAgICAgICAgICAgIGludGVnZXJfemVyb19ub2RlLAorCQkJCSAgICBOVUxM X1RSRUUsIE5VTExfVFJFRSk7CisgIGdpbXBsZV9zZXRfYmxvY2sgKGlmX2Vs c2Vfc3RtdCwgREVDTF9JTklUSUFMIChmdW5jdGlvbl9kZWNsKSk7CisgIGdp bXBsZV9zZXRfYmIgKGlmX2Vsc2Vfc3RtdCwgbmV3X2JiKTsKKyAgZ2ltcGxl X3NlcV9hZGRfc3RtdCAoJmdzZXEsIGlmX2Vsc2Vfc3RtdCk7CisKKyAgZ2lt cGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGNvbnZlcnRfc3RtdCk7CisgIGdp bXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCByZXR1cm5fc3RtdCk7CisgIHNl dF9iYl9zZXEgKG5ld19iYiwgZ3NlcSk7CisKKyAgYmIxID0gbmV3X2JiOwor ICBlMTIgPSBzcGxpdF9ibG9jayAoYmIxLCBpZl9lbHNlX3N0bXQpOworICBi YjIgPSBlMTItPmRlc3Q7CisgIGUxMi0+ZmxhZ3MgJj0gfkVER0VfRkFMTFRI UlU7CisgIGUxMi0+ZmxhZ3MgfD0gRURHRV9UUlVFX1ZBTFVFOworCisgIGUy MyA9IHNwbGl0X2Jsb2NrIChiYjIsIHJldHVybl9zdG10KTsKKworICBnaW1w bGVfc2V0X2JiIChjb252ZXJ0X3N0bXQsIGJiMik7CisgIGdpbXBsZV9zZXRf YmIgKHJldHVybl9zdG10LCBiYjIpOworCisgIGJiMyA9IGUyMy0+ZGVzdDsK KyAgbWFrZV9lZGdlIChiYjEsIGJiMywgRURHRV9GQUxTRV9WQUxVRSk7IAor CisgIHJlbW92ZV9lZGdlIChlMjMpOworICBtYWtlX2VkZ2UgKGJiMiwgRVhJ VF9CTE9DS19QVFIsIDApOworCisgIHBvcF9jZnVuICgpOworCisgIHJldHVy biBiYjM7Cit9CisKKy8qIFRoaXMgcGFyc2VzIHRoZSBhdHRyaWJ1dGUgYXJn dW1lbnRzIHRvIHRhcmdldCBpbiBERUNMIGFuZCBkZXRlcm1pbmVzCisgICB0 aGUgcmlnaHQgYnVpbHRpbiB0byB1c2UgdG8gbWF0Y2ggdGhlIHBsYXRmb3Jt IHNwZWNpZmljYXRpb24uCisgICBJdCByZXR1cm5zIHRoZSBwcmlvcml0eSB2 YWx1ZSBmb3IgdGhpcyB2ZXJzaW9uIGRlY2wuICBJZiBQUkVESUNBVEVfTElT VAorICAgaXMgbm90IE5VTEwsIGl0IHN0b3JlcyB0aGUgbGlzdCBvZiBjcHUg ZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGNoZWNrZWQKKyAgIGJlZm9yZSBk aXNwYXRjaGluZyB0aGlzIGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIHVuc2ln bmVkIGludAorZ2V0X2J1aWx0aW5fY29kZV9mb3JfdmVyc2lvbiAodHJlZSBk ZWNsLCB0cmVlICpwcmVkaWNhdGVfbGlzdCkKK3sKKyAgdHJlZSBhdHRyczsK KyAgc3RydWN0IGNsX3RhcmdldF9vcHRpb24gY3VyX3RhcmdldDsKKyAgdHJl ZSB0YXJnZXRfbm9kZTsKKyAgc3RydWN0IGNsX3RhcmdldF9vcHRpb24gKm5l d190YXJnZXQ7CisgIGNvbnN0IGNoYXIgKmFyZ19zdHIgPSBOVUxMOworICBj b25zdCBjaGFyICphdHRyc19zdHIgPSBOVUxMOworICBjaGFyICp0b2tfc3Ry ID0gTlVMTDsKKyAgY2hhciAqdG9rZW47CisKKyAgLyogUHJpb3JpdHkgb2Yg aTM4NiBmZWF0dXJlcywgZ3JlYXRlciB2YWx1ZSBpcyBoaWdoZXIgcHJpb3Jp dHkuICAgVGhpcyBpcworICAgICB1c2VkIHRvIGRlY2lkZSB0aGUgb3JkZXIg aW4gd2hpY2ggZnVuY3Rpb24gZGlzcGF0Y2ggbXVzdCBoYXBwZW4uICBGb3IK KyAgICAgaW5zdGFuY2UsIGEgdmVyc2lvbiBzcGVjaWFsaXplZCBmb3IgU1NF NC4yIHNob3VsZCBiZSBjaGVja2VkIGZvciBkaXNwYXRjaAorICAgICBiZWZv cmUgYSB2ZXJzaW9uIGZvciBTU0UzLCBhcyBTU0U0LjIgaW1wbGllcyBTU0Uz LiAgKi8KKyAgZW51bSBmZWF0dXJlX3ByaW9yaXR5CisgIHsKKyAgICBQX1pF Uk8gPSAwLAorICAgIFBfTU1YLAorICAgIFBfU1NFLAorICAgIFBfU1NFMiwK KyAgICBQX1NTRTMsCisgICAgUF9TU1NFMywKKyAgICBQX1BST0NfU1NTRTMs CisgICAgUF9TU0U0X2EsCisgICAgUF9QUk9DX1NTRTRfYSwKKyAgICBQX1NT RTRfMSwKKyAgICBQX1NTRTRfMiwKKyAgICBQX1BST0NfU1NFNF8yLAorICAg IFBfUE9QQ05ULAorICAgIFBfQVZYLAorICAgIFBfQVZYMiwKKyAgICBQX0ZN QSwKKyAgICBQX1BST0NfRk1BCisgIH07CisKKyBlbnVtIGZlYXR1cmVfcHJp b3JpdHkgcHJpb3JpdHkgPSBQX1pFUk87CisKKyAgLyogVGhlc2UgYXJlIHRo ZSB0YXJnZXQgYXR0cmlidXRlIHN0cmluZ3MgZm9yIHdoaWNoIGEgZGlzcGF0 Y2hlciBpcworICAgICBhdmFpbGFibGUsIGZyb20gZm9sZF9idWlsdGluX2Nw dS4gICovCisKKyAgc3RhdGljIHN0cnVjdCBfZmVhdHVyZV9saXN0CisgICAg eworICAgICAgY29uc3QgY2hhciAqY29uc3QgbmFtZTsKKyAgICAgIGNvbnN0 IGVudW0gZmVhdHVyZV9wcmlvcml0eSBwcmlvcml0eTsKKyAgICB9CisgIGNv bnN0IGZlYXR1cmVfbGlzdFtdID0KKyAgICB7CisgICAgICB7Im1teCIsIFBf TU1YfSwKKyAgICAgIHsic3NlIiwgUF9TU0V9LAorICAgICAgeyJzc2UyIiwg UF9TU0UyfSwKKyAgICAgIHsic3NlMyIsIFBfU1NFM30sCisgICAgICB7InNz c2UzIiwgUF9TU1NFM30sCisgICAgICB7InNzZTQuMSIsIFBfU1NFNF8xfSwK KyAgICAgIHsic3NlNC4yIiwgUF9TU0U0XzJ9LAorICAgICAgeyJwb3BjbnQi LCBQX1BPUENOVH0sCisgICAgICB7ImF2eCIsIFBfQVZYfSwKKyAgICAgIHsi YXZ4MiIsIFBfQVZYMn0KKyAgICB9OworCisKKyAgc3RhdGljIHVuc2lnbmVk IGludCBOVU1fRkVBVFVSRVMKKyAgICA9IHNpemVvZiAoZmVhdHVyZV9saXN0 KSAvIHNpemVvZiAoc3RydWN0IF9mZWF0dXJlX2xpc3QpOworCisgIHVuc2ln bmVkIGludCBpOworCisgIHRyZWUgcHJlZGljYXRlX2NoYWluID0gTlVMTF9U UkVFOworICB0cmVlIHByZWRpY2F0ZV9kZWNsLCBwcmVkaWNhdGVfYXJnOwor CisgIGF0dHJzID0gbG9va3VwX2F0dHJpYnV0ZSAoInRhcmdldCIsIERFQ0xf QVRUUklCVVRFUyAoZGVjbCkpOworICBnY2NfYXNzZXJ0IChhdHRycyAhPSBO VUxMKTsKKworICBhdHRycyA9IFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKGF0 dHJzKSk7CisKKyAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChhdHRycykgPT0g U1RSSU5HX0NTVCk7CisgIGF0dHJzX3N0ciA9IFRSRUVfU1RSSU5HX1BPSU5U RVIgKGF0dHJzKTsKKworCisgIC8qIEhhbmRsZSBhcmNoPSBpZiBzcGVjaWZp ZWQuICBGb3IgcHJpb3JpdHksIHNldCBpdCB0byBiZSAxIG1vcmUgdGhhbgor ICAgICB0aGUgYmVzdCBpbnN0cnVjdGlvbiBzZXQgdGhlIHByb2Nlc3NvciBj YW4gaGFuZGxlLiAgRm9yIGluc3RhbmNlLCBpZgorICAgICB0aGVyZSBpcyBh IHZlcnNpb24gZm9yIGF0b20gYW5kIGEgdmVyc2lvbiBmb3Igc3NzZTMgKHRo ZSBoaWdoZXN0IElTQQorICAgICBwcmlvcml0eSBmb3IgYXRvbSksIHRoZSBh dG9tIHZlcnNpb24gbXVzdCBiZSBjaGVja2VkIGZvciBkaXNwYXRjaAorICAg ICBiZWZvcmUgdGhlIHNzc2UzIHZlcnNpb24uICovCisgIGlmIChzdHJzdHIg KGF0dHJzX3N0ciwgImFyY2g9IikgIT0gTlVMTCkKKyAgICB7CisgICAgICBj bF90YXJnZXRfb3B0aW9uX3NhdmUgKCZjdXJfdGFyZ2V0LCAmZ2xvYmFsX29w dGlvbnMpOworICAgICAgdGFyZ2V0X25vZGUgPSBpeDg2X3ZhbGlkX3Rhcmdl dF9hdHRyaWJ1dGVfdHJlZSAoYXR0cnMpOworICAgIAorICAgICAgZ2NjX2Fz c2VydCAodGFyZ2V0X25vZGUpOworICAgICAgbmV3X3RhcmdldCA9IFRSRUVf VEFSR0VUX09QVElPTiAodGFyZ2V0X25vZGUpOworICAgICAgZ2NjX2Fzc2Vy dCAobmV3X3RhcmdldCk7CisgICAgICAKKyAgICAgIGlmIChuZXdfdGFyZ2V0 LT5hcmNoX3NwZWNpZmllZCAmJiBuZXdfdGFyZ2V0LT5hcmNoID4gMCkKKwl7 CisJICBzd2l0Y2ggKG5ld190YXJnZXQtPmFyY2gpCisJICAgIHsKKwkgICAg Y2FzZSBQUk9DRVNTT1JfQ09SRTJfMzI6CisJICAgIGNhc2UgUFJPQ0VTU09S X0NPUkUyXzY0OgorCSAgICAgIGFyZ19zdHIgPSAiY29yZTIiOworCSAgICAg IHByaW9yaXR5ID0gUF9QUk9DX1NTU0UzOworCSAgICAgIGJyZWFrOworCSAg ICBjYXNlIFBST0NFU1NPUl9DT1JFSTdfMzI6CisJICAgIGNhc2UgUFJPQ0VT U09SX0NPUkVJN182NDoKKwkgICAgICBhcmdfc3RyID0gImNvcmVpNyI7CisJ ICAgICAgcHJpb3JpdHkgPSBQX1BST0NfU1NFNF8yOworCSAgICAgIGJyZWFr OworCSAgICBjYXNlIFBST0NFU1NPUl9BVE9NOgorCSAgICAgIGFyZ19zdHIg PSAiYXRvbSI7CisJICAgICAgcHJpb3JpdHkgPSBQX1BST0NfU1NTRTM7CisJ ICAgICAgYnJlYWs7CisJICAgIGNhc2UgUFJPQ0VTU09SX0FNREZBTTEwOgor CSAgICAgIGFyZ19zdHIgPSAiYW1kZmFtMTBoIjsKKwkgICAgICBwcmlvcml0 eSA9IFBfUFJPQ19TU0U0X2E7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2Ug UFJPQ0VTU09SX0JEVkVSMToKKwkgICAgICBhcmdfc3RyID0gImJkdmVyMSI7 CisJICAgICAgcHJpb3JpdHkgPSBQX1BST0NfRk1BOworCSAgICAgIGJyZWFr OworCSAgICBjYXNlIFBST0NFU1NPUl9CRFZFUjI6CisJICAgICAgYXJnX3N0 ciA9ICJiZHZlcjIiOworCSAgICAgIHByaW9yaXR5ID0gUF9QUk9DX0ZNQTsK KwkgICAgICBicmVhazsKKwkgICAgfSAgCisJfSAgICAKKyAgICAKKyAgICAg IGNsX3RhcmdldF9vcHRpb25fcmVzdG9yZSAoJmdsb2JhbF9vcHRpb25zLCAm Y3VyX3RhcmdldCk7CisJCisgICAgICBpZiAocHJlZGljYXRlX2xpc3QgJiYg YXJnX3N0ciA9PSBOVUxMKQorCXsKKwkgIGVycm9yX2F0IChERUNMX1NPVVJD RV9MT0NBVElPTiAoZGVjbCksCisJICAgIAkiTm8gZGlzcGF0Y2hlciBmb3Vu ZCBmb3IgdGhlIHZlcnNpb25pbmcgYXR0cmlidXRlcyIpOworCSAgcmV0dXJu IDA7CisJfQorICAgIAorICAgICAgaWYgKHByZWRpY2F0ZV9saXN0KQorCXsK KyAgICAgICAgICBwcmVkaWNhdGVfZGVjbCA9IGl4ODZfYnVpbHRpbnMgWyhp bnQpIElYODZfQlVJTFRJTl9DUFVfSVNdOworICAgICAgICAgIC8qIEZvciBh IEMgc3RyaW5nIGxpdGVyYWwgdGhlIGxlbmd0aCBpbmNsdWRlcyB0aGUgdHJh aWxpbmcgTlVMTC4gICovCisgICAgICAgICAgcHJlZGljYXRlX2FyZyA9IGJ1 aWxkX3N0cmluZ19saXRlcmFsIChzdHJsZW4gKGFyZ19zdHIpICsgMSwgYXJn X3N0cik7CisgICAgICAgICAgcHJlZGljYXRlX2NoYWluID0gdHJlZV9jb25z IChwcmVkaWNhdGVfZGVjbCwgcHJlZGljYXRlX2FyZywKKwkJCQkgICAgICAg cHJlZGljYXRlX2NoYWluKTsKKwl9CisgICAgfQorCisgIC8qIFByb2Nlc3Mg ZmVhdHVyZSBuYW1lLiAgKi8KKyAgdG9rX3N0ciA9ICAoY2hhciAqKSB4bWFs bG9jIChzdHJsZW4gKGF0dHJzX3N0cikgKyAxKTsKKyAgc3RyY3B5ICh0b2tf c3RyLCBhdHRyc19zdHIpOworICB0b2tlbiA9IHN0cnRvayAodG9rX3N0ciwg IiwiKTsKKyAgcHJlZGljYXRlX2RlY2wgPSBpeDg2X2J1aWx0aW5zIFsoaW50 KSBJWDg2X0JVSUxUSU5fQ1BVX1NVUFBPUlRTXTsKKworICB3aGlsZSAodG9r ZW4gIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBEbyBub3QgcHJvY2VzcyAi YXJjaD0iICAqLworICAgICAgaWYgKHN0cm5jbXAgKHRva2VuLCAiYXJjaD0i LCA1KSA9PSAwKQorCXsKKwkgIHRva2VuID0gc3RydG9rIChOVUxMLCAiLCIp OworCSAgY29udGludWU7CisJfQorICAgICAgZm9yIChpID0gMDsgaSA8IE5V TV9GRUFUVVJFUzsgKytpKQorCXsKKwkgIGlmIChzdHJjbXAgKHRva2VuLCBm ZWF0dXJlX2xpc3RbaV0ubmFtZSkgPT0gMCkKKwkgICAgeworCSAgICAgIGlm IChwcmVkaWNhdGVfbGlzdCkKKwkJeworCQkgIHByZWRpY2F0ZV9hcmcgPSBi dWlsZF9zdHJpbmdfbGl0ZXJhbCAoCisJCQkJICBzdHJsZW4gKGZlYXR1cmVf bGlzdFtpXS5uYW1lKSArIDEsCisJCQkJICBmZWF0dXJlX2xpc3RbaV0ubmFt ZSk7CisJCSAgcHJlZGljYXRlX2NoYWluID0gdHJlZV9jb25zIChwcmVkaWNh dGVfZGVjbCwgcHJlZGljYXRlX2FyZywKKwkJCQkJICAgICAgIHByZWRpY2F0 ZV9jaGFpbik7CisJCX0KKwkgICAgICAvKiBGaW5kIHRoZSBtYXhpbXVtIHBy aW9yaXR5IGZlYXR1cmUuICAqLworCSAgICAgIGlmIChmZWF0dXJlX2xpc3Rb aV0ucHJpb3JpdHkgPiBwcmlvcml0eSkKKwkJcHJpb3JpdHkgPSBmZWF0dXJl X2xpc3RbaV0ucHJpb3JpdHk7CisKKwkgICAgICBicmVhazsKKwkgICAgfQor CX0KKyAgICAgIGlmIChwcmVkaWNhdGVfbGlzdCAmJiBpID09IE5VTV9GRUFU VVJFUykKKwl7CisJICBlcnJvcl9hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04g KGRlY2wpLAorCQkgICAgIk5vIGRpc3BhdGNoZXIgZm91bmQgZm9yICVzIiwg dG9rZW4pOworCSAgcmV0dXJuIDA7CisJfQorICAgICAgdG9rZW4gPSBzdHJ0 b2sgKE5VTEwsICIsIik7CisgICAgfQorICBmcmVlICh0b2tfc3RyKTsKKwor ICBpZiAocHJlZGljYXRlX2xpc3QgJiYgcHJlZGljYXRlX2NoYWluID09IE5V TExfVFJFRSkKKyAgICB7CisgICAgICBlcnJvcl9hdCAoREVDTF9TT1VSQ0Vf TE9DQVRJT04gKGRlY2wpLAorCSAgICAgICAgIk5vIGRpc3BhdGNoZXIgZm91 bmQgZm9yIHRoZSB2ZXJzaW9uaW5nIGF0dHJpYnV0ZXMgOiAlcyIsCisJICAg ICAgICBhdHRyc19zdHIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBl bHNlIGlmIChwcmVkaWNhdGVfbGlzdCkKKyAgICB7CisgICAgICBwcmVkaWNh dGVfY2hhaW4gPSBucmV2ZXJzZSAocHJlZGljYXRlX2NoYWluKTsKKyAgICAg ICpwcmVkaWNhdGVfbGlzdCA9IHByZWRpY2F0ZV9jaGFpbjsKKyAgICB9CisK KyAgcmV0dXJuIHByaW9yaXR5OyAKK30KKworLyogVGhpcyBjb21wYXJlcyB0 aGUgcHJpb3JpdHkgb2YgdGFyZ2V0IGZlYXR1cmVzIGluIGZ1bmN0aW9uIERF Q0wxCisgICBhbmQgREVDTDIuICBJdCByZXR1cm5zIHBvc2l0aXZlIHZhbHVl IGlmIERFQ0wxIGlzIGhpZ2hlciBwcmlvcml0eSwKKyAgIG5lZ2F0aXZlIHZh bHVlIGlmIERFQ0wyIGlzIGhpZ2hlciBwcmlvcml0eSBhbmQgMCBpZiB0aGV5 IGFyZSB0aGUKKyAgIHNhbWUuICAqLworCitzdGF0aWMgaW50CitpeDg2X2Nv bXBhcmVfdmVyc2lvbl9wcmlvcml0eSAodHJlZSBkZWNsMSwgdHJlZSBkZWNs MikKK3sKKyAgdW5zaWduZWQgaW50IHByaW9yaXR5MSA9IDA7CisgIHVuc2ln bmVkIGludCBwcmlvcml0eTIgPSAwOworCisgIGlmIChsb29rdXBfYXR0cmli dXRlICgidGFyZ2V0IiwgREVDTF9BVFRSSUJVVEVTIChkZWNsMSkpICE9IE5V TEwpCisgICAgcHJpb3JpdHkxID0gZ2V0X2J1aWx0aW5fY29kZV9mb3JfdmVy c2lvbiAoZGVjbDEsIE5VTEwpOworCisgIGlmIChsb29rdXBfYXR0cmlidXRl ICgidGFyZ2V0IiwgREVDTF9BVFRSSUJVVEVTIChkZWNsMikpICE9IE5VTEwp CisgICAgcHJpb3JpdHkyID0gZ2V0X2J1aWx0aW5fY29kZV9mb3JfdmVyc2lv biAoZGVjbDIsIE5VTEwpOworCisgIHJldHVybiAoaW50KXByaW9yaXR5MSAt IChpbnQpcHJpb3JpdHkyOworfQorCisvKiBWMSBhbmQgVjIgcG9pbnQgdG8g ZnVuY3Rpb24gdmVyc2lvbnMgd2l0aCBkaWZmZXJlbnQgcHJpb3JpdGllcwor ICAgYmFzZWQgb24gdGhlIHRhcmdldCBJU0EuICBUaGlzIGZ1bmN0aW9uIGNv bXBhcmVzIHRoZWlyIHByaW9yaXRpZXMuICAqLworIAorc3RhdGljIGludAor ZmVhdHVyZV9jb21wYXJlIChjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAq djIpCit7CisgIHR5cGVkZWYgc3RydWN0IF9mdW5jdGlvbl92ZXJzaW9uX2lu Zm8KKyAgICB7CisgICAgICB0cmVlIHZlcnNpb25fZGVjbDsKKyAgICAgIHRy ZWUgcHJlZGljYXRlX2NoYWluOworICAgICAgdW5zaWduZWQgaW50IGRpc3Bh dGNoX3ByaW9yaXR5OworICAgIH0gZnVuY3Rpb25fdmVyc2lvbl9pbmZvOwor CisgIGNvbnN0IGZ1bmN0aW9uX3ZlcnNpb25faW5mbyBjMSA9ICooY29uc3Qg ZnVuY3Rpb25fdmVyc2lvbl9pbmZvICopdjE7CisgIGNvbnN0IGZ1bmN0aW9u X3ZlcnNpb25faW5mbyBjMiA9ICooY29uc3QgZnVuY3Rpb25fdmVyc2lvbl9p bmZvICopdjI7CisgIHJldHVybiAoYzIuZGlzcGF0Y2hfcHJpb3JpdHkgLSBj MS5kaXNwYXRjaF9wcmlvcml0eSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24g Z2VuZXJhdGVzIHRoZSBkaXNwYXRjaCBmdW5jdGlvbiBmb3IKKyAgIG11bHRp LXZlcnNpb25lZCBmdW5jdGlvbnMuICBESVNQQVRDSF9ERUNMIGlzIHRoZSBm dW5jdGlvbiB3aGljaCB3aWxsCisgICBjb250YWluIHRoZSBkaXNwYXRjaCBs b2dpYy4gIEZOREVDTFMgYXJlIHRoZSBmdW5jdGlvbiBjaG9pY2VzIGZvcgor ICAgZGlzcGF0Y2gsIGFuZCBpcyBhIHRyZWUgY2hhaW4uICBFTVBUWV9CQiBp cyB0aGUgYmFzaWMgYmxvY2sgcG9pbnRlcgorICAgaW4gRElTUEFUQ0hfREVD TCBpbiB3aGljaCB0aGUgZGlzcGF0Y2ggY29kZSBpcyBnZW5lcmF0ZWQuICAq LworCitzdGF0aWMgaW50CitkaXNwYXRjaF9mdW5jdGlvbl92ZXJzaW9ucyAo dHJlZSBkaXNwYXRjaF9kZWNsLAorCQkJICAgIHZvaWQgKmZuZGVjbHNfcCwK KwkJCSAgICBiYXNpY19ibG9jayAqZW1wdHlfYmIpCit7CisgIHRyZWUgZGVm YXVsdF9kZWNsOworICBnaW1wbGUgaWZ1bmNfY3B1X2luaXRfc3RtdDsKKyAg Z2ltcGxlX3NlcSBnc2VxOworICBpbnQgaXg7CisgIHRyZWUgZWxlOworICBW RUMgKHRyZWUsIGhlYXApICpmbmRlY2xzOworICB1bnNpZ25lZCBpbnQgbnVt X3ZlcnNpb25zID0gMDsKKyAgdW5zaWduZWQgaW50IGFjdHVhbF92ZXJzaW9u cyA9IDA7CisgIHVuc2lnbmVkIGludCBpOworCisgIHN0cnVjdCBfZnVuY3Rp b25fdmVyc2lvbl9pbmZvCisgICAgeworICAgICAgdHJlZSB2ZXJzaW9uX2Rl Y2w7CisgICAgICB0cmVlIHByZWRpY2F0ZV9jaGFpbjsKKyAgICAgIHVuc2ln bmVkIGludCBkaXNwYXRjaF9wcmlvcml0eTsKKyAgICB9KmZ1bmN0aW9uX3Zl cnNpb25faW5mbzsKKworICBnY2NfYXNzZXJ0IChkaXNwYXRjaF9kZWNsICE9 IE5VTEwKKwkgICAgICAmJiBmbmRlY2xzX3AgIT0gTlVMTAorCSAgICAgICYm IGVtcHR5X2JiICE9IE5VTEwpOworCisgIC8qZm5kZWNsc19wIGlzIGFjdHVh bGx5IGEgdmVjdG9yLiAgKi8KKyAgZm5kZWNscyA9IChWRUMgKHRyZWUsIGhl YXApICopZm5kZWNsc19wOworCisgIC8qIEF0IGxlYXN0IG9uZSBtb3JlIHZl cnNpb24gb3RoZXIgdGhhbiB0aGUgZGVmYXVsdC4gICovCisgIG51bV92ZXJz aW9ucyA9IFZFQ19sZW5ndGggKHRyZWUsIGZuZGVjbHMpOworICBnY2NfYXNz ZXJ0IChudW1fdmVyc2lvbnMgPj0gMik7CisKKyAgZnVuY3Rpb25fdmVyc2lv bl9pbmZvID0gKHN0cnVjdCBfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICopCisg ICAgWE5FV1ZFQyAoc3RydWN0IF9mdW5jdGlvbl92ZXJzaW9uX2luZm8sIChu dW1fdmVyc2lvbnMgLSAxKSk7CisKKyAgLyogVGhlIGZpcnN0IHZlcnNpb24g aW4gdGhlIHZlY3RvciBpcyB0aGUgZGVmYXVsdCBkZWNsLiAgKi8KKyAgZGVm YXVsdF9kZWNsID0gVkVDX2luZGV4ICh0cmVlLCBmbmRlY2xzLCAwKTsKKwor ICBwdXNoX2NmdW4gKERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChkaXNwYXRjaF9k ZWNsKSk7CisKKyAgZ3NlcSA9IGJiX3NlcSAoKmVtcHR5X2JiKTsKKyAgLyog RnVuY3Rpb24gdmVyc2lvbiBkaXNwYXRjaCBpcyB2aWEgSUZVTkMuICBJRlVO QyByZXNvbHZlcnMgZmlyZSBiZWZvcmUKKyAgICAgY29uc3RydWN0b3JzLCBz byBleHBsaWNpdHkgY2FsbCBfX2J1aWx0aW5fY3B1X2luaXQgaGVyZS4gICov CisgIGlmdW5jX2NwdV9pbml0X3N0bXQgPSBnaW1wbGVfYnVpbGRfY2FsbF92 ZWMgKAorICAgICAgICAgICAgICAgICAgICAgaXg4Nl9idWlsdGlucyBbKGlu dCkgSVg4Nl9CVUlMVElOX0NQVV9JTklUXSwgTlVMTCk7CisgIGdpbXBsZV9z ZXFfYWRkX3N0bXQgKCZnc2VxLCBpZnVuY19jcHVfaW5pdF9zdG10KTsKKyAg Z2ltcGxlX3NldF9iYiAoaWZ1bmNfY3B1X2luaXRfc3RtdCwgKmVtcHR5X2Ji KTsKKyAgc2V0X2JiX3NlcSAoKmVtcHR5X2JiLCBnc2VxKTsKKworICBwb3Bf Y2Z1biAoKTsKKworCisgIGZvciAoaXggPSAxOyBWRUNfaXRlcmF0ZSAodHJl ZSwgZm5kZWNscywgaXgsIGVsZSk7ICsraXgpCisgICAgeworICAgICAgdHJl ZSB2ZXJzaW9uX2RlY2wgPSBlbGU7CisgICAgICB0cmVlIHByZWRpY2F0ZV9j aGFpbiA9IE5VTExfVFJFRTsKKyAgICAgIHVuc2lnbmVkIGludCBwcmlvcml0 eTsKKyAgICAgIC8qIEdldCBhdHRyaWJ1dGUgc3RyaW5nLCBwYXJzZSBpdCBh bmQgZmluZCB0aGUgcmlnaHQgcHJlZGljYXRlIGRlY2wuCisgICAgICAgICBU aGUgcHJlZGljYXRlIGZ1bmN0aW9uIGNvdWxkIGJlIGEgbGVuZ3RoeSBjb21i aW5hdGlvbiBvZiBtYW55CisJIGZlYXR1cmVzLCBsaWtlIGFyY2gtdHlwZSBh bmQgdmFyaW91cyBpc2EtdmFyaWFudHMuICAqLworICAgICAgcHJpb3JpdHkg PSBnZXRfYnVpbHRpbl9jb2RlX2Zvcl92ZXJzaW9uICh2ZXJzaW9uX2RlY2ws CisJIAkJCSAgICAgICAgICAgICAgICZwcmVkaWNhdGVfY2hhaW4pOworCisg ICAgICBpZiAocHJlZGljYXRlX2NoYWluID09IE5VTExfVFJFRSkKKwljb250 aW51ZTsKKworICAgICAgYWN0dWFsX3ZlcnNpb25zKys7CisgICAgICBmdW5j dGlvbl92ZXJzaW9uX2luZm8gW2l4IC0gMV0udmVyc2lvbl9kZWNsID0gdmVy c2lvbl9kZWNsOworICAgICAgZnVuY3Rpb25fdmVyc2lvbl9pbmZvIFtpeCAt IDFdLnByZWRpY2F0ZV9jaGFpbiA9IHByZWRpY2F0ZV9jaGFpbjsKKyAgICAg IGZ1bmN0aW9uX3ZlcnNpb25faW5mbyBbaXggLSAxXS5kaXNwYXRjaF9wcmlv cml0eSA9IHByaW9yaXR5OworICAgIH0KKworICAvKiBTb3J0IHRoZSB2ZXJz aW9ucyBhY2NvcmRpbmcgdG8gZGVzY2VuZGluZyBvcmRlciBvZiBkaXNwYXRj aCBwcmlvcml0eS4gIFRoZQorICAgICBwcmlvcml0eSBpcyBiYXNlZCBvbiB0 aGUgSVNBLiAgVGhpcyBpcyBub3QgYSBwZXJmZWN0IHNvbHV0aW9uLiAgVGhl cmUKKyAgICAgY291bGQgc3RpbGwgYmUgYW1iaWd1aXR5LiAgSWYgbW9yZSB0 aGFuIG9uZSBmdW5jdGlvbiB2ZXJzaW9uIGlzIHN1aXRhYmxlCisgICAgIHRv IGV4ZWN1dGUsICB3aGljaCBvbmUgc2hvdWxkIGJlIGRpc3BhdGNoZWQ/ICBJ biBmdXR1cmUsIGFsbG93IHRoZSB1c2VyCisgICAgIHRvIHNwZWNpZnkgYSBk aXNwYXRjaCAgcHJpb3JpdHkgbmV4dCB0byB0aGUgdmVyc2lvbi4gICovCisg IHFzb3J0IChmdW5jdGlvbl92ZXJzaW9uX2luZm8sIGFjdHVhbF92ZXJzaW9u cywKKyAgICAgICAgIHNpemVvZiAoc3RydWN0IF9mdW5jdGlvbl92ZXJzaW9u X2luZm8pLCBmZWF0dXJlX2NvbXBhcmUpOworCisgIGZvciAgKGkgPSAwOyBp IDwgYWN0dWFsX3ZlcnNpb25zOyArK2kpCisgICAgKmVtcHR5X2JiID0gYWRk X2NvbmRpdGlvbl90b19iYiAoZGlzcGF0Y2hfZGVjbCwKKwkJCQkgICAgIGZ1 bmN0aW9uX3ZlcnNpb25faW5mb1tpXS52ZXJzaW9uX2RlY2wsCisJCQkJICAg ICBmdW5jdGlvbl92ZXJzaW9uX2luZm9baV0ucHJlZGljYXRlX2NoYWluLAor CQkJCSAgICAgKmVtcHR5X2JiKTsKKworICAvKiBkaXNwYXRjaCBkZWZhdWx0 IHZlcnNpb24gYXQgdGhlIGVuZC4gICovCisgICplbXB0eV9iYiA9IGFkZF9j b25kaXRpb25fdG9fYmIgKGRpc3BhdGNoX2RlY2wsIGRlZmF1bHRfZGVjbCwK KwkJCQkgICBOVUxMLCAqZW1wdHlfYmIpOworCisgIGZyZWUgKGZ1bmN0aW9u X3ZlcnNpb25faW5mbyk7CisgIHJldHVybiAwOworfQorCisvKiBUaGlzIGZ1 bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBGTjEgYW5kIEZOMiBhcmUgdmVyc2lv bnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24sCisgICB0aGF0IGlzLCB0aGUgdGFy Z2V0cyBvZiB0aGUgZnVuY3Rpb24gZGVjbHMgYXJlIGRpZmZlcmVudC4gIFRo aXMgYXNzdW1lcworICAgdGhhdCBGTjEgYW5kIEZOMiBoYXZlIHRoZSBzYW1l IHNpZ25hdHVyZS4gICovCisKK3N0YXRpYyBib29sCitpeDg2X2Z1bmN0aW9u X3ZlcnNpb25zICh0cmVlIGZuMSwgdHJlZSBmbjIpCit7CisgIHRyZWUgYXR0 cjEsIGF0dHIyOworICBzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbiAqdGFyZ2V0 MSwgKnRhcmdldDI7CisKKyAgaWYgKFRSRUVfQ09ERSAoZm4xKSAhPSBGVU5D VElPTl9ERUNMCisgICAgICB8fCBUUkVFX0NPREUgKGZuMikgIT0gRlVOQ1RJ T05fREVDTCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgYXR0cjEgPSBERUNM X0ZVTkNUSU9OX1NQRUNJRklDX1RBUkdFVCAoZm4xKTsKKyAgYXR0cjIgPSBE RUNMX0ZVTkNUSU9OX1NQRUNJRklDX1RBUkdFVCAoZm4yKTsKKworICAvKiBB dGxlYXN0IG9uZSBmdW5jdGlvbiBkZWNsIHNob3VsZCBoYXZlIHRhcmdldCBh dHRyaWJ1dGUgc3BlY2lmaWVkLiAgKi8KKyAgaWYgKGF0dHIxID09IE5VTExf VFJFRSAmJiBhdHRyMiA9PSBOVUxMX1RSRUUpCisgICAgcmV0dXJuIGZhbHNl OworCisgIGlmIChhdHRyMSA9PSBOVUxMX1RSRUUpCisgICAgYXR0cjEgPSB0 YXJnZXRfb3B0aW9uX2RlZmF1bHRfbm9kZTsKKyAgZWxzZSBpZiAoYXR0cjIg PT0gTlVMTF9UUkVFKQorICAgIGF0dHIyID0gdGFyZ2V0X29wdGlvbl9kZWZh dWx0X25vZGU7CisKKyAgdGFyZ2V0MSA9IFRSRUVfVEFSR0VUX09QVElPTiAo YXR0cjEpOworICB0YXJnZXQyID0gVFJFRV9UQVJHRVRfT1BUSU9OIChhdHRy Mik7CisKKyAgLyogdGFyZ2V0MSBhbmQgdGFyZ2V0MiBtdXN0IGJlIGRpZmZl cmVudCBpbiBzb21lIHdheS4gICovCisgIGlmICh0YXJnZXQxLT54X2l4ODZf aXNhX2ZsYWdzID09IHRhcmdldDItPnhfaXg4Nl9pc2FfZmxhZ3MKKyAgICAg ICYmIHRhcmdldDEtPnhfdGFyZ2V0X2ZsYWdzID09IHRhcmdldDItPnhfdGFy Z2V0X2ZsYWdzCisgICAgICAmJiB0YXJnZXQxLT5hcmNoID09IHRhcmdldDIt PmFyY2gKKyAgICAgICYmIHRhcmdldDEtPnR1bmUgPT0gdGFyZ2V0Mi0+dHVu ZQorICAgICAgJiYgdGFyZ2V0MS0+eF9peDg2X2ZwbWF0aCA9PSB0YXJnZXQy LT54X2l4ODZfZnBtYXRoCisgICAgICAmJiB0YXJnZXQxLT5icmFuY2hfY29z dCA9PSB0YXJnZXQyLT5icmFuY2hfY29zdCkKKyAgICByZXR1cm4gZmFsc2U7 CisKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIENvbXBhcmF0b3IgZnVuY3Rp b24gdG8gYmUgdXNlZCBpbiBxc29ydCByb3V0aW5lIHRvIHNvcnQgYXR0cmli dXRlCisgICBzcGVjaWZpY2F0aW9uIHN0cmluZ3MgdG8gInRhcmdldCIuICAq LworCitzdGF0aWMgaW50CithdHRyX3N0cmNtcCAoY29uc3Qgdm9pZCAqdjEs IGNvbnN0IHZvaWQgKnYyKQoreworICBjb25zdCBjaGFyICpjMSA9ICooY2hh ciAqY29uc3QqKXYxOworICBjb25zdCBjaGFyICpjMiA9ICooY2hhciAqY29u c3QqKXYyOworICByZXR1cm4gc3RyY21wIChjMSwgYzIpOworfQorCisvKiBT VFIgaXMgdGhlIGFyZ3VtZW50IHRvIHRhcmdldCBhdHRyaWJ1dGUuICBUaGlz IGZ1bmN0aW9uIHRva2VuaXplcworICAgdGhlIGNvbW1hIHNlcGFyYXRlZCBh cmd1bWVudHMsIHNvcnRzIHRoZW0gYW5kIHJldHVybnMgYSBzdHJpbmcgd2hp Y2gKKyAgIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb21tYSBz ZXBhcmF0ZWQgYXJndW1lbnRzLiAgIEl0IGFsc28KKyAgIHJlcGxhY2VzIG5v bi1pZGVudGlmaWVyIGNoYXJhY3RlcnMgIj0sLSIgd2l0aCAiXyIuICAqLwor CitzdGF0aWMgY2hhciAqCitzb3J0ZWRfYXR0cl9zdHJpbmcgKGNvbnN0IGNo YXIgKnN0cikKK3sKKyAgY2hhciAqKmFyZ3MgPSBOVUxMOworICBjaGFyICph dHRyX3N0ciwgKnJldF9zdHI7CisgIGNoYXIgKmF0dHIgPSBOVUxMOworICB1 bnNpZ25lZCBpbnQgYXJnbnVtID0gMTsKKyAgdW5zaWduZWQgaW50IGk7CisK KyAgZm9yIChpID0gMDsgaSA8IHN0cmxlbiAoc3RyKTsgaSsrKQorICAgIGlm IChzdHJbaV0gPT0gJywnKQorICAgICAgYXJnbnVtKys7CisKKyAgYXR0cl9z dHIgPSAoY2hhciAqKXhtYWxsb2MgKHN0cmxlbiAoc3RyKSArIDEpOworICBz dHJjcHkgKGF0dHJfc3RyLCBzdHIpOworCisgIC8qIFJlcGxhY2UgIj0sLSIg d2l0aCAiXyIuICAqLworICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChhdHRy X3N0cik7IGkrKykKKyAgICBpZiAoYXR0cl9zdHJbaV0gPT0gJz0nIHx8IGF0 dHJfc3RyW2ldPT0gJy0nKQorICAgICAgYXR0cl9zdHJbaV0gPSAnXyc7CisK KyAgaWYgKGFyZ251bSA9PSAxKQorICAgIHJldHVybiBhdHRyX3N0cjsKKwor ICBhcmdzID0gWE5FV1ZFQyAoY2hhciAqLCBhcmdudW0pOworCisgIGkgPSAw OworICBhdHRyID0gc3RydG9rIChhdHRyX3N0ciwgIiwiKTsKKyAgd2hpbGUg KGF0dHIgIT0gTlVMTCkKKyAgICB7CisgICAgICBhcmdzW2ldID0gYXR0cjsK KyAgICAgIGkrKzsKKyAgICAgIGF0dHIgPSBzdHJ0b2sgKE5VTEwsICIsIik7 CisgICAgfQorCisgIHFzb3J0IChhcmdzLCBhcmdudW0sIHNpemVvZiAoY2hh ciopLCBhdHRyX3N0cmNtcCk7CisKKyAgcmV0X3N0ciA9IChjaGFyICopeG1h bGxvYyAoc3RybGVuIChzdHIpICsgMSk7CisgIHN0cmNweSAocmV0X3N0ciwg YXJnc1swXSk7CisgIGZvciAoaSA9IDE7IGkgPCBhcmdudW07IGkrKykKKyAg ICB7CisgICAgICBzdHJjYXQgKHJldF9zdHIsICJfIik7CisgICAgICBzdHJj YXQgKHJldF9zdHIsIGFyZ3NbaV0pOworICAgIH0KKworICBmcmVlIChhcmdz KTsKKyAgZnJlZSAoYXR0cl9zdHIpOworICByZXR1cm4gcmV0X3N0cjsKK30K KworLyogVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBhc3NlbWJsZXIgbmFt ZSBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlCisgICB2ZXJzaW9ucy4gIElmIERF Q0wgaXMgYSBmdW5jdGlvbiB2ZXJzaW9uIGFuZCBoYXMgYSAidGFyZ2V0Igor ICAgYXR0cmlidXRlLCBpdCBhcHBlbmRzIHRoZSBhdHRyaWJ1dGUgc3RyaW5n IHRvIGl0cyBhc3NlbWJsZXIgbmFtZS4gICovCisKK3N0YXRpYyB0cmVlCitp eDg2X21hbmdsZV9mdW5jdGlvbl92ZXJzaW9uX2Fzc2VtYmxlcl9uYW1lICh0 cmVlIGRlY2wsIHRyZWUgaWQpCit7CisgIHRyZWUgdmVyc2lvbl9hdHRyOwor ICBjb25zdCBjaGFyICpvcmlnX25hbWUsICp2ZXJzaW9uX3N0cmluZywgKmF0 dHJfc3RyOworICBjaGFyICphc3NlbWJsZXJfbmFtZTsKKworICBpZiAoREVD TF9ERUNMQVJFRF9JTkxJTkVfUCAoZGVjbCkKKyAgICAgICYmIGxvb2t1cF9h dHRyaWJ1dGUgKCJnbnVfaW5saW5lIiwKKwkJCSAgIERFQ0xfQVRUUklCVVRF UyAoZGVjbCkpKQorICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElP TiAoZGVjbCksCisJICAgICAgIkZ1bmN0aW9uIHZlcnNpb25zIGNhbm5vdCBi ZSBtYXJrZWQgYXMgZ251X2lubGluZSwiCisJICAgICAgIiBib2RpZXMgaGF2 ZSB0byBiZSBnZW5lcmF0ZWQiKTsKKworICBpZiAoREVDTF9WSVJUVUFMX1Ag KGRlY2wpCisgICAgICB8fCBERUNMX1ZJTkRFWCAoZGVjbCkpCisgICAgZXJy b3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChkZWNsKSwKKwkgICAgICAi VmlydHVhbCBmdW5jdGlvbiB2ZXJzaW9uaW5nIG5vdCBzdXBwb3J0ZWRcbiIp OworCisgIHZlcnNpb25fYXR0ciA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJ0YXJn ZXQiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKTsKKworICAvKiB0YXJnZXQg YXR0cmlidXRlIHN0cmluZyBpcyBOVUxMIGZvciBkZWZhdWx0IGZ1bmN0aW9u cy4gICovCisgIGlmICh2ZXJzaW9uX2F0dHIgPT0gTlVMTF9UUkVFKQorICAg IHJldHVybiBpZDsKKworICBvcmlnX25hbWUgPSBJREVOVElGSUVSX1BPSU5U RVIgKGlkKTsKKyAgdmVyc2lvbl9zdHJpbmcKKyAgICA9IFRSRUVfU1RSSU5H X1BPSU5URVIgKFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKHZlcnNpb25fYXR0 cikpKTsKKworICBhdHRyX3N0ciA9IHNvcnRlZF9hdHRyX3N0cmluZyAodmVy c2lvbl9zdHJpbmcpOworICBhc3NlbWJsZXJfbmFtZSA9IChjaGFyICopIHht YWxsb2MgKHN0cmxlbiAob3JpZ19uYW1lKQorCQkJCSAgICAgKyBzdHJsZW4g KGF0dHJfc3RyKSArIDIpOworCisgIHNwcmludGYgKGFzc2VtYmxlcl9uYW1l LCAiJXMuJXMiLCBvcmlnX25hbWUsIGF0dHJfc3RyKTsKKworICAvKiBBbGxv dyBhc3NlbWJsZXIgbmFtZSB0byBiZSBtb2RpZmllZCBpZiBhbHJlYWR5IHNl dC4gICovCisgIGlmIChERUNMX0FTU0VNQkxFUl9OQU1FX1NFVF9QIChkZWNs KSkKKyAgICBTRVRfREVDTF9SVEwgKGRlY2wsIE5VTEwpOworCisgIHJldHVy biBnZXRfaWRlbnRpZmllciAoYXNzZW1ibGVyX25hbWUpOworfQorCitzdGF0 aWMgdHJlZSAKK2l4ODZfbWFuZ2xlX2RlY2xfYXNzZW1ibGVyX25hbWUgKHRy ZWUgZGVjbCwgdHJlZSBpZCkKK3sKKyAgLyogRm9yIGZ1bmN0aW9uIHZlcnNp b24sIGFkZCB0aGUgdGFyZ2V0IHN1ZmZpeCB0byB0aGUgYXNzZW1ibGVyIG5h bWUuICAqLworICBpZiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9E RUNMCisgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZGVjbCkp CisgICAgcmV0dXJuIGl4ODZfbWFuZ2xlX2Z1bmN0aW9uX3ZlcnNpb25fYXNz ZW1ibGVyX25hbWUgKGRlY2wsIGlkKTsKKworICByZXR1cm4gaWQ7Cit9CisK Ky8qIFJldHVybiBhIG5ldyBuYW1lIGJ5IGFwcGVuZGluZyBTVUZGSVggdG8g dGhlIERFQ0wgbmFtZS4gIElmIG1ha2VfdW5pcXVlCisgICBpcyB0cnVlLCBh cHBlbmQgdGhlIGZ1bGwgcGF0aCBuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS4g ICovCisKK3N0YXRpYyBjaGFyICoKK21ha2VfbmFtZSAodHJlZSBkZWNsLCBj b25zdCBjaGFyICpzdWZmaXgsIGJvb2wgbWFrZV91bmlxdWUpCit7CisgIGNo YXIgKmdsb2JhbF92YXJfbmFtZTsKKyAgaW50IG5hbWVfbGVuOworICBjb25z dCBjaGFyICpuYW1lOworICBjb25zdCBjaGFyICp1bmlxdWVfbmFtZSA9IE5V TEw7CisKKyAgbmFtZSA9IElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9BU1NF TUJMRVJfTkFNRSAoZGVjbCkpOworCisgIC8qIEdldCBhIHVuaXF1ZSBuYW1l IHRoYXQgY2FuIGJlIHVzZWQgZ2xvYmFsbHkgd2l0aG91dCBhbnkgY2hhbmNl cworICAgICBvZiBjb2xsaXNpb24gYXQgbGluayB0aW1lLiAgKi8KKyAgaWYg KG1ha2VfdW5pcXVlKQorICAgIHVuaXF1ZV9uYW1lID0gSURFTlRJRklFUl9Q T0lOVEVSIChnZXRfZmlsZV9mdW5jdGlvbl9uYW1lICgiXDAiKSk7CisKKyAg bmFtZV9sZW4gPSBzdHJsZW4gKG5hbWUpICsgc3RybGVuIChzdWZmaXgpICsg MjsKKworICBpZiAobWFrZV91bmlxdWUpCisgICAgbmFtZV9sZW4gKz0gc3Ry bGVuICh1bmlxdWVfbmFtZSkgKyAxOworICBnbG9iYWxfdmFyX25hbWUgPSBY TkVXVkVDIChjaGFyLCBuYW1lX2xlbik7CisKKyAgLyogVXNlICcuJyB0byBj b25jYXRlbmF0ZSBuYW1lcyBhcyBpdCBpcyBkZW1hbmdsZXIgZnJpZW5kbHku ICAqLworICBpZiAobWFrZV91bmlxdWUpCisgICAgICBzbnByaW50ZiAoZ2xv YmFsX3Zhcl9uYW1lLCBuYW1lX2xlbiwgIiVzLiVzLiVzIiwgbmFtZSwKKwkJ dW5pcXVlX25hbWUsIHN1ZmZpeCk7CisgIGVsc2UKKyAgICAgIHNucHJpbnRm IChnbG9iYWxfdmFyX25hbWUsIG5hbWVfbGVuLCAiJXMuJXMiLCBuYW1lLCBz dWZmaXgpOworCisgIHJldHVybiBnbG9iYWxfdmFyX25hbWU7Cit9CisKKy8q IE1ha2UgYSBkaXNwYXRjaGVyIGRlY2xhcmF0aW9uIGZvciB0aGUgbXVsdGkt dmVyc2lvbmVkIGZ1bmN0aW9uIERFQ0wuCisgICBDYWxscyB0byBERUNMIGZ1 bmN0aW9uIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBjYWxscyB0byB0aGUgZGlz cGF0Y2hlcgorICAgYnkgdGhlIGZyb250LWVuZC4gIFJldHVybiB0aGUgZGVj bCBjcmVhdGVkLiAgKi8KKworc3RhdGljIHRyZWUKK21ha2VfZGlzcGF0Y2hl cl9kZWNsIChjb25zdCB0cmVlIGRlY2wpCit7CisgIHRyZWUgZnVuY19kZWNs OworICBjaGFyICpmdW5jX25hbWUsICpyZXNvbHZlcl9uYW1lOworICB0cmVl IGZuX3R5cGUsIGZ1bmNfdHlwZTsKKyAgYm9vbCBpc191bmlxID0gZmFsc2U7 CisKKyAgaWYgKFRSRUVfUFVCTElDIChkZWNsKSA9PSAwKQorICAgIGlzX3Vu aXEgPSB0cnVlOworCisgIGZ1bmNfbmFtZSA9IG1ha2VfbmFtZSAoZGVjbCwg ImlmdW5jIiwgaXNfdW5pcSk7CisgIHJlc29sdmVyX25hbWUgPSBtYWtlX25h bWUgKGRlY2wsICJyZXNvbHZlciIsIGlzX3VuaXEpOworICBnY2NfYXNzZXJ0 IChyZXNvbHZlcl9uYW1lKTsKKworICBmbl90eXBlID0gVFJFRV9UWVBFIChk ZWNsKTsKKyAgZnVuY190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoVFJF RV9UWVBFIChmbl90eXBlKSwKKwkJCQkgICBUWVBFX0FSR19UWVBFUyAoZm5f dHlwZSkpOworICAKKyAgZnVuY19kZWNsID0gYnVpbGRfZm5fZGVjbCAoZnVu Y19uYW1lLCBmdW5jX3R5cGUpOworICBUUkVFX1VTRUQgKGZ1bmNfZGVjbCkg PSAxOworICBERUNMX0NPTlRFWFQgKGZ1bmNfZGVjbCkgPSBOVUxMX1RSRUU7 CisgIERFQ0xfSU5JVElBTCAoZnVuY19kZWNsKSA9IGVycm9yX21hcmtfbm9k ZTsKKyAgREVDTF9BUlRJRklDSUFMIChmdW5jX2RlY2wpID0gMTsKKyAgLyog TWFyayB0aGlzIGZ1bmMgYXMgZXh0ZXJuYWwsIHRoZSByZXNvbHZlciB3aWxs IGZsaXAgaXQgYWdhaW4gaWYKKyAgICAgaXQgZ2V0cyBnZW5lcmF0ZWQuICAq LworICBERUNMX0VYVEVSTkFMIChmdW5jX2RlY2wpID0gMTsKKyAgLyogVGhp cyB3aWxsIGJlIG9mIHR5cGUgSUZVTkNzIGhhdmUgdG8gYmUgZXh0ZXJuYWxs eSB2aXNpYmxlLiAgKi8KKyAgVFJFRV9QVUJMSUMgKGZ1bmNfZGVjbCkgPSAx OworCisgIHJldHVybiBmdW5jX2RlY2w7ICAKK30KKworLyogUmV0dXJucyB0 cnVlIGlmIGRlY2wgaXMgbXVsdGktdmVyc2lvbmVkIGFuZCBERUNMIGlzIHRo ZSBkZWZhdWx0IGZ1bmN0aW9uLAorICAgdGhhdCBpcyBpdCBpcyBub3QgdGFn Z2VkIHdpdGggdGFyZ2V0IHNwZWNpZmljIG9wdGltaXphdGlvbi4gICovCisK K3N0YXRpYyBib29sCitpc19mdW5jdGlvbl9kZWZhdWx0X3ZlcnNpb24gKGNv bnN0IHRyZWUgZGVjbCkKK3sKKyAgcmV0dXJuIChUUkVFX0NPREUgKGRlY2wp ID09IEZVTkNUSU9OX0RFQ0wKKwkgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lP TkVEIChkZWNsKQorCSAgJiYgREVDTF9GVU5DVElPTl9TUEVDSUZJQ19UQVJH RVQgKGRlY2wpID09IE5VTExfVFJFRSk7Cit9CisKKy8qIE1ha2UgYSBkaXNw YXRjaGVyIGRlY2xhcmF0aW9uIGZvciB0aGUgbXVsdGktdmVyc2lvbmVkIGZ1 bmN0aW9uIERFQ0wuCisgICBDYWxscyB0byBERUNMIGZ1bmN0aW9uIHdpbGwg YmUgcmVwbGFjZWQgd2l0aCBjYWxscyB0byB0aGUgZGlzcGF0Y2hlcgorICAg YnkgdGhlIGZyb250LWVuZC4gIFJldHVybnMgdGhlIGRlY2wgb2YgdGhlIGRp c3BhdGNoZXIgZnVuY3Rpb24uICAqLworCitzdGF0aWMgdHJlZQoraXg4Nl9n ZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlzcGF0Y2hlciAodm9pZCAqZGVjbCkK K3sKKyAgdHJlZSBmbiA9ICh0cmVlKSBkZWNsOworICBzdHJ1Y3QgY2dyYXBo X25vZGUgKm5vZGUgPSBOVUxMOworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKmRl ZmF1bHRfbm9kZSA9IE5VTEw7CisgIHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25f dmVyc2lvbl9pbmZvICpub2RlX3YgPSBOVUxMOworICBzdHJ1Y3QgY2dyYXBo X2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqaXRfdiA9IE5VTEw7CisgIHN0cnVj dCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICpmaXJzdF92ID0gTlVM TDsKKworICB0cmVlIGRpc3BhdGNoX2RlY2wgPSBOVUxMOworICBzdHJ1Y3Qg Y2dyYXBoX25vZGUgKmRpc3BhdGNoZXJfbm9kZSA9IE5VTEw7CisgIHN0cnVj dCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICpkaXNwYXRjaGVyX3Zl cnNpb25faW5mbyA9IE5VTEw7CisKKyAgc3RydWN0IGNncmFwaF9mdW5jdGlv bl92ZXJzaW9uX2luZm8gKmRlZmF1bHRfdmVyc2lvbl9pbmZvID0gTlVMTDsK KyAKKyAgZ2NjX2Fzc2VydCAoZm4gIT0gTlVMTCAmJiBERUNMX0ZVTkNUSU9O X1ZFUlNJT05FRCAoZm4pKTsKKworICBub2RlID0gY2dyYXBoX2dldF9ub2Rl IChmbik7CisgIGdjY19hc3NlcnQgKG5vZGUgIT0gTlVMTCk7CisKKyAgbm9k ZV92ID0gZ2V0X2NncmFwaF9ub2RlX3ZlcnNpb24gKG5vZGUpOworICBnY2Nf YXNzZXJ0IChub2RlX3YgIT0gTlVMTCk7CisgCisgIGlmIChub2RlX3YtPmRp c3BhdGNoZXJfcmVzb2x2ZXIgIT0gTlVMTCkKKyAgICByZXR1cm4gbm9kZV92 LT5kaXNwYXRjaGVyX3Jlc29sdmVyOworCisgIC8qIEZpbmQgdGhlIGRlZmF1 bHQgdmVyc2lvbiBhbmQgbWFrZSBpdCB0aGUgZmlyc3Qgbm9kZS4gICovCisg IGZpcnN0X3YgPSBub2RlX3Y7CisgIC8qIEdvIHRvIHRoZSBiZWdpbm5pZyBv ZiB0aGUgY2hhaW4uICAqLworICB3aGlsZSAoZmlyc3Rfdi0+cHJldiAhPSBO VUxMKQorICAgIGZpcnN0X3YgPSBmaXJzdF92LT5wcmV2OworICBkZWZhdWx0 X3ZlcnNpb25faW5mbyA9IGZpcnN0X3Y7CisgIHdoaWxlIChkZWZhdWx0X3Zl cnNpb25faW5mbyAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChpc19mdW5j dGlvbl9kZWZhdWx0X3ZlcnNpb24KKwkgICAgKGRlZmF1bHRfdmVyc2lvbl9p bmZvLT50aGlzX25vZGUtPnN5bWJvbC5kZWNsKSkKKyAgICAgICAgYnJlYWs7 CisgICAgICBkZWZhdWx0X3ZlcnNpb25faW5mbyA9IGRlZmF1bHRfdmVyc2lv bl9pbmZvLT5uZXh0OworICAgIH0KKworICAvKiBJZiB0aGVyZSBpcyBubyBk ZWZhdWx0IG5vZGUsIGp1c3QgcmV0dXJuIE5VTEwuICAqLworICBpZiAoZGVm YXVsdF92ZXJzaW9uX2luZm8gPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsK KworICAvKiBNYWtlIGRlZmF1bHQgaW5mbyB0aGUgZmlyc3Qgbm9kZS4gICov CisgIGlmIChmaXJzdF92ICE9IGRlZmF1bHRfdmVyc2lvbl9pbmZvKQorICAg IHsKKyAgICAgIGRlZmF1bHRfdmVyc2lvbl9pbmZvLT5wcmV2LT5uZXh0ID0g ZGVmYXVsdF92ZXJzaW9uX2luZm8tPm5leHQ7CisgICAgICBpZiAoZGVmYXVs dF92ZXJzaW9uX2luZm8tPm5leHQpCisgICAgICAgIGRlZmF1bHRfdmVyc2lv bl9pbmZvLT5uZXh0LT5wcmV2ID0gZGVmYXVsdF92ZXJzaW9uX2luZm8tPnBy ZXY7CisgICAgICBmaXJzdF92LT5wcmV2ID0gZGVmYXVsdF92ZXJzaW9uX2lu Zm87CisgICAgICBkZWZhdWx0X3ZlcnNpb25faW5mby0+bmV4dCA9IGZpcnN0 X3Y7CisgICAgICBkZWZhdWx0X3ZlcnNpb25faW5mby0+cHJldiA9IE5VTEw7 CisgICAgfQorCisgIGRlZmF1bHRfbm9kZSA9IGRlZmF1bHRfdmVyc2lvbl9p bmZvLT50aGlzX25vZGU7CisKKyNpZiBkZWZpbmVkIChBU01fT1VUUFVUX1RZ UEVfRElSRUNUSVZFKSAmJiBIQVZFX0dOVV9JTkRJUkVDVF9GVU5DVElPTgor ICAvKiBSaWdodCBub3csIHRoZSBkaXNwYXRjaGluZyBpcyBkb25lIHZpYSBp ZnVuYy4gICovCisgIGRpc3BhdGNoX2RlY2wgPSBtYWtlX2Rpc3BhdGNoZXJf ZGVjbCAoZGVmYXVsdF9ub2RlLT5zeW1ib2wuZGVjbCk7IAorI2Vsc2UKKyAg ZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChkZWZhdWx0X25vZGUt PnN5bWJvbC5kZWNsKSwKKwkgICAgIk11bHRpdmVyc2lvbmluZyBuZWVkcyBp ZnVuYyB3aGljaCBpcyBub3Qgc3VwcG9ydGVkICIKKwkgICAgImluIHRoaXMg Y29uZmlndXJhdGlvbiIpOworI2VuZGlmCisKKyAgZGlzcGF0Y2hlcl9ub2Rl ID0gY2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZGlzcGF0Y2hfZGVjbCk7Cisg IGdjY19hc3NlcnQgKGRpc3BhdGNoZXJfbm9kZSAhPSBOVUxMKTsKKyAgZGlz cGF0Y2hlcl9ub2RlLT5kaXNwYXRjaGVyX2Z1bmN0aW9uID0gMTsKKyAgZGlz cGF0Y2hlcl92ZXJzaW9uX2luZm8KKyAgICA9IGluc2VydF9uZXdfY2dyYXBo X25vZGVfdmVyc2lvbiAoZGlzcGF0Y2hlcl9ub2RlKTsKKyAgZGlzcGF0Y2hl cl92ZXJzaW9uX2luZm8tPm5leHQgPSBkZWZhdWx0X3ZlcnNpb25faW5mbzsK KyAgZGlzcGF0Y2hlcl9ub2RlLT5sb2NhbC5maW5hbGl6ZWQgPSAxOworICBj Z3JhcGhfbWFya19hZGRyZXNzX3Rha2VuX25vZGUgKGRlZmF1bHRfbm9kZSk7 CisgCisgIC8qIFNldCB0aGUgZGlzcGF0Y2hlciBmb3IgYWxsIHRoZSB2ZXJz aW9ucy4gICovIAorICBpdF92ID0gZGVmYXVsdF92ZXJzaW9uX2luZm87Cisg IHdoaWxlIChpdF92LT5uZXh0ICE9IE5VTEwpCisgICAgeworICAgICAgaXRf di0+ZGlzcGF0Y2hlcl9yZXNvbHZlciA9IGRpc3BhdGNoX2RlY2w7CisgICAg ICBpdF92ID0gaXRfdi0+bmV4dDsKKyAgICB9CisKKyAgcmV0dXJuIGRpc3Bh dGNoX2RlY2w7Cit9CisKKy8qIE1ha2VzIGEgZnVuY3Rpb24gYXR0cmlidXRl IG9mIHRoZSBmb3JtIE5BTUUoQVJHX05BTUUpIGFuZCBjaGFpbnMKKyAgIGl0 IHRvIENIQUlOLiAgKi8KKworc3RhdGljIHRyZWUKK21ha2VfYXR0cmlidXRl IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmdfbmFtZSwgdHJl ZSBjaGFpbikKK3sKKyAgdHJlZSBhdHRyX25hbWU7CisgIHRyZWUgYXR0cl9h cmdfbmFtZTsKKyAgdHJlZSBhdHRyX2FyZ3M7CisgIHRyZWUgYXR0cjsKKwor ICBhdHRyX25hbWUgPSBnZXRfaWRlbnRpZmllciAobmFtZSk7CisgIGF0dHJf YXJnX25hbWUgPSBidWlsZF9zdHJpbmcgKHN0cmxlbiAoYXJnX25hbWUpLCBh cmdfbmFtZSk7CisgIGF0dHJfYXJncyA9IHRyZWVfY29ucyAoTlVMTF9UUkVF LCBhdHRyX2FyZ19uYW1lLCBOVUxMX1RSRUUpOworICBhdHRyID0gdHJlZV9j b25zIChhdHRyX25hbWUsIGF0dHJfYXJncywgY2hhaW4pOworICByZXR1cm4g YXR0cjsKK30KKworLyogTWFrZSB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gZGVj bCB0byBkaXNwYXRjaCB0aGUgdmVyc2lvbnMgb2YKKyAgIGEgbXVsdGktdmVy c2lvbmVkIGZ1bmN0aW9uLCAgREVGQVVMVF9ERUNMLiAgQ3JlYXRlIGFuCisg ICBlbXB0eSBiYXNpYyBibG9jayBpbiB0aGUgcmVzb2x2ZXIgYW5kIHN0b3Jl IHRoZSBwb2ludGVyIGluCisgICBFTVBUWV9CQi4gIFJldHVybiB0aGUgZGVj bCBvZiB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24uICAqLworCitzdGF0aWMgdHJl ZQorbWFrZV9yZXNvbHZlcl9mdW5jIChjb25zdCB0cmVlIGRlZmF1bHRfZGVj bCwKKwkJICAgIGNvbnN0IHRyZWUgZGlzcGF0Y2hfZGVjbCwKKwkJICAgIGJh c2ljX2Jsb2NrICplbXB0eV9iYikKK3sKKyAgY2hhciAqcmVzb2x2ZXJfbmFt ZTsKKyAgdHJlZSBkZWNsLCB0eXBlLCBkZWNsX25hbWUsIHQ7CisgIGJvb2wg aXNfdW5pcSA9IGZhbHNlOworCisgIC8qIElGVU5DJ3MgaGF2ZSB0byBiZSBn bG9iYWxseSB2aXNpYmxlLiAgU28sIGlmIHRoZSBkZWZhdWx0X2RlY2wgaXMK KyAgICAgbm90LCB0aGVuIHRoZSBuYW1lIG9mIHRoZSBJRlVOQyBzaG91bGQg YmUgbWFkZSB1bmlxdWUuICAqLworICBpZiAoVFJFRV9QVUJMSUMgKGRlZmF1 bHRfZGVjbCkgPT0gMCkKKyAgICBpc191bmlxID0gdHJ1ZTsKKworICAvKiBB cHBlbmQgdGhlIGZpbGVuYW1lIHRvIHRoZSByZXNvbHZlciBmdW5jdGlvbiBp ZiB0aGUgdmVyc2lvbnMgYXJlCisgICAgIG5vdCBleHRlcm5hbGx5IHZpc2li bGUuICBUaGlzIGlzIGJlY2F1c2UgdGhlIHJlc29sdmVyIGZ1bmN0aW9uIGhh cworICAgICB0byBiZSBleHRlcm5hbGx5IHZpc2libGUgZm9yIHRoZSBsb2Fk ZXIgdG8gZmluZCBpdC4gIFNvLCBhcHBlbmRpbmcKKyAgICAgdGhlIGZpbGVu YW1lIHdpbGwgcHJldmVudCBjb25mbGljdHMgd2l0aCBhIHJlc29sdmVyIGZ1 bmN0aW9uIGZyb20KKyAgICAgYW5vdGhlciBtb2R1bGUgd2hpY2ggaXMgYmFz ZWQgb24gdGhlIHNhbWUgdmVyc2lvbiBuYW1lLiAgKi8KKyAgcmVzb2x2ZXJf bmFtZSA9IG1ha2VfbmFtZSAoZGVmYXVsdF9kZWNsLCAicmVzb2x2ZXIiLCBp c191bmlxKTsKKworICAvKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gc2hvdWxk IHJldHVybiBhICh2b2lkICopLiAqLworICB0eXBlID0gYnVpbGRfZnVuY3Rp b25fdHlwZV9saXN0IChwdHJfdHlwZV9ub2RlLCBOVUxMX1RSRUUpOworCisg IGRlY2wgPSBidWlsZF9mbl9kZWNsIChyZXNvbHZlcl9uYW1lLCB0eXBlKTsK KyAgZGVjbF9uYW1lID0gZ2V0X2lkZW50aWZpZXIgKHJlc29sdmVyX25hbWUp OworICBTRVRfREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCwgZGVjbF9uYW1l KTsKKworICBERUNMX05BTUUgKGRlY2wpID0gZGVjbF9uYW1lOworICBUUkVF X1VTRUQgKGRlY2wpID0gMTsKKyAgREVDTF9BUlRJRklDSUFMIChkZWNsKSA9 IDE7CisgIERFQ0xfSUdOT1JFRF9QIChkZWNsKSA9IDA7CisgIC8qIElGVU5D IHJlc29sdmVycyBoYXZlIHRvIGJlIGV4dGVybmFsbHkgdmlzaWJsZS4gICov CisgIFRSRUVfUFVCTElDIChkZWNsKSA9IDE7CisgIERFQ0xfVU5JTkxJTkFC TEUgKGRlY2wpID0gMTsKKworICAvKiBSZXNvbHZlciBpcyBub3QgZXh0ZXJu YWwsIGJvZHkgaXMgZ2VuZXJhdGVkLiAgKi8KKyAgREVDTF9FWFRFUk5BTCAo ZGVjbCkgPSAwOworICBERUNMX0VYVEVSTkFMIChkaXNwYXRjaF9kZWNsKSA9 IDA7CisKKyAgREVDTF9DT05URVhUIChkZWNsKSA9IE5VTExfVFJFRTsKKyAg REVDTF9JTklUSUFMIChkZWNsKSA9IG1ha2Vfbm9kZSAoQkxPQ0spOworICBE RUNMX1NUQVRJQ19DT05TVFJVQ1RPUiAoZGVjbCkgPSAwOworCisgIGlmIChE RUNMX0NPTURBVF9HUk9VUCAoZGVmYXVsdF9kZWNsKSkKKyAgICB7CisgICAg ICBERUNMX0NPTURBVCAoZGVjbCkgPSBERUNMX0NPTURBVCAoZGVmYXVsdF9k ZWNsKTsKKyAgICAgIC8qbWFrZV9kZWNsX29uZV9vbmx5IChkZWNsLCBERUNM X0NPTURBVF9HUk9VUCAoZGVmYXVsdF9kZWNsKSk7Ki8KKyAgICAgIG1ha2Vf ZGVjbF9vbmVfb25seSAoZGVjbCwgREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVj bCkpOworICAgIH0KKyAgZWxzZSBpZiAoVFJFRV9QVUJMSUMgKGRlZmF1bHRf ZGVjbCkpCisgICAgeworICAgICAgLyogSW4gdGhpcyBjYXNlLCBlYWNoIHRy YW5zbGF0aW9uIHVuaXQgd2l0aCBhIGNhbGwgdG8gdGhpcworCSB2ZXJzaW9u ZWQgZnVuY3Rpb24gd2lsbCBwdXQgb3V0IGEgcmVzb2x2ZXIuICBFbnN1cmUg aXQKKwkgaXMgY29tZGF0IHRvIGtlZXAganVzdCBvbmUgY29weS4gICovCisg ICAgICBERUNMX0NPTURBVCAoZGVjbCkgPSAxOworICAgICAgbWFrZV9kZWNs X29uZV9vbmx5IChkZWNsLCBERUNMX0FTU0VNQkxFUl9OQU1FIChkZWNsKSk7 CisgICAgfQorICAvKiBCdWlsZCByZXN1bHQgZGVjbCBhbmQgYWRkIHRvIGZ1 bmN0aW9uX2RlY2wuICovCisgIHQgPSBidWlsZF9kZWNsIChVTktOT1dOX0xP Q0FUSU9OLCBSRVNVTFRfREVDTCwgTlVMTF9UUkVFLCBwdHJfdHlwZV9ub2Rl KTsKKyAgREVDTF9BUlRJRklDSUFMICh0KSA9IDE7CisgIERFQ0xfSUdOT1JF RF9QICh0KSA9IDE7CisgIERFQ0xfUkVTVUxUIChkZWNsKSA9IHQ7CisKKyAg Z2ltcGxpZnlfZnVuY3Rpb25fdHJlZSAoZGVjbCk7CisgIHB1c2hfY2Z1biAo REVDTF9TVFJVQ1RfRlVOQ1RJT04gKGRlY2wpKTsKKyAgKmVtcHR5X2JiID0g aW5pdF9sb3dlcmVkX2VtcHR5X2Z1bmN0aW9uIChkZWNsLCBmYWxzZSk7CisK KyAgY2dyYXBoX2FkZF9uZXdfZnVuY3Rpb24gKGRlY2wsIHRydWUpOworICBj Z3JhcGhfY2FsbF9mdW5jdGlvbl9pbnNlcnRpb25faG9va3MgKGNncmFwaF9n ZXRfY3JlYXRlX25vZGUgKGRlY2wpKTsKKworICBpZiAoREVDTF9DT01EQVRf R1JPVVAgKGRlZmF1bHRfZGVjbCkpCisgICAgeworICAgICAgZ2NjX2Fzc2Vy dCAoY2dyYXBoX2dldF9ub2RlIChkZWZhdWx0X2RlY2wpKTsKKyAgICAgIHN5 bXRhYl9hZGRfdG9fc2FtZV9jb21kYXRfZ3JvdXAgKAorCShzeW10YWJfbm9k ZSkgY2dyYXBoX2dldF9ub2RlIChkZWNsKSwKKwkoc3ltdGFiX25vZGUpIGNn cmFwaF9nZXRfbm9kZSAoZGVmYXVsdF9kZWNsKSk7CisgICAgfQorCisgIHBv cF9jZnVuICgpOworCisgIGdjY19hc3NlcnQgKGRpc3BhdGNoX2RlY2wgIT0g TlVMTCk7CisgIC8qIE1hcmsgZGlzcGF0Y2hfZGVjbCBhcyAiaWZ1bmMiIHdp dGggcmVzb2x2ZXIgYXMgcmVzb2x2ZXJfbmFtZS4gICovCisgIERFQ0xfQVRU UklCVVRFUyAoZGlzcGF0Y2hfZGVjbCkgCisgICAgPSBtYWtlX2F0dHJpYnV0 ZSAoImlmdW5jIiwgcmVzb2x2ZXJfbmFtZSwgREVDTF9BVFRSSUJVVEVTIChk aXNwYXRjaF9kZWNsKSk7CisKKyAgLyogQ3JlYXRlIHRoZSBhbGlhcyBmb3Ig ZGlzcGF0Y2ggdG8gcmVzb2x2ZXIgaGVyZS4gICovCisgIC8qY2dyYXBoX2Ny ZWF0ZV9mdW5jdGlvbl9hbGlhcyAoZGlzcGF0Y2hfZGVjbCwgZGVjbCk7Ki8K KyAgY2dyYXBoX3NhbWVfYm9keV9hbGlhcyAoTlVMTCwgZGlzcGF0Y2hfZGVj bCwgZGVjbCk7CisgIHJldHVybiBkZWNsOworfQorCisvKiBHZW5lcmF0ZSB0 aGUgZGlzcGF0Y2hpbmcgY29kZSBib2R5IHRvIGRpc3BhdGNoIG11bHRpLXZl cnNpb25lZCBmdW5jdGlvbgorICAgREVDTC4gIFRoZSB0YXJnZXQgaG9vayBp cyBjYWxsZWQgdG8gcHJvY2VzcyB0aGUgInRhcmdldCIgYXR0cmlidXRlcyBh bmQKKyAgIHByb3ZpZGUgdGhlIGNvZGUgdG8gZGlzcGF0Y2ggdGhlIHJpZ2h0 IGZ1bmN0aW9uIGF0IHJ1bi10aW1lLiAgTk9ERSBwb2ludHMKKyAgIHRvIHRo ZSBkaXNwYXRjaGVyIGRlY2wgd2hvc2UgYm9keSB3aWxsIGJlIGNyZWF0ZWQu ICAqLworCitzdGF0aWMgdHJlZSAKK2l4ODZfZ2VuZXJhdGVfdmVyc2lvbl9k aXNwYXRjaGVyX2JvZHkgKHZvaWQgKm5vZGVfcCkKK3sKKyAgdHJlZSByZXNv bHZlcl9kZWNsOworICBiYXNpY19ibG9jayBlbXB0eV9iYjsKKyAgVkVDICh0 cmVlLCBoZWFwKSAqZm5fdmVyX3ZlYyA9IE5VTEw7CisgIHRyZWUgZGVmYXVs dF92ZXJfZGVjbDsKKyAgc3RydWN0IGNncmFwaF9ub2RlICp2ZXJzbjsKKyAg c3RydWN0IGNncmFwaF9ub2RlICpub2RlOworCisgIHN0cnVjdCBjZ3JhcGhf ZnVuY3Rpb25fdmVyc2lvbl9pbmZvICpub2RlX3ZlcnNpb25faW5mbyA9IE5V TEw7CisgIHN0cnVjdCBjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvICp2 ZXJzbl9pbmZvID0gTlVMTDsKKworICBub2RlID0gKGNncmFwaF9ub2RlICop bm9kZV9wOworCisgIG5vZGVfdmVyc2lvbl9pbmZvID0gZ2V0X2NncmFwaF9u b2RlX3ZlcnNpb24gKG5vZGUpOworICBnY2NfYXNzZXJ0IChub2RlLT5kaXNw YXRjaGVyX2Z1bmN0aW9uCisJICAgICAgJiYgbm9kZV92ZXJzaW9uX2luZm8g IT0gTlVMTCk7CisKKyAgaWYgKG5vZGVfdmVyc2lvbl9pbmZvLT5kaXNwYXRj aGVyX3Jlc29sdmVyKQorICAgIHJldHVybiBub2RlX3ZlcnNpb25faW5mby0+ ZGlzcGF0Y2hlcl9yZXNvbHZlcjsKKworICAvKiBUaGUgZmlyc3QgdmVyc2lv biBpbiB0aGUgY2hhaW4gY29ycmVzcG9uZHMgdG8gdGhlIGRlZmF1bHQgdmVy c2lvbi4gICovCisgIGRlZmF1bHRfdmVyX2RlY2wgPSBub2RlX3ZlcnNpb25f aW5mby0+bmV4dC0+dGhpc19ub2RlLT5zeW1ib2wuZGVjbDsKKworICAvKiBu b2RlIGlzIGdvaW5nIHRvIGJlIGFuIGFsaWFzLCBzbyByZW1vdmUgdGhlIGZp bmFsaXplZCBiaXQuICAqLworICBub2RlLT5sb2NhbC5maW5hbGl6ZWQgPSBm YWxzZTsKKworICByZXNvbHZlcl9kZWNsID0gbWFrZV9yZXNvbHZlcl9mdW5j IChkZWZhdWx0X3Zlcl9kZWNsLAorCQkJCSAgICAgIG5vZGUtPnN5bWJvbC5k ZWNsLCAmZW1wdHlfYmIpOworCisgIG5vZGVfdmVyc2lvbl9pbmZvLT5kaXNw YXRjaGVyX3Jlc29sdmVyID0gcmVzb2x2ZXJfZGVjbDsKKworICBwdXNoX2Nm dW4gKERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChyZXNvbHZlcl9kZWNsKSk7CisK KyAgZm5fdmVyX3ZlYyA9IFZFQ19hbGxvYyAodHJlZSwgaGVhcCwgMik7CisK KyAgZm9yICh2ZXJzbl9pbmZvID0gbm9kZV92ZXJzaW9uX2luZm8tPm5leHQ7 IHZlcnNuX2luZm87CisgICAgICAgdmVyc25faW5mbyA9IHZlcnNuX2luZm8t Pm5leHQpCisgICAgeworICAgICAgdmVyc24gPSB2ZXJzbl9pbmZvLT50aGlz X25vZGU7CisgICAgICAvKiBDaGVjayBmb3IgdmlydHVhbCBmdW5jdGlvbnMg aGVyZSBhZ2FpbiwgYXMgYnkgdGhpcyB0aW1lIGl0IHNob3VsZAorCSBoYXZl IGJlZW4gZGV0ZXJtaW5lZCBpZiB0aGlzIGZ1bmN0aW9uIG5lZWRzIGEgdnRh YmxlIGluZGV4IG9yCisJIG5vdC4gIFRoaXMgaGFwcGVucyBmb3IgbWV0aG9k cyBpbiBkZXJpdmVkIGNsYXNzZXMgdGhhdCBvdmVycmlkZQorCSB2aXJ0dWFs IG1ldGhvZHMgaW4gYmFzZSBjbGFzc2VzIGJ1dCBhcmUgbm90IGV4cGxpY2l0 bHkgbWFya2VkIGFzCisJIHZpcnR1YWwuICAqLworICAgICAgaWYgKERFQ0xf VklOREVYICh2ZXJzbi0+c3ltYm9sLmRlY2wpKQorICAgICAgICBlcnJvcl9h dCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKHZlcnNuLT5zeW1ib2wuZGVjbCks CisJCSAgIlZpcnR1YWwgZnVuY3Rpb24gbXVsdGl2ZXJzaW9uaW5nIG5vdCBz dXBwb3J0ZWQiKTsKKyAgICAgIFZFQ19zYWZlX3B1c2ggKHRyZWUsIGhlYXAs IGZuX3Zlcl92ZWMsIHZlcnNuLT5zeW1ib2wuZGVjbCk7CisgICAgfQorCisg IGRpc3BhdGNoX2Z1bmN0aW9uX3ZlcnNpb25zIChyZXNvbHZlcl9kZWNsLCBm bl92ZXJfdmVjLCAmZW1wdHlfYmIpOworCisgIHJlYnVpbGRfY2dyYXBoX2Vk Z2VzICgpOyAKKyAgcG9wX2NmdW4gKCk7CisgIHJldHVybiByZXNvbHZlcl9k ZWNsOworfQogLyogVGhpcyBidWlsZHMgdGhlIHByb2Nlc3Nvcl9tb2RlbCBz dHJ1Y3QgdHlwZSBkZWZpbmVkIGluCiAgICBsaWJnY2MvY29uZmlnL2kzODYv Y3B1aW5mby5jICAqLwogCkBAIC0yODY1OCw2ICsyOTYzNSw4IEBAIGZvbGRf YnVpbHRpbl9jcHUgKHRyZWUgZm5kZWNsLCB0cmVlICphcmdzKQogICAgIHsK ICAgICAgIHRyZWUgcmVmOwogICAgICAgdHJlZSBmaWVsZDsKKyAgICAgIHRy ZWUgZmluYWw7CisKICAgICAgIHVuc2lnbmVkIGludCBmaWVsZF92YWwgPSAw OwogICAgICAgdW5zaWduZWQgaW50IE5VTV9BUkNIX05BTUVTCiAJPSBzaXpl b2YgKGFyY2hfbmFtZXNfdGFibGUpIC8gc2l6ZW9mIChzdHJ1Y3QgX2FyY2hf bmFtZXNfdGFibGUpOwpAQCAtMjg2OTcsMTQgKzI5Njc2LDE3IEBAIGZvbGRf YnVpbHRpbl9jcHUgKHRyZWUgZm5kZWNsLCB0cmVlICphcmdzKQogCQkgICAg IGZpZWxkLCBOVUxMX1RSRUUpOwogCiAgICAgICAvKiBDaGVjayB0aGUgdmFs dWUuICAqLwotICAgICAgcmV0dXJuIGJ1aWxkMiAoRVFfRVhQUiwgdW5zaWdu ZWRfdHlwZV9ub2RlLCByZWYsCi0JCSAgICAgYnVpbGRfaW50X2NzdHUgKHVu c2lnbmVkX3R5cGVfbm9kZSwgZmllbGRfdmFsKSk7CisgICAgICBmaW5hbCA9 IGJ1aWxkMiAoRVFfRVhQUiwgdW5zaWduZWRfdHlwZV9ub2RlLCByZWYsCisJ CSAgICAgIGJ1aWxkX2ludF9jc3R1ICh1bnNpZ25lZF90eXBlX25vZGUsIGZp ZWxkX3ZhbCkpOworICAgICAgcmV0dXJuIGJ1aWxkMSAoQ09OVkVSVF9FWFBS LCBpbnRlZ2VyX3R5cGVfbm9kZSwgZmluYWwpOwogICAgIH0KICAgZWxzZSBp ZiAoZm5fY29kZSA9PSBJWDg2X0JVSUxUSU5fQ1BVX1NVUFBPUlRTKQogICAg IHsKICAgICAgIHRyZWUgcmVmOwogICAgICAgdHJlZSBhcnJheV9lbHQ7CiAg ICAgICB0cmVlIGZpZWxkOworICAgICAgdHJlZSBmaW5hbDsKKwogICAgICAg dW5zaWduZWQgaW50IGZpZWxkX3ZhbCA9IDA7CiAgICAgICB1bnNpZ25lZCBp bnQgTlVNX0lTQV9OQU1FUwogCT0gc2l6ZW9mIChpc2FfbmFtZXNfdGFibGUp IC8gc2l6ZW9mIChzdHJ1Y3QgX2lzYV9uYW1lc190YWJsZSk7CkBAIC0yODcz Niw4ICsyOTcxOCw5IEBAIGZvbGRfYnVpbHRpbl9jcHUgKHRyZWUgZm5kZWNs LCB0cmVlICphcmdzKQogCiAgICAgICBmaWVsZF92YWwgPSAoMSA8PCBpc2Ff bmFtZXNfdGFibGVbaV0uZmVhdHVyZSk7CiAgICAgICAvKiBSZXR1cm4gX19j cHVfbW9kZWwuX19jcHVfZmVhdHVyZXNbMF0gJiBmaWVsZF92YWwgICovCi0g ICAgICByZXR1cm4gYnVpbGQyIChCSVRfQU5EX0VYUFIsIHVuc2lnbmVkX3R5 cGVfbm9kZSwgYXJyYXlfZWx0LAotCQkgICAgIGJ1aWxkX2ludF9jc3R1ICh1 bnNpZ25lZF90eXBlX25vZGUsIGZpZWxkX3ZhbCkpOworICAgICAgZmluYWwg PSBidWlsZDIgKEJJVF9BTkRfRVhQUiwgdW5zaWduZWRfdHlwZV9ub2RlLCBh cnJheV9lbHQsCisJCSAgICAgIGJ1aWxkX2ludF9jc3R1ICh1bnNpZ25lZF90 eXBlX25vZGUsIGZpZWxkX3ZhbCkpOworICAgICAgcmV0dXJuIGJ1aWxkMSAo Q09OVkVSVF9FWFBSLCBpbnRlZ2VyX3R5cGVfbm9kZSwgZmluYWwpOwogICAg IH0KICAgZ2NjX3VucmVhY2hhYmxlICgpOwogfQpAQCAtNDEyMjUsNiArNDIy MDgsOSBAQCBpeDg2X21lbW1vZGVsX2NoZWNrICh1bnNpZ25lZCBIT1NUX1dJ REVfSU5UIHZhbCkKICN1bmRlZiBUQVJHRVRfUFJPRklMRV9CRUZPUkVfUFJP TE9HVUUKICNkZWZpbmUgVEFSR0VUX1BST0ZJTEVfQkVGT1JFX1BST0xPR1VF IGl4ODZfcHJvZmlsZV9iZWZvcmVfcHJvbG9ndWUKIAorI3VuZGVmIFRBUkdF VF9NQU5HTEVfREVDTF9BU1NFTUJMRVJfTkFNRQorI2RlZmluZSBUQVJHRVRf TUFOR0xFX0RFQ0xfQVNTRU1CTEVSX05BTUUgaXg4Nl9tYW5nbGVfZGVjbF9h c3NlbWJsZXJfbmFtZQorCiAjdW5kZWYgVEFSR0VUX0FTTV9VTkFMSUdORURf SElfT1AKICNkZWZpbmUgVEFSR0VUX0FTTV9VTkFMSUdORURfSElfT1AgVEFS R0VUX0FTTV9BTElHTkVEX0hJX09QCiAjdW5kZWYgVEFSR0VUX0FTTV9VTkFM SUdORURfU0lfT1AKQEAgLTQxMzE4LDYgKzQyMzA0LDE3IEBAIGl4ODZfbWVt bW9kZWxfY2hlY2sgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgdmFsKQogI3Vu ZGVmIFRBUkdFVF9GT0xEX0JVSUxUSU4KICNkZWZpbmUgVEFSR0VUX0ZPTERf QlVJTFRJTiBpeDg2X2ZvbGRfYnVpbHRpbgogCisjdW5kZWYgVEFSR0VUX0NP TVBBUkVfVkVSU0lPTl9QUklPUklUWQorI2RlZmluZSBUQVJHRVRfQ09NUEFS RV9WRVJTSU9OX1BSSU9SSVRZIGl4ODZfY29tcGFyZV92ZXJzaW9uX3ByaW9y aXR5CisKKyN1bmRlZiBUQVJHRVRfR0VORVJBVEVfVkVSU0lPTl9ESVNQQVRD SEVSX0JPRFkKKyNkZWZpbmUgVEFSR0VUX0dFTkVSQVRFX1ZFUlNJT05fRElT UEFUQ0hFUl9CT0RZIFwKKyAgaXg4Nl9nZW5lcmF0ZV92ZXJzaW9uX2Rpc3Bh dGNoZXJfYm9keQorCisjdW5kZWYgVEFSR0VUX0dFVF9GVU5DVElPTl9WRVJT SU9OU19ESVNQQVRDSEVSCisjZGVmaW5lIFRBUkdFVF9HRVRfRlVOQ1RJT05f VkVSU0lPTlNfRElTUEFUQ0hFUiBcCisgIGl4ODZfZ2V0X2Z1bmN0aW9uX3Zl cnNpb25zX2Rpc3BhdGNoZXIKKwogI3VuZGVmIFRBUkdFVF9FTlVNX1ZBX0xJ U1RfUAogI2RlZmluZSBUQVJHRVRfRU5VTV9WQV9MSVNUX1AgaXg4Nl9lbnVt X3ZhX2xpc3QKIApAQCAtNDE0NTgsNiArNDI0NTUsOSBAQCBpeDg2X21lbW1v ZGVsX2NoZWNrICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHZhbCkKICN1bmRl ZiBUQVJHRVRfT1BUSU9OX1BSSU5UCiAjZGVmaW5lIFRBUkdFVF9PUFRJT05f UFJJTlQgaXg4Nl9mdW5jdGlvbl9zcGVjaWZpY19wcmludAogCisjdW5kZWYg VEFSR0VUX09QVElPTl9GVU5DVElPTl9WRVJTSU9OUworI2RlZmluZSBUQVJH RVRfT1BUSU9OX0ZVTkNUSU9OX1ZFUlNJT05TIGl4ODZfZnVuY3Rpb25fdmVy c2lvbnMKKwogI3VuZGVmIFRBUkdFVF9DQU5fSU5MSU5FX1AKICNkZWZpbmUg VEFSR0VUX0NBTl9JTkxJTkVfUCBpeDg2X2Nhbl9pbmxpbmVfcAogCkluZGV4 OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjEuQwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjEuQwkocmV2aXNp b24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL212MS5DCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDEzMCBAQAorLyogVGVzdCBjYXNlIHRvIGNoZWNr IGlmIE11bHRpdmVyc2lvbmluZyB3b3Jrcy4gICovCisvKiB7IGRnLWRvIHJ1 biB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSAqLworLyogeyBk Zy1yZXF1aXJlLWlmdW5jICIiIH0gICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiAtZlBJQyAtbW5vLWF2eCAtbW5vLXBvcGNudCIgfSAqLworCisjaW5jbHVk ZSA8YXNzZXJ0Lmg+CisKKy8qIERlZmF1bHQgdmVyc2lvbi4gICovCitpbnQg Zm9vICgpOworLyogVGhlIG90aGVyIHZlcnNpb25zIG9mIGZvby4gIE1peCB1 cCB0aGUgb3JkZXJpbmcgYW5kIAorICAgY2hlY2sgaWYgdGhlIGRpc3BhdGNo aW5nIGRvZXMgaXQgaW4gdGhlIG9yZGVyIG9mIHByaW9yaXR5LiAqLworLyog Q2hlY2sgY29tYmluYXRpb24gb2YgdGFyZ2V0IGF0dHJpYnV0ZXMuICAqLwor aW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmVp Nyxwb3BjbnQiKSkpOworLyogVGhlIHRhcmdldCBvcGVyYW5kcyBpbiB0aGlz IGRlY2xhcmF0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbiBhcmUgcmUtb3JkZXJl ZC4KKyAgIFRoaXMgc2hvdWxkIHN0aWxsIHdvcmsuICAqLworaW50IGZvbyAo KSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc3NlMyxhdngyIikpKTsKKwor LyogQ2hlY2sgZm9yIGFsbCB0YXJnZXQgYXR0cmlidXRlcyBmb3Igd2hpY2gg ZGlzcGF0Y2hlcnMgYXJlIGF2YWlsYWJsZS4gICovCisvKiBDaGVjayBhcmNo PSAqLworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFyY2g9 Y29yZTIiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQo ImFyY2g9Y29yZWk3IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygo dGFyZ2V0KCJhcmNoPWF0b20iKSkpOworLyogQ2hlY2sgSVNBcyAgKi8KK2lu dCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhdngiKSkpOworaW50 IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmUyLHNz ZTQuMiIpKSk7CisvKiBDaGVjayBtb3JlIGFyY2g9LiAgKi8KK2ludCBmb28g KCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNoPWFtZGZhbTEwIikpKTsK K2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNoPWJkdmVy MSIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgiYXJj aD1iZHZlcjIiKSkpOworCitpbnQgKCpwKSgpID0gJmZvbzsKK2ludCBtYWlu ICgpCit7CisgIGludCB2YWwgPSBmb28gKCk7CisgIGFzc2VydCAodmFsID09 ICAoKnApKCkpOworCisgIC8qIENoZWNrIGluIHRoZSBleGFjdCBzYW1lIG9y ZGVyIGluIHdoaWNoIHRoZSBkaXNwYXRjaGluZworICAgICBpcyBleHBlY3Rl ZCB0byBoYXBwZW4uICAqLworICBpZiAoX19idWlsdGluX2NwdV9pcyAoImJk dmVyMSIpKQorICAgIGFzc2VydCAodmFsID09IDEpOworICBlbHNlIGlmIChf X2J1aWx0aW5fY3B1X2lzICgiYmR2ZXIyIikpCisgICAgYXNzZXJ0ICh2YWwg PT0gMik7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJh dngyIikKKwkgICAmJiBfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NzZTMi KSkKKyAgICBhc3NlcnQgKHZhbCA9PSAzKTsKKyAgZWxzZSBpZiAoX19idWls dGluX2NwdV9zdXBwb3J0cyAoImF2eCIpKQorICAgIGFzc2VydCAodmFsID09 IDQpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X2lzICgiY29yZWk3IikK KwkgICAmJiBfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgicG9wY250IikpCisg ICAgYXNzZXJ0ICh2YWwgPT0gNSk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9j cHVfaXMgKCJjb3JlaTciKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA2KTsKKyAg ZWxzZSBpZiAoX19idWlsdGluX2NwdV9pcyAoImFtZGZhbTEwaCIpKQorICAg IGFzc2VydCAodmFsID09IDcpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1 X2lzICgiY29yZTIiKQorCSAgICYmIF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMg KCJzc2U0LjIiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA4KTsKKyAgZWxzZSBp ZiAoX19idWlsdGluX2NwdV9pcyAoImNvcmUyIikpCisgICAgYXNzZXJ0ICh2 YWwgPT0gOSk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJhdG9t IikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMTApOworICBlbHNlCisgICAgYXNz ZXJ0ICh2YWwgPT0gMCk7CisgIAorICByZXR1cm4gMDsKK30KKworaW50IGZv byAoKQoreworICByZXR1cm4gMDsKK30KKworaW50IF9fYXR0cmlidXRlX18g KCh0YXJnZXQoImFyY2g9Y29yZWk3LHBvcGNudCIpKSkKK2ZvbyAoKQorewor ICByZXR1cm4gNTsKK30KK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJh dngyLHNzc2UzIikpKQorZm9vICgpCit7CisgIHJldHVybiAzOworfQorCitp bnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1jb3JlMiIpKSkKK2Zv byAoKQoreworICByZXR1cm4gOTsKK30KKworaW50IF9fYXR0cmlidXRlX18g KCh0YXJnZXQoImFyY2g9Y29yZWk3IikpKQorZm9vICgpCit7CisgIHJldHVy biA2OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1h dG9tIikpKQorZm9vICgpCit7CisgIHJldHVybiAxMDsKK30KKworaW50IF9f YXR0cmlidXRlX18gKCh0YXJnZXQoImF2eCIpKSkKK2ZvbyAoKQoreworICBy ZXR1cm4gNDsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFy Y2g9Y29yZTIsc3NlNC4yIikpKQorZm9vICgpCit7CisgIHJldHVybiA4Owor fQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1hbWRmYW0x MCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gNzsKK30KKworaW50IF9fYXR0 cmlidXRlX18gKCh0YXJnZXQoImFyY2g9YmR2ZXIxIikpKQorZm9vICgpCit7 CisgIHJldHVybiAxOworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdl dCgiYXJjaD1iZHZlcjIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDI7Cit9 CkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjIuQwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjIuQwko cmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL212Mi5DCShy ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAorLyogVGVzdCBjYXNlIHRv IGNoZWNrIGlmIE11bHRpdmVyc2lvbmluZyBjaG9vc2VzIHRoZSBjb3JyZWN0 CisgICBkaXNwYXRjaGluZyBvcmRlciB3aGVuIHZlcnNpb25zIGFyZSBmb3Ig dmFyaW91cyBJU0FzLiAgKi8KKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ ODYtKi0qIHg4Nl82NC0qLSogfSB9ICovCisvKiB7IGRnLXJlcXVpcmUtaWZ1 bmMgIiIgfSAgKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tbm8tc3NlIC1t bm8tbW14IC1tbm8tcG9wY250IC1tbm8tYXZ4IiB9ICovCisKKyNpbmNsdWRl IDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBEZWZhdWx0 IHZlcnNpb24uICAqLworaW50IGZvbyAoKTsKKy8qIFRoZSBkaXNwYXRjaCBj aGVja3Mgc2hvdWxkIGJlIGluIHRoZSBleGFjdCByZXZlcnNlIG9yZGVyIG9m IHRoZQorICAgZGVjbGFyYXRpb25zIGJlbG93LiAgKi8KK2ludCBmb28gKCkg X19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoIm1teCIpKSk7CitpbnQgZm9vICgp IF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJzc2UiKSkpOworaW50IGZvbyAo KSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgic3NlMiIpKSk7CitpbnQgZm9v ICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJzc2UzIikpKTsKK2ludCBm b28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNzc2UzIikpKTsKK2lu dCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNzZTQuMSIpKSk7 CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJzc2U0LjIi KSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgicG9w Y250IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAo ImF2eCIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQg KCJhdngyIikpKTsKKworaW50IG1haW4gKCkKK3sKKworICBpbnQgdmFsID0g Zm9vICgpOworICBwcmludGYgKCJ2YWwgPSAlZFxuIiwgdmFsKTsKKworICBp ZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoImF2eDIiKSkKKyAgICBhc3Nl cnQgKHZhbCA9PSAxKTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBw b3J0cyAoImF2eCIpKQorICAgIGFzc2VydCAodmFsID09IDIpOworICBlbHNl IGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgicG9wY250IikpCisgICAg YXNzZXJ0ICh2YWwgPT0gMyk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVf c3VwcG9ydHMgKCJzc2U0LjIiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA0KTsK KyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZTQuMSIp KQorICAgIGFzc2VydCAodmFsID09IDUpOworICBlbHNlIGlmIChfX2J1aWx0 aW5fY3B1X3N1cHBvcnRzICgic3NzZTMiKSkKKyAgICBhc3NlcnQgKHZhbCA9 PSA2KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNz ZTMiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA3KTsKKyAgZWxzZSBpZiAoX19i dWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZTIiKSkKKyAgICBhc3NlcnQgKHZh bCA9PSA4KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAo InNzZSIpKQorICAgIGFzc2VydCAodmFsID09IDkpOworICBlbHNlIGlmIChf X2J1aWx0aW5fY3B1X3N1cHBvcnRzICgibW14IikpCisgICAgYXNzZXJ0ICh2 YWwgPT0gMTApOworICBlbHNlCisgICAgYXNzZXJ0ICh2YWwgPT0gMCk7CisK KyAgcmV0dXJuIDA7Cit9CisKK2ludAorZm9vICgpCit7CisgIHJldHVybiAw OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgibW14IikpKQor Zm9vICgpCit7CisgIHJldHVybiAxMDsKK30KKworaW50IF9fYXR0cmlidXRl X18gKCh0YXJnZXQoInNzZSIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gOTsK K30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNzZTIiKSkpCitm b28gKCkKK3sKKyAgcmV0dXJuIDg7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0KCJzc2UzIikpKQorZm9vICgpCit7CisgIHJldHVybiA3Owor fQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgic3NzZTMiKSkpCitm b28gKCkKK3sKKyAgcmV0dXJuIDY7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0KCJzc2U0LjEiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDU7 Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc2U0LjIiKSkp Citmb28gKCkKK3sKKyAgcmV0dXJuIDQ7Cit9CisKK2ludCBfX2F0dHJpYnV0 ZV9fICgodGFyZ2V0KCJwb3BjbnQiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJu IDM7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhdngiKSkp Citmb28gKCkKK3sKKyAgcmV0dXJuIDI7Cit9CisKK2ludCBfX2F0dHJpYnV0 ZV9fICgodGFyZ2V0KCJhdngyIikpKQorZm9vICgpCit7CisgIHJldHVybiAx OworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbXYzLkMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbXYz LkMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjMu QwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyogVGVzdCBjYXNl IHRvIGNoZWNrIGlmIGEgY2FsbCB0byBhIG11bHRpdmVyc2lvbmVkIGZ1bmN0 aW9uCisgICBpcyByZXBsYWNlZCB3aXRoIGEgZGlyZWN0IGNhbGwgdG8gdGhl IHBhcnRpY3VsYXIgdmVyc2lvbiB3aGVuCisgICB0aGUgbW9zdCBzcGVjaWFs aXplZCB2ZXJzaW9uJ3MgdGFyZ2V0IGF0dHJpYnV0ZXMgbWF0Y2ggdGhlCisg ICBjYWxsZXIuICAKKyAgCisgICBJbiB0aGlzIHByb2dyYW0sIGZvbyBpcyBt dWx0aXZlcnNpb25lZCBidXQgdGhlcmUgaXMgbm8gZGVmYXVsdAorICAgZnVu Y3Rpb24uICBUaGlzIGlzIGFuIGVycm9yIGlmIHRoZSBjYWxsIGhhcyB0byBn byB0aHJvdWdoIGEKKyAgIGRpc3BhdGNoZXIuICBIb3dldmVyLCB0aGUgY2Fs bCB0byBmb28gaW4gYmFyIGNhbiBiZSByZXBsYWNlZAorICAgd2l0aCBhIGRp cmVjdCBjYWxsIHRvIHRoZSBwb3BjbnQgdmVyc2lvbiBvZiBmb28uICBIZW5j ZSwgdGhpcworICAgdGVzdCBzaG91bGQgcGFzcy4gICovCisKKy8qIHsgZGct ZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1PMiAtbW5vLXNzZSAtbW5vLXBvcGNudCIgfSAq LworCisKKy8qIERlZmF1bHQgdmVyc2lvbi4gICovCitpbnQgX19hdHRyaWJ1 dGVfXyAoKHRhcmdldCAoInNzZSIpKSkKK2ZvbyAoKQoreworICByZXR1cm4g MTsKK30KK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgicG9wY250Iikp KQorZm9vICgpCit7CisgIHJldHVybiAwOworfQorCitpbnQgX19hdHRyaWJ1 dGVfXyAoKHRhcmdldCAoInBvcGNudCIpKSkKK2JhciAoKQoreworICByZXR1 cm4gZm9vICgpOworfQorCitpbnQgbWFpbiAoKQoreworICByZXR1cm4gYmFy ICgpOworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbXY0LkMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv bXY0LkMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9t djQuQwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorLyogVGVzdCBj YXNlIHRvIGNoZWNrIGlmIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgYW4gZXJy b3IgbWVzc2FnZQorICAgd2hlbiB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mIGEg bXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb24gaXMgYWJzZW50CisgICBhbmQgaXRz IHBvaW50ZXIgaXMgdGFrZW4uICAqLworCisvKiB7IGRnLWRvIGNvbXBpbGUg eyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8yIC1tbm8tc3NlIC1tbm8tcG9wY250IiB9ICovCisKK2lu dCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgic3NlIikpKQorZm9vICgpCit7 CisgIHJldHVybiAxOworfQoraW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQg KCJwb3BjbnQiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK2lu dCBtYWluICgpCit7CisgIGludCAoKnApKCkgPSAmZm9vOyAvKiB7IGRnLWVy cm9yICJQb2ludGVyIHRvIGEgbXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb24gd2l0 aG91dCBhIGRlZmF1bHQgaXMgbm90IGFsbG93ZWQiIHt9IH0gKi8KKyAgcmV0 dXJuICgqcCkoKTsKK30K --e89a8fb1f468a81b6004cd7a3d58--