From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16150 invoked by alias); 9 May 2012 19:01:37 -0000 Received: (qmail 16113 invoked by uid 22791); 9 May 2012 19:01:29 -0000 X-SWARE-Spam-Status: No, hits=-3.8 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CF,TW_CP,TW_FN,TW_TM,T_RP_MATCHES_RCVD 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; Wed, 09 May 2012 19:01:07 +0000 Received: by obhx4 with SMTP id x4so790308obh.20 for ; Wed, 09 May 2012 12:01:06 -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=s6Ud2Jtd1KJNHln9P+doOnQLTisvk+Srir+ckJYGSYg=; b=HNzQDGM6+ssKQU2JsjBwjZZhsK842qIjUigrs1+sFqouuDftDlm1SL9GDflnD+kPo+ xrD5soz8Xw6nTwGiXhFpbZOw5hkJBLotfZJlTLadwzi5ZbzpNZ8yErZ8pYso6ytSoGqs z7eO8wGAwOjsdFLl8N7ikBBUwi2f0mk6vfTRRWKSGdNvdhfhFVNJWCdu89idsWaCOsjI xs6J66+KlWmiOsgH3lEDfC+d5ge0NMfEivwrAblLNZrMML7L9OZO06zR+oSTkTl3J8FS RuJGXZV+1t6QqZuP0sEWmADGsPFhUvAejVruNfXHE61M4i0NscFBA4AKBE8XIuZxRloa CZCg== Received: by 10.182.187.42 with SMTP id fp10mr1680145obc.30.1336590066493; Wed, 09 May 2012 12:01:06 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.187.42 with SMTP id fp10mr1680114obc.30.1336590066271; Wed, 09 May 2012 12:01:06 -0700 (PDT) Received: by 10.182.147.104 with HTTP; Wed, 9 May 2012 12:01:06 -0700 (PDT) In-Reply-To: References: <20120307004630.A503DB21B6@azwildcat.mtv.corp.google.com> Date: Wed, 09 May 2012 19:01:00 -0000 Message-ID: Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064) From: Sriraman Tallam To: "H.J. Lu" Cc: Richard Guenther , Jan Hubicka , Uros Bizjak , reply@codereview.appspotmail.com, gcc-patches@gcc.gnu.org, David Li Content-Type: multipart/mixed; boundary=14dae93995051c455c04bf9f20d5 X-System-Of-Record: true X-Gm-Message-State: ALoCoQn7SdrcfgAhz4OlS98ScjRloZck27Sj8Mjf5wvirmwzSW/REjPo0V28Gtgr3+OwVxJag339+xS+3SmEU1ETHwkxiCTFJ0tH6tNsAmnJixQhlEJIuHf3IGloMYzViNPupNCuonZRz946BZbLzDmuER21+REy8Q== X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-05/txt/msg00694.txt.bz2 --14dae93995051c455c04bf9f20d5 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2628 Hi, Attached new patch with more bug fixes. I will fix the dispatching method to use prioirty of attributes in the next iteration. Patch also available for review here: http://codereview.appspot.com/5752064 Thanks, -Sri. On Mon, May 7, 2012 at 9:58 AM, Sriraman Tallam wrote: > On Wed, May 2, 2012 at 11:04 AM, H.J. Lu wrote: >> On Wed, May 2, 2012 at 10:44 AM, Sriraman Tallam w= rote: >>>>>> >>>>>> 1. =A0Since AVX > SSE4 > SSSE3 > SSE3 > SSE2 > SSE, with >>>>>> foo for AVX and SSE3, on AVX processors, which foo will be >>>>>> selected? >>>>> >>>>> foo for AVX will get called since that appears ahead. >>>>> >>>>> The dispatching is done in the same order in which the functions are >>>>> specified. If, potentially, two foo versions can be dispatched for an >>>>> architecture, the first foo will get called. =A0There is no way right >>>>> now to specify the order in which the dispatching should be done. >>>> >>>> This is very fragile. =A0We know ISAs and processors. =A0The source >>>> order should be irrelevant. >>> >>> I am not sure it is always possible keep this dispatching unambiguous >>> to the user. It might be better to let the user specify a priority for >>> each version to control the order of dispatching. >>> >>> =A0Still, one way to implement what you said is to assign a significance >>> number to each ISA, where the number of sse4 > sse, for instance. >>> Then, the dispatching can be done in the descending order of >>> significance. What do you think? >> >> This sounds reasonable. =A0You should also take processor into >> account when doing this. >> >>> I thought about this earlier and I was thinking along the lines of >>> letting the user specify a priority for each version, when there is >>> ambiguity. >>> >>>> >>>>> >>>>>> 2. =A0I don't see any tests for __builtin_cpu_supports ("XXX") >>>>>> nor __builtin_cpu_is ("XXX"). =A0I think you need tests for >>>>>> them. >>>>> >>>>> This is already there as part of the previous CPU detection patch that >>>>> was submitted. Please see gcc.target/i386/builtin_target.c. Did you >>>>> want something else? >>>> >>>> gcc.target/i386/builtin_target.c doesn't test if __builtin_cpu_support= s ("XXX") >>>> and __builtin_cpu_is ("XXX") are implemented correctly. >>> >>> Oh, you mean like doing a CPUID again in the test case itself and check= ing, ok. >>> >> >> Yes. BTW, =A0I think you should also add FMA support to >> config/i386/i386-cpuinfo.c. > > I am preparing a patch for this. I will send it your way soon enough. > > Thanks, > -Sri. > >> >> Thanks. >> >> -- >> H.J. --14dae93995051c455c04bf9f20d5 Content-Type: text/plain; charset=US-ASCII; name="mv_fe_patch.txt" Content-Disposition: attachment; filename="mv_fe_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h20qvjbr0 Content-length: 86340 SW5kZXg6IGdjYy9kb2MvdG0udGV4aQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvZG9jL3RtLnRleGkJKHJldmlzaW9uIDE4NzM0NikKKysrIGdj Yy9kb2MvdG0udGV4aQkod29ya2luZyBjb3B5KQpAQCAtMTA5OTcsNiArMTA5 OTcsMTQgQEAgVGhlIHJlc3VsdCBpcyBhbm90aGVyIHRyZWUgY29udGFpbmlu ZyBhIHNpbXBsaWZpZWQKIGNhbGwncyByZXN1bHQuICBJZiBAdmFye2lnbm9y ZX0gaXMgdHJ1ZSB0aGUgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLgogQGVuZCBk ZWZ0eXBlZm4KIAorQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGludCBUQVJH RVRfRElTUEFUQ0hfVkVSU0lPTiAodHJlZSBAdmFye2Rpc3BhdGNoX2RlY2x9 LCB2b2lkICpAdmFye2ZuZGVjbHN9LCBiYXNpY19ibG9jayAqQHZhcntlbXB0 eV9iYn0pCitGb3IgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9uLCB0aGlzIGhv b2sgc2V0cyB1cCB0aGUgZGlzcGF0Y2hlci4KK0B2YXJ7ZGlzcGF0Y2hfZGVj bH0gaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRpc3Bh dGNoIHRoZQordmVyc2lvbi4gQHZhcntmbmRlY2xzfSBhcmUgdGhlIGZ1bmN0 aW9uIGNob2ljZXMgZm9yIGRpc3BhdGNoLgorQHZhcntlbXB0eV9iYn0gaXMg YW4gYmFzaWMgYmxvY2sgaW4gQHZhcntkaXNwYXRjaF9kZWNsfSB3aGVyZSB0 aGUKK2NvZGUgdG8gZG8gdGhlIGRpc3BhdGNoIHdpbGwgYmUgYWRkZWQuCitA ZW5kIGRlZnR5cGVmbgorCiBAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30ge2Nv bnN0IGNoYXIgKn0gVEFSR0VUX0lOVkFMSURfV0lUSElOX0RPTE9PUCAoY29u c3RfcnR4IEB2YXJ7aW5zbn0pCiAKIFRha2UgYW4gaW5zdHJ1Y3Rpb24gaW4g QHZhcntpbnNufSBhbmQgcmV0dXJuIE5VTEwgaWYgaXQgaXMgdmFsaWQgd2l0 aGluIGEKSW5kZXg6IGdjYy9kb2MvdG0udGV4aS5pbgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBnY2MvZG9jL3RtLnRleGkuaW4JKHJldmlzaW9uIDE4 NzM0NikKKysrIGdjYy9kb2MvdG0udGV4aS5pbgkod29ya2luZyBjb3B5KQpA QCAtMTA4NzcsNiArMTA4NzcsMTQgQEAgVGhlIHJlc3VsdCBpcyBhbm90aGVy IHRyZWUgY29udGFpbmluZyBhIHNpbXBsaWZpZWQKIGNhbGwncyByZXN1bHQu ICBJZiBAdmFye2lnbm9yZX0gaXMgdHJ1ZSB0aGUgdmFsdWUgd2lsbCBiZSBp Z25vcmVkLgogQGVuZCBkZWZ0eXBlZm4KIAorQGhvb2sgVEFSR0VUX0RJU1BB VENIX1ZFUlNJT04KK0ZvciBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb24sIHRo aXMgaG9vayBzZXRzIHVwIHRoZSBkaXNwYXRjaGVyLgorQHZhcntkaXNwYXRj aF9kZWNsfSBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8g ZGlzcGF0Y2ggdGhlCit2ZXJzaW9uLiBAdmFye2ZuZGVjbHN9IGFyZSB0aGUg ZnVuY3Rpb24gY2hvaWNlcyBmb3IgZGlzcGF0Y2guCitAdmFye2VtcHR5X2Ji fSBpcyBhbiBiYXNpYyBibG9jayBpbiBAdmFye2Rpc3BhdGNoX2RlY2x9IHdo ZXJlIHRoZQorY29kZSB0byBkbyB0aGUgZGlzcGF0Y2ggd2lsbCBiZSBhZGRl ZC4KK0BlbmQgZGVmdHlwZWZuCisKIEBob29rIFRBUkdFVF9JTlZBTElEX1dJ VEhJTl9ET0xPT1AKIAogVGFrZSBhbiBpbnN0cnVjdGlvbiBpbiBAdmFye2lu c259IGFuZCByZXR1cm4gTlVMTCBpZiBpdCBpcyB2YWxpZCB3aXRoaW4gYQpJ bmRleDogZ2NjL3RhcmdldC5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL3RhcmdldC5kZWYJKHJldmlzaW9uIDE4NzM0NikKKysrIGdjYy90 YXJnZXQuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ5LDYgKzEyNDksMTUg QEAgREVGSE9PSwogIHRyZWUsICh0cmVlIGZuZGVjbCwgaW50IG5fYXJncywg dHJlZSAqYXJncCwgYm9vbCBpZ25vcmUpLAogIGhvb2tfdHJlZV90cmVlX2lu dF90cmVlcF9ib29sX251bGwpCiAKKy8qIFRhcmdldCBob29rIHRvIGdlbmVy YXRlIHRoZSBkaXNwYXRjaGluZyBjb2RlIGZvciBjYWxscyB0byBtdWx0aS12 ZXJzaW9uZWQKKyAgIGZ1bmN0aW9ucy4gIERJU1BBVENIX0RFQ0wgaXMgdGhl IGZ1bmN0aW9uIHRoYXQgd2lsbCBoYXZlIHRoZSBkaXNwYXRjaGluZworICAg bG9naWMuICBGTkRFQ0xTIGFyZSB0aGUgbGlzdCBvZiBjaG9pY2VzIGZvciBk aXNwYXRjaCBhbmQgRU1QVFlfQkIgaXMgdGhlCisgICBiYXNpYyBibG9jIGlu IERJU1BBVENIX0RFQ0wgd2hpY2ggd2lsbCBjb250YWluIHRoZSBjb2RlLiAg Ki8KK0RFRkhPT0sKKyhkaXNwYXRjaF92ZXJzaW9uLAorICIiLAorIGludCwg KHRyZWUgZGlzcGF0Y2hfZGVjbCwgdm9pZCAqZm5kZWNscywgYmFzaWNfYmxv Y2sgKmVtcHR5X2JiKSwgTlVMTCkKKwogLyogUmV0dXJucyBhIGNvZGUgZm9y IGEgdGFyZ2V0LXNwZWNpZmljIGJ1aWx0aW4gdGhhdCBpbXBsZW1lbnRzCiAg ICByZWNpcHJvY2FsIG9mIHRoZSBmdW5jdGlvbiwgb3IgTlVMTF9UUkVFIGlm IG5vdCBhdmFpbGFibGUuICAqLwogREVGSE9PSwpJbmRleDogZ2NjL3RyZWUu aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdHJlZS5oCShyZXZp c2lvbiAxODczNDYpCisrKyBnY2MvdHJlZS5oCSh3b3JraW5nIGNvcHkpCkBA IC0zNTM5LDYgKzM1MzksMTIgQEAgZXh0ZXJuIFZFQyh0cmVlLCBnYykgKipk ZWNsX2RlYnVnX2FyZ3NfaW5zZXJ0ICh0cmUKICNkZWZpbmUgREVDTF9GVU5D VElPTl9TUEVDSUZJQ19PUFRJTUlaQVRJT04oTk9ERSkgXAogICAgKEZVTkNU SU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLmZ1bmN0aW9u X3NwZWNpZmljX29wdGltaXphdGlvbikKIAorLyogSW4gRlVOQ1RJT05fREVD TCwgdGhpcyBpcyBzZXQgaWYgdGhpcyBmdW5jdGlvbiBoYXMgb3RoZXIgdmVy c2lvbnMgZ2VuZXJhdGVkCisgICB1c2luZyAidGFyZ2V0IiBhdHRyaWJ1dGVz LiAgVGhlIGRlZmF1bHQgdmVyc2lvbiBpcyB0aGUgb25lIHdoaWNoIGRvZXMg bm90CisgICBoYXZlIGFueSAidGFyZ2V0IiBhdHRyaWJ1dGUgc2V0LiAqLwor I2RlZmluZSBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRChOT0RFKVwKKyAgIChG VU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC52ZXJz aW9uZWRfZnVuY3Rpb24pCisKIC8qIEZVTkNUSU9OX0RFQ0wgaW5oZXJpdHMg ZnJvbSBERUNMX05PTl9DT01NT04gYmVjYXVzZSBvZiB0aGUgdXNlIG9mIHRo ZQogICAgYXJndW1lbnRzL3Jlc3VsdC9zYXZlZF90cmVlIGZpZWxkcyBieSBm cm9udCBlbmRzLiAgIEl0IHdhcyBlaXRoZXIgaW5oZXJpdAogICAgRlVOQ1RJ T05fREVDTCBmcm9tIG5vbl9jb21tb24sIG9yIGluaGVyaXQgbm9uX2NvbW1v biBmcm9tIEZVTkNUSU9OX0RFQ0wsCkBAIC0zNTgzLDggKzM1ODksOCBAQCBz dHJ1Y3QgR1RZKCgpKSB0cmVlX2Z1bmN0aW9uX2RlY2wgewogICB1bnNpZ25l ZCBsb29waW5nX2NvbnN0X29yX3B1cmVfZmxhZyA6IDE7CiAgIHVuc2lnbmVk IGhhc19kZWJ1Z19hcmdzX2ZsYWcgOiAxOwogICB1bnNpZ25lZCB0bV9jbG9u ZV9mbGFnIDogMTsKLQotICAvKiAxIGJpdCBsZWZ0ICovCisgIHVuc2lnbmVk IHZlcnNpb25lZF9mdW5jdGlvbiA6IDE7CisgIC8qIE5vIGJpdHMgbGVmdC4g ICovCiB9OwogCiAvKiBUaGUgc291cmNlIGxhbmd1YWdlIG9mIHRoZSB0cmFu c2xhdGlvbi11bml0LiAgKi8KSW5kZXg6IGdjYy90cmVlLXBhc3MuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdHJlZS1wYXNzLmgJKHJldmlz aW9uIDE4NzM0NikKKysrIGdjYy90cmVlLXBhc3MuaAkod29ya2luZyBjb3B5 KQpAQCAtNDUzLDYgKzQ1Myw3IEBAIGV4dGVybiBzdHJ1Y3QgZ2ltcGxlX29w dF9wYXNzIHBhc3NfdG1fbWVtb3B0OwogZXh0ZXJuIHN0cnVjdCBnaW1wbGVf b3B0X3Bhc3MgcGFzc190bV9lZGdlczsKIGV4dGVybiBzdHJ1Y3QgZ2ltcGxl X29wdF9wYXNzIHBhc3Nfc3BsaXRfZnVuY3Rpb25zOwogZXh0ZXJuIHN0cnVj dCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19mZWVkYmFja19zcGxpdF9mdW5jdGlv bnM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2Rpc3Bh dGNoX3ZlcnNpb25zOwogCiAvKiBJUEEgUGFzc2VzICovCiBleHRlcm4gc3Ry dWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfbG93ZXJfZW11dGxz OwpJbmRleDogZ2NjL211bHRpdmVyc2lvbi5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy9tdWx0aXZlcnNpb24uYwkocmV2aXNpb24gMCkKKysr IGdjYy9tdWx0aXZlcnNpb24uYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4 MzMgQEAKKy8qIEZ1bmN0aW9uIE11bHRpdmVyc2lvbmluZy4KKyAgIENvcHly aWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KyAgIENvbnRyaWJ1dGVkIGJ5IFNyaXJhbWFuIFRhbGxhbSAodG1zcmlyYW1A Z29vZ2xlLmNvbSkKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitH Q0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0Mg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgor RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgor CitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0 aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gKi8KKworLyogSG9sZHMgdGhlIHN0YXRlIGZv ciBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb25zIGhlcmUuIFRoZSBmcm9udC1l bmQKKyAgIHVwZGF0ZXMgdGhlIHN0YXRlIGFzIGFuZCB3aGVuIGZ1bmN0aW9u IHZlcnNpb25zIGFyZSBlbmNvdW50ZXJlZC4KKyAgIFRoaXMgaXMgdGhlbiB1 c2VkIHRvIGdlbmVyYXRlIHRoZSBkaXNwYXRjaCBjb2RlLiAgQWxzbywgdGhl CisgICBvcHRpbWl6YXRpb24gcGFzc2VzIHRvIGNsb25lIGhvdCBwYXRocyBp bnZvbHZpbmcgdmVyc2lvbmVkIGZ1bmN0aW9ucworICAgd2lsbCBiZSBkb25l IGhlcmUuCisKKyAgIEZ1bmN0aW9uIHZlcnNpb25zIGFyZSBjcmVhdGVkIGJ5 IHVzaW5nIHRoZSBzYW1lIGZ1bmN0aW9uIHNpZ25hdHVyZSBidXQKKyAgIGFs c28gdGFnZ2luZyBhdHRyaWJ1dGUgInRhcmdldCIgdG8gc3BlY2lmeSB0aGUg cGxhdGZvcm0gdHlwZSBmb3Igd2hpY2gKKyAgIHRoZSB2ZXJzaW9uIG11c3Qg YmUgZXhlY3V0ZWQuICBIZXJlIGlzIGFuIGV4YW1wbGU6CisKKyAgIGludCBm b28gKCkKKyAgIHsKKyAgICAgcHJpbnRmICgiRXhlY3V0ZSBhcyBkZWZhdWx0 Iik7CisgICAgIHJldHVybiAwOworICAgfQorCisgICBpbnQgIF9fYXR0cmli dXRlX18gKCh0YXJnZXQgKCJhcmNoPWNvcmVpNyIpKSkKKyAgIGZvbyAoKQor ICAgeworICAgICBwcmludGYgKCJFeGVjdXRlIGZvciBjb3JlaTciKTsKKyAg ICAgcmV0dXJuIDA7CisgICB9CisgICAKKyAgIGludCBtYWluICgpCisgICB7 CisgICAgIHJldHVybiBmb28gKCk7CisgICB9IAorCisgICBUaGUgY2FsbCB0 byBmb28gaW4gbWFpbiBpcyByZXBsYWNlZCB3aXRoIGEgY2FsbCB0byBhbiBJ RlVOQyBmdW5jdGlvbiB0aGF0CisgICBjb250YWlucyB0aGUgZGlzcGF0Y2gg Y29kZSB0byBjYWxsIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIHZlcnNpb24gYXQK KyAgIHJ1bi10aW1lLiAgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj aW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisj aW5jbHVkZSAidG0uaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAi dHJlZS1pbmxpbmUuaCIKKyNpbmNsdWRlICJsYW5naG9va3MuaCIKKyNpbmNs dWRlICJmbGFncy5oIgorI2luY2x1ZGUgImNncmFwaC5oIgorI2luY2x1ZGUg ImRpYWdub3N0aWMuaCIKKyNpbmNsdWRlICJ0b3BsZXYuaCIKKyNpbmNsdWRl ICJ0aW1ldmFyLmgiCisjaW5jbHVkZSAicGFyYW1zLmgiCisjaW5jbHVkZSAi ZmliaGVhcC5oIgorI2luY2x1ZGUgImludGwuaCIKKyNpbmNsdWRlICJ0cmVl LXBhc3MuaCIKKyNpbmNsdWRlICJoYXNodGFiLmgiCisjaW5jbHVkZSAiY292 ZXJhZ2UuaCIKKyNpbmNsdWRlICJnZ2MuaCIKKyNpbmNsdWRlICJ0cmVlLWZs b3cuaCIKKyNpbmNsdWRlICJydGwuaCIKKyNpbmNsdWRlICJpcGEtcHJvcC5o IgorI2luY2x1ZGUgImJhc2ljLWJsb2NrLmgiCisjaW5jbHVkZSAidG9wbGV2 LmgiCisjaW5jbHVkZSAiZGJnY250LmgiCisjaW5jbHVkZSAidHJlZS1kdW1w LmgiCisjaW5jbHVkZSAib3V0cHV0LmgiCisjaW5jbHVkZSAidmVjcHJpbS5o IgorI2luY2x1ZGUgImdpbXBsZS1wcmV0dHktcHJpbnQuaCIKKyNpbmNsdWRl ICJpcGEtaW5saW5lLmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVk ZSAibXVsdGl2ZXJzaW9uLmgiCisKK3R5cGVkZWYgdm9pZCAqIHZvaWRfcDsK KworREVGX1ZFQ19QICh2b2lkX3ApOworREVGX1ZFQ19BTExPQ19QICh2b2lk X3AsIGhlYXApOworCisvKiBFYWNoIGZ1bmN0aW9uIGRlY2wgdGhhdCBpcyBh IGZ1bmN0aW9uIHZlcnNpb24gZ2V0cyBhbiBpbnN0YW5jZSBvZiB0aGlzCisg ICBzdHJ1Y3R1cmUuICAgU2luY2UgdGhpcyBpcyBjYWxsZWQgYnkgdGhlIGZy b250LWVuZCwgZGVjbCBtZXJnaW5nIGNhbgorICAgaGFwcGVuLCB3aGVyZSBh IGRlY2wgY3JlYXRlZCBmb3IgYSBuZXcgZGVjbGFyYXRpb24gaXMgbWVyZ2Vk IHdpdGggCisgICB0aGUgb2xkLiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGVj bCBpcyBkZWxldGVkIGFuZCB0aGUgSVNfREVMRVRFRAorICAgZmllbGQgaXMg c2V0IGZvciB0aGUgc3RydWN0IGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8g dGhlIG5ldyBkZWNsLgorICAgSUZVTkNfREVDTCBpcyB0aGUgZGVjbCBvZiB0 aGUgaWZ1bmMgZnVuY3Rpb24gZm9yIGRlZmF1bHQgZGVjbHMuCisgICBJRlVO Q19SRVNPTFZFUl9ERUNMIGlzIHRoZSBkZWNsIG9mIHRoZSBkaXNwYXRjaCBm dW5jdGlvbi4gIFZFUlNJT05TCisgICBpcyBhIHZlY3RvciBjb250YWluaW5n IHRoZSBsaXN0IG9mIGZ1bmN0aW9uIHZlcnNpb25zICB0aGF0IGFyZQorICAg dGhlIGNhbmRpZGF0ZXMgZm9yIGRpc3BhdGNoLiAgKi8KKwordHlwZWRlZiBz dHJ1Y3QgdmVyc2lvbl9mdW5jdGlvbl9kIHsKKyAgdHJlZSBkZWNsOworICB0 cmVlIGlmdW5jX2RlY2w7CisgIHRyZWUgaWZ1bmNfcmVzb2x2ZXJfZGVjbDsK KyAgVkVDICh2b2lkX3AsIGhlYXApICp2ZXJzaW9uczsKKyAgYm9vbCBpc19k ZWxldGVkOworfSB2ZXJzaW9uX2Z1bmN0aW9uOworCisvKiBIYXNobWFwIGhh cyBhbiBlbnRyeSBmb3IgZXZlcnkgZnVuY3Rpb24gZGVjbCB0aGF0IGhhcyBv dGhlciBmdW5jdGlvbgorICAgdmVyc2lvbnMuICBGb3IgZnVuY3Rpb24gZGVj bHMgdGhhdCBhcmUgdGhlIGRlZmF1bHQsIGl0IGFsc28gc3RvcmVzIHRoZQor ICAgbGlzdCBvZiBhbGwgdGhlIG90aGVyIGZ1bmN0aW9uIHZlcnNpb25zLiAg RWFjaCBlbnRyeSBpcyBhIHN0cnVjdHVyZQorICAgb2YgdHlwZSB2ZXJzaW9u X2Z1bmN0aW9uX2QuICAqLworc3RhdGljIGh0YWJfdCBkZWNsX3ZlcnNpb25f aHRhYiA9IE5VTEw7CisKKy8qIEhhc2h0YWJsZSBoZWxwZXJzIGZvciBkZWNs X3ZlcnNpb25faHRhYi4gKi8KKworc3RhdGljIGhhc2h2YWxfdAorZGVjbF92 ZXJzaW9uX2h0YWJfaGFzaF9kZXNjcmlwdG9yIChjb25zdCB2b2lkICpwKQor eworICBjb25zdCB2ZXJzaW9uX2Z1bmN0aW9uICp0ID0gKGNvbnN0IHZlcnNp b25fZnVuY3Rpb24gKikgcDsKKyAgcmV0dXJuIGh0YWJfaGFzaF9wb2ludGVy ICh0LT5kZWNsKTsKK30KKworLyogSGFzaHRhYmxlIGhlbHBlciBmb3IgZGVj bF92ZXJzaW9uX2h0YWIuICovCisKK3N0YXRpYyBpbnQKK2RlY2xfdmVyc2lv bl9odGFiX2VxX2Rlc2NyaXB0b3IgKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2 b2lkICpwMikKK3sKKyAgY29uc3QgdmVyc2lvbl9mdW5jdGlvbiAqdDEgPSAo Y29uc3QgdmVyc2lvbl9mdW5jdGlvbiAqKSBwMTsKKyAgcmV0dXJuIGh0YWJf ZXFfcG9pbnRlciAoKGNvbnN0IHZvaWRfcCkgdDEtPmRlY2wsIHAyKTsKK30K KworLyogQ3JlYXRlIHRoZSBkZWNsX3ZlcnNpb25faHRhYi4gICovCitzdGF0 aWMgdm9pZAorY3JlYXRlX2RlY2xfdmVyc2lvbl9odGFiICh2b2lkKQorewor ICBpZiAoZGVjbF92ZXJzaW9uX2h0YWIgPT0gTlVMTCkKKyAgICBkZWNsX3Zl cnNpb25faHRhYiA9IGh0YWJfY3JlYXRlICgxMCwgZGVjbF92ZXJzaW9uX2h0 YWJfaGFzaF9kZXNjcmlwdG9yLAorCQkJCSAgICAgZGVjbF92ZXJzaW9uX2h0 YWJfZXFfZGVzY3JpcHRvciwgTlVMTCk7Cit9CisKKy8qIENyZWF0ZXMgYW4g aW5zdGFuY2Ugb2YgdmVyc2lvbl9mdW5jdGlvbiBmb3IgZGVjbCBERUNMLiAg Ki8KKworc3RhdGljIHZlcnNpb25fZnVuY3Rpb24qCituZXdfdmVyc2lvbl9m dW5jdGlvbiAoY29uc3QgdHJlZSBkZWNsKQoreworICB2ZXJzaW9uX2Z1bmN0 aW9uICp2OworICB2ID0gKHZlcnNpb25fZnVuY3Rpb24gKil4bWFsbG9jKHNp emVvZiAodmVyc2lvbl9mdW5jdGlvbikpOworICB2LT5kZWNsID0gZGVjbDsK KyAgdi0+aWZ1bmNfZGVjbCA9IE5VTEw7CisgIHYtPmlmdW5jX3Jlc29sdmVy X2RlY2wgPSBOVUxMOworICB2LT52ZXJzaW9ucyA9IE5VTEw7CisgIHYtPmlz X2RlbGV0ZWQgPSBmYWxzZTsKKyAgcmV0dXJuIHY7Cit9CisKKy8qIENvbXBh cmF0b3IgZnVuY3Rpb24gdG8gYmUgdXNlZCBpbiBxc29ydCByb3V0aW5lIHRv IHNvcnQgYXR0cmlidXRlCisgICBzcGVjaWZpY2F0aW9uIHN0cmluZ3MgdG8g InRhcmdldCIuICAqLworCitzdGF0aWMgaW50CithdHRyX3N0cmNtcCAoY29u c3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQoreworICBjb25zdCBjaGFy ICpjMSA9ICooY2hhciAqY29uc3QqKXYxOworICBjb25zdCBjaGFyICpjMiA9 ICooY2hhciAqY29uc3QqKXYyOworICByZXR1cm4gc3RyY21wIChjMSwgYzIp OworfQorCisvKiBTVFIgaXMgdGhlIGFyZ3VtZW50IHRvIHRhcmdldCBhdHRy aWJ1dGUuICBUaGlzIGZ1bmN0aW9uIHRva2VuaXplcworICAgdGhlIGNvbW1h IHNlcGFyYXRlZCBhcmd1bWVudHMsIHNvcnRzIHRoZW0gYW5kIHJldHVybnMg YSBzdHJpbmcgd2hpY2gKKyAgIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9y IHRoZSBjb21tYSBzZXBhcmF0ZWQgYXJndW1lbnRzLiAgKi8KKworc3RhdGlj IGNoYXIgKgorc29ydGVkX2F0dHJfc3RyaW5nIChjb25zdCBjaGFyICpzdHIp Cit7CisgIGNoYXIgKiphcmdzID0gTlVMTDsKKyAgY2hhciAqYXR0cl9zdHIs ICpyZXRfc3RyOworICBjaGFyICphdHRyID0gTlVMTDsKKyAgdW5zaWduZWQg aW50IGFyZ251bSA9IDE7CisgIHVuc2lnbmVkIGludCBpOworCisgIGZvciAo aSA9IDA7IGkgPCBzdHJsZW4gKHN0cik7IGkrKykKKyAgICBpZiAoc3RyW2ld ID09ICcsJykKKyAgICAgIGFyZ251bSsrOworCisgIGF0dHJfc3RyID0gKGNo YXIgKil4bWFsbG9jIChzdHJsZW4gKHN0cikgKyAxKTsKKyAgc3RyY3B5IChh dHRyX3N0ciwgc3RyKTsKKworICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChh dHRyX3N0cik7IGkrKykKKyAgICBpZiAoYXR0cl9zdHJbaV0gPT0gJz0nKQor ICAgICAgYXR0cl9zdHJbaV0gPSAnXyc7CisKKyAgaWYgKGFyZ251bSA9PSAx KQorICAgIHJldHVybiBhdHRyX3N0cjsKKworICBhcmdzID0gKGNoYXIgKiop eG1hbGxvYyAoYXJnbnVtICogc2l6ZW9mIChjaGFyICopKTsKKworICBpID0g MDsKKyAgYXR0ciA9IHN0cnRvayAoYXR0cl9zdHIsICIsIik7CisgIHdoaWxl IChhdHRyICE9IE5VTEwpCisgICAgeworICAgICAgYXJnc1tpXSA9IGF0dHI7 CisgICAgICBpKys7CisgICAgICBhdHRyID0gc3RydG9rIChOVUxMLCAiLCIp OworICAgIH0KKworICBxc29ydCAoYXJncywgYXJnbnVtLCBzaXplb2YgKGNo YXIqKSwgYXR0cl9zdHJjbXApOworCisgIHJldF9zdHIgPSAoY2hhciAqKXht YWxsb2MgKHN0cmxlbiAoc3RyKSArIDEpOworICBzdHJjcHkgKHJldF9zdHIs IGFyZ3NbMF0pOworICBmb3IgKGkgPSAxOyBpIDwgYXJnbnVtOyBpKyspCisg ICAgeworICAgICAgc3RyY2F0IChyZXRfc3RyLCAiXyIpOworICAgICAgc3Ry Y2F0IChyZXRfc3RyLCBhcmdzW2ldKTsKKyAgICB9CisKKyAgZnJlZSAoYXJn cyk7CisgIGZyZWUgKGF0dHJfc3RyKTsKKyAgcmV0dXJuIHJldF9zdHI7Cit9 CisKKy8qIFJldHVybnMgdHJ1ZSB3aGVuIG9ubHkgb25lIG9mIERFQ0wxIGFu ZCBERUNMMiBpcyBtYXJrZWQgd2l0aCAidGFyZ2V0IgorICAgb3IgaWYgdGhl ICJ0YXJnZXQiIGF0dHJpYnV0ZSBzdHJpbmdzIG9mIERFQ0wxIGFuZCBERUNM MiBkb250IG1hdGNoLiAgKi8KKworYm9vbAoraGFzX2RpZmZlcmVudF92ZXJz aW9uX2F0dHJpYnV0ZXMgKGNvbnN0IHRyZWUgZGVjbDEsIGNvbnN0IHRyZWUg ZGVjbDIpCit7CisgIHRyZWUgYXR0cjEsIGF0dHIyOworICBjaGFyICpjMSwg KmMyOworICBib29sIHJldCA9IGZhbHNlOworCisgIGlmIChUUkVFX0NPREUg KGRlY2wxKSAhPSBGVU5DVElPTl9ERUNMCisgICAgICB8fCBUUkVFX0NPREUg KGRlY2wyKSAhPSBGVU5DVElPTl9ERUNMKQorICAgIHJldHVybiBmYWxzZTsK KworICBhdHRyMSA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJ0YXJnZXQiLCBERUNM X0FUVFJJQlVURVMgKGRlY2wxKSk7CisgIGF0dHIyID0gbG9va3VwX2F0dHJp YnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbDIpKTsKKwor ICBpZiAoYXR0cjEgPT0gTlVMTF9UUkVFICYmIGF0dHIyID09IE5VTExfVFJF RSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKChhdHRyMSA9PSBOVUxM X1RSRUUgJiYgYXR0cjIgIT0gTlVMTF9UUkVFKQorICAgICAgfHwgKGF0dHIx ICE9IE5VTExfVFJFRSAmJiBhdHRyMiA9PSBOVUxMX1RSRUUpKQorICAgIHJl dHVybiB0cnVlOworCisgIGMxID0gc29ydGVkX2F0dHJfc3RyaW5nICgKKwlU UkVFX1NUUklOR19QT0lOVEVSIChUUkVFX1ZBTFVFIChUUkVFX1ZBTFVFIChh dHRyMSkpKSk7CisgIGMyID0gc29ydGVkX2F0dHJfc3RyaW5nICgKKwlUUkVF X1NUUklOR19QT0lOVEVSIChUUkVFX1ZBTFVFIChUUkVFX1ZBTFVFIChhdHRy MikpKSk7CisKKyAgaWYgKHN0cmNtcCAoYzEsIGMyKSAhPSAwKQorICAgICBy ZXQgPSB0cnVlOworCisgIGZyZWUgKGMxKTsKKyAgZnJlZSAoYzIpOworCisg IHJldHVybiByZXQ7Cit9CisKKy8qIElmIHRoaXMgZGVjbCBjb3JyZXNwb25k cyB0byBhIGZ1bmN0aW9uIGFuZCBoYXMgInRhcmdldCIgYXR0cmlidXRlLAor ICAgYXBwZW5kIHRoZSBhdHRyaWJ1dGUgc3RyaW5nIHRvIGl0cyBhc3NlbWJs ZXIgbmFtZS4gICovCisKK3N0YXRpYyB2b2lkCit2ZXJzaW9uX2Fzc2VtYmxl cl9uYW1lIChjb25zdCB0cmVlIGRlY2wpCit7CisgIHRyZWUgdmVyc2lvbl9h dHRyOworICBjb25zdCBjaGFyICpvcmlnX25hbWUsICp2ZXJzaW9uX3N0cmlu ZywgKmF0dHJfc3RyOworICBjaGFyICphc3NlbWJsZXJfbmFtZTsKKyAgdHJl ZSBhc3NlbWJsZXJfbmFtZV90cmVlOworICAKKyAgaWYgKFRSRUVfQ09ERSAo ZGVjbCkgIT0gRlVOQ1RJT05fREVDTCkKKyAgICByZXR1cm47CisKKyAgaWYg KERFQ0xfREVDTEFSRURfSU5MSU5FX1AgKGRlY2wpCisgICAgICAmJmxvb2t1 cF9hdHRyaWJ1dGUgKCJnbnVfaW5saW5lIiwKKwkJCSAgREVDTF9BVFRSSUJV VEVTIChkZWNsKSkpCisgICAgZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FU SU9OIChkZWNsKSwKKwkgICAgICAiRnVuY3Rpb24gdmVyc2lvbnMgY2Fubm90 IGJlIG1hcmtlZCBhcyBnbnVfaW5saW5lLCIKKwkgICAgICAiIGJvZGllcyBo YXZlIHRvIGJlIGdlbmVyYXRlZFxuIik7CisKKyAgaWYgKERFQ0xfVklSVFVB TF9QIChkZWNsKQorICAgICAgfHwgREVDTF9WSU5ERVggKGRlY2wpKQorICAg IGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAoZGVjbCksCisJICAg ICAgIlZpcnR1YWwgZnVuY3Rpb24gdmVyc2lvbmluZyBub3Qgc3VwcG9ydGVk XG4iKTsKKworICB2ZXJzaW9uX2F0dHIgPSBsb29rdXBfYXR0cmlidXRlICgi dGFyZ2V0IiwgREVDTF9BVFRSSUJVVEVTIChkZWNsKSk7CisgIC8qIHRhcmdl dCBhdHRyaWJ1dGUgc3RyaW5nIGlzIE5VTEwgZm9yIGRlZmF1bHQgZnVuY3Rp b25zLiAgKi8KKyAgaWYgKHZlcnNpb25fYXR0ciA9PSBOVUxMX1RSRUUpCisg ICAgcmV0dXJuOworCisgIG9yaWdfbmFtZSA9IElERU5USUZJRVJfUE9JTlRF UiAoREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCkpOworICB2ZXJzaW9uX3N0 cmluZworICAgID0gVFJFRV9TVFJJTkdfUE9JTlRFUiAoVFJFRV9WQUxVRSAo VFJFRV9WQUxVRSAodmVyc2lvbl9hdHRyKSkpOworCisgIGF0dHJfc3RyID0g c29ydGVkX2F0dHJfc3RyaW5nICh2ZXJzaW9uX3N0cmluZyk7CisgIGFzc2Vt Ymxlcl9uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChvcmlnX25h bWUpCisJCQkJICAgICArIHN0cmxlbiAoYXR0cl9zdHIpICsgMik7CisKKyAg c3ByaW50ZiAoYXNzZW1ibGVyX25hbWUsICIlcy4lcyIsIG9yaWdfbmFtZSwg YXR0cl9zdHIpOworICBpZiAoZHVtcF9maWxlKQorICAgIGZwcmludGYgKGR1 bXBfZmlsZSwgIkFzc2VtYmxlciBuYW1lIHNldCB0byAlcyBmb3IgZnVuY3Rp b24gdmVyc2lvbiAlc1xuIiwKKwkgICAgIGFzc2VtYmxlcl9uYW1lLCBJREVO VElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoZGVjbCkpKTsKKworICBhc3Nl bWJsZXJfbmFtZV90cmVlID0gZ2V0X2lkZW50aWZpZXIgKGFzc2VtYmxlcl9u YW1lKTsKKworICBTRVRfREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCwgYXNz ZW1ibGVyX25hbWVfdHJlZSk7CisgIFNFVF9ERUNMX1JUTCAoZGVjbCwgTlVM TCk7Cit9CisKK3ZvaWQKK21hcmtfZnVuY3Rpb25fYXNfdmVyc2lvbiAoY29u c3QgdHJlZSBkZWNsKQoreworICBpZiAoREVDTF9GVU5DVElPTl9WRVJTSU9O RUQgKGRlY2wpKQorICAgIHJldHVybjsKKyAgREVDTF9GVU5DVElPTl9WRVJT SU9ORUQgKGRlY2wpID0gMTsKKyAgdmVyc2lvbl9hc3NlbWJsZXJfbmFtZSAo ZGVjbCk7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBmdW5jdGlvbiBERUNM IGhhcyB0YXJnZXQgYXR0cmlidXRlIHNldC4gIFRoaXMgY291bGQgYmUKKyAg IGEgdmVyc2lvbi4gICovCisKK2Jvb2wKK2lzX3RhcmdldF9hdHRyaWJ1dGVf c2V0IChjb25zdCB0cmVlIGRlY2wpCit7CisgIHJldHVybiAoVFJFRV9DT0RF IChkZWNsKSA9PSBGVU5DVElPTl9ERUNMCisJICAmJiAobG9va3VwX2F0dHJp YnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpCisJICAg ICAgIT0gTlVMTF9UUkVFKSk7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBk ZWNsIGlzIG11bHRpLXZlcnNpb25lZCBhbmQgREVDTCBpcyB0aGUgZGVmYXVs dCBmdW5jdGlvbiwKKyAgIHRoYXQgaXMgaXQgaXMgbm90IHRhZ2dlZCB3aXRo ICJ0YXJnZXQiIGF0dHJpYnV0ZS4gICovCisKK2Jvb2wKK2lzX2RlZmF1bHRf ZnVuY3Rpb24gKGNvbnN0IHRyZWUgZGVjbCkKK3sKKyAgcmV0dXJuIChUUkVF X0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wKKwkgICYmIERFQ0xfRlVO Q1RJT05fVkVSU0lPTkVEIChkZWNsKQorCSAgJiYgKGxvb2t1cF9hdHRyaWJ1 dGUgKCJ0YXJnZXQiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKQorCSAgICAg ID09IE5VTExfVFJFRSkpOwkKK30KKworLyogRm9yIGZ1bmN0aW9uIGRlY2wg REVDTCwgZmluZCB0aGUgdmVyc2lvbl9mdW5jdGlvbiBzdHJ1Y3QgaW4gdGhl CisgICBkZWNsX3ZlcnNpb25faHRhYi4gICovCisKK3N0YXRpYyB2ZXJzaW9u X2Z1bmN0aW9uICoKK2ZpbmRfZnVuY3Rpb25fdmVyc2lvbiAoY29uc3QgdHJl ZSBkZWNsKQoreworICB2b2lkICpzbG90OworCisgIGlmICghREVDTF9GVU5D VElPTl9WRVJTSU9ORUQgKGRlY2wpKQorICAgIHJldHVybiBOVUxMOworCisg IGlmICghZGVjbF92ZXJzaW9uX2h0YWIpCisgICAgcmV0dXJuIE5VTEw7CisK KyAgc2xvdCA9IGh0YWJfZmluZF93aXRoX2hhc2ggKGRlY2xfdmVyc2lvbl9o dGFiLCBkZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRh Yl9oYXNoX3BvaW50ZXIgKGRlY2wpKTsKKworICBpZiAoc2xvdCAhPSBOVUxM KQorICAgIHJldHVybiAodmVyc2lvbl9mdW5jdGlvbiAqKXNsb3Q7CisKKyAg cmV0dXJuIE5VTEw7Cit9CisKKy8qIFJlY29yZCBERUNMIGFzIGEgZnVuY3Rp b24gdmVyc2lvbiBieSBjcmVhdGluZyBhIHZlcnNpb25fZnVuY3Rpb24gc3Ry dWN0CisgICBmb3IgaXQgYW5kIHN0b3JpbmcgaXQgaW4gdGhlIGhhc2h0YWJs ZS4gICovCisKK3N0YXRpYyB2ZXJzaW9uX2Z1bmN0aW9uICoKK2FkZF9mdW5j dGlvbl92ZXJzaW9uIChjb25zdCB0cmVlIGRlY2wpCit7CisgIHZvaWQgKipz bG90OworICB2ZXJzaW9uX2Z1bmN0aW9uICp2OworCisgIGlmICghREVDTF9G VU5DVElPTl9WRVJTSU9ORUQgKGRlY2wpKQorICAgIHJldHVybiBOVUxMOwor CisgIGNyZWF0ZV9kZWNsX3ZlcnNpb25faHRhYiAoKTsKKworICBzbG90ID0g aHRhYl9maW5kX3Nsb3Rfd2l0aF9oYXNoIChkZWNsX3ZlcnNpb25faHRhYiwg KGNvbnN0IHZvaWRfcClkZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBodGFiX2hhc2hfcG9pbnRlciAoKGNvbnN0IHZvaWRfcClk ZWNsKSwKKwkJCQkgICBJTlNFUlQpOworCisgIGlmICgqc2xvdCAhPSBOVUxM KQorICAgIHJldHVybiAodmVyc2lvbl9mdW5jdGlvbiAqKSpzbG90OworCisg IHYgPSBuZXdfdmVyc2lvbl9mdW5jdGlvbiAoZGVjbCk7CisgICpzbG90ID0g djsKKworICByZXR1cm4gdjsKK30KKworLyogUHVzaCBWIGludG8gVkVDIG9u bHkgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2VudC4gIElmIGFscmVhZHkg cHJlc2VudAorICAgcmV0dXJucyBmYWxzZS4gICovCisKK3N0YXRpYyBib29s CitwdXNoX2Z1bmN0aW9uX3ZlcnNpb24gKHZlcnNpb25fZnVuY3Rpb24gKnYs IFZFQyAodm9pZF9wLCBoZWFwKSAqKnZlYykKK3sKKyAgaW50IGl4OworICB2 b2lkX3AgZWxlOyAKKyAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlICh2b2lk X3AsICp2ZWMsIGl4LCBlbGUpOyArK2l4KQorICAgIHsKKyAgICAgIGlmIChl bGUgPT0gKHZvaWRfcCl2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg fQorCisgIFZFQ19zYWZlX3B1c2ggKHZvaWRfcCwgaGVhcCwgKnZlYywgKHZv aWQqKXYpOworICByZXR1cm4gdHJ1ZTsKK30KKyAKKy8qIE1hcmsgREVDTCBh cyBkZWxldGVkLiAgVGhpcyBpcyBjYWxsZWQgYnkgdGhlIGZyb250LWVuZCB3 aGVuIGEgZHVwbGljYXRlCisgICBkZWNsIGlzIG1lcmdlZCB3aXRoIHRoZSBv cmlnaW5hbCBkZWNsIGFuZCB0aGUgZHVwbGljYXRlIGRlY2wgaXMgZGVsZXRl ZC4KKyAgIFRoaXMgZnVuY3Rpb24gbWFya3MgdGhlIGR1cGxpY2F0ZV9kZWNs IGFzIGludmFsaWQuICBDYWxsZWQgYnkKKyAgIGR1cGxpY2F0ZV9kZWNscyBp biBjcC9kZWNsLmMuICAqLworCit2b2lkCittYXJrX2RlbGV0ZV9kZWNsX3Zl cnNpb24gKGNvbnN0IHRyZWUgZGVjbCkKK3sKKyAgdmVyc2lvbl9mdW5jdGlv biAqZGVjbF92OworCisgIGRlY2xfdiA9IGZpbmRfZnVuY3Rpb25fdmVyc2lv biAoZGVjbCk7CisKKyAgaWYgKGRlY2xfdiA9PSBOVUxMKQorICAgIHJldHVy bjsKKworICBkZWNsX3YtPmlzX2RlbGV0ZWQgPSB0cnVlOworCisgIGlmIChp c19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsKQorICAgICAgJiYgZGVjbF92LT52 ZXJzaW9ucyAhPSBOVUxMKQorICAgIHsKKyAgICAgIFZFQ190cnVuY2F0ZSAo dm9pZF9wLCBkZWNsX3YtPnZlcnNpb25zLCAwKTsKKyAgICAgIFZFQ19mcmVl ICh2b2lkX3AsIGhlYXAsIGRlY2xfdi0+dmVyc2lvbnMpOworICAgICAgZGVj bF92LT52ZXJzaW9ucyA9IE5VTEw7CisgICAgfQorfQorCisvKiBNYXJrIERF Q0wxIGFuZCBERUNMMiB0byBiZSBmdW5jdGlvbiB2ZXJzaW9ucyBpbiB0aGUg c2FtZSBncm91cC4gIE9uZQorICAgb2YgREVDTDEgYW5kIERFQ0wyIG11c3Qg YmUgdGhlIGRlZmF1bHQsIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGRvZXMK KyAgIG5vdGhpbmcuICBUaGlzIGZ1bmN0aW9uIGFnZ3JlZ2F0ZXMgdGhlIHZl cnNpb25zLiAgKi8KKworaW50Citncm91cF9mdW5jdGlvbl92ZXJzaW9ucyAo Y29uc3QgdHJlZSBkZWNsMSwgY29uc3QgdHJlZSBkZWNsMikKK3sKKyAgdHJl ZSBkZWZhdWx0X2RlY2wsIHZlcnNpb25fZGVjbDsKKyAgdmVyc2lvbl9mdW5j dGlvbiAqZGVmYXVsdF92LCAqdmVyc2lvbl92OworCisgIGdjY19hc3NlcnQg KERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsMSkKKwkgICAgICAmJiBE RUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZGVjbDIpKTsKKworICAvKiBUaGUg dmVyc2lvbiBkZWNscyBhcmUgYWRkZWQgb25seSB0byB0aGUgZGVmYXVsdCBk ZWNsLiAgKi8KKyAgaWYgKCFpc19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsMSkK KyAgICAgICYmICFpc19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsMikpCisgICAg cmV0dXJuIDA7CisKKyAgLyogVGhpcyBjYW4gaGFwcGVuIHdpdGggZHVwbGlj YXRlIGRlY2xhcmF0aW9ucy4gIEp1c3QgaWdub3JlLiAgKi8KKyAgaWYgKGlz X2RlZmF1bHRfZnVuY3Rpb24gKGRlY2wxKQorICAgICAgJiYgaXNfZGVmYXVs dF9mdW5jdGlvbiAoZGVjbDIpKQorICAgIHJldHVybiAwOworCisgIGRlZmF1 bHRfZGVjbCA9IChpc19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsMSkpID8gZGVj bDEgOiBkZWNsMjsKKyAgdmVyc2lvbl9kZWNsID0gKGRlZmF1bHRfZGVjbCA9 PSBkZWNsMSkgPyBkZWNsMiA6IGRlY2wxOworCisgIGdjY19hc3NlcnQgKGRl ZmF1bHRfZGVjbCAhPSB2ZXJzaW9uX2RlY2wpOworICBjcmVhdGVfZGVjbF92 ZXJzaW9uX2h0YWIgKCk7CisKKyAgLyogSWYgdGhlIHZlcnNpb24gZnVuY3Rp b24gaXMgZm91bmQsIGl0IGhhcyBiZWVuIGFkZGVkLiAgKi8KKyAgaWYgKGZp bmRfZnVuY3Rpb25fdmVyc2lvbiAodmVyc2lvbl9kZWNsKSkKKyAgICByZXR1 cm4gMDsKKworICBkZWZhdWx0X3YgPSBhZGRfZnVuY3Rpb25fdmVyc2lvbiAo ZGVmYXVsdF9kZWNsKTsKKyAgdmVyc2lvbl92ID0gYWRkX2Z1bmN0aW9uX3Zl cnNpb24gKHZlcnNpb25fZGVjbCk7CisKKyAgaWYgKGRlZmF1bHRfdi0+dmVy c2lvbnMgPT0gTlVMTCkKKyAgICBkZWZhdWx0X3YtPnZlcnNpb25zID0gVkVD X2FsbG9jICh2b2lkX3AsIGhlYXAsIDEpOworCisgIHB1c2hfZnVuY3Rpb25f dmVyc2lvbiAodmVyc2lvbl92LCAmZGVmYXVsdF92LT52ZXJzaW9ucyk7Cisg IHJldHVybiAwOworfQorCisvKiBNYWtlcyBhIGZ1bmN0aW9uIGF0dHJpYnV0 ZSBvZiB0aGUgZm9ybSBOQU1FKEFSR19OQU1FKSBhbmQgY2hhaW5zCisgICBp dCB0byBDSEFJTi4gICovCisKK3N0YXRpYyB0cmVlCittYWtlX2F0dHJpYnV0 ZSAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYXJnX25hbWUsIHRy ZWUgY2hhaW4pCit7CisgIHRyZWUgYXR0cl9uYW1lOworICB0cmVlIGF0dHJf YXJnX25hbWU7CisgIHRyZWUgYXR0cl9hcmdzOworICB0cmVlIGF0dHI7CisK KyAgYXR0cl9uYW1lID0gZ2V0X2lkZW50aWZpZXIgKG5hbWUpOworICBhdHRy X2FyZ19uYW1lID0gYnVpbGRfc3RyaW5nIChzdHJsZW4gKGFyZ19uYW1lKSwg YXJnX25hbWUpOworICBhdHRyX2FyZ3MgPSB0cmVlX2NvbnMgKE5VTExfVFJF RSwgYXR0cl9hcmdfbmFtZSwgTlVMTF9UUkVFKTsKKyAgYXR0ciA9IHRyZWVf Y29ucyAoYXR0cl9uYW1lLCBhdHRyX2FyZ3MsIGNoYWluKTsKKyAgcmV0dXJu IGF0dHI7Cit9CisKKy8qIFJldHVybiBhIG5ldyBuYW1lIGJ5IGFwcGVuZGlu ZyBTVUZGSVggdG8gdGhlIERFQ0wgbmFtZS4gIElmCisgICBtYWtlX3VuaXF1 ZSBpcyB0cnVlLCBhcHBlbmQgdGhlIGZ1bGwgcGF0aCBuYW1lLiAgKi8KKwor c3RhdGljIGNoYXIgKgorbWFrZV9uYW1lICh0cmVlIGRlY2wsIGNvbnN0IGNo YXIgKnN1ZmZpeCwgYm9vbCBtYWtlX3VuaXF1ZSkKK3sKKyAgY2hhciAqZ2xv YmFsX3Zhcl9uYW1lOworICBpbnQgbmFtZV9sZW47CisgIGNvbnN0IGNoYXIg Km5hbWU7CisgIGNvbnN0IGNoYXIgKnVuaXF1ZV9uYW1lID0gTlVMTDsKKwor ICBuYW1lID0gSURFTlRJRklFUl9QT0lOVEVSIChERUNMX0FTU0VNQkxFUl9O QU1FIChkZWNsKSk7CisKKyAgLyogR2V0IGEgdW5pcXVlIG5hbWUgdGhhdCBj YW4gYmUgdXNlZCBnbG9iYWxseSB3aXRob3V0IGFueSBjaGFuY2VzCisgICAg IG9mIGNvbGxpc2lvbiBhdCBsaW5rIHRpbWUuICAqLworICBpZiAobWFrZV91 bmlxdWUpCisgICAgdW5pcXVlX25hbWUgPSBJREVOVElGSUVSX1BPSU5URVIg KGdldF9maWxlX2Z1bmN0aW9uX25hbWUgKCJcMCIpKTsKKworICBuYW1lX2xl biA9IHN0cmxlbiAobmFtZSkgKyBzdHJsZW4gKHN1ZmZpeCkgKyAyOworCisg IGlmIChtYWtlX3VuaXF1ZSkKKyAgICBuYW1lX2xlbiArPSBzdHJsZW4gKHVu aXF1ZV9uYW1lKSArIDE7CisgIGdsb2JhbF92YXJfbmFtZSA9IChjaGFyICop IHhtYWxsb2MgKG5hbWVfbGVuKTsKKworICAvKiBVc2UgJy4nIHRvIGNvbmNh dGVuYXRlIG5hbWVzIGFzIGl0IGlzIGRlbWFuZ2xlciBmcmllbmRseS4gICov CisgIGlmIChtYWtlX3VuaXF1ZSkKKyAgICAgIHNucHJpbnRmIChnbG9iYWxf dmFyX25hbWUsIG5hbWVfbGVuLCAiJXMuJXMuJXMiLCBuYW1lLAorCQl1bmlx dWVfbmFtZSwgc3VmZml4KTsKKyAgZWxzZQorICAgICAgc25wcmludGYgKGds b2JhbF92YXJfbmFtZSwgbmFtZV9sZW4sICIlcy4lcyIsIG5hbWUsIHN1ZmZp eCk7CisKKyAgcmV0dXJuIGdsb2JhbF92YXJfbmFtZTsKK30KKworLyogTWFr ZSB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gZGVjbCBmb3IgaWZ1bmMgKElGVU5D X0RFQ0wpIHRvIGRpc3BhdGNoCisgICB0aGUgdmVyc2lvbnMgb2YgbXVsdGkt dmVyc2lvbmVkIGZ1bmN0aW9uIERFRkFVTFRfREVDTC4gIENyZWF0ZSBhbmQK KyAgIGVtcHR5IGJhc2ljIGJsb2NrIGluIHRoZSByZXNvbHZlciBhbmQgc3Rv cmUgdGhlIHBvaW50ZXIgaW4KKyAgIEVNUFRZX0JCLiAgUmV0dXJuIHRoZSBk ZWNsIG9mIHRoZSByZXNvbHZlciBmdW5jdGlvbi4gICovCisKK3N0YXRpYyB0 cmVlCittYWtlX2lmdW5jX3Jlc29sdmVyX2Z1bmMgKGNvbnN0IHRyZWUgZGVm YXVsdF9kZWNsLAorCQkJICBjb25zdCB0cmVlIGlmdW5jX2RlY2wsCisJCQkg IGJhc2ljX2Jsb2NrICplbXB0eV9iYikKK3sKKyAgY2hhciAqcmVzb2x2ZXJf bmFtZTsKKyAgdHJlZSBkZWNsLCB0eXBlLCBkZWNsX25hbWUsIHQ7CisgIGJh c2ljX2Jsb2NrIG5ld19iYjsKKyAgdHJlZSBvbGRfY3VycmVudF9mdW5jdGlv bl9kZWNsOworICBib29sIG1ha2VfdW5pcXVlID0gZmFsc2U7CisKKyAgLyog SUZVTkMncyBoYXZlIHRvIGJlIGdsb2JhbGx5IHZpc2libGUuICBTbywgaWYg dGhlIGRlZmF1bHRfZGVjbCBpcworICAgICBub3QsIHRoZW4gdGhlIG5hbWUg b2YgdGhlIElGVU5DIHNob3VsZCBiZSBtYWRlIHVuaXF1ZS4gICovCisgIGlm IChUUkVFX1BVQkxJQyAoZGVmYXVsdF9kZWNsKSA9PSAwKQorICAgIG1ha2Vf dW5pcXVlID0gdHJ1ZTsKKworICAvKiBBcHBlbmQgdGhlIGZpbGVuYW1lIHRv IHRoZSByZXNvbHZlciBmdW5jdGlvbiBpZiB0aGUgdmVyc2lvbnMgYXJlCisg ICAgIG5vdCBleHRlcm5hbGx5IHZpc2libGUuICBUaGlzIGlzIGJlY2F1c2Ug dGhlIHJlc29sdmVyIGZ1bmN0aW9uIGhhcworICAgICB0byBiZSBleHRlcm5h bGx5IHZpc2libGUgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBpdC4gIFNvLCBh cHBlbmRpbmcKKyAgICAgdGhlIGZpbGVuYW1lIHdpbGwgcHJldmVudCBjb25m bGljdHMgd2l0aCBhIHJlc29sdmVyIGZ1bmN0aW9uIGZyb20KKyAgICAgYW5v dGhlciBtb2R1bGUgd2hpY2ggaXMgYmFzZWQgb24gdGhlIHNhbWUgdmVyc2lv biBuYW1lLiAgKi8KKyAgcmVzb2x2ZXJfbmFtZSA9IG1ha2VfbmFtZSAoZGVm YXVsdF9kZWNsLCAicmVzb2x2ZXIiLCBtYWtlX3VuaXF1ZSk7CisKKyAgLyog VGhlIHJlc29sdmVyIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSAodm9pZCAq KS4gKi8KKyAgdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAocHRy X3R5cGVfbm9kZSwgTlVMTF9UUkVFKTsKKworICBkZWNsID0gYnVpbGRfZm5f ZGVjbCAocmVzb2x2ZXJfbmFtZSwgdHlwZSk7CisgIGRlY2xfbmFtZSA9IGdl dF9pZGVudGlmaWVyIChyZXNvbHZlcl9uYW1lKTsKKyAgU0VUX0RFQ0xfQVNT RU1CTEVSX05BTUUgKGRlY2wsIGRlY2xfbmFtZSk7CisKKyAgREVDTF9OQU1F IChkZWNsKSA9IGRlY2xfbmFtZTsKKyAgVFJFRV9VU0VEIChkZWNsKSA9IFRS RUVfVVNFRCAoZGVmYXVsdF9kZWNsKTsKKyAgREVDTF9BUlRJRklDSUFMIChk ZWNsKSA9IDE7CisgIERFQ0xfSUdOT1JFRF9QIChkZWNsKSA9IDA7CisgIC8q IElGVU5DIHJlc29sdmVycyBoYXZlIHRvIGJlIGV4dGVybmFsbHkgdmlzaWJs ZS4gICovCisgIFRSRUVfUFVCTElDIChkZWNsKSA9IDE7CisgIERFQ0xfVU5J TkxJTkFCTEUgKGRlY2wpID0gMTsKKworICBERUNMX0VYVEVSTkFMIChkZWNs KSA9IERFQ0xfRVhURVJOQUwgKGRlZmF1bHRfZGVjbCk7CisgIERFQ0xfRVhU RVJOQUwgKGlmdW5jX2RlY2wpID0gMDsKKworICBERUNMX0NPTlRFWFQgKGRl Y2wpID0gTlVMTF9UUkVFOworICBERUNMX0lOSVRJQUwgKGRlY2wpID0gbWFr ZV9ub2RlIChCTE9DSyk7CisgIERFQ0xfU1RBVElDX0NPTlNUUlVDVE9SIChk ZWNsKSA9IDA7CisgIFRSRUVfUkVBRE9OTFkgKGRlY2wpID0gMDsKKyAgREVD TF9QVVJFX1AgKGRlY2wpID0gMDsKKyAgREVDTF9DT01EQVQgKGRlY2wpID0g REVDTF9DT01EQVQgKGRlZmF1bHRfZGVjbCk7CisgIGlmIChERUNMX0NPTURB VF9HUk9VUCAoZGVmYXVsdF9kZWNsKSkKKyAgICB7CisgICAgICBtYWtlX2Rl Y2xfb25lX29ubHkgKGRlY2wsIERFQ0xfQ09NREFUX0dST1VQIChkZWZhdWx0 X2RlY2wpKTsKKyAgICB9CisgIC8qIEJ1aWxkIHJlc3VsdCBkZWNsIGFuZCBh ZGQgdG8gZnVuY3Rpb25fZGVjbC4gKi8KKyAgdCA9IGJ1aWxkX2RlY2wgKFVO S05PV05fTE9DQVRJT04sIFJFU1VMVF9ERUNMLCBOVUxMX1RSRUUsIHB0cl90 eXBlX25vZGUpOworICBERUNMX0FSVElGSUNJQUwgKHQpID0gMTsKKyAgREVD TF9JR05PUkVEX1AgKHQpID0gMTsKKyAgREVDTF9SRVNVTFQgKGRlY2wpID0g dDsKKworICBnaW1wbGlmeV9mdW5jdGlvbl90cmVlIChkZWNsKTsKKyAgb2xk X2N1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGN1cnJlbnRfZnVuY3Rpb25fZGVj bDsKKyAgcHVzaF9jZnVuIChERUNMX1NUUlVDVF9GVU5DVElPTiAoZGVjbCkp OworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBkZWNsOworICBpbml0X2Vt cHR5X3RyZWVfY2ZnX2Zvcl9mdW5jdGlvbiAoREVDTF9TVFJVQ1RfRlVOQ1RJ T04gKGRlY2wpKTsKKyAgY2Z1bi0+Y3Vycl9wcm9wZXJ0aWVzIHw9CisgICAg KFBST1BfZ2ltcGxlX2xjZiB8IFBST1BfZ2ltcGxlX2xlaCB8IFBST1BfY2Zn IHwgUFJPUF9yZWZlcmVuY2VkX3ZhcnMgfAorICAgICBQUk9QX3NzYSk7Cisg IG5ld19iYiA9IGNyZWF0ZV9lbXB0eV9iYiAoRU5UUllfQkxPQ0tfUFRSKTsK KyAgbWFrZV9lZGdlIChFTlRSWV9CTE9DS19QVFIsIG5ld19iYiwgRURHRV9G QUxMVEhSVSk7CisgIG1ha2VfZWRnZSAobmV3X2JiLCBFWElUX0JMT0NLX1BU UiwgMCk7CisgICplbXB0eV9iYiA9IG5ld19iYjsKKworICBjZ3JhcGhfYWRk X25ld19mdW5jdGlvbiAoZGVjbCwgdHJ1ZSk7CisgIGNncmFwaF9jYWxsX2Z1 bmN0aW9uX2luc2VydGlvbl9ob29rcyAoY2dyYXBoX2dldF9jcmVhdGVfbm9k ZSAoZGVjbCkpOworICBjZ3JhcGhfbWFya19mb3JjZV9vdXRwdXRfbm9kZSAo Y2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZGVjbCkpOworCisgIGlmIChERUNM X0NPTURBVF9HUk9VUCAoZGVmYXVsdF9kZWNsKSkKKyAgICB7CisgICAgICBn Y2NfYXNzZXJ0IChjZ3JhcGhfZ2V0X25vZGUgKGRlZmF1bHRfZGVjbCkpOwor ICAgICAgc3ltdGFiX2FkZF90b19zYW1lX2NvbWRhdF9ncm91cCAoCisJKHN5 bXRhYl9ub2RlKSBjZ3JhcGhfZ2V0X25vZGUgKGRlY2wpLAorCShzeW10YWJf bm9kZSkgY2dyYXBoX2dldF9ub2RlIChkZWZhdWx0X2RlY2wpKTsKKyAgICB9 CisKKyAgcG9wX2NmdW4gKCk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9 IG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisKKyAgZ2NjX2Fzc2VydCAo aWZ1bmNfZGVjbCAhPSBOVUxMKTsKKyAgLyogTWFyayBpZnVuY19kZWNsIGFz ICJpZnVuYyIgd2l0aCByZXNvbHZlciBhcyByZXNvbHZlcl9uYW1lLiAgKi8K KyAgREVDTF9BVFRSSUJVVEVTIChpZnVuY19kZWNsKSAKKyAgICA9IG1ha2Vf YXR0cmlidXRlICgiaWZ1bmMiLCByZXNvbHZlcl9uYW1lLCBERUNMX0FUVFJJ QlVURVMgKGlmdW5jX2RlY2wpKTsKKworICAvKiBDcmVhdGUgdGhlIGFsaWFz IGhlcmUuICAqLworICBjZ3JhcGhfY3JlYXRlX2Z1bmN0aW9uX2FsaWFzIChp ZnVuY19kZWNsLCBkZWNsKTsKKyAgcmV0dXJuIGRlY2w7Cit9CisKKy8qIE1h a2UgYW5kIGlmdW5jIGRlY2xhcmF0aW9uIGZvciB0aGUgbXVsdGktdmVyc2lv bmVkIGZ1bmN0aW9uIERFQ0wuICBDYWxscyB0bworICAgREVDTCBmdW5jdGlv biB3aWxsIGJlIHJlcGxhY2VkIHdpdGggY2FsbHMgdG8gdGhlIGlmdW5jLiAg IFJldHVybiB0aGUgZGVjbAorICAgb2YgdGhlIGlmdW5jIGNyZWF0ZWQuICAq LworCitzdGF0aWMgdHJlZQorbWFrZV9pZnVuY19mdW5jIChjb25zdCB0cmVl IGRlY2wpCit7CisgIHRyZWUgaWZ1bmNfZGVjbDsKKyAgY2hhciAqaWZ1bmNf bmFtZSwgKnJlc29sdmVyX25hbWU7CisgIHRyZWUgZm5fdHlwZSwgaWZ1bmNf dHlwZTsKKyAgYm9vbCBtYWtlX3VuaXF1ZSA9IGZhbHNlOworCisgIGlmIChU UkVFX1BVQkxJQyAoZGVjbCkgPT0gMCkKKyAgICBtYWtlX3VuaXF1ZSA9IHRy dWU7CisKKyAgaWZ1bmNfbmFtZSA9IG1ha2VfbmFtZSAoZGVjbCwgImlmdW5j IiwgbWFrZV91bmlxdWUpOworICByZXNvbHZlcl9uYW1lID0gbWFrZV9uYW1l IChkZWNsLCAicmVzb2x2ZXIiLCBtYWtlX3VuaXF1ZSk7CisgIGdjY19hc3Nl cnQgKHJlc29sdmVyX25hbWUpOworCisgIGZuX3R5cGUgPSBUUkVFX1RZUEUg KGRlY2wpOworICBpZnVuY190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAo VFJFRV9UWVBFIChmbl90eXBlKSwKKwkJCQkgICAgVFlQRV9BUkdfVFlQRVMg KGZuX3R5cGUpKTsKKyAgCisgIGlmdW5jX2RlY2wgPSBidWlsZF9mbl9kZWNs IChpZnVuY19uYW1lLCBpZnVuY190eXBlKTsKKyAgVFJFRV9VU0VEIChpZnVu Y19kZWNsKSA9IDE7CisgIERFQ0xfQ09OVEVYVCAoaWZ1bmNfZGVjbCkgPSBO VUxMX1RSRUU7CisgIERFQ0xfSU5JVElBTCAoaWZ1bmNfZGVjbCkgPSBlcnJv cl9tYXJrX25vZGU7CisgIERFQ0xfQVJUSUZJQ0lBTCAoaWZ1bmNfZGVjbCkg PSAxOworICAvKiBNYXJrIHRoaXMgaWZ1bmMgYXMgZXh0ZXJuYWwsIHRoZSBy ZXNvbHZlciB3aWxsIGZsaXAgaXQgYWdhaW4gaWYKKyAgICAgaXQgZ2V0cyBn ZW5lcmF0ZWQuICAqLworICBERUNMX0VYVEVSTkFMIChpZnVuY19kZWNsKSA9 IDE7CisgIC8qIElGVU5DcyBoYXZlIHRvIGJlIGV4dGVybmFsbHkgdmlzaWJs ZS4gICovCisgIFRSRUVfUFVCTElDIChpZnVuY19kZWNsKSA9IDE7CisKKyAg cmV0dXJuIGlmdW5jX2RlY2w7ICAKK30KKworLyogRm9yIG11bHRpLXZlcnNp b25lZCBmdW5jdGlvbiBkZWNsLCB3aGljaCBzaG91bGQgYWxzbyBiZSB0aGUg ZGVmYXVsdCwKKyAgIHJldHVybiB0aGUgZGVjbCBvZiB0aGUgaWZ1bmMgcmVz b2x2ZXIsIGNyZWF0ZSBpdCBpZiBpdCBkb2VzIG5vdAorICAgZXhpc3QuICAq LworCit0cmVlCitnZXRfaWZ1bmNfZm9yX3ZlcnNpb24gKGNvbnN0IHRyZWUg ZGVjbCkKK3sKKyAgdmVyc2lvbl9mdW5jdGlvbiAqZGVjbF92OworICBpbnQg aXg7CisgIHZvaWRfcCBlbGU7CisKKyAgLyogREVDTCBoYXMgdG8gYmUgdGhl IGRlZmF1bHQgdmVyc2lvbiwgb3RoZXJ3aXNlIGl0IGlzIG1pc3NpbmcgYW5k CisgICAgIHRoYXQgaXMgbm90IGFsbG93ZWQuICAqLworICBpZiAoIWlzX2Rl ZmF1bHRfZnVuY3Rpb24gKGRlY2wpKQorICAgIHsKKyAgICAgIGVycm9yX2F0 IChERUNMX1NPVVJDRV9MT0NBVElPTiAoZGVjbCksICJEZWZhdWx0IHZlcnNp b24gbm90IGZvdW5kIik7CisgICAgICByZXR1cm4gZGVjbDsKKyAgICB9CisK KyAgZGVjbF92ID0gZmluZF9mdW5jdGlvbl92ZXJzaW9uIChkZWNsKTsKKyAg Z2NjX2Fzc2VydCAoZGVjbF92ICE9IE5VTEwpOworICBpZiAoZGVjbF92LT5p ZnVuY19kZWNsID09IE5VTEwpCisgICAgeworICAgICAgdHJlZSBpZnVuY19k ZWNsOworICAgICAgaWZ1bmNfZGVjbCA9IG1ha2VfaWZ1bmNfZnVuYyAoZGVj bCk7CisgICAgICBkZWNsX3YtPmlmdW5jX2RlY2wgPSBpZnVuY19kZWNsOwor ICAgIH0KKworICBpZiAoY2dyYXBoX2dldF9ub2RlIChkZWNsKSkKKyAgICBj Z3JhcGhfbWFya19mb3JjZV9vdXRwdXRfbm9kZSAoY2dyYXBoX2dldF9ub2Rl IChkZWNsKSk7CisKKyAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlICh2b2lk X3AsIGRlY2xfdi0+dmVyc2lvbnMsIGl4LCBlbGUpOyArK2l4KQorICAgIHsK KyAgICAgIHZlcnNpb25fZnVuY3Rpb24gKnYgPSAodmVyc2lvbl9mdW5jdGlv biAqKSBlbGU7CisgICAgICAvKiBUaGlzIGNvdWxkIGJlIGEgZGVsZXRlZCB2 ZXJzaW9uLiAgSGFwcGVucyB3aXRoCisJIGR1cGxpY2F0ZSBkZWNsYXJhdGlv bnMuICovCisgICAgICBpZiAodi0+aXNfZGVsZXRlZCkKKwljb250aW51ZTsK KyAgICAgIGdjY19hc3NlcnQgKHYtPmRlY2wgIT0gTlVMTCk7CisgICAgICBp ZiAoY2dyYXBoX2dldF9ub2RlICh2LT5kZWNsKSkKKwljZ3JhcGhfbWFya19m b3JjZV9vdXRwdXRfbm9kZSAoY2dyYXBoX2dldF9ub2RlICh2LT5kZWNsKSk7 CisgICAgfQorCisgIHJldHVybiBkZWNsX3YtPmlmdW5jX2RlY2w7Cit9CisK Ky8qIEdlbmVyYXRlIHRoZSBkaXNwYXRjaGluZyBjb2RlIHRvIGRpc3BhdGNo IG11bHRpLXZlcnNpb25lZCBmdW5jdGlvbgorICAgREVDTC4gIE1ha2UgYSBu ZXcgZnVuY3Rpb24gZGVjbCBmb3IgZGlzcGF0Y2hpbmcgYW5kIGNhbGwgdGhl IHRhcmdldAorICAgaG9vayB0byBwcm9jZXNzIHRoZSAidGFyZ2V0IiBhdHRy aWJ1dGVzIGFuZCBwcm92aWRlIHRoZSBjb2RlIHRvCisgICBkaXNwYXRjaCB0 aGUgcmlnaHQgZnVuY3Rpb24gYXQgcnVuLXRpbWUuICAqLworCitzdGF0aWMg dHJlZQorbWFrZV9pZnVuY19yZXNvbHZlcl9mb3JfdmVyc2lvbiAoY29uc3Qg dHJlZSBkZWNsKQoreworICB2ZXJzaW9uX2Z1bmN0aW9uICpkZWNsX3Y7Cisg IHRyZWUgaWZ1bmNfcmVzb2x2ZXJfZGVjbCwgaWZ1bmNfZGVjbDsKKyAgYmFz aWNfYmxvY2sgZW1wdHlfYmI7CisgIGludCBpeDsKKyAgdm9pZF9wIGVsZTsK KyAgVkVDICh0cmVlLCBoZWFwKSAqZm5fdmVyX3ZlYyA9IE5VTEw7CisgIHRy ZWUgb2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKworICBnY2NfYXNzZXJ0 IChpc19kZWZhdWx0X2Z1bmN0aW9uIChkZWNsKSk7CisKKyAgZGVjbF92ID0g ZmluZF9mdW5jdGlvbl92ZXJzaW9uIChkZWNsKTsKKyAgZ2NjX2Fzc2VydCAo ZGVjbF92ICE9IE5VTEwpOworCisgIGlmIChkZWNsX3YtPmlmdW5jX3Jlc29s dmVyX2RlY2wgIT0gTlVMTCkKKyAgICByZXR1cm4gZGVjbF92LT5pZnVuY19y ZXNvbHZlcl9kZWNsOworCisgIGlmdW5jX2RlY2wgPSBkZWNsX3YtPmlmdW5j X2RlY2w7CisKKyAgaWYgKGlmdW5jX2RlY2wgPT0gTlVMTCkKKyAgICBpZnVu Y19kZWNsID0gZGVjbF92LT5pZnVuY19kZWNsID0gbWFrZV9pZnVuY19mdW5j IChkZWNsKTsKKworICBpZnVuY19yZXNvbHZlcl9kZWNsID0gbWFrZV9pZnVu Y19yZXNvbHZlcl9mdW5jIChkZWNsLCBpZnVuY19kZWNsLAorCQkJCQkJICAm ZW1wdHlfYmIpOworCisgIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBj dXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgIHB1c2hfY2Z1biAoREVDTF9TVFJV Q1RfRlVOQ1RJT04gKGlmdW5jX3Jlc29sdmVyX2RlY2wpKTsKKyAgY3VycmVu dF9mdW5jdGlvbl9kZWNsID0gaWZ1bmNfcmVzb2x2ZXJfZGVjbDsKKworICBm bl92ZXJfdmVjID0gVkVDX2FsbG9jICh0cmVlLCBoZWFwLCAyKTsKKyAgVkVD X3NhZmVfcHVzaCAodHJlZSwgaGVhcCwgZm5fdmVyX3ZlYywgZGVjbCk7CisK KyAgZm9yIChpeCA9IDA7IFZFQ19pdGVyYXRlICh2b2lkX3AsIGRlY2xfdi0+ dmVyc2lvbnMsIGl4LCBlbGUpOyArK2l4KQorICAgIHsKKyAgICAgIHZlcnNp b25fZnVuY3Rpb24gKnYgPSAodmVyc2lvbl9mdW5jdGlvbiAqKSBlbGU7Cisg ICAgICBnY2NfYXNzZXJ0ICh2LT5kZWNsICE9IE5VTEwpOworICAgICAgLyog Q2hlY2sgZm9yIHZpcnR1YWwgZnVuY3Rpb25zIGhlcmUgYWdhaW4sIGFzIGJ5 IHRoaXMgdGltZSBpdCBzaG91bGQKKwkgaGF2ZSBiZWVuIGRldGVybWluZWQg aWYgdGhpcyBmdW5jdGlvbiBuZWVkcyBhIHZ0YWJsZSBpbmRleCBvcgorCSBu b3QuICBUaGlzIGhhcHBlbnMgZm9yIG1ldGhvZHMgaW4gZGVyaXZlZCBjbGFz c2VzIHRoYXQgb3ZlcnJpZGUKKwkgdmlydHVhbCBtZXRob2RzIGluIGJhc2Ug Y2xhc3NlcyBidXQgYXJlIG5vdCBleHBsaWNpdGx5IG1hcmtlZCBhcworCSB2 aXJ0dWFsLiAgKi8KKyAgICAgIGlmIChERUNMX1ZJTkRFWCAodi0+ZGVjbCkp CisgICAgICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAodi0+ ZGVjbCksCisJCSAgIlZpcnR1YWwgZnVuY3Rpb24gdmVyc2lvbmluZyBub3Qg c3VwcG9ydGVkXG4iKTsKKyAgICAgIGlmICghdi0+aXNfZGVsZXRlZCkKKwlW RUNfc2FmZV9wdXNoICh0cmVlLCBoZWFwLCBmbl92ZXJfdmVjLCB2LT5kZWNs KTsKKyAgICB9CisKKyAgZ2NjX2Fzc2VydCAodGFyZ2V0bS5kaXNwYXRjaF92 ZXJzaW9uKTsKKyAgdGFyZ2V0bS5kaXNwYXRjaF92ZXJzaW9uIChpZnVuY19y ZXNvbHZlcl9kZWNsLCBmbl92ZXJfdmVjLCAmZW1wdHlfYmIpOworICBkZWNs X3YtPmlmdW5jX3Jlc29sdmVyX2RlY2wgPSBpZnVuY19yZXNvbHZlcl9kZWNs OworCisgIHBvcF9jZnVuICgpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wg PSBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworICByZXR1cm4gaWZ1bmNf cmVzb2x2ZXJfZGVjbDsKK30KKworLyogTWFpbiBlbnRyeSBwb2ludCB0byBw YXNzX2Rpc3BhdGNoX3ZlcnNpb25zLiBGb3IgbXVsdGktdmVyc2lvbmVkIGZ1 bmN0aW9ucywKKyAgIGdlbmVyYXRlIHRoZSBkaXNwYXRjaGluZyBjb2RlLiAg Ki8KKworc3RhdGljIHVuc2lnbmVkIGludAorZG9fZGlzcGF0Y2hfdmVyc2lv bnMgKHZvaWQpCit7CisgIC8qIEEgbmV3IHBhc3MgZm9yIGdlbmVyYXRpbmcg ZGlzcGF0Y2ggY29kZSBmb3IgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9ucy4K KyAgICAgT3RoZXIgZm9ybXMgb2YgZGlzcGF0Y2ggY2FuIGJlIGFkZGVkIHdo ZW4gaWZ1bmMgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlCisgICAgIGxpa2Ug anVzdCBjYWxsaW5nIHRoZSBmdW5jdGlvbiBkaXJlY3RseSBhZnRlciBjaGVj a2luZyBmb3IgdGFyZ2V0IHR5cGUuCisgICAgIEN1cnJlbnRseSwgZGlzcGF0 Y2hpbmcgaXMgZG9uZSB0aHJvdWdoIElGVU5DLiAgVGhpcyBwYXNzIHdpbGwg YmVjb21lCisgICAgIG1vcmUgbWVhbmluZ2Z1bCB3aGVuIG90aGVyIGRpc3Bh dGNoIG1lY2hhbmlzbXMgYXJlIGFkZGVkLiAgKi8KKworICAvKiBDbG9uaW5n IGEgZnVuY3Rpb24gdG8gcHJvZHVjZSBtb3JlIHZlcnNpb25zIHdpbGwgaGFw cGVuIGhlcmUgd2hlbiB0aGUKKyAgICAgdXNlciByZXF1ZXN0cyB0aGF0IHZp YSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZS4gRm9yIGV4YW1wbGUsCisgICAgIGlu dCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgoImFyY2g9Y29yZTIi KSwgKCJhcmNoPWNvcmVpNyIpKSkpOworICAgICBtZWFucyB0aGF0IHRoZSB1 c2VyIHdhbnRzIHRoZSBzYW1lIGJvZHkgb2YgZm9vIHRvIGJlIHZlcnNpb25l ZCBmb3IgY29yZTIKKyAgICAgYW5kIGNvcmVpNy4gIEluIHRoYXQgY2FzZSwg dGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNsb25lZCBkdXJpbmcgdGhpcworICAg ICBwYXNzLiAgKi8KKyAgCisgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05F RCAoY3VycmVudF9mdW5jdGlvbl9kZWNsKQorICAgICAgJiYgaXNfZGVmYXVs dF9mdW5jdGlvbiAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSkKKyAgICB7Cisg ICAgICB0cmVlIGRlY2wgPSBtYWtlX2lmdW5jX3Jlc29sdmVyX2Zvcl92ZXJz aW9uIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOworICAgICAgaWYgKGR1bXBf ZmlsZSAmJiBkZWNsKQorCWR1bXBfZnVuY3Rpb25fdG9fZmlsZSAoZGVjbCwg ZHVtcF9maWxlLCBUREZfQkxPQ0tTKTsKKyAgICB9CisgIHJldHVybiAwOwor fQorCitzdGF0aWMgIGJvb2wKK2dhdGVfZGlzcGF0Y2hfdmVyc2lvbnMgKHZv aWQpCit7CisgIHJldHVybiB0cnVlOworfQorCisvKiBBIHBhc3MgdG8gZ2Vu ZXJhdGUgdGhlIGRpc3BhdGNoIGNvZGUgdG8gZXhlY3V0ZSB0aGUgYXBwcm9w cmlhdGUgdmVyc2lvbgorICAgb2YgYSBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rp b24gYXQgcnVuLXRpbWUuICAqLworCitzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNz IHBhc3NfZGlzcGF0Y2hfdmVyc2lvbnMgPQoreworIHsKKyAgR0lNUExFX1BB U1MsCisgICJkaXNwYXRjaF9tdWx0aXZlcnNpb25fZnVuY3Rpb25zIiwgICAg LyogbmFtZSAqLworICBnYXRlX2Rpc3BhdGNoX3ZlcnNpb25zLAkJLyogZ2F0 ZSAqLworICBkb19kaXNwYXRjaF92ZXJzaW9ucywJCQkvKiBleGVjdXRlICov CisgIE5VTEwsCQkJCQkvKiBzdWIgKi8KKyAgTlVMTCwJCQkJCS8qIG5leHQg Ki8KKyAgMCwJCQkJCS8qIHN0YXRpY19wYXNzX251bWJlciAqLworICBUVl9N VUxUSVZFUlNJT05fRElTUEFUQ0gsCQkvKiB0dl9pZCAqLworICBQUk9QX2Nm ZywJCQkJLyogcHJvcGVydGllc19yZXF1aXJlZCAqLworICBQUk9QX2NmZywJ CQkJLyogcHJvcGVydGllc19wcm92aWRlZCAqLworICAwLAkJCQkJLyogcHJv cGVydGllc19kZXN0cm95ZWQgKi8KKyAgMCwJCQkJCS8qIHRvZG9fZmxhZ3Nf c3RhcnQgKi8KKyAgMAkJCQkJLyogdG9kb19mbGFnc19maW5pc2ggKi8KKyB9 Cit9OwpJbmRleDogZ2NjL2NncmFwaHVuaXQuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvY2dyYXBodW5pdC5jCShyZXZpc2lvbiAxODczNDYp CisrKyBnY2MvY2dyYXBodW5pdC5jCSh3b3JraW5nIGNvcHkpCkBAIC00MjAs NiArNDIwLDEzIEBAIGNncmFwaF9maW5hbGl6ZV9mdW5jdGlvbiAodHJlZSBk ZWNsLCBib29sIG5lc3RlZCkKICAgICAgICYmICFERUNMX0RJU1JFR0FSRF9J TkxJTkVfTElNSVRTIChkZWNsKSkKICAgICBub2RlLT5zeW1ib2wuZm9yY2Vf b3V0cHV0ID0gMTsKIAorICAvKiBXaXRoIGZ1bmN0aW9uIHZlcnNpb25zLCBr ZWVwIGlubGluZSBmdW5jdGlvbnMgYW5kIGRvIG5vdCB3b3JyeSBhYm91dAor ICAgICBpbmxpbmUgbGltaXRzLiAgKi8KKyAgaWYgKERFQ0xfRlVOQ1RJT05f VkVSU0lPTkVEIChkZWNsKQorICAgICAgJiYgREVDTF9ERUNMQVJFRF9JTkxJ TkVfUCAoZGVjbCkKKyAgICAgICYmICFERUNMX0VYVEVSTkFMIChkZWNsKSkK KyAgICBub2RlLT5zeW1ib2wuZm9yY2Vfb3V0cHV0ID0gMTsKKwogICAvKiBX aGVuIG5vdCBvcHRpbWl6aW5nLCBhbHNvIG91dHB1dCB0aGUgc3RhdGljIGZ1 bmN0aW9ucy4gKHNlZQogICAgICBQUjI0NTYxKSwgYnV0IGRvbid0IGRvIHNv IGZvciBhbHdheXNfaW5saW5lIGZ1bmN0aW9ucywgZnVuY3Rpb25zCiAgICAg IGRlY2xhcmVkIGlubGluZSBhbmQgbmVzdGVkIGZ1bmN0aW9ucy4gIFRoZXNl IHdlcmUgb3B0aW1pemVkIG91dApJbmRleDogZ2NjL211bHRpdmVyc2lvbi5o Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9tdWx0aXZlcnNpb24u aAkocmV2aXNpb24gMCkKKysrIGdjYy9tdWx0aXZlcnNpb24uaAkocmV2aXNp b24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyogRnVuY3Rpb24gTXVsdGl2ZXJz aW9uaW5nLgorICAgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgU3JpcmFtYW4g VGFsbGFtICh0bXNyaXJhbUBnb29nbGUuY29tKQorCitUaGlzIGZpbGUgaXMg cGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIK K3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVS Q0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Zv ciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAqLworCisvKiBU aGlzIGlzIHRoZSBoZWFkZXIgZmlsZSB3aGljaCBwcm92aWRlcyB0aGUgZnVu Y3Rpb25zIHRvIGtlZXAgdHJhY2sKKyAgIG9mIGZ1bmN0aW9ucyB0aGF0IGFy ZSBtdWx0aS12ZXJzaW9uZWQgYW5kIHRvIGdlbmVyYXRlIHRoZSBkaXNwYXRj aAorICAgY29kZSB0byBjYWxsIHRoZSByaWdodCB2ZXJzaW9uIGF0IHJ1bi10 aW1lLiAgKi8KKworI2lmbmRlZiBHQ0NfTVVMVElWRVJTSU9OX0gKKyNkZWZp bmUgR0NDX01VTFRJVkVSSU9OX0gKKworI2luY2x1ZGUgInRyZWUuaCIKKwor LyogTWFyayBERUNMMSBhbmQgREVDTDIgYXMgZnVuY3Rpb24gdmVyc2lvbnMu ICAqLworaW50IGdyb3VwX2Z1bmN0aW9uX3ZlcnNpb25zIChjb25zdCB0cmVl IGRlY2wxLCBjb25zdCB0cmVlIGRlY2wyKTsKKworLyogTWFyayBERUNMIGFz IGRlbGV0ZWQgYW5kIG5vIGxvbmdlciBhIHZlcnNpb24uICAqLwordm9pZCBt YXJrX2RlbGV0ZV9kZWNsX3ZlcnNpb24gKGNvbnN0IHRyZWUgZGVjbCk7CisK Ky8qIFJldHVybnMgdHJ1ZSBpZiBERUNMIGlzIHRoZSBkZWZhdWx0IHZlcnNp b24gdG8gYmUgZXhlY3V0ZWQgaWYgYWxsCisgICBvdGhlciB2ZXJzaW9ucyBh cmUgaW5hcHByb3ByaWF0ZSBhdCBydW4tdGltZS4gICovCitib29sIGlzX2Rl ZmF1bHRfZnVuY3Rpb24gKGNvbnN0IHRyZWUgZGVjbCk7CisKKy8qIEdldHMg dGhlIElGVU5DIGRpc3BhdGNoZXIgZm9yIHRoaXMgbXVsdGktdmVyc2lvbmVk IGZ1bmN0aW9uIERFQ0wuIERFQ0wKKyAgIG11c3QgYmUgdGhlIGRlZmF1bHQg ZnVuY3Rpb24gaW4gdGhlIG11bHRpLXZlcnNpb25lZCBncm91cC4gICovCit0 cmVlIGdldF9pZnVuY19mb3JfdmVyc2lvbiAoY29uc3QgdHJlZSBkZWNsKTsK KworLyogUmV0dXJucyB0cnVlIHdoZW4gb25seSBvbmUgb2YgREVDTDEgYW5k IERFQ0wyIGlzIG1hcmtlZCB3aXRoICJ0YXJnZXQiCisgICBvciBpZiB0aGUg InRhcmdldCIgYXR0cmlidXRlIHN0cmluZ3Mgb2YgIERFQ0wxIGFuZCBERUNM MiBkb250IG1hdGNoLiAgKi8KK2Jvb2wgaGFzX2RpZmZlcmVudF92ZXJzaW9u X2F0dHJpYnV0ZXMgKGNvbnN0IHRyZWUgZGVjbDEsIGNvbnN0IHRyZWUgZGVj bDIpOworCisvKiBGdW5jdGlvbiBERUNMIGlzIG1hcmtlZCB0byBiZSBhIG11 bHRpLXZlcnNpb25lZCBmdW5jdGlvbi4gIElmIERFQ0wgaXMKKyAgIG5vdCB0 aGUgZGVmYXVsdCB2ZXJzaW9uLCB0aGUgYXNzZW1ibGVyIG5hbWUgb2YgREVD TCBpcyBjaGFuZ2VkIHRvIGluY2x1ZGUKKyAgIHRoZSBhdHRyaWJ1dGUgc3Ry aW5nIHRvIGtlZXAgdGhlIG5hbWUgdW5hbWJpZ3VvdXMuICAqLwordm9pZCBt YXJrX2Z1bmN0aW9uX2FzX3ZlcnNpb24gKGNvbnN0IHRyZWUgZGVjbCk7CisK Ky8qIENoZWNrIGlmIGRlY2wgaXMgRlVOQ1RJT05fREVDTCB3aXRoIHRhcmdl dCBhdHRyaWJ1dGUgc2V0LiAgKi8KK2Jvb2wgaXNfdGFyZ2V0X2F0dHJpYnV0 ZV9zZXQgKGNvbnN0IHRyZWUgZGVjbCk7CisjZW5kaWYKSW5kZXg6IGdjYy90 ZXN0c3VpdGUvZysrLmRnL212MS5DCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL212MS5DCShyZXZpc2lvbiAwKQor KysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbXYxLkMJKHJldmlzaW9uIDApCkBA IC0wLDAgKzEsMTk5IEBACisvKiBUZXN0IGNhc2UgdG8gY2hlY2sgaWYgTXVs dGl2ZXJzaW9uaW5nIHdvcmtzLiAgKi8KKy8qIHsgZGctZG8gcnVuIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8yIC1mUElDIiB9ICovCisKKyNpbmNsdWRl IDxhc3NlcnQuaD4KKworLyogRGVmYXVsdCB2ZXJzaW9uLiAgKi8KK2ludCBm b28gKCk7CisvKiBDaGVjayBjb21iaW5hdGlvbiBvZiB0YXJnZXQgYXR0cmli dXRlcy4gICovCitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQo ImFyY2g9Y29yZWk3LHNzZTQuMixwb3BjbnQiKSkpOworLyogVGhlIHRhcmdl dCBvcGVyYW5kcyBpbiB0aGlzIGRlY2xhcmF0aW9uIGFuZCB0aGUgZGVmaW5p dGlvbiBhcmUgcmUtb3JkZXJlZC4KKyAgIFRoaXMgc2hvdWxkIHN0aWxsIHdv cmsuICAqLworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJz c3NlMyxhdngyIikpKTsKKworLyogQ2hlY2sgZm9yIGFsbCB0YXJnZXQgYXR0 cmlidXRlcyBmb3Igd2hpY2ggZGlzcGF0Y2hlcnMgYXJlIGF2YWlsYWJsZS4g ICovCisvKiBDaGVjayBhcmNoPSAqLworaW50IGZvbyAoKSBfX2F0dHJpYnV0 ZV9fKCh0YXJnZXQoImFyY2g9Y29yZTIiKSkpOworaW50IGZvbyAoKSBfX2F0 dHJpYnV0ZV9fKCh0YXJnZXQoImFyY2g9Y29yZWk3IikpKTsKK2ludCBmb28g KCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNoPWF0b20iKSkpOworaW50 IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFyY2g9YW1kZmFtMTAi KSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFyY2g9 YmR2ZXIxIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0 KCJhcmNoPWJkdmVyMiIpKSk7CisvKiBDaGVjayBJU0EsIGxhdGVzdCBmZWF0 dXJlcyBzaG91bGQgYmUgYWhlYWQuICAqLworaW50IGZvbyAoKSBfX2F0dHJp YnV0ZV9fKCh0YXJnZXQoImF2eDIiKSkpOworaW50IGZvbyAoKSBfX2F0dHJp YnV0ZV9fKCh0YXJnZXQoImF2eCIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmli dXRlX18oKHRhcmdldCgicG9wY250IikpKTsKK2ludCBmb28gKCkgX19hdHRy aWJ1dGVfXygodGFyZ2V0KCJzc2U0LjIiKSkpOworaW50IGZvbyAoKSBfX2F0 dHJpYnV0ZV9fKCh0YXJnZXQoInNzZTQuMSIpKSk7CitpbnQgZm9vICgpIF9f YXR0cmlidXRlX18oKHRhcmdldCgic3NzZTMiKSkpOworaW50IGZvbyAoKSBf X2F0dHJpYnV0ZV9fKCh0YXJnZXQoIm1teCIpKSk7CitpbnQgZm9vICgpIF9f YXR0cmlidXRlX18oKHRhcmdldCgic3NlMyIpKSk7CitpbnQgZm9vICgpIF9f YXR0cmlidXRlX18oKHRhcmdldCgic3NlMiIpKSk7CitpbnQgZm9vICgpIF9f YXR0cmlidXRlX18oKHRhcmdldCgic3NlIikpKTsKKworaW50ICgqcCkoKSA9 ICZmb287CisKK2ludCBtYWluICgpCit7CisgIGludCB2YWwgPSBmb28gKCk7 CisKKyAgLyogQ2hlY2sgaWYgY2FsbGluZyBmb28gdmlhIHB0ciBpcyB0aGUg c2FtZS4gICovCisgIGFzc2VydCAodmFsID09ICAoKnApKCkpOworCisgIGlm IChfX2J1aWx0aW5fY3B1X2lzICgiY29yZWk3IikKKyAgICAgICYmIF9fYnVp bHRpbl9jcHVfc3VwcG9ydHMgKCJzc2U0LjIiKQorICAgICAgJiYgX19idWls dGluX2NwdV9zdXBwb3J0cyAoInBvcGNudCIpKQorICAgIGFzc2VydCAodmFs ID09IDEpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgi YXZ4MiIpCisJICAgJiYgX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzc2Uz IikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMik7CisgIGVsc2UgaWYgKF9fYnVp bHRpbl9jcHVfaXMgKCJjb3JlMiIpKQorICAgIGFzc2VydCAodmFsID09IDMp OworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X2lzICgiY29yZWk3IikpCisg ICAgYXNzZXJ0ICh2YWwgPT0gNCk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9j cHVfaXMgKCJhdG9tIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gNSk7CisgIGVs c2UgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJhbWRmYW0xMGgiKSkKKyAgICBh c3NlcnQgKHZhbCA9PSA2KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9p cyAoImJkdmVyMSIpKQorICAgIGFzc2VydCAodmFsID09IDcpOworICBlbHNl IGlmIChfX2J1aWx0aW5fY3B1X2lzICgiYmR2ZXIyIikpCisgICAgYXNzZXJ0 ICh2YWwgPT0gOCk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9y dHMgKCJhdngyIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gLTEpOworICBlbHNl IGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgiYXZ4IikpCisgICAgYXNz ZXJ0ICh2YWwgPT0gLTIpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1 cHBvcnRzICgicG9wY250IikpCisgICAgYXNzZXJ0ICh2YWwgPT0gLTMpOwor ICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NlNC4yIikp CisgICAgYXNzZXJ0ICh2YWwgPT0gLTQpOworICBlbHNlIGlmIChfX2J1aWx0 aW5fY3B1X3N1cHBvcnRzICgic3NlNC4xIikpCisgICAgYXNzZXJ0ICh2YWwg PT0gLTUpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgi c3NzZTMiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSAtNik7CisgIGVsc2UgaWYg KF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJtbXgiKSkKKyAgICBhc3NlcnQg KHZhbCA9PSAtNyk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9y dHMgKCJzc2UzIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gLTgpOworICBlbHNl IGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NlMiIpKQorICAgIGFz c2VydCAodmFsID09IC05KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9z dXBwb3J0cyAoInNzZSIpKQorICAgIGFzc2VydCAodmFsID09IC0xMCk7Cisg IGVsc2UKKyAgICBhc3NlcnQgKHZhbCA9PSAwKTsKKworICByZXR1cm4gMDsK K30KKworaW50IGZvbyAoKQoreworICByZXR1cm4gMDsKK30KKworaW50IF9f YXR0cmlidXRlX18gKCh0YXJnZXQoImFyY2g9Y29yZWk3LHNzZTQuMixwb3Bj bnQiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDE7Cit9CisKK2ludCBfX2F0 dHJpYnV0ZV9fICgodGFyZ2V0KCJhdngyLHNzc2UzIikpKQorZm9vICgpCit7 CisgIHJldHVybiAyOworfQoraW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQo ImFyY2g9Y29yZTIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDM7Cit9CisK K2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmVpNyIpKSkK K2ZvbyAoKQoreworICByZXR1cm4gNDsKK30KKworaW50IF9fYXR0cmlidXRl X18gKCh0YXJnZXQoImFyY2g9YXRvbSIpKSkKK2ZvbyAoKQoreworICByZXR1 cm4gNTsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFyY2g9 YW1kZmFtMTAiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDY7Cit9CisKK2lu dCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWJkdmVyMSIpKSkKK2Zv byAoKQoreworICByZXR1cm4gNzsKK30KKworaW50IF9fYXR0cmlidXRlX18g KCh0YXJnZXQoImFyY2g9YmR2ZXIyIikpKQorZm9vICgpCit7CisgIHJldHVy biA4OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXZ4MiIp KSkKK2ZvbyAoKQoreworICByZXR1cm4gLTE7Cit9CisKK2ludCBfX2F0dHJp YnV0ZV9fICgodGFyZ2V0KCJhdngiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJu IC0yOworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgicG9wY250 IikpKQorZm9vICgpCit7CisgIHJldHVybiAtMzsKK30KKworaW50IF9fYXR0 cmlidXRlX18gKCh0YXJnZXQoInNzZTQuMiIpKSkKK2ZvbyAoKQoreworICBy ZXR1cm4gLTQ7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJz c2U0LjEiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIC01OworfQorCitpbnQg X19hdHRyaWJ1dGVfXyAoKHRhcmdldCgic3NzZTMiKSkpCitmb28gKCkKK3sK KyAgcmV0dXJuIC02OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdl dCgibW14IikpKQorZm9vICgpCit7CisgIHJldHVybiAtNzsKK30KKworaW50 IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoInNzZTMiKSkpCitmb28gKCkKK3sK KyAgcmV0dXJuIC04OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdl dCgic3NlMiIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gLTk7Cit9CisKK2lu dCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc2UiKSkpCitmb28gKCkKK3sK KyAgcmV0dXJuIC0xMDsKK30KSW5kZXg6IGdjYy9jcC9jbGFzcy5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jcC9jbGFzcy5jCShyZXZpc2lv biAxODczNDYpCisrKyBnY2MvY3AvY2xhc3MuYwkod29ya2luZyBjb3B5KQpA QCAtMzksNiArMzksNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgInRyZWUtZHVtcC5o IgogI2luY2x1ZGUgInNwbGF5LXRyZWUuaCIKICNpbmNsdWRlICJwb2ludGVy LXNldC5oIgorI2luY2x1ZGUgIm11bHRpdmVyc2lvbi5oIgogCiAvKiBUaGUg bnVtYmVyIG9mIG5lc3RlZCBjbGFzc2VzIGJlaW5nIHByb2Nlc3NlZC4gIElm IHdlIGFyZSBub3QgaW4gdGhlCiAgICBzY29wZSBvZiBhbnkgY2xhc3MsIHRo aXMgaXMgemVyby4gICovCkBAIC0xMDkzLDcgKzEwOTQsMjEgQEAgYWRkX21l dGhvZCAodHJlZSB0eXBlLCB0cmVlIG1ldGhvZCwgdHJlZSB1c2luZ19kZWMK IAkgICAgICB8fCBzYW1lX3R5cGVfcCAoVFJFRV9UWVBFIChmbl90eXBlKSwK IAkJCSAgICAgIFRSRUVfVFlQRSAobWV0aG9kX3R5cGUpKSkpCiAJewotCSAg aWYgKHVzaW5nX2RlY2wpCisJICAvKiBGb3IgZnVuY3Rpb24gdmVyc2lvbnMs IHRoZWlyIHBhcm1zIGFuZCB0eXBlcyBtYXRjaAorCSAgICAgYnV0IHRoZXkg YXJlIG5vdCBkdXBsaWNhdGVzLiAgUmVjb3JkIGZ1bmN0aW9uIHZlcnNpb25z CisJICAgICBhcyBhbmQgd2hlbiB0aGV5IGFyZSBmb3VuZC4gICovCisJICBp ZiAoVFJFRV9DT0RFIChmbikgPT0gRlVOQ1RJT05fREVDTAorCSAgICAgICYm IFRSRUVfQ09ERSAobWV0aG9kKSA9PSBGVU5DVElPTl9ERUNMCisJICAgICAg JiYgKGlzX3RhcmdldF9hdHRyaWJ1dGVfc2V0IChmbikKKwkJICB8fCBpc190 YXJnZXRfYXR0cmlidXRlX3NldCAobWV0aG9kKSkKKwkgICAgICAmJiBoYXNf ZGlmZmVyZW50X3ZlcnNpb25fYXR0cmlidXRlcyAoZm4sIG1ldGhvZCkpCisg CSAgICB7CisJICAgICAgbWFya19mdW5jdGlvbl9hc192ZXJzaW9uIChmbik7 CisJICAgICAgbWFya19mdW5jdGlvbl9hc192ZXJzaW9uIChtZXRob2QpOwor CSAgICAgIGdyb3VwX2Z1bmN0aW9uX3ZlcnNpb25zIChmbiwgbWV0aG9kKTsK KwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxzZSBpZiAodXNpbmdf ZGVjbCkKIAkgICAgewogCSAgICAgIGlmIChERUNMX0NPTlRFWFQgKGZuKSA9 PSB0eXBlKQogCQkvKiBEZWZlciB0byB0aGUgbG9jYWwgZnVuY3Rpb24uICAq LwpAQCAtMTE1MSw2ICsxMTY2LDcgQEAgYWRkX21ldGhvZCAodHJlZSB0eXBl LCB0cmVlIG1ldGhvZCwgdHJlZSB1c2luZ19kZWMKICAgZWxzZQogICAgIC8q IFJlcGxhY2UgdGhlIGN1cnJlbnQgc2xvdC4gICovCiAgICAgVkVDX3JlcGxh Y2UgKHRyZWUsIG1ldGhvZF92ZWMsIHNsb3QsIG92ZXJsb2FkKTsKKwogICBy ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjkyOCw4ICs2OTQ0LDExIEBAIHJlc29s dmVfYWRkcmVzc19vZl9vdmVybG9hZGVkX2Z1bmN0aW9uICh0cmVlIHRhcmdl CiAJICBpZiAoREVDTF9BTlRJQ0lQQVRFRCAoZm4pKQogCSAgICBjb250aW51 ZTsKIAotCSAgLyogU2VlIGlmIHRoZXJlJ3MgYSBtYXRjaC4gICovCi0JICBp ZiAoc2FtZV90eXBlX3AgKHRhcmdldF9mbl90eXBlLCBzdGF0aWNfZm5fdHlw ZSAoZm4pKSkKKwkgIC8qIFNlZSBpZiB0aGVyZSdzIGEgbWF0Y2guICAgRm9y IGZ1bmN0aW9ucyB0aGF0IGFyZSBtdWx0aS12ZXJzaW9uZWQKKwkgICAgIG1h dGNoIGl0IHRvIHRoZSBkZWZhdWx0IGZ1bmN0aW9uLiAgKi8KKwkgIGlmIChz YW1lX3R5cGVfcCAodGFyZ2V0X2ZuX3R5cGUsIHN0YXRpY19mbl90eXBlIChm bikpCisJICAgICAgJiYgKCFERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4p CisJCSAgfHwgaXNfZGVmYXVsdF9mdW5jdGlvbiAoZm4pKSkKIAkgICAgbWF0 Y2hlcyA9IHRyZWVfY29ucyAoZm4sIE5VTExfVFJFRSwgbWF0Y2hlcyk7CiAJ fQogICAgIH0KQEAgLTcwOTEsNiArNzExMCwyMiBAQCByZXNvbHZlX2FkZHJl c3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbiAodHJlZSB0YXJnZQogICAgICAg cGVyZm9ybV9vcl9kZWZlcl9hY2Nlc3NfY2hlY2sgKGFjY2Vzc19wYXRoLCBm biwgZm4pOwogICAgIH0KIAorICAvKiBJZiBhIHBvaW50ZXIgdG8gYSBmdW5j dGlvbiB0aGF0IGlzIG11bHRpLXZlcnNpb25lZCBpcyByZXF1ZXN0ZWQsIHRo ZQorICAgICBwb2ludGVyIHRvIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGlz IHJldHVybmVkIGluc3RlYWQuICBUaGlzIHdvcmtzCisgICAgIHdlbGwgYmVj YXVzZSBpbmRpcmVjdGx5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHdpbGwgZGlz cGF0Y2ggdGhlIHJpZ2h0CisgICAgIGZ1bmN0aW9uIHZlcnNpb24gYXQgcnVu LXRpbWUuIEFsc28sIHRoZSBmdW5jdGlvbiBhZGRyZXNzIGlzIGtlcHQKKyAg ICAgdW5pcXVlLiAgKi8KKyAgaWYgKERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVE IChmbikKKyAgICAgICYmIGlzX2RlZmF1bHRfZnVuY3Rpb24gKGZuKSkKKyAg ICB7CisgICAgICB0cmVlIGlmdW5jX2RlY2w7CisgICAgICBpZnVuY19kZWNs ID0gZ2V0X2lmdW5jX2Zvcl92ZXJzaW9uIChmbik7CisgICAgICByZXRyb2Zp dF9sYW5nX2RlY2wgKGlmdW5jX2RlY2wpOworICAgICAgZ2NjX2Fzc2VydCAo aWZ1bmNfZGVjbCAhPSBOVUxMKTsKKyAgICAgIG1hcmtfdXNlZCAoZm4pOwor ICAgICAgcmV0dXJuIGJ1aWxkX2ZvbGRfYWRkcl9leHByIChpZnVuY19kZWNs KTsKKyAgICB9CisKICAgaWYgKFRZUEVfUFRSRk5fUCAodGFyZ2V0X3R5cGUp IHx8IFRZUEVfUFRSTUVNRlVOQ19QICh0YXJnZXRfdHlwZSkpCiAgICAgcmV0 dXJuIGNwX2J1aWxkX2FkZHJfZXhwciAoZm4sIGZsYWdzKTsKICAgZWxzZQpJ bmRleDogZ2NjL2NwL2RlY2wuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvY3AvZGVjbC5jCShyZXZpc2lvbiAxODczNDYpCisrKyBnY2MvY3Av ZGVjbC5jCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGFsb25n IHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2Vl CiAjaW5jbHVkZSAicG9pbnRlci1zZXQuaCIKICNpbmNsdWRlICJzcGxheS10 cmVlLmgiCiAjaW5jbHVkZSAicGx1Z2luLmgiCisjaW5jbHVkZSAibXVsdGl2 ZXJzaW9uLmgiCiAKIC8qIFBvc3NpYmxlIGNhc2VzIG9mIGJhZCBzcGVjaWZp ZXJzIHR5cGUgdXNlZCBieSBiYWRfc3BlY2lmaWVycy4gKi8KIGVudW0gYmFk X3NwZWNfcGxhY2UgewpAQCAtOTczLDYgKzk3NCwyMSBAQCBkZWNsc19tYXRj aCAodHJlZSBuZXdkZWNsLCB0cmVlIG9sZGRlY2wpCiAgICAgICBpZiAodDEg IT0gdDIpCiAJcmV0dXJuIDA7CiAKKyAgICAgIC8qIFRoZSBkZWNscyBkb250 IG1hdGNoIGlmIHRoZXkgY29ycmVzcG9uZCB0byB0d28gZGlmZmVyZW50IHZl cnNpb25zCisJIG9mIHRoZSBzYW1lIGZ1bmN0aW9uLiAgKi8KKyAgICAgIGlm IChjb21wcGFybXMgKHAxLCBwMikKKwkgICYmIHNhbWVfdHlwZV9wIChUUkVF X1RZUEUgKGYxKSwgVFJFRV9UWVBFIChmMikpIAorCSAgJiYgaGFzX2RpZmZl cmVudF92ZXJzaW9uX2F0dHJpYnV0ZXMgKG5ld2RlY2wsIG9sZGRlY2wpKQor CXsKKwkgIC8qIE9uZSBvZiB0aGUgZGVjbHMgY291bGQgYmUgdGhlIGRlZmF1 bHQgd2l0aG91dCB0aGUgInRhcmdldCIKKwkgICAgIGF0dHJpYnV0ZS4gU2V0 IGl0IHRvIGJlIGEgdmVyc2lvbmVkIGZ1bmN0aW9uIGhlcmUuICAqLworCSAg bWFya19mdW5jdGlvbl9hc192ZXJzaW9uIChuZXdkZWNsKTsKKwkgIG1hcmtf ZnVuY3Rpb25fYXNfdmVyc2lvbiAob2xkZGVjbCk7CisJICAvKiBBY2N1bXVs YXRlIGFsbCB0aGUgdmVyc2lvbnMgb2YgYSBmdW5jdGlvbi4gICovCisJICBn cm91cF9mdW5jdGlvbl92ZXJzaW9ucyAob2xkZGVjbCwgbmV3ZGVjbCk7CisJ ICByZXR1cm4gMDsKKwl9CisKICAgICAgIGlmIChDUF9ERUNMX0NPTlRFWFQg KG5ld2RlY2wpICE9IENQX0RFQ0xfQ09OVEVYVCAob2xkZGVjbCkKIAkgICYm ICEgKERFQ0xfRVhURVJOX0NfUCAobmV3ZGVjbCkKIAkJJiYgREVDTF9FWFRF Uk5fQ19QIChvbGRkZWNsKSkpCkBAIC0xNDkwLDcgKzE1MDYsMTEgQEAgZHVw bGljYXRlX2RlY2xzICh0cmVlIG5ld2RlY2wsIHRyZWUgb2xkZGVjbCwgYm9v bAogCSAgICAgIGVycm9yICgicHJldmlvdXMgZGVjbGFyYXRpb24gJXErI0Qg aGVyZSIsIG9sZGRlY2wpOwogCSAgICAgIHJldHVybiBOVUxMX1RSRUU7CiAJ ICAgIH0KLQkgIGVsc2UgaWYgKGNvbXBwYXJtcyAoVFlQRV9BUkdfVFlQRVMg KFRSRUVfVFlQRSAobmV3ZGVjbCkpLAorCSAgLyogRm9yIGZ1bmN0aW9uIHZl cnNpb25zLCBwYXJhbXMgYW5kIHR5cGVzIG1hdGNoLCBidXQgdGhleQorCSAg ICAgYXJlIG5vdCBhbWJpZ3VvdXMuICAqLworCSAgZWxzZSBpZiAoKCFERUNM X0ZVTkNUSU9OX1ZFUlNJT05FRCAobmV3ZGVjbCkKKwkJICAgICYmICFERUNM X0ZVTkNUSU9OX1ZFUlNJT05FRCAob2xkZGVjbCkpCisJCSAgICYmIGNvbXBw YXJtcyAoVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAobmV3ZGVjbCkpLAog CQkJICAgICAgVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAob2xkZGVjbCkp KSkKIAkgICAgewogCSAgICAgIGVycm9yICgibmV3IGRlY2xhcmF0aW9uICVx I0QiLCBuZXdkZWNsKTsKQEAgLTIyNjIsNiArMjI4MiwxNiBAQCBkdXBsaWNh dGVfZGVjbHMgKHRyZWUgbmV3ZGVjbCwgdHJlZSBvbGRkZWNsLCBib29sCiAg IGVsc2UgaWYgKERFQ0xfUFJFU0VSVkVfUCAobmV3ZGVjbCkpCiAgICAgREVD TF9QUkVTRVJWRV9QIChvbGRkZWNsKSA9IDE7CiAKKyAgLyogSWYgdGhlIG9s ZGRlY2wgaXMgYSB2ZXJzaW9uLCBzbyBpcyB0aGUgbmV3ZGVjbC4gICovCisg IGlmIChUUkVFX0NPREUgKG5ld2RlY2wpID09IEZVTkNUSU9OX0RFQ0wKKyAg ICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChvbGRkZWNsKSkKKyAg ICB7CisgICAgICBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAobmV3ZGVjbCkg PSAxOworICAgICAgLyogUmVjb3JkIHRoYXQgbmV3ZGVjbCBpcyBub3QgYSB2 YWxpZCB2ZXJzaW9uIGFuZCBoYXMKKwkgYmVlbiBkZWxldGVkLiAgKi8KKyAg ICAgIG1hcmtfZGVsZXRlX2RlY2xfdmVyc2lvbiAobmV3ZGVjbCk7CisgICAg fQorCiAgIGlmIChUUkVFX0NPREUgKG5ld2RlY2wpID09IEZVTkNUSU9OX0RF Q0wpCiAgICAgewogICAgICAgaW50IGZ1bmN0aW9uX3NpemU7CkBAIC0zODEw LDYgKzM4NDAsNyBAQCBjcF9tYWtlX2ZuYW1lX2RlY2wgKGxvY2F0aW9uX3Qg bG9jLCB0cmVlIGlkLCBpbnQgdAogCQkJICAgID8gTlVMTCA6IGZuYW1lX2Fz X3N0cmluZyAodHlwZV9kZXApKTsKICAgdHJlZSB0eXBlOwogICB0cmVlIGlu aXQgPSBjcF9mbmFtZV9pbml0IChuYW1lLCAmdHlwZSk7CisKICAgdHJlZSBk ZWNsID0gYnVpbGRfZGVjbCAobG9jLCBWQVJfREVDTCwgaWQsIHR5cGUpOwog CiAgIGlmIChuYW1lKQpAQCAtMTQwMzYsNyArMTQwNjcsMTEgQEAgY3h4X2Nv bWRhdF9ncm91cCAodHJlZSBkZWNsKQogCSAgZWxzZQogCSAgICBicmVhazsK IAl9Ci0gICAgICBuYW1lID0gREVDTF9BU1NFTUJMRVJfTkFNRSAoZGVjbCk7 CisgICAgICBpZiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9ERUNM CisJICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZGVjbCkpCisJbmFt ZSA9IERFQ0xfTkFNRSAoZGVjbCk7CisgICAgICBlbHNlCisgICAgICAgIG5h bWUgPSBERUNMX0FTU0VNQkxFUl9OQU1FIChkZWNsKTsKICAgICB9CiAKICAg cmV0dXJuIG5hbWU7CkluZGV4OiBnY2MvY3Avc2VtYW50aWNzLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NwL3NlbWFudGljcy5jCShyZXZp c2lvbiAxODczNDYpCisrKyBnY2MvY3Avc2VtYW50aWNzLmMJKHdvcmtpbmcg Y29weSkKQEAgLTM3ODMsOCArMzc4MywxMSBAQCBleHBhbmRfb3JfZGVmZXJf Zm5fMSAodHJlZSBmbikKICAgICAgIC8qIElmIHRoZSB1c2VyIHdhbnRzIHVz IHRvIGtlZXAgYWxsIGlubGluZSBmdW5jdGlvbnMsIHRoZW4gbWFyawogCSB0 aGlzIGZ1bmN0aW9uIGFzIG5lZWRlZCBzbyB0aGF0IGZpbmlzaF9maWxlIHdp bGwgbWFrZSBzdXJlIHRvCiAJIG91dHB1dCBpdCBsYXRlci4gIFNpbWlsYXJs eSwgYWxsIGRsbGV4cG9ydCdkIGZ1bmN0aW9ucyBtdXN0Ci0JIGJlIGVtaXR0 ZWQ7IHRoZXJlIG1heSBiZSBjYWxsZXJzIGluIG90aGVyIERMTHMuICAqLwot ICAgICAgaWYgKChmbGFnX2tlZXBfaW5saW5lX2Z1bmN0aW9ucworCSBiZSBl bWl0dGVkOyB0aGVyZSBtYXkgYmUgY2FsbGVycyBpbiBvdGhlciBETExzLgor CSBBbHNvLCBtYXJrIHRoaXMgZnVuY3Rpb24gYXMgbmVlZGVkIGlmIGl0IGlz IG1hcmtlZCBpbmxpbmUgYnV0CisJIGlzIGEgbXVsdGktdmVyc2lvbmVkIGZ1 bmN0aW9uLiAgKi8KKyAgICAgIGlmICgoKGZsYWdfa2VlcF9pbmxpbmVfZnVu Y3Rpb25zCisJICAgIHx8IERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikp CiAJICAgJiYgREVDTF9ERUNMQVJFRF9JTkxJTkVfUCAoZm4pCiAJICAgJiYg IURFQ0xfUkVBTExZX0VYVEVSTiAoZm4pKQogCSAgfHwgKGZsYWdfa2VlcF9p bmxpbmVfZGxsZXhwb3J0CkluZGV4OiBnY2MvY3AvZGVjbDIuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvY3AvZGVjbDIuYwkocmV2aXNpb24g MTg3MzQ2KQorKysgZ2NjL2NwL2RlY2wyLmMJKHdvcmtpbmcgY29weSkKQEAg LTUzLDYgKzUzLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBD T1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJzcGxheS10cmVlLmgi CiAjaW5jbHVkZSAibGFuZ2hvb2tzLmgiCiAjaW5jbHVkZSAiYy1mYW1pbHkv Yy1hZGEtc3BlYy5oIgorI2luY2x1ZGUgIm11bHRpdmVyc2lvbi5oIgogCiBl eHRlcm4gY3BwX3JlYWRlciAqcGFyc2VfaW47CiAKQEAgLTY3Nyw5ICs2Nzgs MTMgQEAgY2hlY2tfY2xhc3NmbiAodHJlZSBjdHlwZSwgdHJlZSBmdW5jdGlv biwgdHJlZSB0ZW0KIAkgIGlmIChpc190ZW1wbGF0ZSAhPSAoVFJFRV9DT0RF IChmbmRlY2wpID09IFRFTVBMQVRFX0RFQ0wpKQogCSAgICBjb250aW51ZTsK IAorCSAgLyogV2hpbGUgZmluZGluZyBhIG1hdGNoLCBzYW1lIHR5cGVzIGFu ZCBwYXJhbXMgYXJlIG5vdCBlbm91Z2gKKwkgICAgIGlmIHRoZSBmdW5jdGlv biBpcyB2ZXJzaW9uZWQuICBBbHNvIGNoZWNrIHZlcnNpb24gKCJ0YXJnZXQi KQorCSAgICAgYXR0cmlidXRlcy4gICovCiAJICBpZiAoc2FtZV90eXBlX3Ag KFRSRUVfVFlQRSAoVFJFRV9UWVBFIChmdW5jdGlvbikpLAogCQkJICAgVFJF RV9UWVBFIChUUkVFX1RZUEUgKGZuZGVjbCkpKQogCSAgICAgICYmIGNvbXBw YXJtcyAocDEsIHAyKQorCSAgICAgICYmICFoYXNfZGlmZmVyZW50X3ZlcnNp b25fYXR0cmlidXRlcyAoZnVuY3Rpb24sIGZuZGVjbCkKIAkgICAgICAmJiAo IWlzX3RlbXBsYXRlCiAJCSAgfHwgY29tcF90ZW1wbGF0ZV9wYXJtcyAodGVt cGxhdGVfcGFybXMsCiAJCQkJCSAgREVDTF9URU1QTEFURV9QQVJNUyAoZm5k ZWNsKSkpCkluZGV4OiBnY2MvY3AvY2FsbC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy9jcC9jYWxsLmMJKHJldmlzaW9uIDE4NzM0NikKKysr IGdjYy9jcC9jYWxsLmMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg QEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElm IG5vdCBzZWUKICNpbmNsdWRlICJsYW5naG9va3MuaCIKICNpbmNsdWRlICJj LWZhbWlseS9jLW9iamMuaCIKICNpbmNsdWRlICJ0aW1ldmFyLmgiCisjaW5j bHVkZSAibXVsdGl2ZXJzaW9uLmgiCiAKIC8qIFRoZSB2YXJpb3VzIGtpbmRz IG9mIGNvbnZlcnNpb24uICAqLwogCkBAIC0zOTAzLDYgKzM5MDQsMTYgQEAg YnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwgKHRyZWUgZm4sIFZFQyh0cmVlLGdj KSAqKmEKICAgICB7CiAgICAgICBpZiAoY29tcGxhaW4gJiB0Zl9lcnJvcikK IAl7CisJICAvKiBJZiB0aGUgY2FsbCBpcyB0byBhIG11bHRpdmVyc2lvbmVk IGZ1bmN0aW9uIHdpdGhvdXQKKwkgICAgIGEgZGVmYXVsdCB2ZXJzaW9uLCBv dmVybG9hZCByZXNvbHV0aW9uIHdpbGwgZmFpbC4gICovCisJICBpZiAoY2Fu ZGlkYXRlcworCSAgICAgICYmIFRSRUVfQ09ERSAoY2FuZGlkYXRlcy0+Zm4p ID09IEZVTkNUSU9OX0RFQ0wKKwkgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZF UlNJT05FRCAoY2FuZGlkYXRlcy0+Zm4pKQorCSAgICBlcnJvcl9hdCAobG9j YXRpb25fb2YgKERFQ0xfTkFNRSAoT1ZMX0NVUlJFTlQgKGZuKSkpLAorCQkg ICAgICAiQ2FsbCB0byBtdWx0aXZlcnNpb25lZCBmdW5jdGlvbiAlPCVEKCVB KSU+IHdpdGgiCisJCSAgICAgICIgbm8gZGVmYXVsdCB2ZXJzaW9uIiwgREVD TF9OQU1FIChPVkxfQ1VSUkVOVCAoZm4pKSwKKwkJICAgICAgYnVpbGRfdHJl ZV9saXN0X3ZlYyAoKmFyZ3MpKTsKKwogCSAgaWYgKCFhbnlfdmlhYmxlX3Ag JiYgY2FuZGlkYXRlcyAmJiAhIGNhbmRpZGF0ZXMtPm5leHQKIAkgICAgICAm JiAoVFJFRV9DT0RFIChjYW5kaWRhdGVzLT5mbikgPT0gRlVOQ1RJT05fREVD TCkpCiAJICAgIHJldHVybiBjcF9idWlsZF9mdW5jdGlvbl9jYWxsX3ZlYyAo Y2FuZGlkYXRlcy0+Zm4sIGFyZ3MsIGNvbXBsYWluKTsKQEAgLTY4MjQsNiAr NjgzNSwxOSBAQCBidWlsZF9vdmVyX2NhbGwgKHN0cnVjdCB6X2NhbmRpZGF0 ZSAqY2FuZCwgaW50IGZsYQogICBpZiAoIWFscmVhZHlfdXNlZCkKICAgICBt YXJrX3VzZWQgKGZuKTsKIAorICAvKiBGb3IgYSBjYWxsIHRvIGEgbXVsdGkt dmVyc2lvbmVkIGZ1bmN0aW9uLCB0aGUgY2FsbCBzaG91bGQgYWN0dWFsbHkg YmUgdG8KKyAgICAgdGhlIGRpc3BhdGNoZXIuICAqLworICBpZiAoREVDTF9G VU5DVElPTl9WRVJTSU9ORUQgKGZuKQorICAgICAgJiYgaXNfZGVmYXVsdF9m dW5jdGlvbiAoZm4pKQorICAgIHsKKyAgICAgIHRyZWUgaWZ1bmNfZGVjbDsK KyAgICAgIGlmdW5jX2RlY2wgPSBnZXRfaWZ1bmNfZm9yX3ZlcnNpb24gKGZu KTsKKyAgICAgIHJldHJvZml0X2xhbmdfZGVjbCAoaWZ1bmNfZGVjbCk7Cisg ICAgICBnY2NfYXNzZXJ0IChpZnVuY19kZWNsICE9IE5VTEwpOworICAgICAg cmV0dXJuIGJ1aWxkX2NhbGxfZXhwcl9sb2NfYXJyYXkgKFVOS05PV05fTE9D QVRJT04sIGlmdW5jX2RlY2wsCisJCQkJCW5hcmdzLCBhcmdhcnJheSk7Cisg ICAgfQorCiAgIGlmIChERUNMX1ZJTkRFWCAoZm4pICYmIChmbGFncyAmIExP T0tVUF9OT05WSVJUVUFMKSA9PSAwKQogICAgIHsKICAgICAgIHRyZWUgdDsK QEAgLTgwODEsNiArODEwNSw2MCBAQCBqb3VzdCAoc3RydWN0IHpfY2FuZGlk YXRlICpjYW5kMSwgc3RydWN0IHpfY2FuZGlkYQogICBzaXplX3QgaTsKICAg c2l6ZV90IGxlbjsKIAorICAvKiBGb3IgQ2FuZGlkYXRlcyBvZiBhIG11bHRp LXZlcnNpb25lZCBmdW5jdGlvbiwgZmlyc3QgY2hlY2sgaWYgdGhlCisgICAg IHRhcmdldCBmbGFncyBvZiB0aGUgY2FsbGVyIG1hdGNoIGFueSBvZiB0aGUg Y2FuZGlkYXRlcy4gSWYgc28sCisgICAgIHRoZSBjYWxsZXIgY2FuIGRpcmVj dGx5IGNhbGwgdGhpcyBjYW5kaWRhdGUgb3RoZXJ3aXNlIHRoZSBvbmUgbWFy a2VkCisgICAgIGRlZmF1bHQgd2lucy4gIFRoaXMgaXMgYmVjYXVzZSB0aGUg ZGVmYXVsdCBkZWNsIGlzIHVzZWQgYXMga2V5IHRvCisgICAgIGFnZ3JlZ2F0 ZSBhbGwgdGhlIG90aGVyIHZlcnNpb25zIHByb3ZpZGVkIGZvciBpdCBpbiBt dWx0aXZlcnNpb24uYy4KKyAgICAgV2hlbiBnZW5lcmF0aW5nIHRoZSBhY3R1 YWwgY2FsbCwgdGhlIGFwcHJvcHJpYXRlIGRpc3BhdGNoZXIgaXMgY3JlYXRl ZAorICAgICB0byBjYWxsIHRoZSByaWdodCBmdW5jdGlvbiB2ZXJzaW9uIGF0 IHJ1bi10aW1lLiAgKi8KKworICBpZiAoKFRSRUVfQ09ERSAoY2FuZDEtPmZu KSA9PSBGVU5DVElPTl9ERUNMCisgICAgICAgJiYgREVDTF9GVU5DVElPTl9W RVJTSU9ORUQgKGNhbmQxLT5mbikpCisgICAgICB8fChUUkVFX0NPREUgKGNh bmQyLT5mbikgPT0gRlVOQ1RJT05fREVDTAorCSAmJiBERUNMX0ZVTkNUSU9O X1ZFUlNJT05FRCAoY2FuZDItPmZuKSkpCisgICAgeworICAgICAgLyogQm90 aCBmdW5jdGlvbnMgbXVzdCBiZSBtYXJrZWQgdmVyc2lvbmVkLiAgKi8KKyAg ICAgIGdjY19hc3NlcnQgKERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChjYW5k MS0+Zm4pCisJCSAgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGNhbmQy LT5mbikpOworCisgICAgICAvKiBUcnkgdG8gc2VlIGlmIGEgZGlyZWN0IGNh bGwgY2FuIGJlIG1hZGUgdG8gYSB2ZXJzaW9uLiAgVGhpcyBpcworCSBwb3Nz aWJsZSBpZiB0aGUgY2FsbGVyIGFuZCBjYWxsZWUgaGF2ZSB0aGUgc2FtZSB0 YXJnZXQgZmxhZ3MuCisJIElmIGNhbmQtPmZuIGlzIG1hcmtlZCB3aXRoIHRh cmdldCBhdHRyaWJ1dGVzLCAgY2hlY2sgaWYgdGhlCisJIHRhcmdldCBhcHBy b3ZlcyBpbmxpbmluZyB0aGlzIGludG8gdGhlIGNhbGxlci4gIElmIHNvLCB0 aGlzIGlzCisJIHRoZSB2ZXJzaW9uIHdlIHdhbnQuICAqLworCisgICAgICBp ZiAoaXNfdGFyZ2V0X2F0dHJpYnV0ZV9zZXQgKGNhbmQxLT5mbikKKwkgICYm IHRhcmdldG0udGFyZ2V0X29wdGlvbi5jYW5faW5saW5lX3AgKGN1cnJlbnRf ZnVuY3Rpb25fZGVjbCwKKwkJCQkJCSBjYW5kMS0+Zm4pKQorCXJldHVybiAx OworCisgICAgICBpZiAoaXNfdGFyZ2V0X2F0dHJpYnV0ZV9zZXQgKGNhbmQy LT5mbikKKwkgICYmIHRhcmdldG0udGFyZ2V0X29wdGlvbi5jYW5faW5saW5l X3AgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCwKKwkJCQkJCSBjYW5kMi0+Zm4p KQorCXJldHVybiAtMTsKKworICAgICAgLyogQSBkaXJlY3QgY2FsbCB0byBh IHZlcnNpb24gaXMgbm90IHBvc3NpYmxlLCBzbyBmaW5kIHRoZSBkZWZhdWx0 CisJIGZ1bmN0aW9uIGFuZCByZXR1cm4gaXQuICBUaGlzIHdpbGwgbGF0ZXIg YmUgY29udmVydGVkIHRvIGRpc3BhdGNoCisJIHRoZSByaWdodCB2ZXJzaW9u IGF0IHJ1biB0aW1lLiAgKi8KKworICAgICAgaWYgKGlzX2RlZmF1bHRfZnVu Y3Rpb24gKGNhbmQxLT5mbikpCisJeworICAgICAgICAgIG1hcmtfdXNlZCAo Y2FuZDItPmZuKTsKKwkgIHJldHVybiAxOworCX0KKworICAgICAgaWYgKGlz X2RlZmF1bHRfZnVuY3Rpb24gKGNhbmQyLT5mbikpCisJeworICAgICAgICAg IG1hcmtfdXNlZCAoY2FuZDEtPmZuKTsKKwkgIHJldHVybiAtMTsKKwl9CisK KyAgICAgIC8qIElmIGEgZGVmYXVsdCBmdW5jdGlvbiBpcyBhYnNlbnQsIHRo aXMgd2lsbCBuZXZlciBnZXQgcmVzb2x2ZWQgbGVhZGluZworCSB0byBhbiBh bWJpZ3VvdXMgY2FsbCBlcnJvci4gICovCisgICAgICByZXR1cm4gMDsKKyAg ICB9CisKICAgLyogQ2FuZGlkYXRlcyB0aGF0IGludm9sdmUgYmFkIGNvbnZl cnNpb25zIGFyZSBhbHdheXMgd29yc2UgdGhhbiB0aG9zZQogICAgICB0aGF0 IGRvbid0LiAgKi8KICAgaWYgKGNhbmQxLT52aWFibGUgPiBjYW5kMi0+dmlh YmxlKQpJbmRleDogZ2NjL3RpbWV2YXIuZGVmCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy90aW1ldmFyLmRlZgkocmV2aXNpb24gMTg3MzQ2KQor KysgZ2NjL3RpbWV2YXIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiAr MjUzLDcgQEAgREVGVElNRVZBUiAoVFZfVFJFRV9JRkNPTUJJTkUgICAgICAg ICwgInRyZWUgaWYtY28KIERFRlRJTUVWQVIgKFRWX1RSRUVfVU5JTklUICAg ICAgICAgICAsICJ1bmluaXQgdmFyIGFuYWx5c2lzIikKIERFRlRJTUVWQVIg KFRWX1BMVUdJTl9JTklUICAgICAgICAgICAsICJwbHVnaW4gaW5pdGlhbGl6 YXRpb24iKQogREVGVElNRVZBUiAoVFZfUExVR0lOX1JVTiAgICAgICAgICAg ICwgInBsdWdpbiBleGVjdXRpb24iKQorREVGVElNRVZBUiAoVFZfTVVMVElW RVJTSU9OX0RJU1BBVENIICwgIm11bHRpdmVyc2lvbiBkaXNwYXRjaCIpCiAK IC8qIEV2ZXJ5dGhpbmcgZWxzZSBpbiByZXN0X29mX2NvbXBpbGF0aW9uIG5v dCBpbmNsdWRlZCBhYm92ZS4gICovCiBERUZUSU1FVkFSIChUVl9FQVJMWV9M T0NBTAkgICAgICwgImVhcmx5IGxvY2FsIHBhc3NlcyIpCkluZGV4OiBnY2Mv TWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL01h a2VmaWxlLmluCShyZXZpc2lvbiAxODczNDYpCisrKyBnY2MvTWFrZWZpbGUu aW4JKHdvcmtpbmcgY29weSkKQEAgLTEyOTcsNiArMTI5Nyw3IEBAIE9CSlMg PSBcCiAJbWNmLm8gXAogCW1vZGUtc3dpdGNoaW5nLm8gXAogCW1vZHVsby1z Y2hlZC5vIFwKKwltdWx0aXZlcnNpb24ubyBcCiAJb21lZ2EubyBcCiAJb21w LWxvdy5vIFwKIAlvcHRhYnMubyBcCkBAIC0zMDQyLDYgKzMwNDMsMTEgQEAg cmVlLm8gOiByZWUuYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlw ZXMuaAogICAgJChERl9IKSAkKFRJTUVWQVJfSCkgdHJlZS1wYXNzLmggJChS RUNPR19IKSAkKEVYUFJfSCkgXAogICAgJChSRUdTX0gpICQoVFJFRV9IKSAk KFRNX1BfSCkgaW5zbi1jb25maWcuaCAkKElOU05fQVRUUl9IKSAkKERJQUdO T1NUSUNfQ09SRV9IKSBcCiAgICAkKFRBUkdFVF9IKSAkKE9QVEFCU19IKSBp bnNuLWNvZGVzLmggcnRsaG9va3MtZGVmLmggJChQQVJBTVNfSCkgJChDR1JB UEhfSCkKK211bHRpdmVyc2lvbi5vIDogbXVsdGl2ZXJzaW9uLmMgJChDT05G SUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmggJChUTV9IKSBcCisgICAk KFRSRUVfSCkgbGFuZ2hvb2tzLmggJChUUkVFX0lOTElORV9IKSAkKEZMQUdT X0gpICQoQ0dSQVBIX0gpIGludGwuaCBcCisgICAkKERJQUdOT1NUSUNfSCkg JChGSUJIRUFQX0gpICQoUEFSQU1TX0gpICQoVElNRVZBUl9IKSB0cmVlLXBh c3MuaCBcCisgICAkKEhBU0hUQUJfSCkgJChDT1ZFUkFHRV9IKSAkKEdHQ19I KSAkKFRSRUVfRkxPV19IKSAkKFJUTF9IKSAkKElQQV9QUk9QX0gpIFwKKyAg ICQoQkFTSUNfQkxPQ0tfSCkgJChUT1BMRVZfSCkgJChUUkVFX0RVTVBfSCkg aXBhLWlubGluZS5oCiBjcHJvcC5vIDogY3Byb3AuYyAkKENPTkZJR19IKSAk KFNZU1RFTV9IKSBjb3JldHlwZXMuaCAkKFRNX0gpICQoUlRMX0gpIFwKICAg ICQoUkVHU19IKSBoYXJkLXJlZy1zZXQuaCAkKEZMQUdTX0gpIGluc24tY29u ZmlnLmggJChHR0NfSCkgXAogICAgJChSRUNPR19IKSAkKEVYUFJfSCkgJChC QVNJQ19CTE9DS19IKSAkKEZVTkNUSU9OX0gpIG91dHB1dC5oIHRvcGxldi5o ICQoRElBR05PU1RJQ19DT1JFX0gpIFwKSW5kZXg6IGdjYy9wYXNzZXMuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvcGFzc2VzLmMJKHJldmlz aW9uIDE4NzM0NikKKysrIGdjYy9wYXNzZXMuYwkod29ya2luZyBjb3B5KQpA QCAtMTI5Myw2ICsxMjkzLDcgQEAgaW5pdF9vcHRpbWl6YXRpb25fcGFzc2Vz ICh2b2lkKQogICBORVhUX1BBU1MgKHBhc3NfYnVpbGRfY2ZnKTsKICAgTkVY VF9QQVNTIChwYXNzX3dhcm5fZnVuY3Rpb25fcmV0dXJuKTsKICAgTkVYVF9Q QVNTIChwYXNzX2J1aWxkX2NncmFwaF9lZGdlcyk7CisgIE5FWFRfUEFTUyAo cGFzc19kaXNwYXRjaF92ZXJzaW9ucyk7CiAgICpwID0gTlVMTDsKIAogICAv KiBJbnRlcnByb2NlZHVyYWwgb3B0aW1pemF0aW9uIHBhc3Nlcy4gICovCklu ZGV4OiBnY2MvY3AvbWFuZ2xlLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL2NwL21hbmdsZS5jCShyZXZpc2lvbiAxODczNDYpCisrKyBnY2Mv Y3AvbWFuZ2xlLmMJKHdvcmtpbmcgY29weSkKQEAgLTEyNDUsNyArMTI0NSwx MiBAQCB3cml0ZV91bnF1YWxpZmllZF9uYW1lIChjb25zdCB0cmVlIGRlY2wp CiAgICAgewogICAgICAgTUFOR0xFX1RSQUNFX1RSRUUgKCJsb2NhbC1zb3Vy Y2UtbmFtZSIsIGRlY2wpOwogICAgICAgd3JpdGVfY2hhciAoJ0wnKTsKLSAg ICAgIHdyaXRlX3NvdXJjZV9uYW1lIChERUNMX05BTUUgKGRlY2wpKTsKKyAg ICAgIGlmIChUUkVFX0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wKKwkg ICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsKQorCSAgJiYgREVD TF9BU1NFTUJMRVJfTkFNRV9TRVRfUCAoZGVjbCkpCisJd3JpdGVfc291cmNl X25hbWUgKERFQ0xfQVNTRU1CTEVSX05BTUUgKGRlY2wpKTsKKyAgICAgIGVs c2UKKwl3cml0ZV9zb3VyY2VfbmFtZSAoREVDTF9OQU1FIChkZWNsKSk7CiAg ICAgICAvKiBUaGUgZGVmYXVsdCBkaXNjcmltaW5hdG9yIGlzIDEsIGFuZCB0 aGF0J3MgYWxsIHdlIGV2ZXIgdXNlLAogCSBzbyB0aGVyZSdzIG5vIGNvZGUg dG8gb3V0cHV0IG9uZSBoZXJlLiAgKi8KICAgICB9CkBAIC0xMjYwLDcgKzEy NjUsMTQgQEAgd3JpdGVfdW5xdWFsaWZpZWRfbmFtZSAoY29uc3QgdHJlZSBk ZWNsKQogICAgICAgICAgICAgICAgJiYgTEFNQkRBX1RZUEVfUCAodHlwZSkp CiAgICAgICAgIHdyaXRlX2Nsb3N1cmVfdHlwZV9uYW1lICh0eXBlKTsKICAg ICAgIGVsc2UKLSAgICAgICAgd3JpdGVfc291cmNlX25hbWUgKERFQ0xfTkFN RSAoZGVjbCkpOworCXsKKwkgIGlmIChUUkVFX0NPREUgKGRlY2wpID09IEZV TkNUSU9OX0RFQ0wKKwkgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05F RCAoZGVjbCkKKwkgICAgICAmJiBERUNMX0FTU0VNQkxFUl9OQU1FX1NFVF9Q IChkZWNsKSkKKwkgICAgd3JpdGVfc291cmNlX25hbWUgKERFQ0xfQVNTRU1C TEVSX05BTUUgKGRlY2wpKTsKKwkgIGVsc2UKKwkgICAgd3JpdGVfc291cmNl X25hbWUgKERFQ0xfTkFNRSAoZGVjbCkpOworCX0KICAgICB9CiB9CiAKSW5k ZXg6IGdjYy9jb25maWcvaTM4Ni9pMzg2LmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwkocmV2aXNpb24gMTg3 MzQ2KQorKysgZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwkod29ya2luZyBjb3B5 KQpAQCAtMjc3MTUsNiArMjc3MTUsMzI2IEBAIGl4ODZfaW5pdF9tbXhfc3Nl X2J1aWx0aW5zICh2b2lkKQogICAgIH0KIH0KIAorCisvKiBUaGlzIGFkZHMg YSBjb25kaXRpb24gdG8gdGhlIGJhc2ljX2Jsb2NrIE5FV19CQiBpbiBmdW5j dGlvbiBGVU5DVElPTl9ERUNMCisgICB0byByZXR1cm4gYSBwb2ludGVyIHRv IFZFUlNJT05fREVDTCBpZiB0aGUgb3V0Y29tZSBvZiB0aGUgZXhwcmVzc2lv bgorICAgZm9ybWVkIGJ5IFBSRURJQ0FURV9DSEFJTiBpcyB0cnVlLiAgVGhp cyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBkdXJpbmcKKyAgIHZlcnNpb24g ZGlzcGF0Y2ggdG8gZGVjaWRlIHdoaWNoIGZ1bmN0aW9uIHZlcnNpb24gdG8g ZXhlY3V0ZS4gIEl0IHJldHVybnMKKyAgIHRoZSBiYXNpYyBibG9jayBhdCB0 aGUgZW5kIHRvIHdoaWNoIG1vcmUgY29uZGl0aW9ucyBjYW4gYmUgYWRkZWQu ICAqLworCitzdGF0aWMgYmFzaWNfYmxvY2sKK2FkZF9jb25kaXRpb25fdG9f YmIgKHRyZWUgZnVuY3Rpb25fZGVjbCwgdHJlZSB2ZXJzaW9uX2RlY2wsCisJ CSAgICAgdHJlZSBwcmVkaWNhdGVfY2hhaW4sIGJhc2ljX2Jsb2NrIG5ld19i YikKK3sKKyAgZ2ltcGxlIHJldHVybl9zdG10OworICB0cmVlIGNvbnZlcnRf ZXhwciwgcmVzdWx0X3ZhcjsKKyAgZ2ltcGxlIGNvbnZlcnRfc3RtdDsKKyAg Z2ltcGxlIGNhbGxfY29uZF9zdG10OworICBnaW1wbGUgaWZfZWxzZV9zdG10 OworCisgIGJhc2ljX2Jsb2NrIGJiMSwgYmIyLCBiYjM7CisgIGVkZ2UgZTEy LCBlMjM7CisKKyAgdHJlZSBjb25kX3ZhciwgYW5kX2V4cHJfdmFyID0gTlVM TF9UUkVFOworICBnaW1wbGVfc2VxIGdzZXE7CisKKyAgdHJlZSBvbGRfY3Vy cmVudF9mdW5jdGlvbl9kZWNsOworICB0cmVlIHByZWRpY2F0ZV9kZWNsLCBw cmVkaWNhdGVfYXJnOworCisgIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2wg PSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgIHB1c2hfY2Z1biAoREVDTF9T VFJVQ1RfRlVOQ1RJT04gKGZ1bmN0aW9uX2RlY2wpKTsKKyAgY3VycmVudF9m dW5jdGlvbl9kZWNsID0gZnVuY3Rpb25fZGVjbDsKKworICBnY2NfYXNzZXJ0 IChuZXdfYmIgIT0gTlVMTCk7CisgIGdzZXEgPSBiYl9zZXEgKG5ld19iYik7 CisKKworICBjb252ZXJ0X2V4cHIgPSBidWlsZDEgKENPTlZFUlRfRVhQUiwg cHRyX3R5cGVfbm9kZSwKKwkgICAgIAkJIGJ1aWxkX2ZvbGRfYWRkcl9leHBy ICh2ZXJzaW9uX2RlY2wpKTsKKyAgcmVzdWx0X3ZhciA9IGNyZWF0ZV90bXBf dmFyIChwdHJfdHlwZV9ub2RlLCBOVUxMKTsKKyAgY29udmVydF9zdG10ID0g Z2ltcGxlX2J1aWxkX2Fzc2lnbiAocmVzdWx0X3ZhciwgY29udmVydF9leHBy KTsgCisgIHJldHVybl9zdG10ID0gZ2ltcGxlX2J1aWxkX3JldHVybiAocmVz dWx0X3Zhcik7CisKKyAgaWYgKHByZWRpY2F0ZV9jaGFpbiA9PSBOVUxMX1RS RUUpCisgICAgeworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEs IGNvbnZlcnRfc3RtdCk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10ICgm Z3NlcSwgcmV0dXJuX3N0bXQpOworICAgICAgc2V0X2JiX3NlcSAobmV3X2Ji LCBnc2VxKTsKKyAgICAgIGdpbXBsZV9zZXRfYmIgKGNvbnZlcnRfc3RtdCwg bmV3X2JiKTsKKyAgICAgIGdpbXBsZV9zZXRfYmIgKHJldHVybl9zdG10LCBu ZXdfYmIpOworICAgICAgcG9wX2NmdW4gKCk7CisgICAgICBjdXJyZW50X2Z1 bmN0aW9uX2RlY2wgPSBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworICAg ICAgcmV0dXJuIG5ld19iYjsKKyAgICB9CisKKyAgd2hpbGUgKHByZWRpY2F0 ZV9jaGFpbiAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNvbmRfdmFyID0gY3Jl YXRlX3RtcF92YXIgKGludGVnZXJfdHlwZV9ub2RlLCBOVUxMKTsKKyAgICAg IHByZWRpY2F0ZV9kZWNsID0gVFJFRV9QVVJQT1NFIChwcmVkaWNhdGVfY2hh aW4pOworICAgICAgcHJlZGljYXRlX2FyZyA9IFRSRUVfVkFMVUUgKHByZWRp Y2F0ZV9jaGFpbik7CisgICAgICBjYWxsX2NvbmRfc3RtdCA9IGdpbXBsZV9i dWlsZF9jYWxsIChwcmVkaWNhdGVfZGVjbCwgMSwgcHJlZGljYXRlX2FyZyk7 CisgICAgICBnaW1wbGVfY2FsbF9zZXRfbGhzIChjYWxsX2NvbmRfc3RtdCwg Y29uZF92YXIpOworCisgICAgICBnaW1wbGVfc2V0X2Jsb2NrIChjYWxsX2Nv bmRfc3RtdCwgREVDTF9JTklUSUFMIChmdW5jdGlvbl9kZWNsKSk7CisgICAg ICBnaW1wbGVfc2V0X2JiIChjYWxsX2NvbmRfc3RtdCwgbmV3X2JiKTsKKyAg ICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCBjYWxsX2NvbmRfc3Rt dCk7CisKKyAgICAgIHByZWRpY2F0ZV9jaGFpbiA9IFRSRUVfQ0hBSU4gKHBy ZWRpY2F0ZV9jaGFpbik7CisgICAgICAKKyAgICAgIGlmIChhbmRfZXhwcl92 YXIgPT0gTlVMTCkKKyAgICAgICAgYW5kX2V4cHJfdmFyID0gY29uZF92YXI7 CisgICAgICBlbHNlCisJeworCSAgZ2ltcGxlIGFzc2lnbl9zdG10OworCSAg LyogVXNlIE1JTl9FWFBSIHRvIGNoZWNrIGlmIGFueSBpbnRlZ2VyIGlzIHpl cm8/LgorCSAgICAgYW5kX2V4cHJfdmFyID0gbWluX2V4cHIgPGNvbmRfdmFy LCBhbmRfZXhwcl92YXI+ICAqLworCSAgYXNzaWduX3N0bXQgPSBnaW1wbGVf YnVpbGRfYXNzaWduIChhbmRfZXhwcl92YXIsCisJCQkgIGJ1aWxkMiAoTUlO X0VYUFIsIGludGVnZXJfdHlwZV9ub2RlLAorCQkJCSAgY29uZF92YXIsIGFu ZF9leHByX3ZhcikpOworCisJICBnaW1wbGVfc2V0X2Jsb2NrIChhc3NpZ25f c3RtdCwgREVDTF9JTklUSUFMIChmdW5jdGlvbl9kZWNsKSk7CisJICBnaW1w bGVfc2V0X2JiIChhc3NpZ25fc3RtdCwgbmV3X2JiKTsKKwkgIGdpbXBsZV9z ZXFfYWRkX3N0bXQgKCZnc2VxLCBhc3NpZ25fc3RtdCk7CisJfQorICAgIH0K KworICBpZl9lbHNlX3N0bXQgPSBnaW1wbGVfYnVpbGRfY29uZCAoR1RfRVhQ UiwgYW5kX2V4cHJfdmFyLAorCSAgCQkgICAgICAgICAgICBpbnRlZ2VyX3pl cm9fbm9kZSwKKwkJCQkgICAgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICBn aW1wbGVfc2V0X2Jsb2NrIChpZl9lbHNlX3N0bXQsIERFQ0xfSU5JVElBTCAo ZnVuY3Rpb25fZGVjbCkpOworICBnaW1wbGVfc2V0X2JiIChpZl9lbHNlX3N0 bXQsIG5ld19iYik7CisgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCBp Zl9lbHNlX3N0bXQpOworCisgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2Vx LCBjb252ZXJ0X3N0bXQpOworICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmZ3Nl cSwgcmV0dXJuX3N0bXQpOworICBzZXRfYmJfc2VxIChuZXdfYmIsIGdzZXEp OworCisgIGJiMSA9IG5ld19iYjsKKyAgZTEyID0gc3BsaXRfYmxvY2sgKGJi MSwgaWZfZWxzZV9zdG10KTsKKyAgYmIyID0gZTEyLT5kZXN0OworICBlMTIt PmZsYWdzICY9IH5FREdFX0ZBTExUSFJVOworICBlMTItPmZsYWdzIHw9IEVE R0VfVFJVRV9WQUxVRTsKKworICBlMjMgPSBzcGxpdF9ibG9jayAoYmIyLCBy ZXR1cm5fc3RtdCk7CisKKyAgZ2ltcGxlX3NldF9iYiAoY29udmVydF9zdG10 LCBiYjIpOworICBnaW1wbGVfc2V0X2JiIChyZXR1cm5fc3RtdCwgYmIyKTsK KworICBiYjMgPSBlMjMtPmRlc3Q7CisgIG1ha2VfZWRnZSAoYmIxLCBiYjMs IEVER0VfRkFMU0VfVkFMVUUpOyAKKworICByZW1vdmVfZWRnZSAoZTIzKTsK KyAgbWFrZV9lZGdlIChiYjIsIEVYSVRfQkxPQ0tfUFRSLCAwKTsKKworICBy ZWJ1aWxkX2NncmFwaF9lZGdlcyAoKTsKKworICBwb3BfY2Z1biAoKTsKKyAg Y3VycmVudF9mdW5jdGlvbl9kZWNsID0gb2xkX2N1cnJlbnRfZnVuY3Rpb25f ZGVjbDsKKworICByZXR1cm4gYmIzOworfQorCisvKiBUaGlzIHBhcnNlcyB0 aGUgYXR0cmlidXRlIGFyZ3VtZW50cyB0byB0YXJnZXQgaW4gREVDTCBhbmQg ZGV0ZXJtaW5lcworICAgdGhlIHJpZ2h0IGJ1aWx0aW4gdG8gdXNlIHRvIG1h dGNoIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY2F0aW9uLgorICAgRm9yIG5vdywg b25seSBvbmUgdGFyZ2V0IGFyZ3VtZW50ICgiYXJjaD0iIG9yICI8LW0+eHh4 IikgaXMgYWxsb3dlZC4gICovCisKK3N0YXRpYyB0cmVlIAorZ2V0X2J1aWx0 aW5fY29kZV9mb3JfdmVyc2lvbiAodHJlZSBkZWNsKQoreworICB0cmVlIGF0 dHJzOworICBzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbiBjdXJfdGFyZ2V0Owor ICB0cmVlIHRhcmdldF9ub2RlOworICBzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlv biAqbmV3X3RhcmdldDsKKyAgY29uc3QgY2hhciAqYXJnX3N0ciA9IE5VTEw7 CisgIGNvbnN0IGNoYXIgKmF0dHJzX3N0ciA9IE5VTEw7CisgIGNoYXIgKnRv a19zdHIgPSBOVUxMOworICBjaGFyICp0b2tlbjsKKyAgLyogVGhlc2UgYXJl IHRoZSB0YXJnZXQgYXR0cmlidXRlIHN0cmluZ3MgZm9yIHdoaWNoIGEgZGlz cGF0Y2hlciBpcworICAgICBhdmFpbGFibGUsIGZyb20gZm9sZF9idWlsdGlu X2NwdS4gICovCisgIGNvbnN0IGNoYXIgKmZlYXR1cmVfbGlzdFtdID0geyJt bXgiLCAicG9wY250IiwgInNzZSIsICJzc2UyIiwgInNzZTMiLAorCQkJCSJz c3NlMyIsICJzc2U0LjEiLCAic3NlNC4yIiwgImF2eCIsICJhdngyIn07Cisg IHVuc2lnbmVkIGludCBOVU1fRkVBVFVSRVMgPSBzaXplb2YgKGZlYXR1cmVf bGlzdCkgLyBzaXplb2YgKGNvbnN0IGNoYXIgKik7CisgIHVuc2lnbmVkIGlu dCBpOworICB0cmVlIHByZWRpY2F0ZV9jaGFpbiA9IE5VTExfVFJFRTsKKyAg dHJlZSBwcmVkaWNhdGVfZGVjbCwgcHJlZGljYXRlX2FyZzsKKworICBhdHRy cyA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJ0YXJnZXQiLCBERUNMX0FUVFJJQlVU RVMgKGRlY2wpKTsKKyAgZ2NjX2Fzc2VydCAoYXR0cnMgIT0gTlVMTCk7CisK KyAgYXR0cnMgPSBUUkVFX1ZBTFVFIChUUkVFX1ZBTFVFIChhdHRycykpOwor CisgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAoYXR0cnMpID09IFNUUklOR19D U1QpOworICBhdHRyc19zdHIgPSBUUkVFX1NUUklOR19QT0lOVEVSIChhdHRy cyk7CisKKyAgLyogSGFuZGxlIGFyY2g9IGlmIHNwZWNpZmllZC4gICovCisg IGlmIChzdHJzdHIgKGF0dHJzX3N0ciwgImFyY2g9IikgIT0gTlVMTCkKKyAg ICB7CisgICAgICBjbF90YXJnZXRfb3B0aW9uX3NhdmUgKCZjdXJfdGFyZ2V0 LCAmZ2xvYmFsX29wdGlvbnMpOworICAgICAgdGFyZ2V0X25vZGUgPSBpeDg2 X3ZhbGlkX3RhcmdldF9hdHRyaWJ1dGVfdHJlZSAoYXR0cnMpOworICAgIAor ICAgICAgZ2NjX2Fzc2VydCAodGFyZ2V0X25vZGUpOworICAgICAgbmV3X3Rh cmdldCA9IFRSRUVfVEFSR0VUX09QVElPTiAodGFyZ2V0X25vZGUpOworICAg ICAgZ2NjX2Fzc2VydCAobmV3X3RhcmdldCk7CisgICAgICAKKyAgICAgIGlm IChuZXdfdGFyZ2V0LT5hcmNoX3NwZWNpZmllZCAmJiBuZXdfdGFyZ2V0LT5h cmNoID4gMCkKKwl7CisJICBzd2l0Y2ggKG5ld190YXJnZXQtPmFyY2gpCisJ ICAgIHsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQ09SRTJfMzI6CisJICAgIGNh c2UgUFJPQ0VTU09SX0NPUkUyXzY0OgorCSAgICAgIGFyZ19zdHIgPSAiY29y ZTIiOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIFBST0NFU1NPUl9DT1JF STdfMzI6CisJICAgIGNhc2UgUFJPQ0VTU09SX0NPUkVJN182NDoKKwkgICAg ICBhcmdfc3RyID0gImNvcmVpNyI7CisJICAgICAgYnJlYWs7CisJICAgIGNh c2UgUFJPQ0VTU09SX0FUT006CisJICAgICAgYXJnX3N0ciA9ICJhdG9tIjsK KwkgICAgICBicmVhazsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQU1ERkFNMTA6 CisJICAgICAgYXJnX3N0ciA9ICJhbWRmYW0xMGgiOworCSAgICAgIGJyZWFr OworCSAgICBjYXNlIFBST0NFU1NPUl9CRFZFUjE6CisJICAgICAgYXJnX3N0 ciA9ICJiZHZlcjEiOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIFBST0NF U1NPUl9CRFZFUjI6CisJICAgICAgYXJnX3N0ciA9ICJiZHZlcjIiOworCSAg ICAgIGJyZWFrOworCSAgICB9ICAKKwl9ICAgIAorICAgIAorICAgICAgY2xf dGFyZ2V0X29wdGlvbl9yZXN0b3JlICgmZ2xvYmFsX29wdGlvbnMsICZjdXJf dGFyZ2V0KTsKKyAgICAgIGlmIChhcmdfc3RyID09IE5VTEwpCisJeworCSAg ZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChkZWNsKSwKKwkgICAg CSJObyBkaXNwYXRjaGVyIGZvdW5kIGZvciB0aGUgdmVyc2lvbmluZyBhdHRy aWJ1dGVzIik7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgCisgICAgICBw cmVkaWNhdGVfZGVjbCA9IGl4ODZfYnVpbHRpbnMgWyhpbnQpIElYODZfQlVJ TFRJTl9DUFVfSVNdOworICAgICAgLyogRm9yIGEgQyBzdHJpbmcgbGl0ZXJh bCB0aGUgbGVuZ3RoIGluY2x1ZGVzIHRoZSB0cmFpbGluZyBOVUxMLiAgKi8K KyAgICAgIHByZWRpY2F0ZV9hcmcgPSBidWlsZF9zdHJpbmdfbGl0ZXJhbCAo c3RybGVuIChhcmdfc3RyKSArIDEsIGFyZ19zdHIpOworICAgICAgcHJlZGlj YXRlX2NoYWluID0gdHJlZV9jb25zIChwcmVkaWNhdGVfZGVjbCwgcHJlZGlj YXRlX2FyZywKKwkJCQkgICBwcmVkaWNhdGVfY2hhaW4pOworICAgIH0KKwor ICAvKiBQcm9jZXNzIGZlYXR1cmUgbmFtZS4gICovCisgIHRva19zdHIgPSAg KGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChhdHRyc19zdHIpICsgMSk7Cisg IHN0cmNweSAodG9rX3N0ciwgYXR0cnNfc3RyKTsKKyAgdG9rZW4gPSBzdHJ0 b2sgKHRva19zdHIsICIsIik7CisgIHByZWRpY2F0ZV9kZWNsID0gaXg4Nl9i dWlsdGlucyBbKGludCkgSVg4Nl9CVUlMVElOX0NQVV9TVVBQT1JUU107CisK KyAgd2hpbGUgKHRva2VuICE9IE5VTEwpCisgICAgeworICAgICAgLyogRG8g bm90IHByb2Nlc3MgImFyY2g9IiAgKi8KKyAgICAgIGlmIChzdHJuY21wICh0 b2tlbiwgImFyY2g9IiwgNSkgPT0gMCkKKwl7CisJICB0b2tlbiA9IHN0cnRv ayAoTlVMTCwgIiwiKTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGZvciAo aSA9IDA7IGkgPCBOVU1fRkVBVFVSRVM7ICsraSkKKwl7CisJICBpZiAoc3Ry Y21wICh0b2tlbiwgZmVhdHVyZV9saXN0W2ldKSA9PSAwKQorCSAgICB7CisJ ICAgICAgcHJlZGljYXRlX2FyZyA9IGJ1aWxkX3N0cmluZ19saXRlcmFsICgK KwkJCQlzdHJsZW4gKGZlYXR1cmVfbGlzdFtpXSkgKyAxLAorCQkJCWZlYXR1 cmVfbGlzdFtpXSk7CisJICAgICAgcHJlZGljYXRlX2NoYWluID0gdHJlZV9j b25zIChwcmVkaWNhdGVfZGVjbCwgcHJlZGljYXRlX2FyZywKKwkJCQkJICAg cHJlZGljYXRlX2NoYWluKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0K KyAgICAgIGlmIChpID09IE5VTV9GRUFUVVJFUykKKwl7CisJICBlcnJvcl9h dCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLAorCQkgICAgIk5vIGRp c3BhdGNoZXIgZm91bmQgZm9yICVzIiwgdG9rZW4pOworCSAgcmV0dXJuIE5V TEw7CisJfQorICAgICAgdG9rZW4gPSBzdHJ0b2sgKE5VTEwsICIsIik7Cisg ICAgfQorICBmcmVlICh0b2tfc3RyKTsKKworICBpZiAocHJlZGljYXRlX2No YWluID09IE5VTExfVFJFRSkKKyAgICB7CisgICAgICBlcnJvcl9hdCAoREVD TF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLAorCSAgICAgICAgIk5vIGRpc3Bh dGNoZXIgZm91bmQgZm9yIHRoZSB2ZXJzaW9uaW5nIGF0dHJpYnV0ZXMgOiAl cyIsCisJICAgICAgICBhdHRyc19zdHIpOworICAgICAgcmV0dXJuIE5VTEw7 CisgICAgfQorCisgIHByZWRpY2F0ZV9jaGFpbiA9IG5yZXZlcnNlIChwcmVk aWNhdGVfY2hhaW4pOworICByZXR1cm4gcHJlZGljYXRlX2NoYWluOyAKK30g CisKKy8qIFRoaXMgaXMgdGhlIHRhcmdldCBob29rIHRvIGdlbmVyYXRlIHRo ZSBkaXNwYXRjaCBmdW5jdGlvbiBmb3IKKyAgIG11bHRpLXZlcnNpb25lZCBm dW5jdGlvbnMuICBESVNQQVRDSF9ERUNMIGlzIHRoZSBmdW5jdGlvbiB3aGlj aCB3aWxsCisgICBjb250YWluIHRoZSBkaXNwYXRjaCBsb2dpYy4gIEZOREVD TFMgYXJlIHRoZSBmdW5jdGlvbiBjaG9pY2VzIGZvcgorICAgZGlzcGF0Y2gs IGFuZCBpcyBhIHRyZWUgY2hhaW4uICBFTVBUWV9CQiBpcyB0aGUgYmFzaWMg YmxvY2sgcG9pbnRlcgorICAgaW4gRElTUEFUQ0hfREVDTCBpbiB3aGljaCB0 aGUgZGlzcGF0Y2ggY29kZSBpcyBnZW5lcmF0ZWQuICAqLworCitzdGF0aWMg aW50CitpeDg2X2Rpc3BhdGNoX3ZlcnNpb24gKHRyZWUgZGlzcGF0Y2hfZGVj bCwKKwkJICAgICAgIHZvaWQgKmZuZGVjbHNfcCwKKwkJICAgICAgIGJhc2lj X2Jsb2NrICplbXB0eV9iYikKK3sKKyAgdHJlZSBkZWZhdWx0X2RlY2w7Cisg IGdpbXBsZSBpZnVuY19jcHVfaW5pdF9zdG10OworICBnaW1wbGVfc2VxIGdz ZXE7CisgIHRyZWUgb2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAgaW50 IGl4OworICB0cmVlIGVsZTsKKyAgVkVDICh0cmVlLCBoZWFwKSAqZm5kZWNs czsKKworICBnY2NfYXNzZXJ0IChkaXNwYXRjaF9kZWNsICE9IE5VTEwKKwkg ICAgICAmJiBmbmRlY2xzX3AgIT0gTlVMTAorCSAgICAgICYmIGVtcHR5X2Ji ICE9IE5VTEwpOworCisgIC8qZm5kZWNsc19wIGlzIGFjdHVhbGx5IGEgdmVj dG9yLiAgKi8KKyAgZm5kZWNscyA9IChWRUMgKHRyZWUsIGhlYXApICopZm5k ZWNsc19wOworCisgIC8qIEF0bGVhc3Qgb25lIG1vcmUgdmVyc2lvbiBvdGhl ciB0aGFuIHRoZSBkZWZhdWx0LiAgKi8KKyAgZ2NjX2Fzc2VydCAoVkVDX2xl bmd0aCAodHJlZSwgZm5kZWNscykgPj0gMik7CisKKyAgLyogVGhlIGZpcnN0 IHZlcnNpb24gaW4gdGhlIHZlY3RvciBpcyB0aGUgZGVmYXVsdCBkZWNsLiAg Ki8KKyAgZGVmYXVsdF9kZWNsID0gVkVDX2luZGV4ICh0cmVlLCBmbmRlY2xz LCAwKTsKKworICBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsID0gY3VycmVu dF9mdW5jdGlvbl9kZWNsOworICBwdXNoX2NmdW4gKERFQ0xfU1RSVUNUX0ZV TkNUSU9OIChkaXNwYXRjaF9kZWNsKSk7CisgIGN1cnJlbnRfZnVuY3Rpb25f ZGVjbCA9IGRpc3BhdGNoX2RlY2w7CisKKyAgZ3NlcSA9IGJiX3NlcSAoKmVt cHR5X2JiKTsKKyAgaWZ1bmNfY3B1X2luaXRfc3RtdCA9IGdpbXBsZV9idWls ZF9jYWxsX3ZlYyAoCisgICAgICAgICAgICAgICAgICAgICBpeDg2X2J1aWx0 aW5zIFsoaW50KSBJWDg2X0JVSUxUSU5fQ1BVX0lOSVRdLCBOVUxMKTsKKyAg Z2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGlmdW5jX2NwdV9pbml0X3N0 bXQpOworICBnaW1wbGVfc2V0X2JiIChpZnVuY19jcHVfaW5pdF9zdG10LCAq ZW1wdHlfYmIpOworICBzZXRfYmJfc2VxICgqZW1wdHlfYmIsIGdzZXEpOwor CisgIHBvcF9jZnVuICgpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBv bGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworCisKKyAgZm9yIChpeCA9IDE7 IFZFQ19pdGVyYXRlICh0cmVlLCBmbmRlY2xzLCBpeCwgZWxlKTsgKytpeCkK KyAgICB7CisgICAgICB0cmVlIHZlcnNpb25fZGVjbCA9IGVsZTsKKyAgICAg IHRyZWUgcHJlZGljYXRlX2NoYWluID0gTlVMTF9UUkVFOworICAgICAgLyog R2V0IGF0dHJpYnV0ZSBzdHJpbmcsIHBhcnNlIGl0IGFuZCBmaW5kIHRoZSBy aWdodCBwcmVkaWNhdGUgZGVjbC4KKyAgICAgICAgIFRoZSBwcmVkaWNhdGUg ZnVuY3Rpb24gY291bGQgYmUgYSBsZW5ndGh5IGNvbWJpbmF0aW9uIG9mIG1h bnkKKwkgZmVhdHVyZXMsIGxpa2UgYXJjaC10eXBlIGFuZCB2YXJpb3VzIGlz YS12YXJpYW50cy4gICovCisgICAgICBwcmVkaWNhdGVfY2hhaW4gPSBnZXRf YnVpbHRpbl9jb2RlX2Zvcl92ZXJzaW9uICh2ZXJzaW9uX2RlY2wpOworCisg ICAgICBpZiAocHJlZGljYXRlX2NoYWluID09IE5VTExfVFJFRSkKKwljb250 aW51ZTsKKworICAgICAgKmVtcHR5X2JiID0gYWRkX2NvbmRpdGlvbl90b19i YiAoZGlzcGF0Y2hfZGVjbCwgdmVyc2lvbl9kZWNsLAorCQkJCSAgICAgICBw cmVkaWNhdGVfY2hhaW4sICplbXB0eV9iYik7CisKKyAgICB9CisgIC8qIGRp c3BhdGNoIGRlZmF1bHQgdmVyc2lvbiBhdCB0aGUgZW5kLiAgKi8KKyAgKmVt cHR5X2JiID0gYWRkX2NvbmRpdGlvbl90b19iYiAoZGlzcGF0Y2hfZGVjbCwg ZGVmYXVsdF9kZWNsLAorCQkJCSAgIE5VTEwsICplbXB0eV9iYik7CisgIHJl dHVybiAwOworfQorCiAvKiBUaGlzIGJ1aWxkcyB0aGUgcHJvY2Vzc29yX21v ZGVsIHN0cnVjdCB0eXBlIGRlZmluZWQgaW4KICAgIGxpYmdjYy9jb25maWcv aTM4Ni9pMzg2LWNwdWluZm8uYyAgKi8KIApAQCAtMzk1OTEsNiArMzk5MTEs OSBAQCBpeDg2X21lbW1vZGVsX2NoZWNrICh1bnNpZ25lZCBIT1NUX1dJREVf SU5UIHZhbCkKICN1bmRlZiBUQVJHRVRfRk9MRF9CVUlMVElOCiAjZGVmaW5l IFRBUkdFVF9GT0xEX0JVSUxUSU4gaXg4Nl9mb2xkX2J1aWx0aW4KIAorI3Vu ZGVmIFRBUkdFVF9ESVNQQVRDSF9WRVJTSU9OCisjZGVmaW5lIFRBUkdFVF9E SVNQQVRDSF9WRVJTSU9OIGl4ODZfZGlzcGF0Y2hfdmVyc2lvbgorCiAjdW5k ZWYgVEFSR0VUX0VOVU1fVkFfTElTVF9QCiAjZGVmaW5lIFRBUkdFVF9FTlVN X1ZBX0xJU1RfUCBpeDg2X2VudW1fdmFfbGlzdAogCkluZGV4OiBnY2MvY3Av ZXJyb3IuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY3AvZXJy b3IuYwkocmV2aXNpb24gMTg3MzQ2KQorKysgZ2NjL2NwL2Vycm9yLmMJKHdv cmtpbmcgY29weSkKQEAgLTE1MzQsOCArMTUzNCwxNSBAQCBkdW1wX2V4Y2Vw dGlvbl9zcGVjICh0cmVlIHQsIGludCBmbGFncykKIHN0YXRpYyB2b2lkCiBk dW1wX2Z1bmN0aW9uX25hbWUgKHRyZWUgdCwgaW50IGZsYWdzKQogewotICB0 cmVlIG5hbWUgPSBERUNMX05BTUUgKHQpOworICB0cmVlIG5hbWU7CiAKKyAg LyogRm9yIGZ1bmN0aW9uIHZlcnNpb25zLCB1c2UgdGhlIGFzc2VtYmxlciBu YW1lIGFzIHRoZSBkZWNsIG5hbWUgaXMKKyAgICAgdGhlIHNhbWUgZm9yIGFs bCB2ZXJzaW9ucy4gICovCisgIGlmIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05F RCAodCkpCisgICAgbmFtZSA9IERFQ0xfQVNTRU1CTEVSX05BTUUgKHQpOwor ICBlbHNlCisgICAgbmFtZSA9IERFQ0xfTkFNRSAodCk7CisKICAgLyogV2Ug Y2FuIGdldCBoZXJlIHdpdGggYSBkZWNsIHRoYXQgd2FzIHN5bnRoZXNpemVk IGJ5IGxhbmd1YWdlLQogICAgICBpbmRlcGVuZGVudCBtYWNoaW5lcnkgKGUu Zy4gY292ZXJhZ2UuYykgaW4gd2hpY2ggY2FzZSBpdCB3b24ndAogICAgICBo YXZlIGEgbGFuZ19zcGVjaWZpYyBzdHJ1Y3R1cmUgYXR0YWNoZWQgYW5kIERF Q0xfQ09OU1RSVUNUT1JfUAo= --14dae93995051c455c04bf9f20d5--