From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 63421 invoked by alias); 9 Apr 2015 16:31:51 -0000 Mailing-List: contact ecos-patches-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: ecos-patches-owner@ecos.sourceware.org Received: (qmail 63400 invoked by uid 89); 9 Apr 2015 16:31:50 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=3.7 required=5.0 tests=AWL,BAYES_40,KAM_LAZY_DOMAIN_SECURITY autolearn=no version=3.3.2 X-HELO: haven.inspiration.ch Received: from colen.ch (HELO haven.inspiration.ch) (212.55.218.197) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Thu, 09 Apr 2015 16:31:50 +0000 Received: from haven (haven.inspiration.ch [212.55.218.197]) by haven.inspiration.ch (Postfix) with ESMTP id 05C29EEFE27 for ; Thu, 9 Apr 2015 18:31:25 +0200 (CEST) Received: from haven.inspiration.ch ([212.55.218.197]) by haven (haven.inspiration.ch [212.55.218.197]) (amavisd-new, port 10024) with ESMTP id zLLkoSSZmKSA for ; Thu, 9 Apr 2015 18:30:51 +0200 (CEST) Received: by haven.inspiration.ch (Postfix, from userid 58) id 1A793EF1352; Thu, 9 Apr 2015 18:30:51 +0200 (CEST) Received: from haven.inspiration.ch (haven.inspiration.ch [212.55.218.197]) (Authenticated sender: oliver.munz) by haven.inspiration.ch (Postfix) with ESMTPSA id 0AB6DEEFE27 for ; Thu, 9 Apr 2015 18:30:51 +0200 (CEST) MIME-Version: 1.0 Date: Thu, 09 Apr 2015 16:31:00 -0000 From: "oliver.munz" To: Subject: AT91SAM7X ENAC & lwIP fix Message-ID: <06af42d656aa5c193eda9c89c2be49d5@haven.inspiration.ch> X-Sender: olimunz@snr.ch User-Agent: ITGarage Webmail/0.3.1 Content-Type: multipart/mixed; boundary="=_24a45b9769996675f732473277dc4246" X-SW-Source: 2015-04/txt/msg00000.txt.bz2 --=_24a45b9769996675f732473277dc4246 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-length: 644 The if_at91.c driver sometime don't mark buffers from broken packets as free. And the sequential.c don't call the driver in every case. The two uploaded files correct this. Its not an patch because i use the files currently in my project and not in the ecos repository. An other thing the lwIP from ecos is missing is the check if the kernel-mailbox-size is at least the size of the PBUF or INPKT buffer... The new version of the if_at91.c deliver-procedure tests all the buffers of the EMAC at once and search also for broken packets. There was also an error in the calculation of the packet-size if the packets where bigger then 128bytes. --=_24a45b9769996675f732473277dc4246 Content-Transfer-Encoding: base64 Content-Type: application/octet-stream; charset=UTF-8; name=if_at91.c; Content-Disposition: attachment; filename=if_at91.c; Content-length: 42029 Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLwovLyAgICAgIGlm X2F0OTEuYwovLwovLwovLwovLz09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci8vICMjIyNFQ09TR1BMQ09QWVJJR0hUQkVHSU4jIyMjICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAovLyBUaGlzIGZpbGUgaXMgcGFydCBv ZiBlQ29zLCB0aGUgRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBT eXN0ZW0uICAgCi8vIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwg MjAwMSwgMjAwMiwgMjAwNiwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KLy8KLy8gZUNvcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyICAgIAov LyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSAgICAgCi8vIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgICAgICAKLy8gdmVyc2lvbi4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAovLwovLyBlQ29zIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUICAgICAgCi8vIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mIE1FUkNIQU5UQUJJTElUWSBvciAgICAKLy8gRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlICAgIAovLyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ci8vCi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAKLy8gYWxvbmcg d2l0aCBlQ29zOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4sICAgIAovLyA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuICAg ICAgICAgICAgCi8vCi8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90 aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgICAgICAK Ly8gbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUs IG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSAgICAgIAovLyBhbmQgbGluayBp dCB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9u IHRoaXMgZmlsZSwgICAgICAgCi8vIHRoaXMgZmlsZSBkb2VzIG5vdCBieSBp dHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyB3b3JrIHRvIGJlIGNvdmVyZWQg YnkgICAKLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBIb3dl dmVyIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBmaWxlICAgIAovLyBtdXN0 IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCBz ZWN0aW9uICgzKSBvZiB0aGUgR05VICAgCi8vIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdjIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKLy8KLy8gVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaW52 YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgYSB3b3JrIGJhc2VkICAg IAovLyBvbiB0aGlzIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICAgICAgICAgCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKLy8gIyMjI0VDT1NHUExDT1BZUklHSFRF TkQjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIyMj IyNERVNDUklQVElPTkJFR0lOIyMjIwovLwovLyBBdXRob3Iocyk6ICAgIEFu ZHJldyBMdW5uLCBKb2huIEVpZ2VsYWFyCi8vIENvbnRyaWJ1dG9yczogIE9M SQovLyBEYXRlOiAgICAgICAgIDIwMTUtMDMtMTYKLy8gUHVycG9zZToKLy8g RGVzY3JpcHRpb246Ci8vCi8vIyMjI0RFU0NSSVBUSU9ORU5EIyMjIwovLwov Lz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgojaW5jbHVkZSA8cGtn Y29uZi9zeXN0ZW0uaD4KI2luY2x1ZGUgPHBrZ2NvbmYvaGFsLmg+CiNpbmNs dWRlIDxwa2djb25mL2RldnNfZXRoX2FybV9hdDkxLmg+CiNpbmNsdWRlIDxw a2djb25mL2lvX2V0aF9kcml2ZXJzLmg+CiNpZiBkZWZpbmVkKENZR1BLR19S RURCT09UKQojaW5jbHVkZSA8cGtnY29uZi9yZWRib290Lmg+CiNlbmRpZgoK I2luY2x1ZGUgPGN5Zy9oYWwvaGFsX2lvLmg+CiNpbmNsdWRlIDxjeWcvaGFs L2hhbF9pbnRyLmg+CiNpbmNsdWRlIDxjeWcvaGFsL2hhbF9hcmNoLmg+CiNp bmNsdWRlIDxjeWcvaGFsL2Rydl9hcGkuaD4KI2luY2x1ZGUgPGN5Zy9oYWwv aGFsX2RpYWcuaD4KI2luY2x1ZGUgPGN5Zy9pbmZyYS9jeWdfdHlwZS5oPgoj aW5jbHVkZSA8Y3lnL2luZnJhL2N5Z19hc3MuaD4KI2luY2x1ZGUgPGN5Zy9p bmZyYS9kaWFnLmg+CiNpbmNsdWRlIDxjeWcvaW8vZXRoL25ldGRldi5oPgoj aW5jbHVkZSA8Y3lnL2lvL2V0aC9ldGhfZHJ2Lmg+CiNpbmNsdWRlIDxjeWcv aW8vZXRoL2V0aF9kcnZfc3RhdHMuaD4KI2luY2x1ZGUgPGN5Zy9pby9ldGhf cGh5Lmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+ CgovLyBTZXQgdXAgdGhlIGxldmVsIG9mIGRlYnVnIG91dHB1dAojaWYgQ1lH UEtHX0RFVlNfRVRIX0FSTV9BVDkxX0RFQlVHX0xFVkVMID4gMAojZGVmaW5l IGRlYnVnMV9wcmludGYoYXJncy4uLikgZGlhZ19wcmludGYoYXJncykKI2Vs c2UKI2RlZmluZSBkZWJ1ZzFfcHJpbnRmKGFyZ3MuLi4pCiNlbmRpZgojaWYg Q1lHUEtHX0RFVlNfRVRIX0FSTV9BVDkxX0RFQlVHX0xFVkVMID4gMQojZGVm aW5lIGRlYnVnMl9wcmludGYoYXJncy4uLikgZGlhZ19wcmludGYoYXJncykK I2Vsc2UKI2RlZmluZSBkZWJ1ZzJfcHJpbnRmKGFyZ3MuLi4pCiNlbmRpZgoK Ly9Ecml2ZXIgaW50ZXJmYWNlIGNhbGxiYWNrcwojZGVmaW5lIF9ldGhfZHJ2 X2luaXQoc2MsbWFjKQkJCVwKICAoc2MtPmZ1bnMtPmV0aF9kcnYtPmluaXQp KHNjLCh1bnNpZ25lZCBjaGFyICopbWFjKQojZGVmaW5lIF9ldGhfZHJ2X3R4 X2RvbmUoc2Msa2V5LHN0YXR1cykJCVwKICAoc2MtPmZ1bnMtPmV0aF9kcnYt PnR4X2RvbmUpKHNjLGtleSxzdGF0dXMpIAojZGVmaW5lIF9ldGhfZHJ2X3Jl Y3Yoc2MsbGVuKQkJCVwKICAoc2MtPmZ1bnMtPmV0aF9kcnYtPnJlY3YpKHNj LGxlbikgCgojaWZkZWYgQ1lHSU5UX0lPX0VUSF9JTlRfU1VQUE9SVF9SRVFV SVJFRApzdGF0aWMgY3lnX3VpbnQzMgphdDkxX2V0aF9pc3IoY3lnX3ZlY3Rv cl90IHZlY3RvciwgY3lnX2FkZHJ3b3JkX3QgZGF0YSk7CiNlbmRpZgoKLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLy8gUmVkQm9vdCBjb25maWd1cmF0aW9uIG9w dGlvbnMgZm9yIG1hbmFnaW5nIEVTQXMgZm9yIHVzCgovLyBEZWNpZGUgd2hl dGhlciB0byBoYXZlIHJlZGJvb3QgY29uZmlnIHZhcnMgZm9yIGl0Li4uCiNp ZiBkZWZpbmVkKENZR1NFTV9SRURCT09UX0ZMQVNIX0NPTkZJRykgJiYgZGVm aW5lZChDWUdQS0dfUkVEQk9PVF9ORVRXT1JLSU5HKQojaW5jbHVkZSA8cmVk Ym9vdC5oPgojaW5jbHVkZSA8Zmxhc2hfY29uZmlnLmg+CgojaWZkZWYgQ1lH U0VNX0RFVlNfRVRIX0FSTV9BVDkxX1JFREJPT1RfSE9MRFNfRVNBX0VUSDAK UmVkQm9vdF9jb25maWdfb3B0aW9uKCJOZXR3b3JrIGhhcmR3YXJlIGFkZHJl c3MgW01BQ10gZm9yIGV0aDAiLAoJCWV0aDBfZXNhX2RhdGEsCgkJQUxXQVlT X0VOQUJMRUQsIHRydWUsCgkJQ09ORklHX0VTQSwgMCk7CiNlbmRpZgoKI2Vu ZGlmICAvLyBDWUdQS0dfUkVEQk9PVF9ORVRXT1JLSU5HICYmIENZR1NFTV9S RURCT09UX0ZMQVNIX0NPTkZJRwoKLy8gYW5kIGluaXRpYWxpemF0aW9uIGNv ZGUgdG8gcmVhZCB0aGVtCi8vIC0gaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB3 ZSBhcmUgYnVpbGRpbmcgUmVkQm9vdCByaWdodCBub3c6CiNpZmRlZiBDWUdQ S0dfREVWU19FVEhfQVJNX0FUOTFfUkVEQk9PVF9IT0xEU19FU0EKCiNpbmNs dWRlIDxjeWcvaGFsL2hhbF9pZi5oPgoKI2lmbmRlZiBDT05GSUdfRVNBCiNk ZWZpbmUgQ09ORklHX0VTQSAoNikKI2VuZGlmCgojZGVmaW5lIENZR0hXUl9E RVZTX0VUSF9BUk1fQVQ5MV9HRVRfRVNBKCBtYWNfYWRkcmVzcywgb2sgKSAg ICAgICAgICAgXAogIENZR19NQUNST19TVEFSVCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgb2sg PSBDWUdBQ0NfQ0FMTF9JRl9GTEFTSF9DRkdfT1AoIENZR05VTV9DQUxMX0lG X0ZMQVNIX0NGR19HRVQsICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImV0aDBfZXNhX2RhdGEiLCAgICAgICAgICAgICAg ICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt YWNfYWRkcmVzcywgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZJR19FU0EpOyAgICAg ICAgICAgICAgICAgICAgICAgIFwKICBDWUdfTUFDUk9fRU5ECgojZW5kaWYg Ly8gQ1lHUEtHX0RFVlNfRVRIX0FUOTFfRVRIX1JFREJPT1RfSE9MRFNfRVNB CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCgoKCgoKZXh0 ZXJuIHZvaWQgKm1hY19mbGFzaF9hZGRyZXNzOwoKCgoKLy8gUHJpdmF0ZSBE YXRhIHN0cnVjdHVyZXMKCiNpZm5kZWYgQVQ5MV9FTUFDX1JYX0JVRkZfU0la RQojZGVmaW5lIEFUOTFfRU1BQ19SWF9CVUZGX1NJWkUgIDEyOAojZW5kaWYK Ci8vIFJlY2VpdmUgQnVmZmVyIERlc2NyaXB0b3IKdHlwZWRlZiBzdHJ1Y3Qg cmJkX3MgewoJY3lnX3VpbnQzMiBhZGRyOwoJY3lnX3VpbnQzMiBzcjsKfSBy YmRfdDsKCi8vIFJlY2VpdmUgQnVmZmVyCnR5cGVkZWYgc3RydWN0IHJiX3Mg ewoJY3lnX3VpbnQ4IHJiW0FUOTFfRU1BQ19SWF9CVUZGX1NJWkVdOwp9IHJi X3Q7CgovLyBUcmFuc21pdCBCdWZmZXIgRGVzY3JpcHRvcgp0eXBlZGVmIHN0 cnVjdCB0YmRfcyB7CgljeWdfdWludDMyIGFkZHI7CgljeWdfdWludDMyIHNy Owp9IHRiZF90OwoKLy8gQVQ5MSBFdGhlcm5ldCBwcml2YXRlIGRhdGEKdHlw ZWRlZiBzdHJ1Y3QgYXQ5MV9ldGhfcHJpdl9zIHsKCWN5Z191aW50MzIgaW50 cl92ZWN0b3I7CgljaGFyICplc2Ffa2V5OyAgICAgIC8vIFJlZEJvb3QgJ2tl eScgZm9yIGRldmljZSBFU0EKCWN5Z191aW50OCAqZW5hZGRyOwoJY3lnX3Vp bnQzMiBiYXNlOyAgICAvLyBCYXNlIGFkZHJlc3Mgb2YgZGV2aWNlCglldGhf cGh5X2FjY2Vzc190ICpwaHk7CglyYmRfdCByYmRbQ1lHTlVNX0RFVlNfRVRI X0FSTV9BVDkxX1JYX0JVRlNdOwoJcmJfdCByYltDWUdOVU1fREVWU19FVEhf QVJNX0FUOTFfUlhfQlVGU107Cgl0YmRfdCB0YmRbQ1lHTlVNX0RFVlNfRVRI X0FSTV9BVDkxX1RYX0JVRlNdOwoJdW5zaWduZWQgbG9uZyBjdXJyX3R4X2tl eTsKCWN5Z19ib29sIHR4X2J1c3k7CgljeWdfdWludDMyIGxhc3RfdGJkX2lk eDsKCWN5Z191aW50MzIgY3Vycl90YmRfaWR4OwoJY3lnX3VpbnQzMiBjdXJy X3JiZF9pZHg7CiNpZmRlZiBDWUdJTlRfSU9fRVRIX0lOVF9TVVBQT1JUX1JF UVVJUkVECgljeWdfaW50ZXJydXB0IGludHI7CgljeWdfaGFuZGxlX3QgaW50 cl9oYW5kbGU7CiNlbmRpZgp9IGF0OTFfZXRoX3ByaXZfdDsKCmV4dGVybiB2 b2lkIHByaW50Zl91c2VyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKI2RlZmlu ZSBkaWFnX3ByaW50ZiBwcmludGZfdXNlcgoKI2RlZmluZSBDWUdQS0dfREVW U19FVEhfQVJNX0FUOTFfREVCVUdfTEVWRUwgMAoKI2lmIENZR1BLR19ERVZT X0VUSF9BUk1fQVQ5MV9ERUJVR19MRVZFTCA+IDAKI2RlZmluZSBkZWJ1ZzFf cHJpbnRmKGFyZ3MuLi4pIGRpYWdfcHJpbnRmKGFyZ3MpCiNlbHNlCiNkZWZp bmUgZGVidWcxX3ByaW50ZihhcmdzLi4uKQojZW5kaWYKI2lmIENZR1BLR19E RVZTX0VUSF9BUk1fQVQ5MV9ERUJVR19MRVZFTCA+IDEKI2RlZmluZSBkZWJ1 ZzJfcHJpbnRmKGFyZ3MuLi4pIGRpYWdfcHJpbnRmKGFyZ3MpCiNlbHNlCiNk ZWZpbmUgZGVidWcyX3ByaW50ZihhcmdzLi4uKQojZW5kaWYKCnZvaWQgcHJp bnRfYnVmZnNfcmVhZCh2b2lkICpwKSB7CgoJc3RhdGljIGF0OTFfZXRoX3By aXZfdCAqcHJpdiA9IE5VTEw7CgoJaWYgKHApIHsKCQlwcml2ID0gKGF0OTFf ZXRoX3ByaXZfdCAqKSBwOwoJfQoJaWYgKCFwcml2KSB7CgkJcHJpbnRmX3Vz ZXIoInByaW50X2J1ZmZzX3JlYWQ6IHByaXYgPT0gTlVMTFxuIik7CgkJcmV0 dXJuOwoJfQoKCWludCBpOwoKCWZvciAoaSA9IDA7IGkgPCBDWUdOVU1fREVW U19FVEhfQVJNX0FUOTFfUlhfQlVGUzsgaSsrKSB7CgkJaWYgKHByaXYtPnJi ZFtpXS5hZGRyICYgQVQ5MV9FTUFDX1JCRF9BRERSX09XTkVSX1NXKSB7CgkJ CXByaW50Zl91c2VyKCIlMmQgdXNlZCAiLCBpKTsKCQl9IGVsc2UgewoJCQlw cmludGZfdXNlcigiJTJkICAgICAgIiwgaSk7CgkJfQoJCXByaW50Zl91c2Vy KCIlMDh4XG4iLCBwcml2LT5yYmRbaV0uc3IpOwoJfQoJcHJpbnRmX3VzZXIo IlxuIik7Cn0KCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQov LyBQSFkgYWNjZXNzIGJpdHMgYW5kIHBpZWNlcwovLyAKCnN0YXRpYyB2b2lk IGF0OTFfbWRpb19lbmFibGUodm9pZCkgewoJY3lnX3VpbnQzMiB2YWw7CglI QUxfUkVBRF9VSU5UMzIoQVQ5MV9FTUFDICsgQVQ5MV9FTUFDX05DUiwgdmFs KTsKCXZhbCB8PSBBVDkxX0VNQUNfTkNSX01QRTsgLyogZW5hYmxlIG1hbmFn ZW1lbnQgcG9ydCAqLwoJSEFMX1dSSVRFX1VJTlQzMihBVDkxX0VNQUMgKyBB VDkxX0VNQUNfTkNSLCB2YWwpOwp9CgpzdGF0aWMgdm9pZCBhdDkxX21kaW9f ZGlzYWJsZSh2b2lkKSB7CgljeWdfdWludDMyIHZhbDsKCUhBTF9SRUFEX1VJ TlQzMihBVDkxX0VNQUMgKyBBVDkxX0VNQUNfTkNSLCB2YWwpOwoJdmFsICY9 IH5BVDkxX0VNQUNfTkNSX01QRTsgLyogZGlzYWJsZSBtYW5hZ2VtZW50IHBv cnQgKi8KCUhBTF9XUklURV9VSU5UMzIoQVQ5MV9FTUFDICsgQVQ5MV9FTUFD X05DUiwgdmFsKTsKfQoKLy8gV3JpdGUgb25lIG9mIHRoZSBQSFkgcmVnaXN0 ZXJzIHZpYSB0aGUgTUlJIGJ1cwpzdGF0aWMgdm9pZCBhdDkxX3dyaXRlX3Bo eShpbnQgcmVnX2FkZHIsIGludCBwaHlfYWRkciwgdW5zaWduZWQgc2hvcnQg ZGF0YSkgewoJY3lnX3VpbnQzMiB2YWwsIGNudCA9IDA7CgoJQ1lHX0FTU0VS VEMocmVnX2FkZHIgPj0gMCAmJiByZWdfYWRkciA8PSBBVDkxX0VNQUNfTUFO X1JFR0FfTUFTSyk7CglDWUdfQVNTRVJUQyhwaHlfYWRkciA+PSAwICYmIHBo eV9hZGRyIDw9IEFUOTFfRU1BQ19NQU5fUEhZX01BU0spOwoKCXZhbCA9IChB VDkxX0VNQUNfTUFOX1NPRiB8CglBVDkxX0VNQUNfTUFOX1dSIHwKCUFUOTFf RU1BQ19NQU5fQ09ERSB8IEFUOTFfRU1BQ19NQU5fUEhZQShwaHlfYWRkcikg fCBBVDkxX0VNQUNfTUFOX1JFR0EocmVnX2FkZHIpIHwgQVQ5MV9FTUFDX01B Tl9EQVRBKGRhdGEpKTsKCglIQUxfV1JJVEVfVUlOVDMyKEFUOTFfRU1BQyAr IEFUOTFfRU1BQ19NQU4sIHZhbCk7CgoJLyogV2FpdCB1bnRpbCBJRExFIGJp dCBpbiBOZXR3b3JrIFN0YXR1cyByZWdpc3RlciBpcyBzZXQgKi8KCXdoaWxl IChjbnQgPCAxMDAwMDAwKSB7CgkJSEFMX1JFQURfVUlOVDMyKChBVDkxX0VN QUMgKyBBVDkxX0VNQUNfTlNSKSwgdmFsKTsKCQlpZiAoISh2YWwgJiBBVDkx X0VNQUNfTlNSX0lETEUpKQoJCQlicmVhazsKCX0KCUNZR19BU1NFUlRDKGNu dCA8IDEwMDAwMDApOwp9CgovLyBSZWFkIG9uZSBvZiB0aGUgUEhZIHJlZ2lz dGVycyB2aWEgdGhlIE1JSSBidXMKc3RhdGljIGJvb2wgYXQ5MV9yZWFkX3Bo eShpbnQgcmVnX2FkZHIsIGludCBwaHlfYWRkciwgdW5zaWduZWQgc2hvcnQg KmRhdGEpIHsKCWN5Z191aW50MzIgdmFsOwoKCUNZR19BU1NFUlRDKHJlZ19h ZGRyID49IDAgJiYgcmVnX2FkZHIgPD0gQVQ5MV9FTUFDX01BTl9SRUdBX01B U0spOwoJQ1lHX0FTU0VSVEMocGh5X2FkZHIgPj0gMCAmJiBwaHlfYWRkciA8 PSBBVDkxX0VNQUNfTUFOX1BIWV9NQVNLKTsKCgl2YWwgPSAoQVQ5MV9FTUFD X01BTl9TT0YgfAoJQVQ5MV9FTUFDX01BTl9SRCB8CglBVDkxX0VNQUNfTUFO X0NPREUgfCBBVDkxX0VNQUNfTUFOX1BIWUEocGh5X2FkZHIpIHwgQVQ5MV9F TUFDX01BTl9SRUdBKHJlZ19hZGRyKSk7CgoJSEFMX1dSSVRFX1VJTlQzMihB VDkxX0VNQUMgKyBBVDkxX0VNQUNfTUFOLCB2YWwpOwoJLyogV2FpdCB1bnRp bCBJRExFIGJpdCBpbiBOZXR3b3JrIFN0YXR1cyByZWdpc3RlciBpcyBzZXQg Ki8KCWRvIHsKCQlIQUxfUkVBRF9VSU5UMzIoKEFUOTFfRU1BQyArIEFUOTFf RU1BQ19OU1IpLCB2YWwpOwoJfSB3aGlsZSAoISh2YWwgJiBBVDkxX0VNQUNf TlNSX0lETEUpKTsKCglIQUxfREVMQVlfVVMoNTApOwoKCUhBTF9SRUFEX1VJ TlQzMihBVDkxX0VNQUMgKyBBVDkxX0VNQUNfTUFOLCB2YWwpOwoJKmRhdGEg PSB2YWwgJiBBVDkxX0VNQUNfTUFOX0RBVEFfTUFTSzsKCglyZXR1cm4gKHRy dWUpOwp9CgovLyBFbmFibGUgdGhlIE1ESU8gYml0IGluIE1BQyBjb250cm9s IHJlZ2lzdGVyIHNvIHRoYXQgd2UgY2FuIHRhbGsgdG8KLy8gdGhlIFBIWS4g QWxzbyBzZXQgdGhlIGNsb2NrIGRpdmlkZXIgc28gdGhhdCBNREMgaXMgbGVz cyB0aGFuIDIuNU1Iei4Kc3RhdGljIHZvaWQgYXQ5MV9pbml0X3BoeSh2b2lk KSB7CgljeWdfdWludDMyIGNmZzsKCWN5Z191aW50MzIgZGl2OwoKCUhBTF9S RUFEX1VJTlQzMihBVDkxX0VNQUMgKyBBVDkxX0VNQUNfTkNGRywgY2ZnKTsK CWNmZyAmPSB+IEFUOTFfRU1BQ19OQ0ZHX0NMS19NQVNLOwoKCWRpdiA9IChD WUdOVU1fSEFMX0FSTV9BVDkxX0NMT0NLX1NQRUVEIC8gMjUwMDAwMCk7Cglp ZiAoZGl2IDwgOCkgewoJCWNmZyB8PSBBVDkxX0VNQUNfTkNGR19DTEtfSENM S184OwoJfSBlbHNlIGlmIChkaXYgPCAxNikgewoJCWNmZyB8PSBBVDkxX0VN QUNfTkNGR19DTEtfSENMS18xNjsKCX0gZWxzZSBpZiAoZGl2IDwgMzIpIHsK CQljZmcgfD0gQVQ5MV9FTUFDX05DRkdfQ0xLX0hDTEtfMzI7Cgl9IGVsc2Ug aWYgKGRpdiA8IDY0KSB7CgkJY2ZnIHw9IEFUOTFfRU1BQ19OQ0ZHX0NMS19I Q0xLXzY0OwoJfSBlbHNlIHsKCQlDWUdfRkFJTCgiVW5hYmxlIHRvIHByb2dy YW0gTUlJIGNsb2NrIik7Cgl9CgoJSEFMX1dSSVRFX1VJTlQzMihBVDkxX0VN QUMgKyBBVDkxX0VNQUNfTkNGRywgY2ZnKTsKfQoKRVRIX1BIWV9SRUdfTEVW RUxfQUNDRVNTX0ZVTlMoYXQ5MV9waHksIGF0OTFfaW5pdF9waHksIE5VTEws IGF0OTFfd3JpdGVfcGh5LCBhdDkxX3JlYWRfcGh5KTsKCi8vPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQovLyBSZWNlaXZlciBidWZmZXIgaGFuZGxpbmcK Ci8vIEluaXRpYWxpemUgdGhlIHJlY2VpdmVyIGJ1ZmZlcnMgYW5kIGRlc2Ny aXB0b3JzCnN0YXRpYyB2b2lkIGF0OTFfcmJfaW5pdChhdDkxX2V0aF9wcml2 X3QgKnByaXYpIHsKCWludCBpOwoJZm9yIChpID0gMDsgaSA8IENZR05VTV9E RVZTX0VUSF9BUk1fQVQ5MV9SWF9CVUZTOyBpKyspIHsKCQlwcml2LT5yYmRb aV0uYWRkciA9ICgoY3lnX3VpbnQzMikgJnByaXYtPnJiW2ldKSAmIEFUOTFf RU1BQ19SQkRfQUREUl9NQVNLOwoJCXByaXYtPnJiZFtpXS5zciA9IDA7Cgl9 CgkvLyBTZXQgdGhlIHdyYXAgYml0IG9uIHRoZSBsYXN0IGVudHJ5Cglwcml2 LT5yYmRbQ1lHTlVNX0RFVlNfRVRIX0FSTV9BVDkxX1JYX0JVRlMgLSAxXS5h ZGRyIHw9CglBVDkxX0VNQUNfUkJEX0FERFJfV1JBUDsKfQoKLy89PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci8vIFRyYW5zbWl0IGJ1ZmZlciBoYW5kbGlu ZwoKLy8gSW5pdGlhbGl6ZSB0aGUgdHJhbnNtaXQgYnVmZmVyIGRlc2NyaXB0 b3JzCnN0YXRpYyB2b2lkIGF0OTFfdGJfaW5pdChhdDkxX2V0aF9wcml2X3Qg KnByaXYpIHsKCWludCBpOwoJZm9yIChpID0gMDsgaSA8IENZR05VTV9ERVZT X0VUSF9BUk1fQVQ5MV9UWF9CVUZTOyBpKyspIHsKCQlwcml2LT50YmRbaV0u YWRkciA9IDA7CgkJcHJpdi0+dGJkW2ldLnNyID0gQVQ5MV9FTUFDX1RCRF9T Ul9VU0VEOwoJfQoJLy8gU2V0IHRoZSB3cmFwIGJpdCBvbiB0aGUgbGFzdCBl bnRyeQoJcHJpdi0+dGJkW0NZR05VTV9ERVZTX0VUSF9BUk1fQVQ5MV9UWF9C VUZTIC0gMV0uc3IgfD0gQVQ5MV9FTUFDX1RCRF9TUl9XUkFQOwp9CgovLz09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLy8gRW5hYmxlIGFuZCBEaXNhYmxl IG9mIHRoZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIuCgpzdGF0aWMgdm9p ZCBhdDkxX2Rpc2FibGVfcngoYXQ5MV9ldGhfcHJpdl90ICpwcml2KSB7Cglj eWdfdWludDMyIGN0bDsKCglIQUxfUkVBRF9VSU5UMzIocHJpdi0+YmFzZSAr IEFUOTFfRU1BQ19OQ1IsIGN0bCk7CgljdGwgJj0gfkFUOTFfRU1BQ19OQ1Jf UkU7CglIQUxfV1JJVEVfVUlOVDMyKHByaXYtPmJhc2UgKyBBVDkxX0VNQUNf TkNSLCBjdGwpOwp9CgpzdGF0aWMgdm9pZCBhdDkxX2Rpc2FibGVfdHgoYXQ5 MV9ldGhfcHJpdl90ICpwcml2KSB7CgljeWdfdWludDMyIGN0bDsKCglIQUxf UkVBRF9VSU5UMzIocHJpdi0+YmFzZSArIEFUOTFfRU1BQ19OQ1IsIGN0bCk7 CgljdGwgJj0gfkFUOTFfRU1BQ19OQ1JfVFg7CglIQUxfV1JJVEVfVUlOVDMy KHByaXYtPmJhc2UgKyBBVDkxX0VNQUNfTkNSLCBjdGwpOwp9CgpzdGF0aWMg dm9pZCBhdDkxX2VuYWJsZV9yeChhdDkxX2V0aF9wcml2X3QgKnByaXYpIHsK CWN5Z191aW50MzIgY3RsOwoKCUhBTF9SRUFEX1VJTlQzMihwcml2LT5iYXNl ICsgQVQ5MV9FTUFDX05DUiwgY3RsKTsKCWN0bCB8PSBBVDkxX0VNQUNfTkNS X1JFOwoJSEFMX1dSSVRFX1VJTlQzMihwcml2LT5iYXNlICsgQVQ5MV9FTUFD X05DUiwgY3RsKTsKfQoKc3RhdGljIHZvaWQgYXQ5MV9lbmFibGVfdHgoYXQ5 MV9ldGhfcHJpdl90ICpwcml2KSB7CgljeWdfdWludDMyIGN0bDsKCglIQUxf UkVBRF9VSU5UMzIocHJpdi0+YmFzZSArIEFUOTFfRU1BQ19OQ1IsIGN0bCk7 CgljdGwgfD0gQVQ5MV9FTUFDX05DUl9UWDsKCUhBTF9XUklURV9VSU5UMzIo cHJpdi0+YmFzZSArIEFUOTFfRU1BQ19OQ1IsIGN0bCk7Cn0KCnN0YXRpYyB2 b2lkIGF0OTFfZW5hYmxlKGF0OTFfZXRoX3ByaXZfdCAqcHJpdikgewoJYXQ5 MV9lbmFibGVfdHgocHJpdik7CglhdDkxX2VuYWJsZV9yeChwcml2KTsKfQoK c3RhdGljIHZvaWQgYXQ5MV9kaXNhYmxlKGF0OTFfZXRoX3ByaXZfdCAqcHJp dikgewoJYXQ5MV9kaXNhYmxlX3R4KHByaXYpOwoJYXQ5MV9kaXNhYmxlX3J4 KHByaXYpOwp9CgpzdGF0aWMgdm9pZCBhdDkxX3N0YXJ0X3RyYW5zbWl0dGVy KGF0OTFfZXRoX3ByaXZfdCAqcHJpdikgewoJY3lnX3VpbnQzMiBjdGw7CgoJ SEFMX1JFQURfVUlOVDMyKHByaXYtPmJhc2UgKyBBVDkxX0VNQUNfTkNSLCBj dGwpOwoJY3RsIHw9IEFUOTFfRU1BQ19OQ1JfVFNUQVJUOwoJSEFMX1dSSVRF X1VJTlQzMihwcml2LT5iYXNlICsgQVQ5MV9FTUFDX05DUiwgY3RsKTsKfQoK Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIEluaXRpYWxpemF0aW9u IGNvZGUKCi8vIENvbmZpZ3VyZSB0aGUgcGlucyBzbyB0aGF0IHRoZSBFTUFD IGhhcyBjb250cm9sIG9mIHRoZW0uIFRoaXMKLy8gYXNzdW1lcyB0aGUgTUlJ IGlzIHVzZWQsIG5vdCB0aGUgUk1JSQpzdGF0aWMgdm9pZCBhdDkxX2NmZ19w aW5zKHZvaWQpIHsKCUhBTF9BUk1fQVQ5MV9QSU9fQ0ZHKEFUOTFfRU1BQ19F UkVGQ0spOwoJSEFMX0FSTV9BVDkxX1BJT19DRkcoQVQ5MV9FTUFDX0VDUlMp OwoJSEFMX0FSTV9BVDkxX1BJT19DRkcoQVQ5MV9FTUFDX0VDT0wpOwoKCUhB TF9BUk1fQVQ5MV9QSU9fQ0ZHKEFUOTFfRU1BQ19FUlhEVik7CglIQUxfQVJN X0FUOTFfUElPX0NGRyhBVDkxX0VNQUNfRVJYMCk7CglIQUxfQVJNX0FUOTFf UElPX0NGRyhBVDkxX0VNQUNfRVJYMSk7CglIQUxfQVJNX0FUOTFfUElPX0NG RyhBVDkxX0VNQUNfRVJYMik7CglIQUxfQVJNX0FUOTFfUElPX0NGRyhBVDkx X0VNQUNfRVJYMyk7CglIQUxfQVJNX0FUOTFfUElPX0NGRyhBVDkxX0VNQUNf RVJYRVIpOwoJSEFMX0FSTV9BVDkxX1BJT19DRkcoQVQ5MV9FTUFDX0VSWENL KTsKCglIQUxfQVJNX0FUOTFfUElPX0NGRyhBVDkxX0VNQUNfRVRYRU4pOwoJ SEFMX0FSTV9BVDkxX1BJT19DRkcoQVQ5MV9FTUFDX0VUWDApOwoJSEFMX0FS TV9BVDkxX1BJT19DRkcoQVQ5MV9FTUFDX0VUWDEpOwoJSEFMX0FSTV9BVDkx X1BJT19DRkcoQVQ5MV9FTUFDX0VUWDIpOwoJSEFMX0FSTV9BVDkxX1BJT19D RkcoQVQ5MV9FTUFDX0VUWDMpOwoJSEFMX0FSTV9BVDkxX1BJT19DRkcoQVQ5 MV9FTUFDX0VUWEVSKTsKCglIQUxfQVJNX0FUOTFfUElPX0NGRyhBVDkxX0VN QUNfRU1EQyk7CglIQUxfQVJNX0FUOTFfUElPX0NGRyhBVDkxX0VNQUNfRU1E SU8pOwp9CgovLyBTZXQgYSBzcGVjaWZpYyBhZGRyZXNzIG1hdGNoIHRvIGEg Z2l2ZW4gYWRkcmVzcy4gUGFja2V0cyByZWNlaXZlZCB3aGljaAovLyBtYXRj aCB0aGlzIGFkZHJlc3Mgd2lsbCBiZSBwYXNzZWQgb24uCnN0YXRpYyB2b2lk IGF0OTFfc2V0X21hYyhhdDkxX2V0aF9wcml2X3QgKiBwcml2LCBjeWdfdWlu dDggKiBlbmFkZHIsIGludCBzYSkgewoJY3lnX3VpbnQzMiBoaSwgbG87CgoJ Q1lHX0FTU0VSVEMoc2EgPiAwICYmIHNhIDwgNSk7CglzYS0tOwoKCWxvID0g KChlbmFkZHJbM10gPDwgMjQpIHwgKGVuYWRkclsyXSA8PCAxNikgfCAoZW5h ZGRyWzFdIDw8IDgpIHwgKGVuYWRkclswXSkpOwoKCWhpID0gKChlbmFkZHJb NV0gPDwgOCkgfCAoZW5hZGRyWzRdKSk7CgoJSEFMX1dSSVRFX1VJTlQzMihw cml2LT5iYXNlICsgQVQ5MV9FTUFDX1NBMUwgKyAoOCpzYSksIGxvKTsKCUhB TF9XUklURV9VSU5UMzIocHJpdi0+YmFzZSArIEFUOTFfRU1BQ19TQTFIICsg KDgqc2EpLCBoaSk7Cn0KCnN0YXRpYyB2b2lkIGF0OTFfY2xlYXJfc3RhdHMo YXQ5MV9ldGhfcHJpdl90ICpwcml2KSB7CgljeWdfdWludDMyIGN0bDsKCglI QUxfUkVBRF9VSU5UMzIocHJpdi0+YmFzZSArIEFUOTFfRU1BQ19OQ1IsIGN0 bCk7CgljdGwgfD0gQVQ5MV9FTUFDX05DUl9DU1I7CglIQUxfV1JJVEVfVUlO VDMyKHByaXYtPmJhc2UgKyBBVDkxX0VNQUNfTkNSLCBjdGwpOwp9CgovLyBF bmFibGUgYW5kIERpc2FibGUgb2YgdGhlIHJlY2VpdmVyIGFuZCB0cmFuc21p dHRlci4KLy8gSW5pdGlhbGl6ZSB0aGUgaW50ZXJmYWNlLiBUaGlzIGNvbmZp Z3VyZXMgdGhlIGludGVyZmFjZSByZWFkeSBmb3IgdXNlLgovLyBJbnRlcnJ1 cHRzIGFyZSBncmFiYmVkIGV0Yy4gVGhpcyBtZWFucyB0aGUgc3RhcnQgZnVu Y3Rpb24gaGFzCi8vIGxpdHRsZSB0byBkbyBleGNlcHQgZW5hYmxlIHRoZSBy ZWNlaXZlcgpzdGF0aWMgYm9vbCBhdDkxX2V0aF9pbml0KHN0cnVjdCBjeWdf bmV0ZGV2dGFiX2VudHJ5ICp0YWIpIHsKCXN0cnVjdCBldGhfZHJ2X3NjICpz YyA9IChzdHJ1Y3QgZXRoX2Rydl9zYyAqKSB0YWItPmRldmljZV9pbnN0YW5j ZTsKCWF0OTFfZXRoX3ByaXZfdCAqcHJpdiA9IChhdDkxX2V0aF9wcml2X3Qg Kikgc2MtPmRyaXZlcl9wcml2YXRlOwoJYm9vbCBlc2Ffb2sgPSBmYWxzZTsK I2lmIDAKCXVuc2lnbmVkIGNoYXIgZW5hZGRyWzZdID0geyBDWUdQS0dfREVW U19FVEhfQVJNX0FUOTFfTUFDQUREUiB9OwojZWxzZQoJdW5zaWduZWQgY2hh ciBkZWZhdWx0X2VuYWRkcls2XSA9IHsgQ1lHUEtHX0RFVlNfRVRIX0FSTV9B VDkxX01BQ0FERFIgfTsKCXVuc2lnbmVkIGNoYXIgKmVuYWRkciA9IG1hY19m bGFzaF9hZGRyZXNzOwoJaWYgKCgqZW5hZGRyKSAmIDB4ZmZmZmZmZmZmZmZm ID09IDB4ZmZmZmZmZmZmZmZmKXsKCQllbmFkZHIgPSBkZWZhdWx0X2VuYWRk cjsKCX0KI2VuZGlmCgl1bnNpZ25lZCBjaGFyIGVuemVyb1s2XSA9IHsgMHgw LCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCB9OwoJdW5zaWduZWQgc2hvcnQg cGh5X3N0YXRlID0gMDsKCWN5Z191aW50MzIgbmNmZyA9IDA7CgoJZGVidWcx X3ByaW50ZigiXG5BVDkxX0VUSDogSW5pdGlhbGlzaW5nIEAgJXhcbiIsIHBy aXYtPmJhc2UpOwoKCXByaXYtPnR4X2J1c3kgPSBmYWxzZTsKCXByaXYtPmN1 cnJfdGJkX2lkeCA9IDA7Cglwcml2LT5jdXJyX3JiZF9pZHggPSAwOwoKCS8v IEVuYWJsZSB0aGUgY2xvY2sgdG8gdGhlIEVNQUMKCUhBTF9XUklURV9VSU5U MzIoQVQ5MV9QTUMgKyBBVDkxX1BNQ19QQ0VSLCBBVDkxX1BNQ19QQ0VSX0VN QUMpOwoJSEFMX1dSSVRFX1VJTlQzMihBVDkxX1BNQyArIEFUOTFfUE1DX1BD RVIsIEFUOTFfUE1DX1BDRVJfUElPQik7CglIQUxfV1JJVEVfVUlOVDMyKEFU OTFfUE1DICsgQVQ5MV9QTUNfUENFUiwgQVQ5MV9QTUNfUENFUl9QSU9BKTsK CgkvL2F0OTFfZGlzYWJsZShwcml2KTsKCWF0OTFfY2ZnX3BpbnMoKTsKCgkv KiBFbmFibGUgIElPIENsb2NrICovCglIQUxfV1JJVEVfVUlOVDMyKHByaXYt PmJhc2UrQVQ5MV9FTUFDX1VTUklPLCBBVDkxX0VNQUNfVVNSSU9fQ0xLRU4p OwoKCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzIGZvciB0aGUgbW9t ZW50ICAgICAgICAgICAgKi8KCS8qIFRoZSBTdGFydCBmdW5jdGlvbiBhY3R1 YWxseSBlbmFibGVzIGFsbCB0aGF0IHdlIG5lZWQgKi8KCS8vSEFMX1dSSVRF X1VJTlQzMihwcml2LT5iYXNlICsgQVQ5MV9FTUFDX0lEUiwgMHgzRkZGKTsK CS8vIElmIHdlIGFyZSBidWlsZGluZyBhbiBpbnRlcnJ1cHQgZW5hYmxlZCB2 ZXJzaW9uLCBpbnN0YWxsIHRoZQoJLy8gaW50ZXJydXB0IGhhbmRsZXIKI2lm ZGVmIENZR0lOVF9JT19FVEhfSU5UX1NVUFBPUlRfUkVRVUlSRUQKCWRlYnVn MV9wcmludGYoIkFUOTFfRVRIOiBJbnN0YWxsaW5nIEludGVycnVwdHMgb24g SVJRICVkXG4iLCBwcml2LT5pbnRyX3ZlY3Rvcik7CgljeWdfZHJ2X2ludGVy cnVwdF9jcmVhdGUocHJpdi0+aW50cl92ZWN0b3IsIDQsIChjeWdfYWRkcndv cmRfdCkgc2MsIGF0OTFfZXRoX2lzciwgZXRoX2Rydl9kc3IsCgkJCSZwcml2 LT5pbnRyX2hhbmRsZSwgJnByaXYtPmludHIpOwoKCWN5Z19kcnZfaW50ZXJy dXB0X2F0dGFjaChwcml2LT5pbnRyX2hhbmRsZSk7CgljeWdfZHJ2X2ludGVy cnVwdF91bm1hc2socHJpdi0+aW50cl92ZWN0b3IpOwojZW5kaWYKCiNpZmRl ZiBDWUdIV1JfREVWU19FVEhfQVJNX0FUOTFfR0VUX0VTQQoJLy8gR2V0IE1B QyBhZGRyZXNzIGZyb20gUmVkQm9vdCBjb25maWd1cmF0aW9uIHZhcmlhYmxl cwoJQ1lHSFdSX0RFVlNfRVRIX0FSTV9BVDkxX0dFVF9FU0EoJmVuYWRkclsw XSwgZXNhX29rKTsKCS8vIElmIHRoaXMgY2FsbCBmYWlscyBteU1hY0FkZHIg aXMgdW5jaGFuZ2VkIGFuZCBNQUMgYWRkcmVzcyBmcm9tCgkvLyBDREwgaXMg dXNlZAojZW5kaWYKCglpZiAoIWVzYV9vaykgewoJCS8vIENhbid0IGZpZ3Vy ZSBvdXQgRVNBCgkJZGVidWcxX3ByaW50ZigiQVQ5MV9FVEggLSBXYXJuaW5n ISBFU0EgdW5rbm93blxuIik7Cgl9CglkZWJ1ZzFfcHJpbnRmKCJBVDkxX0VU SDogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIGVuYWRkclsw XSwgZW5hZGRyWzFdLCBlbmFkZHJbMl0sIGVuYWRkclszXSwKCQkJZW5hZGRy WzRdLCBlbmFkZHJbNV0pOwoKCS8vIEdpdmUgdGhlIEVNQUMgaXRzIGFkZHJl c3MKCWF0OTFfc2V0X21hYyhwcml2LCBlbmFkZHIsIDEpOwoJYXQ5MV9zZXRf bWFjKHByaXYsIGVuemVybywgMik7CglhdDkxX3NldF9tYWMocHJpdiwgZW56 ZXJvLCAzKTsKCWF0OTFfc2V0X21hYyhwcml2LCBlbnplcm8sIDQpOwoKCS8v IFNldHVwIHRoZSByZWNlaXZlciBidWZmZXJzIGFuZCBkZXNjcmlwdG9ycwoJ YXQ5MV9yYl9pbml0KHByaXYpOwoKCS8vIEFuZCB0ZWxsIHRoZSBFTUFDIHdo ZXJlIHRoZSBmaXJzdCByZWNlaXZlIGJ1ZmZlciBkZXNjcmlwdG9yIGlzCglI QUxfV1JJVEVfVUlOVDMyKHByaXYtPmJhc2UgKyBBVDkxX0VNQUNfUkJRUCwg KGN5Z191aW50MzIgKXByaXYtPnJiZCk7CgoJLy8gU2V0dXAgdGhlIHRyYW5z bWl0IGRlc2NyaXB0b3JzCglhdDkxX3RiX2luaXQocHJpdik7CgoJLy8gQW5k IHRlbGwgdGhlIEVNQUMgd2hlcmUgdGhlIGZpcnN0IHRyYW5zbWl0IGJ1ZmZl ciBkZXNjcmlwdG9yIGlzCglIQUxfV1JJVEVfVUlOVDMyKHByaXYtPmJhc2Ug KyBBVDkxX0VNQUNfVEJRUCwgKGN5Z191aW50MzIgKXByaXYtPnRiZCk7CgoJ Ly8gU2V0dXAgdGhlIFBIWQoJQ1lHX0FTU0VSVEMocHJpdi0+cGh5KTsKCglh dDkxX21kaW9fZW5hYmxlKCk7CglpZiAoIV9ldGhfcGh5X2luaXQocHJpdi0+ cGh5KSkgewoJCWF0OTFfbWRpb19kaXNhYmxlKCk7CgkJcmV0dXJuIChmYWxz ZSk7Cgl9CgoJLy8gR2V0IHRoZSBjdXJyZW50IG1vZGUgYW5kIHByaW50IGl0 CglwaHlfc3RhdGUgPSBfZXRoX3BoeV9zdGF0ZShwcml2LT5waHkpOwoJYXQ5 MV9tZGlvX2Rpc2FibGUoKTsKCglIQUxfUkVBRF9VSU5UMzIocHJpdi0+YmFz ZSArIEFUOTFfRU1BQ19OQ0ZHLCBuY2ZnKTsKCglpZiAoKHBoeV9zdGF0ZSAm IEVUSF9QSFlfU1RBVF9MSU5LKSAhPSAwKSB7CgkJaWYgKCgocGh5X3N0YXRl ICYgRVRIX1BIWV9TVEFUXzEwME1CKSAhPSAwKSkgewoJCQlkZWJ1ZzFfcHJp bnRmKCJBVDkxX0VUSDogMTAwTWJ5dGUvcyIpOwoJCQluY2ZnIHw9IEFUOTFf RU1BQ19OQ0ZHX1NQRF8xMDBNYnBzOwoJCX0gZWxzZSB7CgkJCWRlYnVnMV9w cmludGYoIkFUOTFfRVRIOiAxME1ieXRlL3MiKTsKCQkJbmNmZyAmPSB+KEFU OTFfRU1BQ19OQ0ZHX1NQRF8xMDBNYnBzKTsKCQl9CgkJaWYgKChwaHlfc3Rh dGUgJiBFVEhfUEhZX1NUQVRfRkRYKSkgewoJCQlkZWJ1ZzFfcHJpbnRmKCIg RnVsbCBEdXBsZXhcbiIpOwoJCQluY2ZnIHw9IEFUOTFfRU1BQ19OQ0ZHX0ZE OwoJCX0gZWxzZSB7CgkJCWRlYnVnMV9wcmludGYoIiBIYWxmIER1cGxleFxu Iik7CgkJCW5jZmcgJj0gfihBVDkxX0VNQUNfTkNGR19GRCk7CgkJfQoJfSBl bHNlIHsKCQlkZWJ1ZzFfcHJpbnRmKCJBVDkxX0VUSDogTm8gTGlua1xuIik7 Cgl9CgoJLy9TZXR1cCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uCgluY2Zn IHw9IChBVDkxX0VNQUNfTkNGR19STENFKTsKCglIQUxfV1JJVEVfVUlOVDMy KHByaXYtPmJhc2UgKyBBVDkxX0VNQUNfTkNGRywgbmNmZyk7CgoJLy8gQ2xl YXIgdGhlIFN0YXRpc3RpY3MgY291bnRlcnM7CglhdDkxX2NsZWFyX3N0YXRz KHByaXYpOwoKCS8qIENsZWFyIHRoZSBzdGF0dXMgcmVnaXN0ZXJzICovCglI QUxfUkVBRF9VSU5UMzIocHJpdi0+YmFzZSArIEFUOTFfRU1BQ19JU1IsIG5j ZmcpOwoJSEFMX1JFQURfVUlOVDMyKHByaXYtPmJhc2UgKyBBVDkxX0VNQUNf UlNSLCBuY2ZnKTsKCUhBTF9XUklURV9VSU5UMzIocHJpdi0+YmFzZSArIEFU OTFfRU1BQ19SU1IsIG5jZmcpOwoJSEFMX1JFQURfVUlOVDMyKHByaXYtPmJh c2UgKyBBVDkxX0VNQUNfVFNSLCBuY2ZnKTsKCUhBTF9XUklURV9VSU5UMzIo cHJpdi0+YmFzZSArIEFUOTFfRU1BQ19UU1IsIG5jZmcpOwoKCS8vIEluaXRp YWxpemUgdGhlIHVwcGVyIGxheWVyIGRyaXZlcgoJX2V0aF9kcnZfaW5pdChz YywgZW5hZGRyKTsKCglyZXR1cm4gKHRydWUpOwp9CgovLyBUaGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCB0byBzdG9wIHRoZSBpbnRlcmZhY2UuCnN0YXRpYyB2 b2lkIGF0OTFfZXRoX3N0b3Aoc3RydWN0IGV0aF9kcnZfc2MgKnNjKSB7Cglh dDkxX2V0aF9wcml2X3QgKnByaXYgPSAoYXQ5MV9ldGhfcHJpdl90ICopIHNj LT5kcml2ZXJfcHJpdmF0ZTsKCglhdDkxX2Rpc2FibGUocHJpdik7Cn0KCi8v IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvICJzdGFydCB1cCIgdGhlIGlu dGVyZmFjZS4gSXQgbWF5IGJlIGNhbGxlZAovLyBtdWx0aXBsZSB0aW1lcywg ZXZlbiB3aGVuIHRoZSBoYXJkd2FyZSBpcyBhbHJlYWR5IHJ1bm5pbmcuCnN0 YXRpYyB2b2lkIGF0OTFfZXRoX3N0YXJ0KHN0cnVjdCBldGhfZHJ2X3NjICpz YywgdW5zaWduZWQgY2hhciAqZW5hZGRyLCBpbnQgZmxhZ3MpIHsKCWF0OTFf ZXRoX3ByaXZfdCAqcHJpdiA9IChhdDkxX2V0aF9wcml2X3QgKikgc2MtPmRy aXZlcl9wcml2YXRlOwoJY3lnX3VpbnQzMiBiaXRzOwoKCXByaW50X2J1ZmZz X3JlYWQocHJpdik7CgoJLy8gRW5hYmxlIHRoZSBpbnRlcnJ1cHRzIHdlIGFy ZSBpbnRlcmVzdGVkIGluCgkvLyBUT0RPOiBXZSBwcm9iYWJseSBuZWVkIHRv IGFkZCBhdCBsZWFzdCB0aGUgUkJOQSBpbnRlcnJ1cHQgaGVyZQoJLy8gICAg ICAgYXMgd2VsbCBpbiBvcmRlciB0byBkbyBzb21lIGVycm9yIGhhbmRsaW5n CgliaXRzID0gKEFUOTFfRU1BQ19JU1JfUkNPTSB8IEFUOTFfRU1BQ19JU1Jf VENPTSk7CgoJSEFMX1dSSVRFX1VJTlQzMihwcml2LT5iYXNlICsgQVQ5MV9F TUFDX0lFUiwgYml0cyk7CgoJLy8gRW5hYmxlIHRoZSByZWNlaXZlciBhbmQg dHJhbnNtaXR0ZXIKCWF0OTFfZW5hYmxlKHByaXYpOwp9CgovLyBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCBmb3IgbG93IGxldmVsICJjb250cm9sIiBvcGVy YXRpb25zCnN0YXRpYyBpbnQgYXQ5MV9ldGhfY29udHJvbChzdHJ1Y3QgZXRo X2Rydl9zYyAqc2MsIHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhLCBp bnQgbGVuZ3RoKSB7CgoJc3dpdGNoIChrZXkpIHsKCWNhc2UgRVRIX0RSVl9T RVRfTUFDX0FERFJFU1M6IHsKCQlpZiAobGVuZ3RoID49IEVUSEVSX0FERFJf TEVOKSB7CgkJCWF0OTFfZXRoX3N0b3Aoc2MpOwoKCQkJY3lnX3VpbnQ4ICog ZW5hZGRyID0gKGN5Z191aW50OCAqKSBkYXRhOwoJCQlkZWJ1ZzFfcHJpbnRm KCJBVDkxX0VUSDogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIs IGVuYWRkclswXSwgZW5hZGRyWzFdLCBlbmFkZHJbMl0sCgkJCQkJZW5hZGRy WzNdLCBlbmFkZHJbNF0sIGVuYWRkcls1XSk7CgoJCQlhdDkxX3NldF9tYWMo KGF0OTFfZXRoX3ByaXZfdCAqKSBzYy0+ZHJpdmVyX3ByaXZhdGUsIGVuYWRk ciwgMSk7CgkJCWF0OTFfZXRoX3N0YXJ0KHNjLCBlbmFkZHIsIDApOwoJCQly ZXR1cm4gMDsKCQl9CgkJcmV0dXJuIDE7Cgl9CglkZWZhdWx0OiB7CgkJZGlh Z19wcmludGYoIiVzLiVkOiBrZXkgJWx4XG4iLCBfX0ZVTkNUSU9OX18sIF9f TElORV9fLCBrZXkpOwoJCXJldHVybiAoMSk7Cgl9Cgl9Cgp9CgovLyBUaGlz IGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBzZWUgaWYgYW5vdGhlciBwYWNrZXQg Y2FuIGJlIHNlbnQuCi8vIEl0IHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBv ZiBwYWNrZXRzIHdoaWNoIGNhbiBiZSBoYW5kbGVkLgovLyBaZXJvIHNob3Vs ZCBiZSByZXR1cm5lZCBpZiB0aGUgaW50ZXJmYWNlIGlzIGJ1c3kgYW5kIGNh biBub3Qgc2VuZAovLyBhbnkgbW9yZS4KLy8KLy8gV2UgYWxsb2NhdGUgb25l IGJ1ZmZlciBkZXNjcmlwdG9yIHBlciBzY2F0dGVyL2dhdGhlciBlbnRyeS4g V2UgYXNzdW1lIHRoYXQKLy8gYSB0eXBpY2FsIHBhY2tldCB3aWxsIG5vdCBo YXZlIG1vcmUgdGhhbiAzIHN1Y2ggZW50cmllcywgYW5kIHNvIHdlIHNheSB3 ZQovLyBjYW4gc2VuZCBhIHBhY2tldCB3aGVuIHdlIGhhdmUgMyBvciBtb3Jl IGJ1ZmZlciBkZXNjcmlwdG9ycyBmcmVlCi8vCi8vIFRPRE86IEltcGxlbWVu dCB3aGF0IHRoZSBjb21tZW50IGFjdHVhbGx5IHNheXMhCnN0YXRpYyBpbnQg YXQ5MV9ldGhfY2FuX3NlbmQoc3RydWN0IGV0aF9kcnZfc2MgKnNjKSB7Cglp bnQgY2FuX3NlbmQ7CglhdDkxX2V0aF9wcml2X3QgKnByaXYgPSAoYXQ5MV9l dGhfcHJpdl90ICopIHNjLT5kcml2ZXJfcHJpdmF0ZTsKCWlmIChwcml2LT50 eF9idXN5KSB7CgkJY2FuX3NlbmQgPSAwOwoJfSBlbHNlIHsKCQljYW5fc2Vu ZCA9IDE7Cgl9CglyZXR1cm4gKGNhbl9zZW5kKTsKfQoKLy8gVGhpcyByb3V0 aW5lIGlzIGNhbGxlZCB0byBzZW5kIGRhdGEgdG8gdGhlIGhhcmR3YXJlCnN0 YXRpYyB2b2lkIGF0OTFfZXRoX3NlbmQoc3RydWN0IGV0aF9kcnZfc2MgKnNj LCBzdHJ1Y3QgZXRoX2Rydl9zZyAqc2dfbGlzdCwgaW50IHNnX2xlbiwgaW50 IHRvdGFsX2xlbiwKCQl1bnNpZ25lZCBsb25nIGtleSkgewoJYXQ5MV9ldGhf cHJpdl90ICpwcml2ID0gKGF0OTFfZXRoX3ByaXZfdCAqKSBzYy0+ZHJpdmVy X3ByaXZhdGU7CglpbnQgaTsKCWN5Z191aW50MzIgc3I7CgoJcHJpdi0+dHhf YnVzeSA9IHRydWU7CgoJcHJpdi0+bGFzdF90YmRfaWR4ID0gcHJpdi0+Y3Vy cl90YmRfaWR4OwoKCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKykgewoJ CXByaXYtPnRiZFtwcml2LT5jdXJyX3RiZF9pZHhdLmFkZHIgPSBzZ19saXN0 W2ldLmJ1ZjsKCgkJc3IgPSAoc2dfbGlzdFtpXS5sZW4gJiBBVDkxX0VNQUNf VEJEX1NSX0xFTl9NQVNLKTsKCQkvLyBTZXQgdGhlIEVuZCBPZiBGcmFtZSBi aXQgaW4gdGhlIGxhc3QgZGVzY3JpcHRvcgoJCWlmIChpID09IChzZ19sZW4g LSAxKSkgewoJCQlzciB8PSBBVDkxX0VNQUNfVEJEX1NSX0VPRjsKCQl9CgoJ CWlmIChwcml2LT5jdXJyX3RiZF9pZHggPCAoQ1lHTlVNX0RFVlNfRVRIX0FS TV9BVDkxX1RYX0JVRlMgLSAxKSkgewoJCQlwcml2LT50YmRbcHJpdi0+Y3Vy cl90YmRfaWR4XS5zciA9IHNyOwoJCQlwcml2LT5jdXJyX3RiZF9pZHgrKzsK CQl9IGVsc2UgewoJCQlwcml2LT50YmRbcHJpdi0+Y3Vycl90YmRfaWR4XS5z ciA9IChzciB8IEFUOTFfRU1BQ19UQkRfU1JfV1JBUCk7CgkJCXByaXYtPmN1 cnJfdGJkX2lkeCA9IDA7CgkJfQoJfQoKCS8vIFN0b3JlIGF3YXkgdGhlIGtl eSBmb3Igd2hlbiB0aGUgdHJhbnNtaXQgaGFzIGNvbXBsZXRlZAoJLy8gYW5k IHdlIG5lZWQgdG8gdGVsbCB0aGUgc3RhY2sgd2hpY2ggdHJhbnNtaXQgaGFz IGNvbXBsZXRlZC4KCXByaXYtPmN1cnJfdHhfa2V5ID0ga2V5OwoKCWF0OTFf c3RhcnRfdHJhbnNtaXR0ZXIocHJpdik7Cn0KCnN0YXRpYyB2b2lkIGF0OTFf cmVzZXRfdGJkKGF0OTFfZXRoX3ByaXZfdCAqcHJpdikgewoJd2hpbGUgKHBy aXYtPmN1cnJfdGJkX2lkeCAhPSBwcml2LT5sYXN0X3RiZF9pZHgpIHsKCQlp ZiAocHJpdi0+bGFzdF90YmRfaWR4ID09IChDWUdOVU1fREVWU19FVEhfQVJN X0FUOTFfVFhfQlVGUyAtIDEpKSB7CgkJCXByaXYtPnRiZFtwcml2LT5sYXN0 X3RiZF9pZHhdLnNyID0gKEFUOTFfRU1BQ19UQkRfU1JfVVNFRCB8IEFUOTFf RU1BQ19UQkRfU1JfV1JBUCk7CgkJCXByaXYtPmxhc3RfdGJkX2lkeCA9IDA7 CgkJfSBlbHNlIHsKCQkJcHJpdi0+dGJkW3ByaXYtPmxhc3RfdGJkX2lkeF0u c3IgPSBBVDkxX0VNQUNfVEJEX1NSX1VTRUQ7CgkJCXByaXYtPmxhc3RfdGJk X2lkeCsrOwoJCX0KCX0KfQoKLy89PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CgojaWZkZWYgQ1lHSU5UX0lPX0VUSF9JTlRfU1VQUE9SVF9SRVFVSVJFRApz dGF0aWMgY3lnX3VpbnQzMiBhdDkxX2V0aF9pc3IoY3lnX3ZlY3Rvcl90IHZl Y3RvciwgY3lnX2FkZHJ3b3JkX3QgZGF0YSkgewoJc3RydWN0IGV0aF9kcnZf c2MgKnNjID0gKHN0cnVjdCBldGhfZHJ2X3NjICopIGRhdGE7CglhdDkxX2V0 aF9wcml2X3QgKnByaXYgPSAoYXQ5MV9ldGhfcHJpdl90ICopIHNjLT5kcml2 ZXJfcHJpdmF0ZTsKCWN5Z191aW50MzIgcmV0OwoJY3lnX3VpbnQzMiBpc3I7 CgoJLyogR2V0IHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovCglIQUxfUkVBRF9V SU5UMzIocHJpdi0+YmFzZStBVDkxX0VNQUNfSVNSLCBpc3IpOwoKCXJldCA9 IENZR19JU1JfSEFORExFRDsKCgkvL1RPRE86IFdlIHNob3VsZCBwcm9iYWJs eSBiZSBoYW5kbGluZyBzb21lIG9mIHRoZSBlcnJvciBpbnRlcnJ1cHRzIGFz IHdlbGwKCWlmIChpc3IgJiBBVDkxX0VNQUNfSVNSX1RDT00pIHsKCQlyZXQg PSBDWUdfSVNSX0NBTExfRFNSOwoJfQoKCWlmIChpc3IgJiBBVDkxX0VNQUNf SVNSX1JDT00pIHsKCQlyZXQgPSBDWUdfSVNSX0NBTExfRFNSOwoJfQoJY3ln X2ludGVycnVwdF9hY2tub3dsZWRnZSh2ZWN0b3IpOwoJcmV0dXJuIChyZXQp Owp9CiNlbmRpZgoKCiNpZiAxIC8qIE5ldyBjb2RlOiBvbGQgdmVyaXNpb24g aGFuZGxlcyB0aGUgMTI4IEJ5dGUgYnVmZmVyIGNhbGN1bGF0aW9uIG5vdCBy aWdodCBhbmQgYWxzbyBjYW4gYmxvY2sgdW5kZXIgc29tZSBjaXJjdW1zdGFu Y2VzICovCnN0YXRpYyBfX2F0dHJpYnV0ZV9fKChvcHRpbWl6ZSgiTzMiKSkp IHZvaWQgYXQ5MV9ldGhfZGVsaXZlcihzdHJ1Y3QgZXRoX2Rydl9zYyAqc2Mp IHsKCWF0OTFfZXRoX3ByaXZfdCAqcHJpdiA9IChhdDkxX2V0aF9wcml2X3Qg Kikgc2MtPmRyaXZlcl9wcml2YXRlOwoKCWN5Z191aW50MzIgdHNyOwoJY3ln X3VpbnQzMiByc3I7CgoJY3lnX3VpbnQzMiBjbnQ7CgljeWdfdWludDMyIGlk eDsKCgkvKiBHZXQgdGhlIFRyYW5zbWl0IFN0YXR1cyAqLwoJSEFMX1JFQURf VUlOVDMyKHByaXYtPmJhc2UrQVQ5MV9FTUFDX1RTUiwgdHNyKTsKCUhBTF9X UklURV9VSU5UMzIocHJpdi0+YmFzZStBVDkxX0VNQUNfVFNSLCB0c3IpOwoK CS8qIEdldCB0aGUgUmVjZWl2ZSBTdGF0dXMgKi8KCUhBTF9SRUFEX1VJTlQz Mihwcml2LT5iYXNlK0FUOTFfRU1BQ19SU1IsIHJzcik7CglIQUxfV1JJVEVf VUlOVDMyKHByaXYtPmJhc2UrQVQ5MV9FTUFDX1JTUiwgcnNyKTsKCgkvL1RP RE86IFRoZSBpbnRlcnJ1cHRzIG90aGVyIHRoYW4gUkNPTVAgYW5kIFRDT01Q IG5lZWRzIHRvIGJlCgkvLyAgICAgIGhhbmRsZWQgcHJvcGVybHkgZXNwZWNp YWxseSBzdHVmZiBsaWtlIFJCTkEgd2hpY2ggY291bGQgaGF2ZQoJLy8gICAg ICBzZXJpb3VzIGVmZmVjdHMgb24gZHJpdmVyIHBlcmZvcm1hbmNlCgoJLyog U2VydmljZSB0aGUgVFggYnVmZmVycyAqLwoJaWYgKHRzciAmIEFUOTFfRU1B Q19UU1JfQ09MKSAgLy8xCgl7CgkJZGVidWcxX3ByaW50ZigiQVQ5MV9FVEg6 IFR4IENPTFxuIik7Cgl9CgoJaWYgKHRzciAmIEFUOTFfRU1BQ19UU1JfUkxF KSAgLy8yCgl7CgkJZGVidWcxX3ByaW50ZigiQVQ5MV9FVEg6IFR4IFJMRVxu Iik7Cgl9CgoJaWYgKHRzciAmIEFUOTFfRU1BQ19UU1JfQk5RKSAgLy80Cgl7 CgkJZGVidWcxX3ByaW50ZigiQVQ5MV9FVEg6IFR4IEJFWFxuIik7Cgl9CgoJ aWYgKHRzciAmIEFUOTFfRU1BQ19UU1JfVU5EKSAgLy82Cgl7CgkJZGVidWcx X3ByaW50ZigiQVQ5MV9FVEg6IFR4IFVORFxuIik7Cgl9CgoJLyogQ2hlY2sg dGhhdCB0aGUgbGFzdCB0cmFuc21pc3Npb24gaXMgY29tcGxldGVkICovCglp ZiAodHNyICYgQVQ5MV9FTUFDX1RTUl9DT01QKSAvLzUKCXsKCQlhdDkxX3Jl c2V0X3RiZChwcml2KTsKCQlfZXRoX2Rydl90eF9kb25lKHNjLCBwcml2LT5j dXJyX3R4X2tleSwgMCk7CgkJcHJpdi0+dHhfYnVzeSA9IGZhbHNlOwoJfQoK CS8qIFNlcnZpY2UgdGhlIFJYIGJ1ZmZlcnMgd2hlbiB3ZSBnZXQgc29tZXRo aW5nICovCglpZiAocnNyICYgQVQ5MV9FTUFDX1JTUl9SRUMpIHsKCiNkZWZp bmUgTk9UX0RFRklORUQgLTEKCgkJY3lnX2ludDMyIGJlZ3BhY2sgPSBOT1Rf REVGSU5FRDsKCQljeWdfaW50MzIgaSA9IDA7CgoJCWlkeCA9IHByaXYtPmN1 cnJfcmJkX2lkeDsKCQljbnQgPSAwOwoKCQlmb3IgKGkgPSAwOyBpIDwgQ1lH TlVNX0RFVlNfRVRIX0FSTV9BVDkxX1JYX0JVRlM7IGkrKykgewoKCQkJaWYg KHByaXYtPnJiZFtpZHhdLmFkZHIgJiBBVDkxX0VNQUNfUkJEX0FERFJfT1dO RVJfU1cpewoKCQkJCWlmIChwcml2LT5yYmRbaWR4XS5zciAmIEFUOTFfRU1B Q19SQkRfU1JfU09GKXsKCQkJCQliZWdwYWNrID0gaWR4OwoJCQkJfQoJCQkJ aWYgKGJlZ3BhY2sgIT0gTk9UX0RFRklORUQpewoJCQkJCWlmIChwcml2LT5y YmRbaWR4XS5zciAmIEFUOTFfRU1BQ19SQkRfU1JfTEVOX01BU0spIHsKCQkJ CQkJY250ICs9IChwcml2LT5yYmRbaWR4XS5zciAmIEFUOTFfRU1BQ19SQkRf U1JfTEVOX01BU0spOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWNudCArPSBBVDkx X0VNQUNfUlhfQlVGRl9TSVpFOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJ cHJpdi0+cmJkW2lkeF0uYWRkciAmPSB+KEFUOTFfRU1BQ19SQkRfQUREUl9P V05FUl9TVyk7CgkJCQl9CgkJCQlpZiAocHJpdi0+cmJkW2lkeF0uc3IgJiBB VDkxX0VNQUNfUkJEX1NSX0VPRil7CgkJCQkJaWYgKGJlZ3BhY2sgPT0gTk9U X0RFRklORUQpewoJCQkJCQljbnQgPSAwOwoJCQkJCQlwcml2LT5yYmRbaWR4 XS5hZGRyICY9IH4oQVQ5MV9FTUFDX1JCRF9BRERSX09XTkVSX1NXKTsKCQkJ CQl9IGVsc2UgewoJCQkJCQlwcml2LT5jdXJyX3JiZF9pZHggPSBiZWdwYWNr OwoJCQkJCQlfZXRoX2Rydl9yZWN2KHNjLCBjbnQpOwoJCQkJCX0KCQkJCX0K CQkJfSBlbHNlIHsKCQkJCWlmIChiZWdwYWNrICE9IE5PVF9ERUZJTkVEKXsK CQkJCQl3aGlsZSAoYmVncGFjayAhPSBpZHgpewoJCQkJCQlwcml2LT5yYmRb YmVncGFja10uYWRkciAmPSB+KEFUOTFfRU1BQ19SQkRfQUREUl9PV05FUl9T Vyk7CgkJCQkJCWJlZ3BhY2srKzsKCQkJCQkJaWYgKGJlZ3BhY2sgPiBDWUdO VU1fREVWU19FVEhfQVJNX0FUOTFfUlhfQlVGUy0xKSB7CgkJCQkJCQliZWdw YWNrID0gMDsKCQkJCQkJfQoJCQkJCX0KCgkJCQkJYmVncGFjayA9IE5PVF9E RUZJTkVEOwoJCQkJCWNudCA9IDA7CgkJCQl9CgkJCX0KCQkJaWR4Kys7CgkJ CWlmIChpZHggPiBDWUdOVU1fREVWU19FVEhfQVJNX0FUOTFfUlhfQlVGUy0x KSB7CgkJCQlpZHggPSAwOwoJCQl9CgkJfQoJfQoKCWlmIChyc3IgJiBBVDkx X0VNQUNfUlNSX0JOQSkgewoJCWRlYnVnMV9wcmludGYoIkFUOTFfRVRIOiBS eCBCTkFcbiIpOwoJfQoJaWYgKHJzciAmIEFUOTFfRU1BQ19SU1JfT1ZSKSB7 CgkJZGVidWcxX3ByaW50ZigiQVQ5MV9FVEg6IFJ4IE9WUlxuIik7Cgl9Cgp9 CiNlbHNlCnN0YXRpYyB2b2lkCmF0OTFfZXRoX2RlbGl2ZXIoc3RydWN0IGV0 aF9kcnZfc2MgKnNjKQp7CiAgIGF0OTFfZXRoX3ByaXZfdCAqcHJpdiA9IChh dDkxX2V0aF9wcml2X3QgKilzYy0+ZHJpdmVyX3ByaXZhdGU7CgogICBjeWdf dWludDMyIHRzcjsKICAgY3lnX3VpbnQzMiByc3I7CgogICBjeWdfdWludDMy IGN0cjsKICAgY3lnX3VpbnQzMiBjbnQ7CiAgIGN5Z191aW50MzIgaWR4OwoK ICAgLyogR2V0IHRoZSBUcmFuc21pdCBTdGF0dXMgKi8KICAgSEFMX1JFQURf VUlOVDMyKHByaXYtPmJhc2UrQVQ5MV9FTUFDX1RTUix0c3IpOwogICBIQUxf V1JJVEVfVUlOVDMyKHByaXYtPmJhc2UrQVQ5MV9FTUFDX1RTUix0c3IpOwoK ICAgLyogR2V0IHRoZSBSZWNlaXZlIFN0YXR1cyAqLwogICBIQUxfUkVBRF9V SU5UMzIocHJpdi0+YmFzZStBVDkxX0VNQUNfUlNSLHJzcik7CiAgIEhBTF9X UklURV9VSU5UMzIocHJpdi0+YmFzZStBVDkxX0VNQUNfUlNSLHJzcik7CgoK ICAgLy9UT0RPOiBUaGUgaW50ZXJydXB0cyBvdGhlciB0aGFuIFJDT01QIGFu ZCBUQ09NUCBuZWVkcyB0byBiZQogICAvLyAgICAgIGhhbmRsZWQgcHJvcGVy bHkgZXNwZWNpYWxseSBzdHVmZiBsaWtlIFJCTkEgd2hpY2ggY291bGQgaGF2 ZQogICAvLyAgICAgIHNlcmlvdXMgZWZmZWN0cyBvbiBkcml2ZXIgcGVyZm9y bWFuY2UKCiAgIC8qIFNlcnZpY2UgdGhlIFRYIGJ1ZmZlcnMgKi8KICAgaWYg KHRzciZBVDkxX0VNQUNfVFNSX0NPTCkgIC8vMQogICB7CiAgICAgIGRlYnVn MV9wcmludGYoIkFUOTFfRVRIOiBUeCBDT0xcbiIpOwogICB9CgogICBpZiAo dHNyJkFUOTFfRU1BQ19UU1JfUkxFKSAgLy8yCiAgIHsKICAgICAgZGVidWcx X3ByaW50ZigiQVQ5MV9FVEg6IFR4IFJMRVxuIik7CiAgIH0KCiAgIGlmICh0 c3ImQVQ5MV9FTUFDX1RTUl9CTlEpICAvLzQKICAgewogICAgICBkZWJ1ZzFf cHJpbnRmKCJBVDkxX0VUSDogVHggQkVYXG4iKTsKICAgfQoKICAgaWYgKHRz ciZBVDkxX0VNQUNfVFNSX1VORCkgIC8vNgogICB7CiAgICAgIGRlYnVnMV9w cmludGYoIkFUOTFfRVRIOiBUeCBVTkRcbiIpOwogICB9CgogICAvKiBDaGVj ayB0aGF0IHRoZSBsYXN0IHRyYW5zbWlzc2lvbiBpcyBjb21wbGV0ZWQgKi8K ICAgaWYgKHRzciZBVDkxX0VNQUNfVFNSX0NPTVApIC8vNQogICB7CiAgICAg IGF0OTFfcmVzZXRfdGJkKHByaXYpOwogICAgICBfZXRoX2Rydl90eF9kb25l KHNjLHByaXYtPmN1cnJfdHhfa2V5LDApOwogICAgICBwcml2LT50eF9idXN5 ID0gZmFsc2U7CiAgIH0KCiAgIC8qIFNlcnZpY2UgdGhlIFJYIGJ1ZmZlcnMg d2hlbiB3ZSBnZXQgc29tZXRoaW5nICovCiAgIGlmIChyc3ImQVQ5MV9FTUFD X1JTUl9SRUMpCiAgIHsKICAgICAgLyogRG8gdGhpcyBhbGwgdW50aWwgd2Ug ZmluZCB0aGUgZmlyc3QgRU1BQyBCdWZmZXIgKi8KICAgICAgd2hpbGUgKHBy aXYtPnJiZFtwcml2LT5jdXJyX3JiZF9pZHhdLmFkZHIgJiBBVDkxX0VNQUNf UkJEX0FERFJfT1dORVJfU1cpCiAgICAgIHsKCiAgICAgICAgIC8vRmlyc3Rs eSB3YWxrIHRocm91Z2ggdG8gZWl0aGVyIHRoZSBmaXJzdCBidWZmZXIgdGhh dCBiZWxvbmdzCiAgICAgICAgIC8vIHRvIHRoZSBjb250cm9sbGVyIG9yIHRo ZSBmaXJzdCBTT0YKICAgICAgICAgd2hpbGUgKChwcml2LT5yYmRbcHJpdi0+ Y3Vycl9yYmRfaWR4XS5hZGRyICYKCQkgQVQ5MV9FTUFDX1JCRF9BRERSX09X TkVSX1NXKSAmJgogICAgICAgICAgICAgICAgIShwcml2LT5yYmRbcHJpdi0+ Y3Vycl9yYmRfaWR4XS5zciAmCgkJICBBVDkxX0VNQUNfUkJEX1NSX1NPRikp CiAgICAgICAgIHsKICAgICAgICAgICAgcHJpdi0+cmJkW3ByaXYtPmN1cnJf cmJkX2lkeF0uYWRkciAmPQoJICAgICAgfihBVDkxX0VNQUNfUkJEX0FERFJf T1dORVJfU1cpOwogICAgICAgICAgICBwcml2LT5jdXJyX3JiZF9pZHgrKzsK ICAgICAgICAgICAgaWYgKHByaXYtPmN1cnJfcmJkX2lkeCA+PSBDWUdOVU1f REVWU19FVEhfQVJNX0FUOTFfUlhfQlVGUykKICAgICAgICAgICAgewogICAg ICAgICAgICAgICBwcml2LT5jdXJyX3JiZF9pZHggPSAwOwogICAgICAgICAg ICB9CiAgICAgICAgIH0KCiAgICAgICAgIC8qIENoZWNrIHRoYXQgd2UgZGlk IGZpbmQgYSBTT0YqLwogICAgICAgICBpZiAoKHByaXYtPnJiZFtwcml2LT5j dXJyX3JiZF9pZHhdLmFkZHIgJgoJICAgICAgQVQ5MV9FTUFDX1JCRF9BRERS X09XTkVSX1NXKSAmJgogICAgICAgICAgICAgKHByaXYtPnJiZFtwcml2LT5j dXJyX3JiZF9pZHhdLnNyICYgQVQ5MV9FTUFDX1JCRF9TUl9TT0YpKQogICAg ICAgICB7CiAgICAgICAgICAgIGNudCA9IDA7CiAgICAgICAgICAgIGZvciAo Y3RyPTA7Y3RyPENZR05VTV9ERVZTX0VUSF9BUk1fQVQ5MV9SWF9CVUZTO2N0 cisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGlkeCA9IChjdHIr cHJpdi0+Y3Vycl9yYmRfaWR4KSVDWUdOVU1fREVWU19FVEhfQVJNX0FUOTFf UlhfQlVGUzsKICAgICAgICAgICAgICAgY250ICs9IChwcml2LT5yYmRbaWR4 XS5zciAmIEFUOTFfRU1BQ19SQkRfU1JfTEVOX01BU0spOwogICAgICAgICAg ICAgICBpZiAocHJpdi0+cmJkW2lkeF0uc3IgJiBBVDkxX0VNQUNfUkJEX1NS X0VPRikKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAvKiBU aGUgcmVjdiBmdW5jdGlvbiB3aWxsIGFkanVzdCB0aGUgY3VycmVudCBidWZm ZXIgaWR4CiAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBidWZmZXIg aGFzIGJlZW4gY2xlYXJlZAogICAgICAgICAgICAgICAgICAgKi8KICAgICAg ICAgICAgICAgICAgaWYgKGNudCkKICAgICAgICAgICAgICAgICAgICAgX2V0 aF9kcnZfcmVjdihzYyxjbnQpOwogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgIH0KICAg ICAgfQogICB9CgogICBpZiAocnNyJkFUOTFfRU1BQ19SU1JfQk5BKQogICB7 CiAgICAgIGRlYnVnMV9wcmludGYoIkFUOTFfRVRIOiBSeCBCTkFcbiIpOwog ICB9CiAgIGlmIChyc3ImQVQ5MV9FTUFDX1JTUl9PVlIpCiAgIHsKICAgICAg ZGVidWcxX3ByaW50ZigiQVQ5MV9FVEg6IFJ4IE9WUlxuIik7CiAgIH0KCn0K I2VuZGlmCgpzdGF0aWMgX19hdHRyaWJ1dGVfXygob3B0aW1pemUoIk8zIikp KSB2b2lkIGF0OTFfZXRoX3JlY3Yoc3RydWN0IGV0aF9kcnZfc2MgKnNjLCBz dHJ1Y3QgZXRoX2Rydl9zZyAqc2dfbGlzdCwgaW50IHNnX2xlbikgewoKCWF0 OTFfZXRoX3ByaXZfdCAqcHJpdiA9IChhdDkxX2V0aF9wcml2X3QgKikgc2Mt PmRyaXZlcl9wcml2YXRlOwoJaW50IGk7CgljeWdfdWludDMyIGJ5dGVzX2lu X2J1ZmZlciA9IDA7CgljeWdfdWludDMyIGJ5dGVzX2luX2xpc3QgPSAwOwoJ Y3lnX3VpbnQzMiBieXRlc19uZWVkZWRfbGlzdCA9IDA7CgljeWdfdWludDMy IGJ1ZmZlcl9wb3MgPSAwOwoJY3lnX3VpbnQ4ICogc2dfYnVmOwoJY3lnX3Vp bnQzMiB0b3RhbF9ieXRlcyA9IDA7CgoJZm9yIChpID0gMDsgaSA8IHNnX2xl bjsgaSsrKSB7CgkJd2hpbGUgKGJ5dGVzX2luX2xpc3QgPCBzZ19saXN0W2ld LmxlbikgewoJCQlieXRlc19uZWVkZWRfbGlzdCA9IHNnX2xpc3RbaV0ubGVu IC0gYnl0ZXNfaW5fbGlzdDsKCgkJCWlmIChwcml2LT5yYmRbcHJpdi0+Y3Vy cl9yYmRfaWR4XS5zciAmIEFUOTFfRU1BQ19SQkRfU1JfTEVOX01BU0spIHsK CQkJCWJ5dGVzX2luX2J1ZmZlciA9ICgocHJpdi0+cmJkW3ByaXYtPmN1cnJf cmJkX2lkeF0uc3IgJiBBVDkxX0VNQUNfUkJEX1NSX0xFTl9NQVNLKSAtIHRv dGFsX2J5dGVzKQoJCQkJCQktIGJ1ZmZlcl9wb3M7CgkJCX0gZWxzZSB7CgkJ CQlieXRlc19pbl9idWZmZXIgPSBBVDkxX0VNQUNfUlhfQlVGRl9TSVpFIC0g YnVmZmVyX3BvczsKCQkJfQoKCQkJc2dfYnVmID0gKGN5Z191aW50OCAqKSAo c2dfbGlzdFtpXS5idWYpOwoKCQkJaWYgKGJ5dGVzX25lZWRlZF9saXN0IDwg Ynl0ZXNfaW5fYnVmZmVyKSB7CgkJCQlpZiAoc2dfYnVmICE9IE5VTEwpCgkJ CQkJbWVtY3B5KCZzZ19idWZbYnl0ZXNfaW5fbGlzdF0sICZwcml2LT5yYltw cml2LT5jdXJyX3JiZF9pZHhdLnJiW2J1ZmZlcl9wb3NdLAoJCQkJCQkJYnl0 ZXNfbmVlZGVkX2xpc3QpOwoJCQkJYnl0ZXNfaW5fbGlzdCArPSBieXRlc19u ZWVkZWRfbGlzdDsKCQkJCWJ1ZmZlcl9wb3MgKz0gYnl0ZXNfbmVlZGVkX2xp c3Q7CgkJCQl0b3RhbF9ieXRlcyArPSBieXRlc19uZWVkZWRfbGlzdDsKCQkJ fSBlbHNlIHsKCQkJCWlmIChzZ19idWYgIT0gTlVMTCkKCQkJCQltZW1jcHko JnNnX2J1ZltieXRlc19pbl9saXN0XSwgJnByaXYtPnJiW3ByaXYtPmN1cnJf cmJkX2lkeF0ucmJbYnVmZmVyX3Bvc10sCgkJCQkJCQlieXRlc19pbl9idWZm ZXIpOwoJCQkJYnl0ZXNfaW5fbGlzdCArPSBieXRlc19pbl9idWZmZXI7CgkJ CQl0b3RhbF9ieXRlcyArPSBieXRlc19pbl9idWZmZXI7CgoJCQkJLyogU3Rl cCBvdXIgYnVmZmVyIG9uIG9uZSAqLwoJCQkJcHJpdi0+cmJkW3ByaXYtPmN1 cnJfcmJkX2lkeF0uYWRkciAmPSB+KEFUOTFfRU1BQ19SQkRfQUREUl9PV05F Ul9TVyk7CgkJCQlwcml2LT5jdXJyX3JiZF9pZHgrKzsKCQkJCWlmIChwcml2 LT5jdXJyX3JiZF9pZHggPiBDWUdOVU1fREVWU19FVEhfQVJNX0FUOTFfUlhf QlVGUy0xKSB7CgkJCQkJcHJpdi0+Y3Vycl9yYmRfaWR4ID0gMDsKCQkJCX0K CQkJCWJ1ZmZlcl9wb3MgPSAwOwoJCQl9CgkJfQoJfQp9CgoKCi8vIHJvdXRp bmUgY2FsbGVkIHRvIGhhbmRsZSBldGhlcm5ldCBjb250cm9sbGVyIGluIHBv bGxlZCBtb2RlCnN0YXRpYyB2b2lkIGF0OTFfZXRoX3BvbGwoc3RydWN0IGV0 aF9kcnZfc2MgKnNjKSB7CgkvKiBTZXJ2aWNlIHRoZSBidWZmZXJzICovCglh dDkxX2V0aF9kZWxpdmVyKHNjKTsKfQoKc3RhdGljIGludCBhdDkxX2V0aF9p bnRfdmVjdG9yKHN0cnVjdCBldGhfZHJ2X3NjICpzYykgewoJcmV0dXJuIChD WUdOVU1fSEFMX0lOVEVSUlVQVF9FTUFDKTsKfQoKYXQ5MV9ldGhfcHJpdl90 IGF0OTFfcHJpdl9kYXRhID0KCQl7IC5pbnRyX3ZlY3RvciA9IENZR05VTV9I QUxfSU5URVJSVVBUX0VNQUMsIC5iYXNlID0gQVQ5MV9FTUFDLCAucGh5ID0g JmF0OTFfcGh5IH07CgpFVEhfRFJWX1NDKGF0OTFfc2MsCgkJJmF0OTFfcHJp dl9kYXRhLCAgICAgICAvLyBEcml2ZXIgc3BlY2lmaWMgZGF0YQoJCSJldGgw IiwvLyBOYW1lIGZvciB0aGlzIGludGVyZmFjZQoJCWF0OTFfZXRoX3N0YXJ0 LCBhdDkxX2V0aF9zdG9wLCBhdDkxX2V0aF9jb250cm9sLCBhdDkxX2V0aF9j YW5fc2VuZCwgYXQ5MV9ldGhfc2VuZCwgYXQ5MV9ldGhfcmVjdiwKCQlhdDkx X2V0aF9kZWxpdmVyLCBhdDkxX2V0aF9wb2xsLCBhdDkxX2V0aF9pbnRfdmVj dG9yKTsKCk5FVERFVlRBQl9FTlRSWShhdDkxX25ldGRldiwgImF0OTEiLCBh dDkxX2V0aF9pbml0LCAmYXQ5MV9zYyk7CgovLyBFT0YgaWZfYXQ5MS5jCg== --=_24a45b9769996675f732473277dc4246 Content-Transfer-Encoding: base64 Content-Type: application/octet-stream; charset=UTF-8; name=sequential.c; Content-Disposition: attachment; filename=sequential.c; Content-length: 12477 Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLwovLyAgICAgIHNl cXVlbnRpYWwuYwovLwovLyAgICAgIGx3SVAgc2VxdWVudGlhbCBtb2RlICht dWx0aS10aHJlYWRlZCkgc3VwcG9ydC4KLy8KLy89PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQovLyMjIyNFQ09TR1BMQ09QWVJJR0hUQkVHSU4jIyMj Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgZUNvcywgdGhlIEVtYmVkZGVk IENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLgovLyBDb3B5cmlnaHQg KEMpIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi8vCi8v IGVDb3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgovLyB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZQovLyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8v Ci8vIGVDb3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCi8vIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB QklMSVRZIG9yCi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQovLyBmb3Ig bW9yZSBkZXRhaWxzLgovLwovLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9u ZwovLyB3aXRoIGVDb3M7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLy8gNTkgVGVtcGxlIFBsYWNlLCBT dWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCi8vCi8vIEFz IGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRp YXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zCi8vIG9yIGlubGluZSBmdW5j dGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmls ZSBhbmQgbGluayBpdAovLyB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2Ug YSB3b3JrIGJhc2VkIG9uIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGRvZXMgbm90 Ci8vIGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUg Y292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCi8vIExpY2Vuc2Uu IEhvd2V2ZXIgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGlzIGZpbGUgbXVzdCBz dGlsbCBiZSBtYWRlIGF2YWlsYWJsZQovLyBpbiBhY2NvcmRhbmNlIHdpdGgg c2VjdGlvbiAoMykgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl LgovLwovLyBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBpbnZhbGlkYXRlIGFu eSBvdGhlciByZWFzb25zIHdoeSBhIHdvcmsgYmFzZWQgb24KLy8gdGhpcyBm aWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi8vIyMjI0VDT1NHUExDT1BZUklHSFRFTkQjIyMjCi8v PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8jIyMjI0RFU0NSSVBU SU9OQkVHSU4jIyMjCi8vCi8vIEF1dGhvcihzKTogICAgU2ltb24gS2FsbHdl aXQKLy8gQ29udHJpYnV0b3JzOgovLyBEYXRlOiAgICAgICAgIDIwMDgtMTIt MDIKLy8gUHVycG9zZToKLy8gRGVzY3JpcHRpb246ICBsd0lQIHNlcXVlbnRp YWwgbW9kZSAobXVsdGktdGhyZWFkZWQpIHN1cHBvcnQuCi8vCi8vIyMjI0RF U0NSSVBUSU9ORU5EIyMjIwovLwovLz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CgojaW5jbHVkZSA8cGtnY29uZi9zeXN0ZW0uaD4KI2luY2x1ZGUg PHBrZ2NvbmYvbmV0X2x3aXAuaD4KCiNpbmNsdWRlICJsd2lwLmgiCiNpbmNs dWRlICJsd2lwL29wdC5oIgojaW5jbHVkZSAibHdpcC9zeXMuaCIKI2luY2x1 ZGUgImx3aXAvbWVtcC5oIgojaW5jbHVkZSAibHdpcC9pcF9hZGRyLmgiCiNp bmNsdWRlICJsd2lwL2luaXQuaCIKI2luY2x1ZGUgImx3aXAvdGNwLmgiCiNp bmNsdWRlICJsd2lwL2lwX2ZyYWcuaCIKI2luY2x1ZGUgImx3aXAvZGhjcC5o IgojaW5jbHVkZSAibHdpcC9hdXRvaXAuaCIKI2luY2x1ZGUgImx3aXAvaWdt cC5oIgojaW5jbHVkZSAibHdpcC9kbnMuaCIKI2luY2x1ZGUgImx3aXAvbWVt cC5oIgojaW5jbHVkZSAibHdpcC90Y3BpcC5oIgoKI2luY2x1ZGUgIm5ldGlm L2xvb3BpZi5oIgojaW5jbHVkZSAibmV0aWYvc2xpcGlmLmgiCiNpbmNsdWRl ICJuZXRpZi9ldGhhcnAuaCIKI2luY2x1ZGUgIm5ldGlmL3BwcC9wcHAuaCIK CiNpbmNsdWRlIDxjeWcvaW5mcmEvZGlhZy5oPgojaW5jbHVkZSA8Y3lnL2tl cm5lbC9rYXBpLmg+CgojaWZkZWYgQ1lHREJHX0hBTF9ERUJVR19HREJfQ1RS TENfU1VQUE9SVAojaW5jbHVkZSA8Y3lnL2hhbC9oYWxfaWYuaD4gICAgICAg ICAgICAvLyBIQUxfQ1RSTENfQ0hFQ0sKI2VuZGlmCgojaWZkZWYgQ1lHUEtH X0xXSVBfRVRICiNpbmNsdWRlIDxjeWcvaW8vZXRoL2V0aF9kcnYuaD4KI2lu Y2x1ZGUgPGN5Zy9pby9ldGgvbmV0ZGV2Lmg+CiNlbmRpZgoKI2lmIExXSVBf SEFWRV9MT09QSUYgJiYgZGVmaW5lZChDWUdJTVBfTFdJUF9MT09QSUZfSU5T VEFOQ0UpCnN0YXRpYyBzdHJ1Y3QgbmV0aWYgbG9vcGlmOwojZW5kaWYKCiNp ZiBMV0lQX0hBVkVfU0xJUElGICYmIGRlZmluZWQoQ1lHSU1QX0xXSVBfU0xJ UElGX0lOU1RBTkNFKQpzdGF0aWMgc3RydWN0IG5ldGlmIHNsaXBpZjsKI2Vu ZGlmCgojaWZkZWYgQ1lHUEtHX0xXSVBfRVRICgovLyBFdGhlcm5ldCBkcml2 ZXIgdGFibGUKQ1lHX0hBTF9UQUJMRV9CRUdJTihfX05FVERFVlRBQl9fLCBu ZXRkZXYpOwpDWUdfSEFMX1RBQkxFX0VORChfX05FVERFVlRBQl9FTkRfXywg bmV0ZGV2KTsKCnN0YXRpYyBzeXNfdGhyZWFkX3QgZXRoX3RocmVhZF9oYW5k bGU7CnN0YXRpYyBjeWdfc2VtX3QgZXRoX3RocmVhZF9zZW07CgpzdGF0aWMg dm9pZCBldGhfdGhyZWFkKHZvaWQgKmRhdGEpOwoKI2VuZGlmCgojaWYgKExX SVBfSEFWRV9MT09QSUYgJiYgZGVmaW5lZChDWUdJTVBfTFdJUF9MT09QSUZf SU5TVEFOQ0UpKSB8fCBcCiAgICAoTFdJUF9IQVZFX1NMSVBJRiAmJiBkZWZp bmVkKENZR0lNUF9MV0lQX1NMSVBJRl9JTlNUQU5DRSkpCgovLwovL8KgU2V0 cyBhbiBJUMKgYWRkcmVzcy4KLy8Kc3RhdGljIHZvaWQKc2V0X2lwX2FkZHIo c3RydWN0IGlwX2FkZHIgKmFkZHIsIHU4X3QgYSwgdThfdCBiLCB1OF90IGMs IHU4X3QgZCkKewogICAgSVA0X0FERFIoYWRkciwgYSwgYiwgYywgZCk7Cn0K CiNlbmRpZiAvLyAoTFdJUF9IQVZFX0xPT1BJRiAmJiBkZWZpbmVkKENZR0lN UF9MV0lQX0xPT1BJRl9JTlNUQU5DRSkpIHx8CiAgICAgICAvLyAoTFdJUF9I QVZFX1NMSVBJRiAmJiBkZWZpbmVkKENZR0lNUF9MV0lQX1NMSVBJRl9JTlNU QU5DRSkpCgojaWZkZWYgQ1lHRlVOX0xXSVBfU0hPV19ORVRJRl9DT05GSUcK CnN0YXRpYyB2b2lkCnNob3dfbmV0aWZfY29uZmlnKHN0cnVjdCBuZXRpZiAq bmV0aWYpCnsKICAgIGRpYWdfcHJpbnRmKAogICAgICAgICIlYyVjJWQ6IElQ OiAlZC4lZC4lZC4lZCBTdWJtYXNrOiAlZC4lZC4lZC4lZCBHYXRld2F5OiAl ZC4lZC4lZC4lZFxuIiwKICAgICAgICBuZXRpZi0+bmFtZVswXSwgbmV0aWYt Pm5hbWVbMV0sIG5ldGlmLT5udW0sCiAgICAgICAgaXA0X2FkZHIxKCZuZXRp Zi0+aXBfYWRkciksIGlwNF9hZGRyMigmbmV0aWYtPmlwX2FkZHIpLAogICAg ICAgIGlwNF9hZGRyMygmbmV0aWYtPmlwX2FkZHIpLCBpcDRfYWRkcjQoJm5l dGlmLT5pcF9hZGRyKSwKICAgICAgICBpcDRfYWRkcjEoJm5ldGlmLT5uZXRt YXNrKSwgaXA0X2FkZHIyKCZuZXRpZi0+bmV0bWFzayksCiAgICAgICAgaXA0 X2FkZHIzKCZuZXRpZi0+bmV0bWFzayksIGlwNF9hZGRyNCgmbmV0aWYtPm5l dG1hc2spLAogICAgICAgIGlwNF9hZGRyMSgmbmV0aWYtPmd3KSwgaXA0X2Fk ZHIyKCZuZXRpZi0+Z3cpLAogICAgICAgIGlwNF9hZGRyMygmbmV0aWYtPmd3 KSwgaXA0X2FkZHI0KCZuZXRpZi0+Z3cpCiAgICApOwp9CgpzdGF0aWMgdm9p ZApuZXRpZl9zdGF0dXNfY2FsbGJhY2soc3RydWN0IG5ldGlmICpuZXRpZikK ewogICAgaWYgKG5ldGlmX2lzX3VwKG5ldGlmKSkKICAgICAgICBzaG93X25l dGlmX2NvbmZpZyhuZXRpZik7Cn0KCiNlbmRpZiAvLyBDWUdGVU5fTFdJUF9T SE9XX05FVElGX0NPTkZJRwoKCi8vCi8vIENhbGxlZCB3aGVuIGluaXRpYWxp emF0aW9uIG9mIHRoZSB0Y3BpcCB0aHJlYWQgaXMgZG9uZS4KLy8Kc3RhdGlj IHZvaWQKdGNwaXBfaW5pdF9kb25lKHZvaWQgKmFyZykKewogICAgY3lnX3Nl bV90ICpzZW0gPSBhcmc7CiAgICAKI2lmIExXSVBfSEFWRV9MT09QSUYgJiYg ZGVmaW5lZChDWUdJTVBfTFdJUF9MT09QSUZfSU5TVEFOQ0UpCiAgICB7CiAg ICAgICAgc3RydWN0IGlwX2FkZHIgYWRkciwgbmV0bWFzaywgZ2F0ZXdheTsK CiAgICAgICAgLy/CoFNldHVwIGRlZmF1bHQgbG9vcGJhY2sgZGV2aWNlIGlu c3RhbmNlCiAgICAgICAgc2V0X2lwX2FkZHIoJmFkZHIsIENZR0RBVF9MV0lQ X0xPT1BJRl9BRERSKTsKICAgICAgICBzZXRfaXBfYWRkcigmbmV0bWFzaywg Q1lHREFUX0xXSVBfTE9PUElGX05FVE1BU0spOwogICAgICAgIHNldF9pcF9h ZGRyKCZnYXRld2F5LCBDWUdEQVRfTFdJUF9MT09QSUZfR0FURVdBWSk7CiAg ICAgICAgbmV0aWZfYWRkKCZsb29waWYsICZhZGRyLCAmbmV0bWFzaywgJmdh dGV3YXksIE5VTEwsCiAgICAgICAgICAgICAgICAgIGxvb3BpZl9pbml0LCB0 Y3BpcF9pbnB1dCk7CiNpZmRlZiBDWUdEQVRfTFdJUF9MT09QSUZfREVGQVVM VAogICAgICAgIG5ldGlmX3NldF9kZWZhdWx0KCZsb29waWYpOwojZW5kaWYK I2lmZGVmIENZR0ZVTl9MV0lQX1NIT1dfTkVUSUZfQ09ORklHCiAgICAgICAg bmV0aWZfc2V0X3N0YXR1c19jYWxsYmFjaygmbG9vcGlmLCBuZXRpZl9zdGF0 dXNfY2FsbGJhY2spOwojZW5kaWYKICAgICAgICBuZXRpZl9zZXRfdXAoJmxv b3BpZik7CiAgICB9CiNlbmRpZgoKI2lmIExXSVBfSEFWRV9TTElQSUYgJiYg ZGVmaW5lZChDWUdJTVBfTFdJUF9TTElQSUZfSU5TVEFOQ0UpCiAgICB7CiAg ICAgICAgc3RydWN0IGlwX2FkZHIgYWRkciwgbmV0bWFzaywgZ2F0ZXdheTsK CiAgICAgICAgLy/CoFNldHVwIGRlZmF1bHQgU0xJUMKgZGV2aWNlIGluc3Rh bmNlCiAgICAgICAgc2V0X2lwX2FkZHIoJmFkZHIsIENZR0RBVF9MV0lQX1NM SVBJRl9BRERSKTsKICAgICAgICBzZXRfaXBfYWRkcigmbmV0bWFzaywgQ1lH REFUX0xXSVBfU0xJUElGX05FVE1BU0spOwogICAgICAgIHNldF9pcF9hZGRy KCZnYXRld2F5LCBDWUdEQVRfTFdJUF9TTElQSUZfR0FURVdBWSk7CiAgICAg ICAgbmV0aWZfYWRkKCZzbGlwaWYsICZhZGRyLCAmbmV0bWFzaywgJmdhdGV3 YXksIE5VTEwsCiAgICAgICAgICAgICAgICAgIHNsaXBpZl9pbml0LCB0Y3Bp cF9pbnB1dCk7CiNpZmRlZiBDWUdEQVRfTFdJUF9TTElQSUZfREVGQVVMVAog ICAgICAgIG5ldGlmX3NldF9kZWZhdWx0KCZzbGlwaWYpOwojZW5kaWYKI2lm ZGVmIENZR0ZVTl9MV0lQX1NIT1dfTkVUSUZfQ09ORklHCiAgICAgICAgbmV0 aWZfc2V0X3N0YXR1c19jYWxsYmFjaygmc2xpcGlmLCBuZXRpZl9zdGF0dXNf Y2FsbGJhY2spOwojZW5kaWYKICAgICAgICBuZXRpZl9zZXRfdXAoJnNsaXBp Zik7CiAgICB9CiNlbmRpZgoKI2lmIFBQUF9TVVBQT1JUCiAgICB7CiAgICAg ICAgLy8gU2V0dXAgUFBQIGluc3RhbmNlCiAgICB9CiNlbmRpZgogICAgCiNp ZmRlZiBDWUdQS0dfTFdJUF9FVEgKICAgIHsKICAgICAgICBjeWdfbmV0ZGV2 dGFiX2VudHJ5X3QgKnQ7CiAgICAgICAgCiAgICAgICAgLy8gSW5pdGlhbGl6 ZSBldGhlcm5ldCBkZWxpdmVyeSB0aHJlYWQKICAgICAgICBjeWdfc2VtYXBo b3JlX2luaXQoJmV0aF90aHJlYWRfc2VtLCAwKTsKICAgICAgICBldGhfdGhy ZWFkX2hhbmRsZSA9IHN5c190aHJlYWRfbmV3KEVUSF9USFJFQURfTkFNRSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0 aF90aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRVRIX1RIUkVBRF9TVEFDS1NJWkUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVEhfVEhSRUFEX1BS SU8pOwogICAgICAgIAogICAgICAgIC8vIEluaXRpYWxpemUgbmV0d29yayBk ZXZpY2VzCiAgICAgICAgZm9yICh0ID0gJl9fTkVUREVWVEFCX19bMF07IHQg IT0gJl9fTkVUREVWVEFCX0VORF9fOyB0KyspIHsKICAgICAgICAgICAgaWYg KHQtPmluaXQodCkpIHsKICAgICAgICAgICAgICAgIHQtPnN0YXR1cyA9IENZ R19ORVRERVZUQUJfU1RBVFVTX0FWQUlMOwojaWZkZWYgQ1lHRlVOX0xXSVBf U0hPV19ORVRJRl9DT05GSUcKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZXRoX2Rydl9zYyogc2MgPSAoc3RydWN0IGV0 aF9kcnZfc2MqKSAodC0+ZGV2aWNlX2luc3RhbmNlKTsKICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgbmV0aWYgKm5ldGlmID0gJnNjLT5zY19hcnBjb20u YWNfaWY7CiAgICAgICAgICAgICAgICAgICAgbmV0aWZfc2V0X3N0YXR1c19j YWxsYmFjayhuZXRpZiwgbmV0aWZfc3RhdHVzX2NhbGxiYWNrKTsKICAgICAg ICAgICAgICAgIH0KI2VuZGlmCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgICAgICAvLyBEZXZpY2Ugbm90IFtjdXJyZW50bHldIGF2YWlsYWJs ZQogICAgICAgICAgICAgICAgdC0+c3RhdHVzID0gMDsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgIH0KI2VuZGlmCgogICAgLy/CoE5vdGlmeSBpbml0 aWFsaXphdGlvbiB0aHJlYWQKICAgIGN5Z19zZW1hcGhvcmVfcG9zdChzZW0p Owp9CgovLwovLyBJbml0aWFsaXplIGx3SVAgZm9yIHNpbXBsZSAoc2luZ2xl LXRocmVhZGVkKSBtb2RlLgovLwp2b2lkCmN5Z19sd2lwX3NlcXVlbnRpYWxf aW5pdCh2b2lkKQp7CiAgICBzdGF0aWMgaW50IGluaXRpYWxpemVkOwogICAg Y3lnX3NlbV90IHNlbTsKCiAgICAvLyBPbmx5IGluaXRpYWxpemUgb25jZQog ICAgaWYgKGluaXRpYWxpemVkKQogICAgICAgIHJldHVybjsKICAgIGluaXRp YWxpemVkID0gMTsKICAgIAogICAgLy8gSW5pdGlhbGl6ZSB0aGUgbHdJUCBz dGFjawogICAgY3lnX3NlbWFwaG9yZV9pbml0KCZzZW0sIDApOwogICAgdGNw aXBfaW5pdCh0Y3BpcF9pbml0X2RvbmUsICh2b2lkICopICZzZW0pOwogICAg CiAgICAvLyBXYWl0IHVudGlsIGluaXRpYWxpemVkCiAgICBjeWdfc2VtYXBo b3JlX3dhaXQoJnNlbSk7CiAgICBjeWdfc2VtYXBob3JlX2Rlc3Ryb3koJnNl bSk7Cn0KCiNpZmRlZiBDWUdQS0dfTFdJUF9FVEgKCnN0YXRpYyB2b2lkCmV0 aF90aHJlYWQodm9pZCAqZGF0YSkKewogICAgY3lnX25ldGRldnRhYl9lbnRy eV90ICp0OwogICAgCiAgICB3aGlsZSAoMSkgewogICAgICAgIGN5Z19zZW1h cGhvcmVfd2FpdCgmZXRoX3RocmVhZF9zZW0pOwovLyAgICAgICAgY3lnX3Nl bWFwaG9yZV90aW1lZF93YWl0KCZldGhfdGhyZWFkX3NlbSwgMTApOwogICAg ICAgIAogICAgICAgIGZvciAodCA9ICZfX05FVERFVlRBQl9fWzBdOyB0ICE9 ICZfX05FVERFVlRBQl9FTkRfXzsgdCsrKSB7CiAgICAgICAgICAgIHN0cnVj dCBldGhfZHJ2X3NjICpzYyA9IChzdHJ1Y3QgZXRoX2Rydl9zYyAqKXQtPmRl dmljZV9pbnN0YW5jZTsKLy8gICAgICAgICAgICBpZiAoc2MtPnN0YXRlICYg RVRIX0RSVl9ORUVEU19ERUxJVkVSWSkgewojaWYgZGVmaW5lZChDWUdEQkdf SEFMX0RFQlVHX0dEQl9DVFJMQ19TVVBQT1JUKQogICAgICAgICAgICAgICAg Y3lnX2Jvb2wgd2FzX2N0cmxjX2ludDsKI2VuZGlmCiAgICAgICAgICAgICAg ICBzYy0+c3RhdGUgJj0gfkVUSF9EUlZfTkVFRFNfREVMSVZFUlk7CiNpZiBk ZWZpbmVkKENZR0RCR19IQUxfREVCVUdfR0RCX0NUUkxDX1NVUFBPUlQpCiAg ICAgICAgICAgICAgICB3YXNfY3RybGNfaW50ID0gSEFMX0NUUkxDX0NIRUNL KHNjLT5mdW5zLT5pbnRfdmVjdG9yKHNjKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgc2MpOwogICAg ICAgICAgICAgICAgaWYgKCF3YXNfY3RybGNfaW50KSAvLyBGYWxsIHRocm91 Z2ggYW5kIHJ1biBub3JtYWwgY29kZQojZW5kaWYKICAgICAgICAgICAgICAg ICAgICBzYy0+ZnVucy0+ZGVsaXZlcihzYyk7Ci8vICAgICAgICAgICAgfQog ICAgICAgIH0KICAgIH0KfQoKLy8KLy8gQ2FsbGVkIGZyb20gdGhlIG5ldHdv cmsgZHJpdmVyIHRvIGluZGljYXRlIGEgbmV3IG5ldGlmLgovLwp2b2lkCmx3 aXBfZXRoX2Rydl9uZXcoc3RydWN0IG5ldGlmICpuZXRpZikKewojaWZkZWYg Q1lHRlVOX0xXSVBfU0hPV19ORVRJRl9DT05GSUcKICAgIG5ldGlmX3NldF9z dGF0dXNfY2FsbGJhY2sobmV0aWYsIG5ldGlmX3N0YXR1c19jYWxsYmFjayk7 CiNlbmRpZgp9CgovLwovLyBDYWxsZWQgZnJvbSBuZXR3b3JrIGRyaXZlciB0 byBpbmRpY2F0ZSBpbnRlcnJ1cHQuCi8vCnZvaWQKbHdpcF9ldGhfZHJ2X2Rz cih2b2lkKQp7CiAgICBjeWdfc2VtYXBob3JlX3Bvc3QoJmV0aF90aHJlYWRf c2VtKTsKfQoKLy8KLy8gQ2FsbGVkIGZyb20gdGhlIG5ldHdvcmsgZHJpdmVy IHdoZW4gYSBwYWNrZXQgd2FzIHJlY2VpdmVkLgovLwplcnJfdApsd2lwX2V0 aF9kcnZfaW5wdXQoc3RydWN0IHBidWYgKnAsIHN0cnVjdCBuZXRpZiAqbmV0 aWYpCnsKICAgIHJldHVybiB0Y3BpcF9pbnB1dChwLCBuZXRpZik7Cn0KCiNl bmRpZiAvLyBDWUdQS0dfTFdJUF9FVEgK --=_24a45b9769996675f732473277dc4246--