From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964806AbXBFAFK (ORCPT ); Mon, 5 Feb 2007 19:05:10 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S933108AbXBFAFK (ORCPT ); Mon, 5 Feb 2007 19:05:10 -0500 Received: from web26914.mail.ukl.yahoo.com ([217.146.177.81]:44135 "HELO web26914.mail.ukl.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S933105AbXBFAFE (ORCPT ); Mon, 5 Feb 2007 19:05:04 -0500 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.fr; h=X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type:Message-ID; b=H0SPlFzLsbc1eFwd1K2J8+6NEOvF4pkblJRus6n9aohHMh22aZJLHbje7JL+7IlkDnGWvV7WNKRqj2FVr3eCKZvbHJPRuwyyBSlmmcany4mpNCGZQnzGb2FcE9KRk9/jhHBak3nfJrc42u2pM96Jr+DNofK7EqXDKuFotS5jewY=; X-YMail-OSG: egt.ZhkVM1mGi_1hFPa_Z.3sK9nNxXNHW5G6V4R6xTJygjtKSonsvwz8EbDjJnej53YJQNzcbsmJvCtQWXcXkM1aupwaxLvpFZKM8ATVz9szEY0oUtp8TYz1nE6tqyTGaojC5u.c.Nx. X-Mailer: YahooMailRC/368.3 YahooMailWebService/0.6.132.7 Date: Mon, 5 Feb 2007 23:58:20 +0000 (GMT) From: Etienne Lorrain Subject: [PATCH] Compressed ia32 ELF file generation for loading by Gujin 2/3 To: linux-kernel@vger.kernel.org, linux-kernel@vger.kernel.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-2013220204-1170719900=:67267" Message-ID: <94642.67267.qm@web26914.mail.ukl.yahoo.com> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --0-2013220204-1170719900=:67267 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable That is the main file BIOS information gathering realmode.c=0A=0A=0A=0A=0A= =09=0A=0A=09=0A=09=09=0A___________________________________________________= ________________________ =0AD=E9couvrez une nouvelle fa=E7on d'obtenir des = r=E9ponses =E0 toutes vos questions ! =0AProfitez des connaissances, des op= inions et des exp=E9riences des internautes sur Yahoo! Questions/R=E9ponses= =0Ahttp://fr.answers.yahoo.com --0-2013220204-1170719900=:67267 Content-Type: application/octet-stream; name="=?utf-8?q?gujin-patch-2.6.20-2?=" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="=?utf-8?q?gujin-patch-2.6.20-2?=" ZGlmZiAtdXByTiAtWCBsaW51eC0yLjYuMjAvRG9jdW1lbnRhdGlvbi9kb250 ZGlmZiBsaW51eC0yLjYuMjAvYXJjaC9pMzg2L2tlcm5lbC9yZWFsbW9kZS5j IGxpbnV4LTIuNi4yMC1ndWppbi9hcmNoL2kzODYva2VybmVsL3JlYWxtb2Rl LmMKLS0tIGxpbnV4LTIuNi4yMC9hcmNoL2kzODYva2VybmVsL3JlYWxtb2Rl LmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIGxp bnV4LTIuNi4yMC1ndWppbi9hcmNoL2kzODYva2VybmVsL3JlYWxtb2RlLmMJ MjAwNy0wMi0wNSAyMToyNzowMS4wMDAwMDAwMDAgKzAwMDAKQEAgLTAsMCAr MSwxOTk3IEBACisvKgorICogIFRoaXMgZmlsZSAicmVhbG1vZGUuYyIgaXMg bGljZW5zZWQgd2l0aCB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBMaW51eAor ICoga2VybmVsOyBhbnl3YXkgdGhlIG1hcHBpbmcgb2YgdGhlIGRhdGEgc3Ry dWN0dXJlIHByb2R1Y2VkIGlzIG93bmVkIGJ5CisgKiBMaW51eCBrZXJuZWwg Y29weXJpZ2h0IG93bmVyKHMpIGZvciBhIGxvbmcgdGltZS4KKyAqCisgKiAg VGhlIG1haW4gdXNlIG9mIHRoaXMgZmlsZSBpcyB0byBwcm9kdWNlIHRoZSBy ZWFsLW1vZGUgcGFydCBvZiB0aGUKKyAqIEVMRiBmaWxlIHZtbGludXggKGF0 IHRoZSByb290IG9mIHRoZSBsaW51eCB0cmVlKSwgdGhpcyBmaWxlIHdpbGwK KyAqIGJlICh1c3VhbGx5KSBzdHJpcHBlZCBvZiBkZWJ1ZyBpbmZvIGFuZCB0 aGVuIGNvbXByZXNzZWQgYnkgR1pJUAorICogdG8gbWFrZSBhICJHdWppbiBu YXRpdmUgYm9vdGFibGUgZmlsZSIgd2l0aCB0aGUgImtneiIgZXh0ZW5zaW9u LgorICogIFRoaXMgcmVhbC1tb2RlIHBhcnQgaXMgcmVtb3ZlZCAoYnkgb2Jq ZHVtcCkgZnJvbSB0aGUgYmluYXJ5IGxhdGVyCisgKiBpbiB0aGUgcHJvY2Vz cyBpZiB5b3UgZ2VuZXJhdGUgYSBiekltYWdlIGZpbGUuCisgKiAgVGhpcyBy ZWFsLW1vZGUgcGFydCBpcyB1c2VkIGF0IGJvb3QgdGltZSB0byBnZXQgaW5m b3JtYXRpb25zIGZyb20KKyAqIHRoZSBCSU9TOiBtZW1vcnkgc2l6ZSwgZGlz ayBwcmVzZW50LCB2aWRlbyBtb2RlLi4uIGFuZCBpcyBubyBtb3JlCisgKiBh Y2Nlc3NpYmxlIG9uY2UgdGhlIHByb2Nlc3NvciBoYXMgc3dpdGNoIHRvIHBy b3RlY3RlZC1tb2RlLgorICoKKyAqIEd1amluIGhvbWVwYWdlIGlzIGF0OiBo dHRwOi8vZ3VqaW4ub3JnLyA7IGl0IGlzIGl0c2VsZiBsaWNlbnNlZAorICog dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSwgdmVyc2lvbiAyLgorICogR3VqaW4gaXMgQ29weXJpZ2h0IChDKSAx OTk5LTIwMDUgRXRpZW5uZSBMb3JyYWluLCBmaW5nZXJwcmludCAoMkQzQUYz RUEpOgorICogICAyNDcxIERGNjQgOURFRSA0MUQ0IEM4REIgOTY2NyBFNDQ4 IEZGOEMgMkQzQSBGM0VBCisgKiBFLU1haWw6IGV0aWVubmUgZG90IGxvcnJh aW4gYXQgZ3VqaW4gZG90IG9yZworICoKKyAqICBGaXJzdCB2ZXJzaW9uIGhh cyBiZWVuIHdyaXR0ZW4gYnkgRXRpZW5uZSBMb3JyYWluIGluIERlY2VtYmVy IDIwMDQuCisgKi8KKworLyoKKyAqIERvIG5vdCB0b3VjaCAtIHVzZWQgdG8g Z2VuZXJhdGUgcmVhbCBtb2RlIGlhMzIgY29kZSBhbmQgbWFuYWdlCisgKiB0 aGUgaW50ZXItc2VnbWVudCBjYWxsIHRyYW5zcGFyZW50bHksIGFmdGVyIG1h eGltdW0gNCBLYnl0ZXMKKyAqIG9mIHJlYWwgbW9kZSByb2RhdGEvZGF0YSBo YXMgYmVlbiBjb3BpZWQgaW50byAlZHMgc2VnbWVudC4KKyAqCisgKiBIYXZp bmcgY29uc3RhbnQvaW5pdGlhbGlzZWQgdmFyaWFibGUgaW4gaGVyZSBpcyBh IGJpdCB0cmlja3ksCisgKiBpdCB1c2VzIHRoZSBmYWN0IHRoYXQgc2luY2Ug R3VqaW4tMS4wLCB0aGUgc2VnbWVudCAiLmZvdXJLc2VnbWVudCIKKyAqIGNv bnRhaW5uaW5nIHRoZSBvbmx5IHZhcmlhYmxlICJmb3VyS2J1ZmZlciIgKG9m IHNpemUgNCBLYnl0ZXMpCisgKiBpcyBsb2NhdGVkIGF0ICVkczowIGkuZS4g YmVmb3JlIHRoZSAiLnJvZGF0YSIgb2YgR3VqaW4uCisgKiBOb3RlIHRoYXQg aGVyZSB0aGUgY29kZSBzZWdtZW50IGlzIGxvY2FsIGJ1dCB0aGUgZGF0YSBz ZWdtZW50CisgKiAoYW5kIHRoZSBzdGFjayBzZWdtZW50KSBpcyB0aGUgb25l IG9mIEd1amluIGZvciBvYnZpb3VzIHJlYXNvbnMuCisgKiBUaGUgZmlyc3Qg cGVyc29uIG1vZGlmeWluZyBkYXRhIGF0IGFkZHJlc3Mgb3ZlciAlZHM6MHgx MDAwCisgKiBnZXQgYWxsIHRoZSBibGFtZSBmb3IgYW55IGJ1ZyBoYXBwZW5p bmcgaW4gR3VqaW4sIGluIGJldHdlZW4KKyAqIHRoZSBsYXN0IGFuZCB0aGUg bmV4dCBiaWcgYmFuZywgYW5kIGl0IGlzIGEgcHJldHR5IGxvbmcgdGltZS4K KyAqIDxzbWlsZT5Zb3UgZG9uJ3QgbGlrZSBteSBtZW1vcnkgcHJvdGVjdGlv biBzeXN0ZW0/PC9zbWlsZT4KKyAqLworYXNtKCIJLnBzaXplIDAJCQkJXG4i CisgICAgIgkuY29kZTE2Z2NjCQkJCVxuIgorICAgICIJLnNlY3Rpb24gLmlu aXQudGV4dDE2LFwiYXhcIixAcHJvZ2JpdHMJXG4iCisgICAgIglwdXNoCSVk aQkJCQlcbiIKKyAgICAiCXB1c2gJJXNpCQkJCVxuIgorICAgICIJbW92CSRf c2RhdGExNiwlc2kJCQlcbiIKKyAgICAiCW1vdgklc2ksJWRpCQkJCVxuIgor ICAgICIJbW92CSRfZWRhdGExNiwlY3gJCQlcbiIKKyAgICAiCWFuZAkkMHhG RkYsJWN4CQkJXG4iCisgICAgIglzdWIJJXNpLCVjeAkJCQlcbiIKKyAgICAi CXNocgkkMiwlY3gJCQkJXG4iCisgICAgIglyZXAgbW92c2wgJWNzOiglc2kp LCVlczooJWRpKQkJXG4iCisgICAgIglwb3AJJXNpCQkJCVxuIgorICAgICIJ cG9wCSVkaQkJCQlcbiIKKyAgICAiCWNhbGxsCWxpbnV4X3NldF9wYXJhbXMJ CVxuIgorICAgICIJbHJldHcJCQkJCVxuIgorICAgICIJLnByZXZpb3VzCQkJ CVxuIgorKTsKKworI2luY2x1ZGUgImFzbS9yZWFsbW9kZS5oIgorCisvKgor ICogVGhvc2UgbmVlZCB0byBiZSB1c2VkIGJlY2F1c2UgdGhlcmUgaXMgbm8g d2F5IHRvIHNldCB0aGUgZGVmYXVsdAorICogc2VnbWVudCBuYW1lIHVzZWQg Zm9yICIudGV4dCIsICIuZGF0YSIsICIucm9kYXRhKiIgYW5kICIuYnNzIgor ICogSXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGRvOiBhc20oIi5l cXUgLmRhdGEsIC5kYXRhMTYiKTsKKyAqIG9yIHNoYWxsIHRoYXQgYmUgbWFu YWdlZCBieSB0aGUgY29tcGlsZXIgLSBhbmQgYnkgY29tcGlsYXRpb24KKyAq IHN3aXRjaCBvciBieSB0aGUgYXR0cmlidXRlIG9mIGZ1bmN0aW9ucz8KKyAq IFRoaXMgZmlsZSBpcyBwcmUtbGlua2VkIChzZWN0aW9uIHdpdGggc2FtZSBu YW1lIGdyb3VwZWQgdG9nZXRoZXIpCisgKiBpbiAiYXJjaC9pMzg2L2tlcm5l bC9idWlsdC1pbi5vIiBzbyBubyBob3BlIHRvIG1hbmFnZSBpdCBpbgorICog dGhlIGZpbmFsIGxpbmtlciBmaWxlIGlmIGl0IHVzZXMgdGhlIHNhbWUgc2Vj dGlvbiBuYW1lcy4KKyAqIE1heWJlIGlmICJhcmNoL2kzODYva2VybmVsL2J1 aWx0LWluLm8iIGNvdWxkIGJlIGFuIGFyY2hpdmU/CisgKiBNYXliZSBpdCBp cyAidGhlIHJpZ2h0IHdheSAoVE0pIiB0byB1c2UgZGlmZmVyZW50IHNlY3Rp b24gbmFtZXMKKyAqIHNvIHRoYXQgdGhvc2UgZnVuY3Rpb25zIGNhbiBiZSBs b2NhdGVkIGluIGRpZmZlcmVudCBzb3VyY2UgZmlsZXMuCisgKiBNYXliZSB0 aGUgc2VjdGlvbiBuYW1lIHNoYWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hhbmdl ZCB1c2luZworICogb2JqY29weSBpbiB0aGUgcmVhbG1vZGUubyBmaWxlLCBq dXN0IGFmdGVyIGNvbXBpbGF0aW9uLgorICogTWF5YmUgdGhlIHNlZ21lbnQg bmFtZXMgc2hhbGwgYmUgY2hhbmdlZCBieSBzZWQgaW4gdGhlCisgKiBhc3Nl bWJsZXIgZmlsZS4KKyAqIFRoZSBtZXRob2QgdXNlZCBoZXJlIHdvcmtzIGFu ZCBpcyBhcyBmb29sIHByb29mIGFzIHBvc3NpYmxlLgorICoKKyAqIFVuZm9y dHVuYXRlbHksIEkgZG8gbm90IGtub3cgaG93IHRvIHVzZSBpbmxpbmUgc3Ry aW5ncyBoZXJlLAorICogaS5lLiBwdXRzKCJoZWxsbyB3b3JsZCIpOyB3aWxs IG5vdCB3b3JrIGR1ZSB0byB0aGUgc2VnbWVudAorICogdXNlZCB0byBzdG9y ZSB0aGUgY29uc3RhbnQgImhlbGxvIHdvcmxkIi4KKyAqIFNhbWUgZm9yIHRo ZSBpbXBsaWNpdCB0YWJsZSBnZW5lcmF0ZWQgYnkgYSBiaWcgc3dpdGNoKCku CisgKiBUaGlzIHdvdWxkIGdlbmVyYXRlIGEgcHJvaGliaXRlZCBjcm9zcyBy ZWZlcmVuY2UgYXQgbGlua2VyIHRpbWUuCisgKgorICogSSBhbHNvIG5lZWQg dG8gYWRkIHRoYXQgdXNpbmcgR0NDIHRvIGdlbmVyYXRlIHJlYWwtbW9kZSBp Mzg2CisgKiBleGVjdXRhYmxlIGhhcyBhIG1ham9yIGxpbWl0YXRpb246IG5v IHVzZSBvZiBsaWJyYXJ5IGNvbXBpbGVkCisgKiBmb3IgcHJvdGVjdGVkIG1v ZGUuIElmIHlvdXIgc291cmNlIG1ha2UgR0NDIHRvIGNhbGwgbWVtY3B5KCks CisgKiBtZW1zZXQoKSwgc3RyY3B5KCkuLi4gdGhlbiB5b3UgaGF2ZSB0byBw cm92aWRlIHRoZW0geW91cnNlbGYuCisgKiBUaGUgc2FtZSB0aGluZyBhcHBs eSBpZiB5b3UgbXVsdGlwbHkgb3IgZGl2aWRlIDY0IGJpdCBudW1iZXJzCisg KiBieSBub24gcG93ZXIgb2YgdHdvLiBBZGRpbmcgYW5kIHN1YnN0cmFjdGlu ZyBvZiBsb25nIGxvbmcgaXMgT0suCisgKi8KKyNkZWZpbmUgQ09OU1QJCV9f YXR0cmlidXRlX18gKChzZWN0aW9uICgiLnJvZGF0YTE2IikpKSBjb25zdAor I2RlZmluZSBWQVJJQUJMRQlfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5k YXRhMTYiKSkpCisjZGVmaW5lIEJTUwkJX19hdHRyaWJ1dGVfXyAoKHNlY3Rp b24gKCIuYnNzMTYiKSkpCisjZGVmaW5lIENPREUJCV9fYXR0cmlidXRlX18g KChzZWN0aW9uICgiLnRleHQxNiIpKSkKKworI2lmIDAKKy8qCisgKiBXaGVu IGNvbXBpbGluZyB0aGlzIGZpbGUsIHNvbWUgY29tYmluYXRpb24gb2YgR0ND IGFuZCBvcHRpb25zCisgKiB3aWxsIGNhbGwgbWVtc2V0KCkgaW4gdGhlIGFz c2VtYmx5IGdlbmVyYXRlZC4gWW91IGNhbiBjaGVjayBpdAorICogYnkgdHlw aW5nICJtYWtlIGFyY2gvaTM4Ni9rZXJuZWwvcmVhbG1vZGUucyIuCisgKiBU aGV5IGNhbm5vdCBiZSBpbmxpbmUgYmVjYXVzZSB0aGV5IGFyZSBfY2FsbGVk XyBieSB0aGUgY29tcGlsZXIuCisgKiBJdCBpcyBub3QgcG9zc2libGUgdG8g YWNjZXNzIHRoZSBzdGFuZGFyZCBvbmUgYmVjYXVzZSBpdHMKKyAqIGhleGFk ZWNpbWFsIGNvZGluZyBpcyBmb3IgcHJvdGVjdGVkIG1vZGUsIGFuZCBub3Qg cG9zc2libGUgdG8KKyAqIGNvZGUgaXQgaW4gYXNzZW1ibGVyIGJlY2F1c2Ug b2Ygd2UgZG8gbm90IGtub3cgdGhlIGNhbGxpbmcKKyAqIGNvbnZlbnNpb24g KEdDQyBvcHRpbWlzYXRpb25zIGxpa2UgIi1tdHJkIiwgIi1tcmVncGFybT0z IikuCisgKiBXZSBhbHNvIGNhbm5vdCBoYXZlIHR3byBtZW1jcHkoKSBub3Ig bWVtc2V0KCkgaW4gdGhlIHNhbWUKKyAqIGZpbmFsIGxpbmssIHNvIHdlIHJl bmFtZSB0aGVtIGluIGFzc2VtYmxlci4KKyAqIFRoaXMgcGFydCBpcyBjdXJy ZW50bHkgZGlzYWJsZWQgZHVlIHRvIGEgcHJvYmxlbSBpbiB0aGUgbGlua2Vy CisgKiBidXQgcmlnaHQgbm93IG5vIEdDQyBzd2l0Y2ggY29tYmluYXRpb24g cHJvZHVjZXMgc3VjaAorICogbWVtc2V0L21lbWNweSBjYWxscyB3aXRoIGEg TGludXggc3VwcG9ydGVkIGNvbXBpbGVyLgorICovCitDT0RFIHZvaWQgY29k ZTE2X21lbWNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCB1bnNp Z25lZCBuYikKK3sKKwl3aGlsZSAobmItLSkKKwkJKmRlc3QrKyA9ICpzcmMr KzsKK30KK0NPREUgdm9pZCBjb2RlMTZfbWVtc2V0IChjaGFyICpkZXN0LCB1 bnNpZ25lZCB2YWwsIHVuc2lnbmVkIG5iKQoreworCXdoaWxlIChuYi0tKQor CQkqZGVzdCsrID0gdmFsOworfQorYXNtICgKKyAgICAibWVtY3B5ID0gY29k ZTE2X21lbWNweSBcbiIKKyAgICAibWVtc2V0ID0gY29kZTE2X21lbXNldCBc biIKKyk7CisjZW5kaWYKKworLyoqCisgKiogRmV3IGRlYnVnIGZ1bmN0aW9u cyBhbmQgaG93IHRvIHVzZSB0aGVtLCBpbmNsdWRpbmcgaG93IHRvIGRlY2xh cmUKKyAqKiB2YXJpYWJsZXMgYW5kIGNvbnN0YW50cy4gRm9yIGNvbXBsZXgg ZGVidWcsIHlvdSBtYXkgd2FudCB0bworICoqIGNoZWNrIGRiZ2xvYWQuZXhl IG9mIEd1amluLiBUaGUgZm9sbG93aW5nIGRlYnVnIHVzZXMgdGhlIFZJREVP IEJJT1MKKyAqKiB0byBkaXNwbGF5IG1lc3NhZ2VzIHNvIHdpbGwgbm90IHdv cmsgaW4gVkVTQSBtb2RlcyB3aGVuIHRoZSBWRVNBCisgKiogQklPUyBkbyBu b3Qgc3VwcG9ydCBwcmludGluZyBjaGFyYWN0ZXJzIGluIGN1cnJlbnQgdmlk ZW8gbW9kZQorICoqIChiaXQgQklPU19vdXRwdXRfc3VwcG9ydGVkIG9mIFZF U0FfbW9kZWluZm9fdCAvIHN0cnVjdCBzY3JlZW5faW5mbykKKyAqKi8KKy8v I2RlZmluZSBURVNUX1ZHQVBSSU5UCisKKyNpZmRlZiBURVNUX1ZHQVBSSU5U CitDT05TVCBjaGFyIHRlc3RfYmVmb3JlW10gPSAidGVzdDogMHgiOworVkFS SUFCTEUgdW5zaWduZWQgdGVzdF92YWwgPSAweDA4OUFCQzA7CitDT05TVCBj aGFyIHRlc3RfbWlkZGxlW10gPSAiLCB0ZXN0X3ZhbDIgPSAweCI7CitCU1Mg dW5zaWduZWQgdGVzdF92YWwyOworVkFSSUFCTEUgY2hhciB0ZXN0X2FmdGVy W10gPSAiLlxyXG4iOworCisjZGVmaW5lIFBVU0hBTEwgInB1c2h3ICUlZHM7 IHB1c2h3ICUlZXM7IHB1c2h3ICUlZnM7IHB1c2h3ICUlZ3M7IHB1c2hhbFxu IgorI2RlZmluZSBQT1BBTEwgICJwb3BhbDsgcG9wdyAlJWdzOyBwb3B3ICUl ZnM7IHBvcHcgJSVlczsgcG9wdyAlJWRzXG4iCisKK0NPREUgc3RhdGljIHZv aWQgdmdhcHV0cyAoY29uc3QgY2hhciAqc3RyaW5nKQoreworCXdoaWxlICgq c3RyaW5nICE9ICdcMCcpCisJCWFzbShQVVNIQUxMCisJCSAgICAiCW1vdncJ JDB4MDAwNywlJWJ4XG4JaW50CSQweDEwCVxuIgorCQkgICAgUE9QQUxMCisJ CSAgICA6IDogImEiICgweDBFMDAgfCAodW5zaWduZWQgY2hhcikqc3RyaW5n KyspKTsKK30KKworQ09ERSBzdGF0aWMgdm9pZCB2Z2FwdXR4ICh1bnNpZ25l ZCB2YWwpCit7CisJdW5zaWduZWQgZGlnaXRfc2hpZnQgPSA3ICogNDsKKwor CXdoaWxlIChkaWdpdF9zaGlmdCAmJiAodmFsICYgKDB4RiA8PCBkaWdpdF9z aGlmdCkpID09IDApCisJCWRpZ2l0X3NoaWZ0IC09IDQ7CisJZm9yICg7Oykg eworCQlhc20oUFVTSEFMTAorCQkgICAgIgltb3Z3CSQweDAwMDcsJSVieAlc biIKKwkJICAgICIJc2FoZgkjIGNsZWFyIEFGCVxuIgorCQkgICAgIglhYWEJ CQlcbiIKKwkJICAgICIJYWFkCSQweDExCQlcbiIKKwkJICAgICIJYWRkCSQw eDBFMzAsJSVheAlcbiIKKwkJICAgICIJaW50CSQweDEwCQlcbiIKKwkJICAg IFBPUEFMTAorCQkgICAgOiA6ICJhIiAoKHZhbCA+PiBkaWdpdF9zaGlmdCkg JiAweDBGKSk7CisJCWlmIChkaWdpdF9zaGlmdCA9PSAwKQorCQkJYnJlYWs7 CisJCWRpZ2l0X3NoaWZ0IC09IDQ7CisJfQorfQorCitDT0RFIHN0YXRpYyBp bmxpbmUgdm9pZCB2Z2Ffd2FpdF9zZWNvbmRzICh1bnNpZ25lZCBzZWNvbmRz KQoreworCXVuc2lnbmVkIG5iX21pY3Jvc2VjID0gc2Vjb25kcyAqIDEwMDAg KiAxMDAwOworCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKKworCWFzbSB2b2xh dGlsZSAoIglpbnQJJDB4MTUJIyBfQklPU193YWl0ICIKKwkgICAgIDogIj1h IiAoc3RhdHVzKQorCSAgICAgOiAiYSIgKCh1bnNpZ25lZCBzaG9ydCkweDg2 MDApLCAiZCIgKG5iX21pY3Jvc2VjICYgMHhGRkZGKSwKKwkJICJjIiAobmJf bWljcm9zZWMgPj4gMTYpKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIHRl c3RfdmdhcHJpbnQgKHZvaWQpCit7CisJdW5zaWduZWQgc3RhY2twdHI7CisJ c3RhdGljIENPTlNUIGNoYXIgc3RrbXNnW10gPSAiLCBzcCA9IDB4IjsKKwor CWFzbSAoIiBtb3YJJSVlc3AsJTAgIiA6ICI9ciIgKHN0YWNrcHRyKSk7CisJ dGVzdF92YWwyID0gMHgxMjM0ZmVkYzsKKworCXZnYXB1dHModGVzdF9iZWZv cmUpOworCXZnYXB1dHgodGVzdF92YWwpOworCXZnYXB1dHModGVzdF9taWRk bGUpOworCXZnYXB1dHgodGVzdF92YWwyKTsKKwl2Z2FwdXRzKHN0a21zZyk7 CisJdmdhcHV0eChzdGFja3B0cik7CisJdmdhcHV0cyh0ZXN0X2FmdGVyKTsK Kwl2Z2Ffd2FpdF9zZWNvbmRzKDcpOworfQorCisjZGVmaW5lIERCRyhzdGFy dHN0ciwgdmFyaWFibGUsIGVuZHN0cikgeyBcCisJc3RhdGljIENPTlNUIGNo YXIgYmVmb3JlW109c3RhcnRzdHIsIGFmdGVyW10gPSBlbmRzdHI7CVwKKwl2 Z2FwdXRzKGJlZm9yZSk7IHZnYXB1dHgodmFyaWFibGUpOyB2Z2FwdXRzKGFm dGVyKTsJXAorCX0KKyNkZWZpbmUgREJHX1dBSVQoKQl2Z2Ffd2FpdF9zZWNv bmRzKDcpCisjZWxzZQorI2RlZmluZSB0ZXN0X3ZnYXByaW50KCkJLypub3Ro aW5nKi8KKyNkZWZpbmUgREJHKHN0YXJ0c3RyLCB2YXJpYWJsZSwgZW5kc3Ry KQkvKm5vdGhpbmcqLworI2RlZmluZSBEQkdfV0FJVCgpCS8qbm90aGluZyov CisjZW5kaWYKKworLyoqCisgKiogQWxsIHRoZSBub24gQklPUyByZWxhdGVk LCBsb3cgbGV2ZWwgZnVuY3Rpb25zIHdlIHVzZToKKyAqKi8KK2V4dGVybiBp bmxpbmUgdW5zaWduZWQgcGVla2IgKGZhcnB0ciBhZHIpCit7CisJdW5zaWdu ZWQgcmV0dXJuZWQ7CisJdW5zaWduZWQgc2hvcnQgc2NyYXRjaDsKKwlleHRl cm4gY2hhciBtZW1vcnlbXTsKKworICAgICAgYXNtKCIJcHVzaGwJJTIJCVxu IgorCSAgIglwb3B3CSV3MAkJXG4iCisJICAiCXBvcHcJJSVmcwkJXG4iCisJ ICAiCW1vdnpibAklJWZzOigldzApLCUxCVxuIgorCSAgOiAiPWJTREIiIChz Y3JhdGNoKSwgIj1yIiAocmV0dXJuZWQpCisJICA6ICJnIiAoYWRyKSwgIm0i ICgqbWVtb3J5KSApOworCXJldHVybiByZXR1cm5lZDsKK30KKworZXh0ZXJu IGlubGluZSB1bnNpZ25lZCBwZWVrdyAoZmFycHRyIGFkcikKK3sKKwl1bnNp Z25lZCByZXR1cm5lZDsKKwl1bnNpZ25lZCBzaG9ydCBzY3JhdGNoOworCWV4 dGVybiBjaGFyIG1lbW9yeVtdOworCisgICAgICBhc20oIglwdXNobAklMgkJ XG4iCisJICAiCXBvcHcJJXcwCQlcbiIKKwkgICIJcG9wdwklJWZzCQlcbiIK KwkgICIJbW92endsCSUlZnM6KCV3MCksJTEJXG4iCisJICA6ICI9YlNEQiIg KHNjcmF0Y2gpLCAiPXIiIChyZXR1cm5lZCkKKwkgIDogImciIChhZHIpLCAi bSIgKCptZW1vcnkpICk7CisJcmV0dXJuIHJldHVybmVkOworfQorCitleHRl cm4gaW5saW5lIHZvaWQgb3V0YiAodW5zaWduZWQgc2hvcnQgcG9ydCwgdW5z aWduZWQgY2hhciBkYXRhKQoreworCWFzbSB2b2xhdGlsZSAoIiBvdXRiICUw LCUxICIgOiA6ICJhIiAoZGF0YSksICJkTiIgKHBvcnQpKTsKK30KKworZXh0 ZXJuIGlubGluZSB1bnNpZ25lZCBjaGFyIGluYiAodW5zaWduZWQgc2hvcnQg cG9ydCkKK3sKKwl1bnNpZ25lZCBjaGFyIHJlc3VsdDsKKwlhc20gdm9sYXRp bGUgKCIgaW5iICUxLCUwICIgOiAiPWEiIChyZXN1bHQpIDogImROIiAocG9y dCkpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9p ZCBzaG9ydF9kZWxheSAodW5zaWduZWQgY291bnQpCit7CisJYXNtIHZvbGF0 aWxlICgiIGxvb3BsIC4gXG4iIDogIitjIiAoY291bnQpKTsKK30KKworZXh0 ZXJuIGlubGluZSB1bnNpZ25lZCBjaGFyIGdldG52cmFtICh1bnNpZ25lZCBj aGFyIGFkZHIpCit7CisJb3V0YigweDcwLCBhZGRyICYgfjB4ODApOwkvKiBi aXQgNyBjbGVhcmVkOiBOTUkgZW5hYmxlZCAqLworCXNob3J0X2RlbGF5KDEw MDApOwkvKiB3YWl0IDEwMDAgYXNzZW1ibHkgaW5zdHJ1Y3Rpb25zICovCisJ cmV0dXJuIGluYigweDcxKTsKK30KKworX19hdHRyaWJ1dGVfXyAoKGNvbnN0 KSkgZXh0ZXJuIGlubGluZSBmYXJwdHIKK3N0YWNrX2ZhcnB0ciAoY29uc3Qg dm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBzdGFja3NlZ19tYXNrOyAgLyog c3RhY2sgaXMgbWF4IDY0IEsgKi8KKworCWFzbSAoIiBtb3YgJSVzcywlMCBc biIgOiAiPXIiIChzdGFja3NlZ19tYXNrKSk7CisJcmV0dXJuIChmYXJwdHIp KChzdGFja3NlZ19tYXNrIDw8IDE2KSB8ICh1bnNpZ25lZCkgZGF0YSk7Cit9 CisKKy8qKgorICoqIEdlbmVyaWMgQklPUyBjYWxsczoKKyAqKi8KKworZXh0 ZXJuIGlubGluZSBzdHJ1Y3Qgc2hpZnRfZmxhZ3Nfc3RyIHsKKwl1bnNpZ25l ZCBjaGFyIHJpZ2h0X3NoaWZ0X2tleV9wcmVzc2VkCTogMTsKKwl1bnNpZ25l ZCBjaGFyIGxlZnRfc2hpZnRfa2V5X3ByZXNzZWQJOiAxOworCXVuc2lnbmVk IGNoYXIgY29udHJvbF9rZXlfcHJlc3NlZAk6IDE7CisJdW5zaWduZWQgY2hh ciBhbHRlcm5hdGVfa2V5X3ByZXNzZWQJOiAxOworCXVuc2lnbmVkIGNoYXIg c2Nyb2xsX2xvY2tfYWN0aXZlCTogMTsKKwl1bnNpZ25lZCBjaGFyIG51bV9s b2NrX2FjdGl2ZQkJOiAxOworCXVuc2lnbmVkIGNoYXIgY2Fwc19sb2NrX2Fj dGl2ZQkJOiAxOworCXVuc2lnbmVkIGNoYXIgaW5zZXJ0X2FjdGl2ZQkJOiAx OworfSBfQklPU19nZXRfc2hpZnRfZmxhZ3MgKHZvaWQpCit7CisJc3RydWN0 IHNoaWZ0X2ZsYWdzX3N0ciBmbGFnczsKKworCWFzbSAoIiBpbnQgJDB4MTYg IyBfQklPU19nZXRfc2hpZnRfZmxhZ3MiCisJICAgICA6ICI9YSIgKGZsYWdz KQorCSAgICAgOiAiYSIgKCh1bnNpZ25lZCBzaG9ydCkweDAyMDApICk7CisJ cmV0dXJuIGZsYWdzOworfQorCitleHRlcm4gaW5saW5lIGZhcnB0ciBfQklP U19nZXRDb25maWd1cmF0aW9uICh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIg ZXJyb3I7CisJZmFycHRyIGNvbmY7CisKKwlhc20gKCIJcHVzaGwJJSVlcwkJ CQkJCVxuIgorCSAgICAgIglzdGMJCQkJCQkJXG4iCisJICAgICAiCWludAkk MHgxNQkJIyBfQklPU19nZXRDb25maWd1cmF0aW9uCVxuIgorCSAgICAgIglz ZXRjCSUlYWwJCQkJCQlcbiIKKwkgICAgICIJcHVzaHcJJSVlcwkJCQkJCVxu IgorCSAgICAgIglwdXNodwklJWJ4CQkJCQkJXG4iCisJICAgICAiCXBvcGwJ JSVlYngJCQkJCQlcbiIKKwkgICAgICIJcG9wbAklJWVzCQkJCQkJXG4iCisJ ICAgICA6ICI9YSIgKGVycm9yKSwgIj1iIiAoY29uZikKKwkgICAgIDogImEi ICgodW5zaWduZWQgc2hvcnQpMHhDMDAwKSApOworCWlmIChlcnJvcikKKwkJ cmV0dXJuIChmYXJwdHIpMDsKKwlyZXR1cm4gY29uZjsKK30KKworZXh0ZXJu IGlubGluZSB2b2lkCitnZXRfYmlvc19jb25mIChmYXJwdHIgYWRyLCBzdHJ1 Y3Qgc3lzX2Rlc2NfdGFibGVfaW5mbyAqc3lzX2Rlc2NfdGFibGUpCit7CisJ dW5zaWduZWQgbmJieXRlID0gc2l6ZW9mKHN0cnVjdCBzeXNfZGVzY190YWJs ZV9pbmZvKTsKKworCWFzbSAoIglwdXNobAklJWVzaQkJCQlcbiIKKwkgICAg ICIJcG9wdwklJXNpCQkJCVxuIgorCSAgICAgIglwb3B3CSUlZnMJCQkJXG4i CisJICAgICAiCWNsZAkJCQkJXG4iCisJICAgICAiCXJlcCBtb3ZzYiAlJWZz OiglJXNpKSwlJWVzOiglJWRpKQlcbiIKKwkgICAgIDogIitTIiAoYWRyKSwg IitEIiAoc3lzX2Rlc2NfdGFibGUpLCAiK2MiIChuYmJ5dGUpLCAiPVgiICgq c3lzX2Rlc2NfdGFibGUpCisJICAgICApOworfQorCitleHRlcm4gaW5saW5l IHVuc2lnbmVkIGNoYXIKK19CSU9TX2dldEV4dGVuZGVkTWVtb3J5ICh1bnNp Z25lZCBzaG9ydCAqc2l6ZWluS2IpCit7CisJdW5zaWduZWQgY2hhciBlcnJv cjsKKworCWFzbSAoIglpbnQJJDB4MTUJIyBfQklPU19nZXRFeHRlbmRlZE1l bW9yeQlcbiIKKwkgICAgICIJc2V0YwklMAkJCQkJXG4iCisJICAgICA6ICI9 cW0iIChlcnJvciksICI9YSIgKCpzaXplaW5LYikKKwkgICAgIDogImEiICgo dW5zaWduZWQgc2hvcnQpMHg4ODAwKQorCSAgICAgKTsKKwlyZXR1cm4gZXJy b3I7CS8qIDAgaWYgbm8gZXJyb3IgKi8KK30KKworc3RydWN0IE1lbW9yeU1h cF9zdHIgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBiYXNlLCBsZW5ndGg7CisJ ZW51bSB7IE1lbUF2YWlsYWJsZSA9IDEsIE1lbVNwZWNpYWwgPSAyLAorCQlN ZW1fQUNQSV9yZWNsYWltID0gMywgTWVtX0FDUElfTlZTID0gNAorCX0gdHlw ZTozMjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitleHRlcm4g aW5saW5lIHVuc2lnbmVkCitfQklPU19RdWVyeU1lbW9yeU1hcCAodW5zaWdu ZWQgKmNvbnRfdmFsLCB1bnNpZ25lZCBidWZzaXplLAorCQkgICAgICBzdHJ1 Y3QgZTgyMG1hcF9pbmZvICpidWZmZXIpCit7CisJLyogaW5saW5lICovIGNv bnN0IHVuc2lnbmVkIHNtYXBzaWcgPSAweDUzNEQ0MTUwOwkvKiAnU01BUCcg aW4gYmlnIGVuZGlhbiAqLworCXVuc2lnbmVkIHNtYXBfcmVzID0gMHhFODIw VSwgYWN0dWFsX2xlbjsKKworCWFzbSB2b2xhdGlsZSAoIglpbnQgICAgICQw eDE1ICAgIyBfQklPU19RdWVyeU1lbW9yeU1hcAkJXG4iCisJCSAgICAgICIJ am5jCTFmCQkJCQlcbiIKKwkJICAgICAgIgl4b3JsCSUlZWF4LCUlZWF4CQkJ CVxuIgorCQkgICAgICAiCTE6CQkJCQkJXG4iCisJCSAgICAgIDogIithIiAo c21hcF9yZXMpLCAiK2IiICgqY29udF92YWwpLAorCQkJIj1jIiAoYWN0dWFs X2xlbiksICI9WCIgKCpidWZmZXIpCisJCSAgICAgIDogImMiIChidWZzaXpl KSwgImQiIChzbWFwc2lnKSwgIkQiIChidWZmZXIpCS8qIGluIGZhY3QgJSVl czolJWRpICovCisJCSAgICAgICk7CisJaWYgKHNtYXBfcmVzICE9IHNtYXBz aWcpCisJCXJldHVybiAwOworCXJldHVybiBhY3R1YWxfbGVuOworfQorCitl eHRlcm4gaW5saW5lIHVuc2lnbmVkIGNoYXIKK19BUE1faW5zdGFsbGF0aW9u X2NoZWNrICh1bnNpZ25lZCBzaG9ydCAqQkNEX3ZlcnNpb24sIHVuc2lnbmVk IHNob3J0ICpmbGFncykKK3sKKwl1bnNpZ25lZCBjaGFyIGVycm9yOworCXVu c2lnbmVkIHNob3J0IHNpZzsKKworCWFzbSAoIglpbnQgICAgICQweDE1CSMg X0FQTV9pbnN0YWxsYXRpb25fY2hlY2sJXG4iCisJICAgICAiCXNldGMgICAg JTAJCQkJCVxuIgorCSAgICAgOiAiPXFtIiAoZXJyb3IpLCAiPWEiICgqQkNE X3ZlcnNpb24pLCAiPWIiIChzaWcpLCAiPWMiICgqZmxhZ3MpCisJICAgICA6 ICJhIiAoKHVuc2lnbmVkIHNob3J0KTB4NTMwMCksICJiIiAoMCkKKwkgICAg ICk7CisJaWYgKGVycm9yKSB7CisJCSpCQ0RfdmVyc2lvbiAmPSAweEZGMDA7 CS8qIGtlZXAgdGhlcmUgZXJyb3IgY29kZSAqLworCQkqZmxhZ3MgPSAwOwor CX0KKwlyZXR1cm4gZXJyb3IgfHwgc2lnICE9IDB4NTA0RDsJLyogIlBNIiAq LworfQorCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIHNob3J0IF9BUE1fZGlz Y29ubmVjdCAodm9pZCkKK3sKKwl1bnNpZ25lZCBzaG9ydCBlcnJvcjsKKwor CWFzbSB2b2xhdGlsZSAoIglpbnQgICAgICQweDE1CSMgX0FQTV9kaXNjb25u ZWN0CVxuIgorCQkgICAgICAiCXNldGMgICAgJSVhbAkJCQlcbiIKKwkJICAg ICAgOiAiPWEiIChlcnJvcikKKwkJICAgICAgOiAiYSIgKCh1bnNpZ25lZCBz aG9ydCkweDUzMDQpLCAiYiIgKDApICk7CisJaWYgKChlcnJvciAmIDB4RkYp ID09IDApCisJCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKK30KKworZXh0 ZXJuIGlubGluZSB1bnNpZ25lZCBjaGFyCitfQVBNX2Nvbm5lY3RfMzJiaXQg KHVuc2lnbmVkIHNob3J0ICpSTV9zZWdiYXNlXzMyLAorCQkgICAgdW5zaWdu ZWQgKmVudHJ5X3BvaW50X29mZnNldF8zMiwKKwkJICAgIHVuc2lnbmVkIHNo b3J0ICpSTV9zZWdiYXNlX2NvZGUxNiwKKwkJICAgIHVuc2lnbmVkIHNob3J0 ICpSTV9zZWdiYXNlX2RhdGExNiwKKwkJICAgIC8qIEFQTSB2MS4xOiAqLwor CQkgICAgdW5zaWduZWQgc2hvcnQgKkFQTV9CSU9TX2NvZGVzZWdfbGVuLAor CQkgICAgdW5zaWduZWQgc2hvcnQgKkFQTV9CSU9TX2RhdGFzZWdfbGVuKQor eworCXVuc2lnbmVkIGNoYXIgZXJyb3I7CisKKwlhc20gdm9sYXRpbGUgKCIJ eG9ybAklJWVkaSwlJWVkaQkJCVxuIgorCQkgICAgICAiCXhvcmwJJSVlc2ks JSVlc2kJCQlcbiIKKwkJICAgICAgIglpbnQgICAgICQweDE1CSMgX0FQTV9j b25uZWN0XzMyYml0CVxuIgorCQkgICAgICAiCXNldGMgICAgJTAJCQkJXG4i CisJCSAgICAgIDogIj1xbSIgKGVycm9yKSwKKwkJCSI9YSIgKCpSTV9zZWdi YXNlXzMyKSwgIj1iIiAoKmVudHJ5X3BvaW50X29mZnNldF8zMiksCisJCQki PWMiICgqUk1fc2VnYmFzZV9jb2RlMTYpLCAiPWQiICgqUk1fc2VnYmFzZV9k YXRhMTYpLAorCQkJIj1TIiAoKkFQTV9CSU9TX2NvZGVzZWdfbGVuKSwKKwkJ CSI9RCIgKCpBUE1fQklPU19kYXRhc2VnX2xlbikKKwkJICAgICAgOiAiYSIg KCh1bnNpZ25lZCBzaG9ydCkweDUzMDMpLCAiYiIgKDApCisJCSAgICAgICk7 CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqKiBWaWRlbyBCSU9TOiBF R0EsIFZHQSwgVkVTQSBhbmQgRURJRC4KKyAqKi8KK3VuaW9uIEVHQV9ieF91 bmlvbiB7CisJc3RydWN0IHsKKwkJZW51bSB7IEVHQV82NEssIEVHQV8xMjhL LCBFR0FfMTkySywgRUdBXzI1NksgfSBtZW1vcnk6ODsKKwkJZW51bSB7IEVH QV9DT0xPUl8zRHgsIEVHQV9NT05PXzNCeCB9IElPYWRkcjo4OworCX0gZW51 bXM7CisJdW5zaWduZWQgc2hvcnQgSU9hZGRyX21lbW9yeTsKK30gX19hdHRy aWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgRUdBX2N4X3N0ciB7CisJ dW5zaWduZWQgc2hvcnQgc3dpdGNoMW9mZgk6IDE7CisJdW5zaWduZWQgc2hv cnQgc3dpdGNoMm9mZgk6IDE7CisJdW5zaWduZWQgc2hvcnQgc3dpdGNoM29m Zgk6IDE7CisJdW5zaWduZWQgc2hvcnQgc3dpdGNoNG9mZgk6IDE7CisJdW5z aWduZWQgc2hvcnQgc3dpdGNoX3VudXNlZAk6IDQ7CisJdW5zaWduZWQgc2hv cnQgRkVBVDFsaW5lX3N0YXRlMgk6IDE7CisJdW5zaWduZWQgc2hvcnQgRkVB VDBsaW5lX3N0YXRlMgk6IDE7CisJdW5zaWduZWQgc2hvcnQgRkVBVDFsaW5l X3N0YXRlMQk6IDE7CisJdW5zaWduZWQgc2hvcnQgRkVBVDBsaW5lX3N0YXRl MQk6IDE7CisJdW5zaWduZWQgc2hvcnQgRkVBVF91bnVzZWQJOiA0OworfSBf X2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2V4dGVybiBpbmxpbmUgdm9p ZAorX0VHQV9nZXRkaXNwbGF5ICh1bmlvbiBFR0FfYnhfdW5pb24gKkVHQV9i eCwgc3RydWN0IEVHQV9jeF9zdHIgKkVHQV9jeCkKK3sKKwl1bnNpZ25lZCBz aG9ydCBkZXN0cm95ZWRfdHNlbmdfRVQ0MDAwX1Y4XzAwOworCWFzbSAoIiBp bnQgJDB4MTAJIyBfRUdBX2dldGRpc3BsYXkgIgorCSAgICAgOiAiPWIiICgq RUdBX2J4KSwgIj1jIiAoKkVHQV9jeCksCisJCSI9YSIgKGRlc3Ryb3llZF90 c2VuZ19FVDQwMDBfVjhfMDApCisJICAgICA6ICJhIiAoKHVuc2lnbmVkIHNo b3J0KTB4MTIwMCksCisJCSJiIiAoKHVuc2lnbmVkIHNob3J0KTB4RkYxMCkJ LyogJWJoID0gMHhGRiB0byBzZWUgaWYgc3VwcG9ydGVkICovCisJICAgICAp OworfQorCitleHRlcm4gaW5saW5lIHZvaWQKK19WR0FfZ2V0Y3Vyc29yICh1 bnNpZ25lZCBjaGFyIHBhZ2UsIHVuc2lnbmVkIGNoYXIgKnJvdywgdW5zaWdu ZWQgY2hhciAqY29sLAorCSAgICAgICAgdW5zaWduZWQgY2hhciAqY3Vyc29y c3RhcnQsIHVuc2lnbmVkIGNoYXIgKmN1cnNvcnN0b3ApCit7CisJdW5zaWdu ZWQgc2hvcnQgcm93X2NvbCwgY3N0YXJ0X2NzdG9wOworCXVuc2lnbmVkIHNo b3J0IGRlc3Ryb3llZF9QaG9lbml4X0JJT1M7CisKKwlhc20gKCIgaW50ICQw eDEwICMgZ2V0Y3Vyc29yICIKKwkgICAgIDogIj1kIiAocm93X2NvbCksICI9 YyIgKGNzdGFydF9jc3RvcCksCisJCSI9YSIgKGRlc3Ryb3llZF9QaG9lbml4 X0JJT1MpCisJICAgICA6ICJhIiAoKHVuc2lnbmVkIHNob3J0KTB4MDMwMCks ICJiIiAoKHVuc2lnbmVkIHNob3J0KXBhZ2UgPDwgOCkKKwkgICAgICk7CisJ KmNvbCA9ICh1bnNpZ25lZCBjaGFyKXJvd19jb2w7CisJKnJvdyA9IHJvd19j b2wgPj4gODsKKwkqY3Vyc29yc3RhcnQgPSBjc3RhcnRfY3N0b3AgPj4gODsJ LyogYnVnIHJlcG9ydGVkIHdpdGggbW9ubyBkaXNwbGF5cyAqLworCSpjdXJz b3JzdG9wID0gKHVuc2lnbmVkIGNoYXIpY3N0YXJ0X2NzdG9wOworfQorCitl eHRlcm4gaW5saW5lIGNoYXIKK19WR0FfZ2V0bW9kZSAodW5zaWduZWQgY2hh ciAqbmJjb2wsIHVuc2lnbmVkIGNoYXIgKnBhZ2UpCit7CisJdW5zaWduZWQg c2hvcnQgbmJjb2xfbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCB0bXBwYWdlOwor CisJYXNtICgiIGludCAkMHgxMCAjIGdldG1vZGUgIgorCSAgICAgOiAiPWIi ICh0bXBwYWdlKSwgIj1hIiAobmJjb2xfbW9kZSkKKwkgICAgIDogImEiICgo dW5zaWduZWQgc2hvcnQpMHgwRjAwKQorCSAgICAgKTsKKwkqbmJjb2wgPSBu YmNvbF9tb2RlID4+IDg7CisJKnBhZ2UgPSB0bXBwYWdlID4+IDg7CisKKwly ZXR1cm4gKGNoYXIpbmJjb2xfbW9kZTsJLyogYml0IDcgc2V0IGlmIGxhc3Qg c2V0bW9kZSBoYWQgaXQgKi8KK30KKworZXh0ZXJuIGlubGluZSB1bnNpZ25l ZAorX1ZHQV9nZXRfZGlzcGxheV9jb21iaW5hdGlvbl9jb2RlICh1bnNpZ25l ZCBjaGFyICphY3RpdmVfZGNjLAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgKmFs dGVybmF0ZV9kY2MpCit7CisJdW5zaWduZWQgY2hhciByZXN1bHQ7CisJdW5z aWduZWQgc2hvcnQgYWx0ZXJuYXRlX2FjdGl2ZTsKKworCWFzbSAoIiBpbnQg JDB4MTAgIyBnZXRfZGlzcGxheV9jb21iaW5hdGlvbl9jb2RlICIKKwkgICAg IDogIj1hIiAocmVzdWx0KSwgIj1iIiAoYWx0ZXJuYXRlX2FjdGl2ZSkKKwkg ICAgIDogImEiICgodW5zaWduZWQgc2hvcnQpMHgxQTAwKQorCSAgICAgKTsK KwkqYWN0aXZlX2RjYyA9ICh1bnNpZ25lZCBjaGFyKWFsdGVybmF0ZV9hY3Rp dmU7CisJKmFsdGVybmF0ZV9kY2MgPSBhbHRlcm5hdGVfYWN0aXZlID4+IDg7 CisKKwlyZXR1cm4gKHJlc3VsdCAhPSAweDFBKTsKK30KKwordHlwZWRlZiBz dHJ1Y3QgeworCWNoYXIgVmJlU2lnbmF0dXJlWzRdOwkvKiAiVkVTQSIgYnV0 IE5PVCB6ZXJvIHRlcm1pbmF0ZWQuICovCisJdW5zaWduZWQgc2hvcnQgVmJl VmVyc2lvbjsKKwlmYXJwdHIgT2VtU3RyaW5nUHRyOworCXN0cnVjdCB2ZXNh X2NhcGFiaWxpdGllc19zdHIgQ2FwYWJpbGl0aWVzOworCWZhcnB0ciBWaWRl b01vZGVQdHI7CisJdW5zaWduZWQgc2hvcnQgVG90YWxNZW1vcnk7CS8qIGlu IDY0SyBibG9ja3MgKi8KKwkvKiBpZiBWQkUgMi4wKyAoZWxzZSBzdHJ1Y3R1 cmUgaXMgMjU2IGJ5dGVzKSA6ICovCisJdW5zaWduZWQgc2hvcnQgT2VtU29m dHdhcmVSZXY7CisJZmFycHRyIE9lbVZlbmRvck5hbWVQdHI7CisJZmFycHRy IE9lbVByb2R1Y3ROYW1lUHRyOworCWZhcnB0ciBPZW1Qcm9kdWN0UmV2UHRy OworCisJdW5zaWduZWQgY2hhciBSZXNlcnZlZFsyMjJdOwkvKiBPTkxZIFZF U0EgdmVyc2lvbiAxLjItIGluZm8gKi8KKwl1bnNpZ25lZCBjaGFyIE9lbURh dGFbMjU2XTsJLyogd2lsbCBub3Qga2lsbCBWRVNBMS4yLSAqLworfSBfX2F0 dHJpYnV0ZV9fICgocGFja2VkKSkgVkVTQV9WYmVJbmZvQmxvY2s7CisKK3R5 cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgdmVzYV9tb2RlX2F0dHJpYnV0ZV9z dHIgTW9kZUF0dHJpYnV0ZXM7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hh ciB3aW5fZXhpc3QJCTogMTsKKwkJdW5zaWduZWQgY2hhciB3aW5fcmVhZGFi bGUJOiAxOworCQl1bnNpZ25lZCBjaGFyIHdpbl93cml0YWJsZQk6IDE7CisJ CXVuc2lnbmVkIGNoYXIgcGFkZGluZwkJOiA1OworCX0gX19hdHRyaWJ1dGVf XyAoKHBhY2tlZCkpIFdpbkFBdHRyaWJ1dGVzLCBXaW5CQXR0cmlidXRlczsK Kwl1bnNpZ25lZCBzaG9ydCBXaW5HcmFudWxhcml0eTsJLyogaW4gS2IgKi8K Kwl1bnNpZ25lZCBzaG9ydCBXaW5TaXplOwkvKiBpbiBLYiAqLworCXVuc2ln bmVkIHNob3J0IFdpbkFTZWdtZW50OworCXVuc2lnbmVkIHNob3J0IFdpbkJT ZWdtZW50OworCWZhcnB0ciBXaW5GdW5jUHRyOworCXVuc2lnbmVkIHNob3J0 IEJ5dGVzUGVyU2NhbkxpbmU7CisJLyogb3B0aW9uYWwgcGFydCwgc2VlICJh dHRyaWJ1dGUub3B0aW9uYWxfaW5mb19hdmFpbGFibGUiOiAqLworCXVuc2ln bmVkIHNob3J0IFhSZXNvbHV0aW9uOwkvKiBjaGFyIGluIHRleHQgbW9kZXMs CisJCQkJCSAgIHBpeGVsIGluIGdyYXBoaWMgbW9kZXMgKi8KKwl1bnNpZ25l ZCBzaG9ydCBZUmVzb2x1dGlvbjsKKwl1bnNpZ25lZCBjaGFyIFhDaGFyU2l6 ZTsKKwl1bnNpZ25lZCBjaGFyIFlDaGFyU2l6ZTsKKwl1bnNpZ25lZCBjaGFy IE51bWJlck9mUGxhbmVzOworCXVuc2lnbmVkIGNoYXIgQml0c1BlclBpeGVs OworCXVuc2lnbmVkIGNoYXIgTnVtYmVyT2ZCYW5rczsJLyogdW51c2VkIGhl cmUgOiBubyBtdWx0aXBhZ2VkIHNjcmVlbiAqLworCWVudW0geyBtZW1fdGV4 dCA9IDAsIG1lbV9DR0EsIG1lbV9IR0MsIG1lbV9FR0EsIG1lbV9wYWNrZWRw aXhlbCwKKwkJbWVtX3NlcTI1NiwgbWVtX0hpQ29sb3IyNCwgbWVtX1lVVgor CX0gTWVtb3J5TW9kZWwgOiA4OworCS8qIG1lbV9zZXEyNTYgPSBub24gY2hh aW4gNCAqLworCXVuc2lnbmVkIGNoYXIgQmFua1NpemU7CS8qIGluIEtiLCB1 bnVzZWQgaGVyZSAqLworCXVuc2lnbmVkIGNoYXIgTnVtYmVyT2ZJbWFnZVBh Z2VzOworCXVuc2lnbmVkIGNoYXIgUmVzZXJ2ZWQ7CisJLyogVkJFIDEuMis6 ICovCisJc3RydWN0IHZlc2FfY29sb3JfbGF5b3V0X3N0ciBsYXlvdXQ7CisJ c3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBjb2xvcl9yYW1wX3Byb2dyYW1t YWJsZQk6IDE7CisJCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfc3BhY2VfdXNh YmxlCTogMTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBEaXJlY3RD b2xvck1vZGVJbmZvOworCS8qIFZCRSAyLjA6ICovCisJdW5zaWduZWQgUGh5 c0Jhc2VQdHI7CisJdW5zaWduZWQgT2ZmU2NyZWVuTWVtT2Zmc2V0OworCXVu c2lnbmVkIHNob3J0IE9mZlNjcmVlbk1lbVNpemU7CS8qIGluIEtiICovCisJ dW5zaWduZWQgY2hhciBSZXNlcnZlZDJbMjA2XTsKK30gX19hdHRyaWJ1dGVf XyAoKHBhY2tlZCkpIFZFU0FfbW9kZWluZm9fdDsKKworZXh0ZXJuIGlubGlu ZSB1bnNpZ25lZAorX1ZFU0FfZ2V0aW5mbyAoVkVTQV9WYmVJbmZvQmxvY2sg KlZFU0FfaW5mbykKK3sKKwl1bnNpZ25lZCBzaG9ydCBjbWRfc3RhdHVzID0g MHg0RjAwOworCisJaWYgKHNpemVvZihWRVNBX1ZiZUluZm9CbG9jaykgIT0g NTEyKQorCQlfX0VSUk9SKCk7CisKKwlhc20gKCIgaW50ICQweDEwICMgX1ZF U0FfZ2V0aW5mbyAiCisJICAgICA6ICIrYSIoY21kX3N0YXR1cyksICI9WCIg KCpWRVNBX2luZm8pCisJICAgICA6ICJEIihWRVNBX2luZm8pCS8qIGluIGZh Y3QgJWVzOiVkaSAqLworCSAgICAgKTsKKwlyZXR1cm4gKGNtZF9zdGF0dXMg IT0gMHgwMDRGKTsKK30KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZAorX1ZF U0FfZ2V0bW9kZWluZm8gKFZFU0FfbW9kZWluZm9fdCAqVkVTQV9tb2RlaW5m bywgdW5zaWduZWQgc2hvcnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBj bWRfc3RhdHVzID0gMHg0RjAxOworCisJaWYgKHNpemVvZihWRVNBX21vZGVp bmZvX3QpICE9IDI1NikKKwkJX19FUlJPUigpOworCisJYXNtICgiIGludCAk MHgxMCAjIF9WRVNBX2dldG1vZGVpbmZvICIKKwkgICAgIDogIithIiAoY21k X3N0YXR1cyksICI9WCIgKCpWRVNBX21vZGVpbmZvKQorCSAgICAgOiAiYyIg KG1vZGUpLCAiRCIgKFZFU0FfbW9kZWluZm8pIC8qIGluIGZhY3QgJWVzOiVk aSAqLworCSAgICApOworCXJldHVybiAoY21kX3N0YXR1cyAhPSAweDAwNEYp OworfQorCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIF9WRVNBX2dldG1vZGUg KHVuc2lnbmVkIHNob3J0ICptb2RlKQoreworCXVuc2lnbmVkIHNob3J0IGNt ZF9zdGF0dXMgPSAweDRGMDM7CisKKwlhc20gKCIgaW50ICQweDEwICMgX1ZF U0FfZ2V0bW9kZSAiCisJICAgICA6ICIrYSIgKGNtZF9zdGF0dXMpLAorCQki PWIiICgqbW9kZSkgLyogKm1vZGUgY29udGFpbnMgYml0cyAxMywgMTQgJiAx NSAqLworCSAgICAgKTsKKwlyZXR1cm4gKGNtZF9zdGF0dXMgIT0gMHgwMDRG KTsKK30KKworZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBfVkVTQV9zZXREQUN3 aWR0aCAodW5zaWduZWQgY2hhciBkZXB0aCkKK3sKKwl1bnNpZ25lZCBzaG9y dCBjbWRfc3RhdHVzID0gMHg0RjA4OworCXVuc2lnbmVkIHNob3J0IHJlc3Vs dCA9IGRlcHRoIDw8IDg7IC8qICVibCA9IDAgKi8KKworCWFzbSB2b2xhdGls ZSAoIiBpbnQgJDB4MTAgIyBfVkVTQV9zZXREQUN3aWR0aCAiICAgICAgIC8q IFZFU0EgMS4yKyAqLworCSAgICA6ICIrYSIgKGNtZF9zdGF0dXMpLCAiK2Ii IChyZXN1bHQpCisJICAgICk7CisJcmV0dXJuIChjbWRfc3RhdHVzICE9IDB4 MDA0RiB8fCAocmVzdWx0ID4+IDgpICE9IGRlcHRoKTsKK30KKworLyogVkVT QSAyLjArICovCitleHRlcm4gaW5saW5lIHVuc2lnbmVkCitfVkVTQV9HZXRQ TWludGVyZmFjZSAoZmFycHRyICphZGRyLCB1bnNpZ25lZCBzaG9ydCAqbGVu KQoreworCXVuc2lnbmVkIHNob3J0IGNtZF9zdGF0dXMgPSAweDRGMEE7CisK Kwlhc20gKCIJcHVzaGwJJSVlcwkJCQkJCVxuIgorCSAgICAgIgl4b3J3CSUl ZGksJSVkaQkJCQkJXG4iCisJICAgICAiCW1vdgklJWRpLCUlZXMJCQkJCVxu IgorCSAgICAgIglpbnQJJDB4MTAJCSMgX1ZFU0FfR2V0UE1pbnRlcmZhY2UJ CVxuIgorCSAgICAgIglwdXNodwklJWVzCQkJCQkJXG4iCisJICAgICAiCXB1 c2h3CSUlZGkJCQkJCQlcbiIKKwkgICAgICIJcG9wbAklJWVkaQkJCQkJCVxu IgorCSAgICAgIglwb3BsCSUlZXMJCQkJCQlcbiIKKwkgICAgIDogIithIiAo Y21kX3N0YXR1cyksICI9RCIgKCphZGRyKSwgIj1jIiAoKmxlbikKKwkgICAg IDogImIiICgwKSwgImMiICgodW5zaWduZWQgc2hvcnQpMCkKKwkgICAgICk7 CisKKwlyZXR1cm4gKGNtZF9zdGF0dXMgIT0gMHgwMDRGKTsKK30KKworZXh0 ZXJuIGlubGluZSB1bnNpZ25lZCBfRURJRF9kZXRlY3QgKHZvaWQpCit7CisJ dW5zaWduZWQgc2hvcnQgY21kX3N0YXR1cyA9IDB4NEYxNSwgdW5rbm93bjEs IHVua25vd24yOworCS8qICVjeCBtb2RpZmllZCBieSBOVklESUEgUklWQSBU TlQyIE1vZGVsIDY0L01vZGVsIDY0IFBybyAqLworCisJYXNtICgKKyIJcHVz aHcJJSVlcwkJCVxuIgorIgltb3Z3CSUlZGksJSVlcwkJXG4iCisiCWludAkk MHgxMCAjIF9FRElEX2RldGVjdAlcbiIKKyIJcG9wdwklJWVzCQkJXG4iCisg ICAgICAgIDogIithIiAoY21kX3N0YXR1cyksICI9YiIgKHVua25vd24xKSwg Ij1jIiAodW5rbm93bjIpCisgICAgICAgIDogImIiICgwKSwgImMiICgwKSwg IkQiICgwKQorICAgICAgICApOworCXJldHVybiAoY21kX3N0YXR1cyAhPSAw eDAwNEYpOworfQorCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIF9FRElEX3Jl YWQgKFZCRV9FRElEX3QgKmluZm8pCit7CisJdW5zaWduZWQgc2hvcnQgY21k X3N0YXR1cyA9IDB4NEYxNTsKKwl1bnNpZ25lZCBjaGFyIHRtcCA9IDE7CisJ dW5zaWduZWQgc2hvcnQgdW5rbm93bjEgPSAwLCB1bmtub3duMiA9IDE7CisK KwlpZiAoc2l6ZW9mIChWQkVfRURJRF90KSAhPSAweDgwKQorCQlfX0VSUk9S KCk7CisKKwlhc20gKCIgaW50ICQweDEwICMgX0VESURfcmVhZCIKKwkJOiAi K2EiIChjbWRfc3RhdHVzKSwgIj1YIiAoKmluZm8pCisJCTogImIiICh0bXAp LCAiRCIgKGluZm8pLCAvKiBpbiBmYWN0ICVlczolZGkgKi8KKwkJCSJjIiAo dW5rbm93bjEpLCAiZCIgKHVua25vd24yKQorCSk7CisJLyogcmV0dXJucyAw eDAxNEYgaWYgbW9uaXRvciBub24gRURJRCAqLworCXJldHVybiAoY21kX3N0 YXR1cyAhPSAweDAwNEYpOworfQorCisvKioKKyAqKiBEaXNrIEJJT1M6Cisg KiovCitleHRlcm4gaW5saW5lIHVuc2lnbmVkCitfQklPU0RJU0tfZ2V0cGFy YW0gKHVuc2lnbmVkIGNoYXIgZGlzaywKKwkgICAgICAgICAgICB1bnNpZ25l ZCBzaG9ydCAqdG1wY3gsIHVuc2lnbmVkIHNob3J0ICp0bXBkeCwKKwkgICAg ICAgICAgICBmYXJwdHIgKkRCVGFkciwgdW5zaWduZWQgY2hhciAqQ21vc0Ry aXZlVHlwZSwKKwkgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzdGF0dXMp Cit7CisJdW5zaWduZWQgY2hhciBjYXJyeTsKKworCWFzbSAoIglwdXNobAkl JWVzCQlcbiIKKwkgICAgICIJeG9ydwklJWRpLCUlZGkJXG4iCisJICAgICAi CW1vdgklJWRpLCUlZXMJXG4iCisJICAgICAiCWludAkkMHgxMwkJIyBfQklP U0RJU0tfZ2V0cGFyYW0JXG4iCisJICAgICAiCXB1c2h3CSUlZXMJCVxuIgor CSAgICAgIglwdXNodwklJWRpCQlcbiIKKwkgICAgICIJcG9wbAklJWVkaQkJ XG4iCisJICAgICAiCXBvcGwJJSVlcwkJXG4iCisJICAgICAiCW1vdgklJWFo LCUxCQlcbiIKKwkgICAgICIJc2V0YwklMAkJXG4iCisJICAgICA6ICI9cW0i IChjYXJyeSksICI9cW0iICgqc3RhdHVzKSwgIj1jIiAoKnRtcGN4KSwgIj1k IiAoKnRtcGR4KSwKKwkJCSI9YiIgKCpDbW9zRHJpdmVUeXBlKSwgIj1EIiAo KkRCVGFkcikKKwkgICAgIDogImEiKCh1bnNpZ25lZCBzaG9ydCkweDA4MDAp LCAiZCIgKGRpc2spLCAiYiIgKDApCisJICAgICApOworCisJcmV0dXJuIGNh cnJ5OworfQorCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGNoYXIKK19CSU9T RElTS19nZXR0eXBlICh1bnNpZ25lZCBjaGFyIGRpc2ssIHVuc2lnbmVkICpu YnNlY3QsIHVuc2lnbmVkIGNoYXIgKnN0YXR1cykKK3sKKwl1bnNpZ25lZCBj aGFyIGNhcnJ5OworCXVuc2lnbmVkIGR1bW15OworCisJYXNtICgiCXhvcgkl JWRoLCUlZGgJCQkJXG4iCisJICAgICAiCXhvcgklJWN4LCUlY3gJCQkJXG4i CisJICAgICAiCWludAkkMHgxMwkJIyBfQklPU0RJU0tfZ2V0dHlwZQlcbiIK KwkgICAgICIJc2hsbAkkMTYsJSVlY3gJCQkJXG4iCisJICAgICAiCW1vdncJ JSVkeCwlJWN4CQkJCVxuIgorCSAgICAgIgltb3ZiCSUlYWgsJTEJCQkJCVxu IgorCSAgICAgIglzZXRjCSUwCQkJCQlcbiIKKwkgICAgIDogIj1xbSIgKGNh cnJ5KSwgIj1xbSIgKCpzdGF0dXMpLCAiPWMiICgqbmJzZWN0KSwgIj1kIiAo ZHVtbXkpCisJICAgICA6ICJhIiAoKHVuc2lnbmVkIHNob3J0KTB4MTUwMCks CisJCSJkIiAoZGlzaykJLyogZGlzayA9IDB4ODAuLjB4OEYgZWxzZSBvbGQg Q29tcGFxIGJ1ZyAqLworCSAgICAgKTsKKworCXJldHVybiBjYXJyeTsKK30K KworZXh0ZXJuIGlubGluZSB2b2lkCitnZXRfZHJpdmVfaW5mbyAoZmFycHRy IGluZGlyZWN0X3B0ciwgdW5pb24gZHJpdmVfaW5mbyAqZGlza2luZm8pCit7 CisJdW5zaWduZWQgbmJieXRlID0gc2l6ZW9mKCpkaXNraW5mbyk7CisKKwlh c20gKCIJcHVzaGwJJSVlc2kJCQkJXG4iCisJICAgICAiCXBvcHcJJSVzaQkJ CQlcbiIKKwkgICAgICIJcG9wdwklJWZzCQkJCVxuIgorCSAgICAgIglwdXNo bAklJWZzOiglJXNpKQkJCVxuIgorCSAgICAgIglwb3B3CSUlc2kJCQkJXG4i CisJICAgICAiCXBvcHcJJSVmcwkJCQlcbiIKKwkgICAgICIJY2xkCQkJCQlc biIKKwkgICAgICIJcmVwIG1vdnNiICUlZnM6KCUlc2kpLCUlZXM6KCUlZGkp CVxuIgorCSAgICAgOiAiK1MiIChpbmRpcmVjdF9wdHIpLCAiK0QiIChkaXNr aW5mbyksICIrYyIgKG5iYnl0ZSksICI9WCIgKCpkaXNraW5mbykKKwkgICAg ICk7Cit9CisKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgY2hhcgorX0JJT1NE SVNLX1JXc2VjdG9yICh1bnNpZ25lZCBjaGFyIGRyaXZlLAorCQkgICAgdW5z aWduZWQgc2hvcnQgY3lsaW5kZXIsIHVuc2lnbmVkIGNoYXIgaGVhZCwKKwkJ ICAgIHVuc2lnbmVkIGNoYXIgc2VjdG9yLCB1bnNpZ25lZCBjaGFyIG5ic2Vj dG9yLAorCQkgICAgZmFycHRyIGJ1ZmZlciwgY29uc3QgdW5zaWduZWQgcmVh ZCkKK3sKKwl1bnNpZ25lZCBzaG9ydCByZXN1bHQsIGJ1Z2d5X2Jpb3M7CisK Kwlhc20gdm9sYXRpbGUgKCIJcHVzaGwJJSVlcwkJCQlcbiIKKwkJICAgICAg IglwdXNobAklJWVieAkJCQlcbiIKKwkJICAgICAgIglwb3B3CSUlYngJCQkJ XG4iCisJCSAgICAgICIJcG9wdwklJWVzCQkJCVxuIgorCQkgICAgICAiCXN0 YwkJIyBidWdneSBCSU9TZXMJCVxuIgorCQkgICAgICAiCWludAkkMHgxMyAg ICMgX0JJT1NESVNLX1JXc2VjdG9yCVxuIgorCQkgICAgICAiCXN0aQkJIyBi dWdneSBCSU9TZXMJCVxuIgorCQkgICAgICAiCXBvcGwJJSVlcwkJCQlcbiIK KwkJICAgICAgIglzZXRjCSUlYWwJCQkJXG4iCisJCSAgICAgIDogIj1hIiAo cmVzdWx0KSwgIj1kIiAoYnVnZ3lfYmlvcykKKwkJICAgICAgOiAiYSIgKChy ZWFkPyAweDAyMDAgOiAweDAzMDApIHwgbmJzZWN0b3IpLAorCQkJImIiIChi dWZmZXIpLAorCQkJImMiICgoY3lsaW5kZXIgPDwgOCkgfCAoKGN5bGluZGVy ID4+IDIpICYgMHhDMCkKKwkJCQkJfCAoc2VjdG9yICYgMHgzRikpLAorCQkJ ImQiICgoKCh1bnNpZ25lZCBzaG9ydCloZWFkKSA8PCA4KSB8IGRyaXZlKQor CQkgICAgICApOworCWlmIChyZXN1bHQgJiAweDAwRkYpCisJCXJldHVybiBy ZXN1bHQgPj4gODsKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBzdHJ1Y3Qg eworCXVuc2lnbmVkIHNob3J0IGJ1ZmZlcnNpemU7CisJdW5zaWduZWQgc2hv cnQgaW5mb2JpdDsKKwl1bnNpZ25lZCBuYmN5bGluZGVyOworCXVuc2lnbmVk IG5iaGVhZDsKKwl1bnNpZ25lZCBuYnNlY3RvcnBlcnRyYWNrOworCXVuc2ln bmVkIGxvbmcgbG9uZyBuYnRvdGFsc2VjdG9yOworCXVuc2lnbmVkIHNob3J0 IGJ5dGVwZXJzZWN0b3I7CisJLyogVjIuMCsgOiAqLworCWZhcnB0ciBjb25m aWdwdHI7CS8qIGZvciBpbnN0YW5jZSBlYmlvc1Bob2VuaXggcmVhbG1vZGUg YWRkcmVzcyAqLworCS8qIFYzLjArIDogKi8KKwl1bnNpZ25lZCBzaG9ydCBz aWduYXR1cmUweEJFREQ7CisJdW5zaWduZWQgY2hhciBsZW5kZXZpY2VwYXRo OwkvKiAweDI0IGZvciB2My4wICovCisJdW5zaWduZWQgY2hhciByZXNlcnZl ZFszXTsKKwl1bnNpZ25lZCBjaGFyIGJ1c3R5cGVbNF07CS8qIGV4YWN0bHkg IklTQSIgb3IgIlBDSSIgKi8KKwl1bnNpZ25lZCBjaGFyIEludGVyZmFjZVs4 XTsJLyogZXhhY3RseSAiQVRBIiwgIkFUQVBJIiwKKwkJCQkJCSAiU0NTSSIs ICJVU0IiLi4uICovCisJdW5pb24gaW50ZXJmYWNlX3BhdGhfdSB7CisJCXN0 cnVjdCB7CisJCQl1bnNpZ25lZCBzaG9ydCBhZGRyOworCQkJdW5zaWduZWQg Y2hhciBwYWRbNl07CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGlz YTsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGNoYXIgYnVzbnI7CisJCQl1 bnNpZ25lZCBjaGFyIGRldmljZW5yOworCQkJdW5zaWduZWQgY2hhciBmdW5j dGlvbm5yOworCQkJdW5zaWduZWQgY2hhciBwYWRbNV07CisJCX0gX19hdHRy aWJ1dGVfXyAoKHBhY2tlZCkpIHBjaTsKKwl9IGJ1czsKKwl1bmlvbiBkZXZp Y2VfcGF0aF91IHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGNoYXIgc2xh dmU7CS8qIDAgaWYgbWFzdGVyLCAxIGlmIHNsYXZlICovCisJCQl1bnNpZ25l ZCBjaGFyIHBhZFs3XTsKKwkJCXVuc2lnbmVkIGxvbmcgbG9uZyByZXNlcnZl ZDsJLyogTm90IHByZXNlbnQgaW4gc29tZSBkb2NzLi4uICovCisJCX0gX19h dHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YTsKKwkJc3RydWN0IHsKKwkJCXVu c2lnbmVkIGNoYXIgc2xhdmU7CS8qIDAgaWYgbWFzdGVyLCAxIGlmIHNsYXZl ICovCisJCQl1bnNpZ25lZCBjaGFyIGxvZ2ljYWxfdW5pdF9ucjsKKwkJCXVu c2lnbmVkIGNoYXIgcGFkWzZdOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNr ZWQpKSBhdGFwaTsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGNoYXIgbG9n aWNhbF91bml0X25yOworCQkJdW5zaWduZWQgY2hhciBwYWRbN107CisJCX0g X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNjc2k7CisJCXN0cnVjdCB7CisJ CQl1bnNpZ25lZCBjaGFyIHRvYmVkZWZpbmVkOworCQkJdW5zaWduZWQgY2hh ciBwYWRbN107CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVzYjsK KwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGxvbmcgbG9uZyBGaXJlV2lyZUdl bmVyYWxVbmlxdWVJRDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkg aWVlZTEzOTQ7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBsb25nIGxvbmcg V29ybGRXaWRlTnVtYmVyOworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQp KSBGaWJyZUNoYW5uZWw7CisJfSBkZXZpY2U7CisJdW5zaWduZWQgY2hhciB6 ZXJvOworCXVuc2lnbmVkIGNoYXIgYnl0ZWNoZWNrc3VtOwkvKiBieXRlIHN1 bSBbMHgxRS4uMHg0OV0gPSAwICovCit9IF9fYXR0cmlidXRlX18gKChwYWNr ZWQpKSBlYmlvc2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2ln bmVkIHNob3J0IGV4dGVuZGVkX2ZjdAk6IDE7CisJdW5zaWduZWQgc2hvcnQg cmVtb3ZhYmxlCTogMTsKKwl1bnNpZ25lZCBzaG9ydCBlbmhhbmNlZAkJOiAx OworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkCQk6IDEzOworfSBfX2F0dHJp YnV0ZV9fICgocGFja2VkKSkgZWJpb3NfYml0bWFwX3Q7CisKK2V4dGVybiBp bmxpbmUgdW5zaWduZWQgY2hhcgorX0VCSU9TRElTS19wcm9iZSAodW5zaWdu ZWQgY2hhciBkaXNrLCB1bnNpZ25lZCBjaGFyICp2ZXJzaW9uLAorCQkgIHVu c2lnbmVkIGNoYXIgKmV4dGVuc2lvbiwgZWJpb3NfYml0bWFwX3QgKmJpdG1h cCkKK3sKKwl1bnNpZ25lZCBjaGFyIGNhcnJ5OworCXVuc2lnbmVkIHNob3J0 IHNpZ25hdDB4QUE1NTsKKworCWFzbSAoIiAgICAgICBpbnQgICAgICQweDEz ICAgICAgICAgICAjIF9FQklPU0RJU0tfcHJvYmUgICAgICBcbiIKKwkgICAg ICIgICAgICAgbW92ICAgICAlJWFoLCUxICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXG4iCisJICAgICAiICAgICAgIG1vdiAgICAgJSVkaCwl MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCSAgICAg IiAgICAgICBzZXRjICAgICUwICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcbiIKKwkgICAgIDogIj1xbSIgKGNhcnJ5KSwgIj1xbSIg KCp2ZXJzaW9uKSwgIj1xbSIgKCpleHRlbnNpb24pLAorCQkiPWIiIChzaWdu YXQweEFBNTUpLCAiPWMiICgqYml0bWFwKQorCSAgICAgOiAiYSIgKCh1bnNp Z25lZCBzaG9ydCkweDQxMDApLCAiYiIgKCh1bnNpZ25lZCBzaG9ydCkweDU1 QUEpLAorCQkiZCIoZGlzaykKKwkgICAgICk7CisKKwlyZXR1cm4gY2Fycnkg fHwgKHNpZ25hdDB4QUE1NSAhPSAweEFBNTUpOworfQorCitleHRlcm4gaW5s aW5lIHVuc2lnbmVkIGNoYXIKK19FQklPU0RJU0tfZ2V0cGFyYW0gKHVuc2ln bmVkIGNoYXIgZGlzaywgZWJpb3NpbmZvX3QgKmViaW9zaW5mbywKKwkJICAg ICB1bnNpZ25lZCBjaGFyICpzdGF0dXMpCit7CisJdW5zaWduZWQgY2hhciBj YXJyeTsKKworCWFzbSAoIiAgICAgICBpbnQgICAgICQweDEzICAgICAgICAg ICAjIF9FQklPU0RJU0tfZ2V0cGFyYW0gICBcbiIKKwkgICAgICIgICAgICAg bW92ICAgICAlJWFoLCUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXG4iCisJICAgICAiICAgICAgIHNldGMgICAgJTAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCSAgICAgOiAiPXFtIiAo Y2FycnkpLCAiPXFtIiAoKnN0YXR1cykKKwkgICAgIDogImEiICgodW5zaWdu ZWQgc2hvcnQpMHg0ODAwKSwgImQiIChkaXNrKSwgIlMiIChlYmlvc2luZm8p CisJICAgICk7CisKKwlyZXR1cm4gY2Fycnk7Cit9CisKKy8qCisgKiBXZWxs LCBJIGRvIG5vdCBrbm93IHdoYXQgdGhhdCBkb2VzLCBidXQgYmVjYXVzZSBp dCBpcyBpbmNsdWRlZCBpbiBMaW51eAorICoga2VybmVsIGl0IGhhcyB0byBi ZSBHUEwgLSBzb3VyY2UgY29kZSBnaXZlbiBpbiBpdHMgbW9zdCByZWFkYWJs ZSBmb3JtLi4uCisgKi8KK2V4dGVybiBpbmxpbmUgdm9pZAorX1g4NlNwZWVk U3RlcFNtaSAoc3RydWN0IFg4NlNwZWVkU3RlcFNtaV9zICpkYXRhKQorewor CWFzbSgiIGludCAgJDB4MTUJIyBfWDg2U3BlZWRTdGVwU21pICIKKwkgICAg OiAiPWEiIChkYXRhLT5kYXRhMSksICI9YiIgKGRhdGEtPmRhdGEyKSwKKwkJ Ij1jIiAoZGF0YS0+ZGF0YTMpLCAiPWQiIChkYXRhLT5kYXRhNCkKKwkgICAg OiAiYSIgKDB4MDAwMEU5ODApLCAiZCIgKDB4NDc1MzQ5NDMpICk7Cit9CisK Ky8qKgorICoqIEZpbGwgaW4gZWFjaCBvZiB0aGUgc3ViLXN0cnVjdHVyZXM6 CisgKiovCitDT0RFIHN0YXRpYyBpbmxpbmUgdm9pZAordm1saW51el9FR0Eg KHN0cnVjdCBzY3JlZW5faW5mbyAqc2NyZWVuX2luZm8pCit7CisJdW5pb24g RUdBX2J4X3VuaW9uIEVHQV9ieDsKKwlzdHJ1Y3QgRUdBX2N4X3N0ciBFR0Ff Y3g7CisKKwlfRUdBX2dldGRpc3BsYXkoJkVHQV9ieCwgJkVHQV9jeCk7CisJ c2NyZWVuX2luZm8tPm9yaWdfdmlkZW9fZWdhX2J4ID0gRUdBX2J4LklPYWRk cl9tZW1vcnk7CisJc2NyZWVuX2luZm8tPm9yaWdfdmlkZW9faXNWR0EgPSAw OworCWlmIChFR0FfYnguZW51bXMuSU9hZGRyID09IEVHQV9DT0xPUl8zRHgK KwkgICAgfHwgRUdBX2J4LmVudW1zLklPYWRkciA9PSBFR0FfTU9OT18zQngp IHsKKwkJdW5zaWduZWQgY2hhciBhY3RpdmVfZGNjLCBhbHRlcm5hdGVfZGNj OworCisJCWlmIChfVkdBX2dldF9kaXNwbGF5X2NvbWJpbmF0aW9uX2NvZGUo JmFjdGl2ZV9kY2MsCisJCQkJCQkgICAgICAmYWx0ZXJuYXRlX2RjYykgPT0g MCkKKwkJCXNjcmVlbl9pbmZvLT5vcmlnX3ZpZGVvX2lzVkdBID0gMTsKKwor CQlzY3JlZW5faW5mby0+b3JpZ192aWRlb19saW5lcyA9IHBlZWtiKChmYXJw dHIpMHgwMDQwMDA4NCkgKyAxOworCQlzY3JlZW5faW5mby0+b3JpZ19mb250 X2hlaWdodCA9IHBlZWt3KChmYXJwdHIpMHgwMDQwMDA4NSk7CisJfSBlbHNl IHsJLyogRUdBX2J4LmVudW1zLklPYWRkciB1bmNoYW5nZWQgPT4gQ0dBL01E QS9IR0EgKi8KKwkJc2NyZWVuX2luZm8tPm9yaWdfdmlkZW9fbGluZXMgPSAy NTsKKwkJc2NyZWVuX2luZm8tPm9yaWdfZm9udF9oZWlnaHQgPSAwOwkvKiBp LmUuIGludmFsaWQgKi8KKwl9Cit9CisKK0NPREUgc3RhdGljIGlubGluZSB2 b2lkCit2bWxpbnV6X2dldGN1cnNvciAoc3RydWN0IHNjcmVlbl9pbmZvICpz Y3JlZW5faW5mbykKK3sKKyNpZiAxCQkvKiB3aGF0IGlzIHRoZSBiZXN0ID8g SUhNTyB1c2luZyB0aGUgQklPUyBmdW5jdGlvbnMgKi8KKwl1bnNpZ25lZCBj aGFyIHJvdywgY29sOworCXVuc2lnbmVkIGNoYXIgY3Vyc29yc3RhcnQsIGN1 cnNvcnN0b3A7CisKKwlfVkdBX2dldGN1cnNvcihzY3JlZW5faW5mby0+b3Jp Z192aWRlb19wYWdlLAorCQkgICAgICAgJnJvdywgJmNvbCwgJmN1cnNvcnN0 YXJ0LCAmY3Vyc29yc3RvcCk7CisJc2NyZWVuX2luZm8tPm9yaWdfeCA9IGNv bDsKKwlzY3JlZW5faW5mby0+b3JpZ195ID0gcm93OworI2Vsc2UKKwlmYXJw dHIgcHRyID0gMHgwMDQwMDA1MCArIDIgKiBzY3JlZW5faW5mby0+b3JpZ192 aWRlb19wYWdlOworCisJc2NyZWVuX2luZm8tPm9yaWdfeCA9IHBlZWtiKHB0 cik7CisJc2NyZWVuX2luZm8tPm9yaWdfeSA9IHBlZWtiKHB0ciArIDEpOwor I2VuZGlmCit9CisKK0NPREUgc3RhdGljIGlubGluZSB2b2lkCit2bWxpbnV6 X1ZHQSAoc3RydWN0IHNjcmVlbl9pbmZvICpzY3JlZW5faW5mbywgaW50IHBy b3Bvc2VkX2xpbmUpCit7CisJdW5zaWduZWQgY2hhciBtb2RlLCBuYmNvbCwg cGFnZTsKKworCW1vZGUgPSBfVkdBX2dldG1vZGUoJm5iY29sLCAmcGFnZSk7 CisJc2NyZWVuX2luZm8tPm9yaWdfdmlkZW9fbW9kZSA9IG1vZGUgJiAweDdG OworCXNjcmVlbl9pbmZvLT5vcmlnX3ZpZGVvX2NvbHMgPSBuYmNvbDsKKwlz Y3JlZW5faW5mby0+b3JpZ192aWRlb19wYWdlID0gcGFnZTsJLyogbm90IHRl c3RlZCBpZiAhPSAwICovCisJaWYgKHByb3Bvc2VkX2xpbmUgPj0gMCkgewor CQlzY3JlZW5faW5mby0+b3JpZ195ID0gcHJvcG9zZWRfbGluZTsKKwkJc2Ny ZWVuX2luZm8tPm9yaWdfeCA9IDA7CisJfSBlbHNlIHsKKwkJdm1saW51el9n ZXRjdXJzb3Ioc2NyZWVuX2luZm8pOworCQkvKiBXZSB0cnkgbm90IHRvIGVy YXNlIHRoZSB0ZXh0IHdyaXR0ZW4gbGF0ZXIgYnkgR3VqaW46ICovCisJCXNj cmVlbl9pbmZvLT5vcmlnX3ggPSAwOworCQlpZiAoc2NyZWVuX2luZm8tPm9y aWdfeSArIDQgPCBzY3JlZW5faW5mby0+b3JpZ192aWRlb19saW5lcykKKwkJ CXNjcmVlbl9pbmZvLT5vcmlnX3kgKz0gNDsKKwkJZWxzZQorCQkJc2NyZWVu X2luZm8tPm9yaWdfeSA9IHNjcmVlbl9pbmZvLT5vcmlnX3ZpZGVvX2xpbmVz IC0gMTsKKwl9Cit9CisKK0NPREUgc3RhdGljIGlubGluZSB2b2lkCit2bWxp bnV6X1ZFU0EgKHN0cnVjdCBzY3JlZW5faW5mbyAqc2NyZWVuX2luZm8sIHVu c2lnbmVkIG1vZGUpCit7CisJVkVTQV9tb2RlaW5mb190IG1vZGVpbmZvOwor CisJaWYgKF9WRVNBX2dldG1vZGVpbmZvKCZtb2RlaW5mbywgbW9kZSAmIDB4 MDFGRikgPT0gMCkgeworCQlpZiAobW9kZWluZm8uTWVtb3J5TW9kZWwgPT0g bWVtX3RleHQKKwkJCSYmIG1vZGVpbmZvLk51bWJlck9mUGxhbmVzID09IDQp IHsKKwkJCS8qIGNvcnJlY3Qgc29tZSBidWdneSB2aWRlbyBCSU9TOiAqLwor CQkJbW9kZWluZm8uQnl0ZXNQZXJTY2FuTGluZSA9IDIgKiBtb2RlaW5mby5Y UmVzb2x1dGlvbjsKKwkJCW1vZGVpbmZvLkJpdHNQZXJQaXhlbCA9IDQ7CisJ CX0KKwkJaWYgKG1vZGVpbmZvLk1lbW9yeU1vZGVsID09IG1lbV90ZXh0KQor CQkJc2NyZWVuX2luZm8tPmxmYl9iYXNlID0gMHhCODAwMDsKKwkJZWxzZSBp ZiAobW9kZWluZm8uTW9kZUF0dHJpYnV0ZXMubGluZWFyX2ZyYW1lYnVmZmVy X3N1cHBvcnRlZCkgeworCQkJLyogbm8gdGV4dCBtb2RlcyB3aXRoIGxpbmVh ciBmcmFtZWJ1ZmZlciAqLworCQkJc2NyZWVuX2luZm8tPm9yaWdfdmlkZW9f aXNWR0EgPSAweDIzOworCQkJc2NyZWVuX2luZm8tPmxmYl9iYXNlID0gbW9k ZWluZm8uUGh5c0Jhc2VQdHI7CisJCX0gZWxzZQorCQkJc2NyZWVuX2luZm8t PmxmYl9iYXNlID0gMHhBMDAwMDsKKwkJc2NyZWVuX2luZm8tPmxmYl9saW5l bGVuZ3RoID0gbW9kZWluZm8uQnl0ZXNQZXJTY2FuTGluZTsKKwkJc2NyZWVu X2luZm8tPmxmYl93aWR0aCA9IG1vZGVpbmZvLlhSZXNvbHV0aW9uOworCQlz Y3JlZW5faW5mby0+bGZiX2hlaWdodCA9IG1vZGVpbmZvLllSZXNvbHV0aW9u OworCQlzY3JlZW5faW5mby0+bGZiX2RlcHRoID0gbW9kZWluZm8uQml0c1Bl clBpeGVsOworCQlzY3JlZW5faW5mby0+bGZiX3BhZ2VzID0gbW9kZWluZm8u TnVtYmVyT2ZJbWFnZVBhZ2VzOworCQlzY3JlZW5faW5mby0+dmVzYV9hdHRy aWIgPSBtb2RlaW5mby5Nb2RlQXR0cmlidXRlczsKKwkJc2NyZWVuX2luZm8t PmxheW91dCA9IG1vZGVpbmZvLmxheW91dDsKKwl9IGVsc2UKKwkJc2NyZWVu X2luZm8tPmxmYl9iYXNlID0gMDsKK30KKworQ09ERSBzdGF0aWMgdm9pZAor dm1saW51el9WSURFTyAoc3RydWN0IHNjcmVlbl9pbmZvICpzY3JlZW5faW5m bywgdW5zaWduZWQgc2hvcnQgKmFjcGlfdmlkbW9kZSwKKwkgICAgICAgaW50 IHByb3Bvc2VkX2xpbmUpCit7CisJVkVTQV9WYmVJbmZvQmxvY2sgaW5mb2Js b2NrOworCisJdm1saW51el9FR0Eoc2NyZWVuX2luZm8pOworCXZtbGludXpf VkdBKHNjcmVlbl9pbmZvLCBwcm9wb3NlZF9saW5lKTsKKwkqYWNwaV92aWRt b2RlID0gc2NyZWVuX2luZm8tPm9yaWdfdmlkZW9fbW9kZTsKKworCS8qIG5v cm1hbHkgb25seSBmb3IgZ3JhcGhpYyBtb2RlczogKi8KKwlpZiAoX1ZFU0Ff Z2V0aW5mbygmaW5mb2Jsb2NrKSA9PSAwKSB7CisJCXVuc2lnbmVkIHNob3J0 IG1vZGUsIGxlbjsKKwkJZmFycHRyIGFkZHI7CisKKwkJc2NyZWVuX2luZm8t PmxmYl9zaXplID0gaW5mb2Jsb2NrLlRvdGFsTWVtb3J5OworCQlzY3JlZW5f aW5mby0+Y2FwYWJpbGl0aWVzID0gaW5mb2Jsb2NrLkNhcGFiaWxpdGllczsK KwkJaWYgKF9WRVNBX2dldG1vZGUoJm1vZGUpID09IDApIHsKKwkJCXZtbGlu dXpfVkVTQShzY3JlZW5faW5mbywgbW9kZSk7CisJCQkqYWNwaV92aWRtb2Rl ID0gbW9kZTsKKyNpZiAwCS8qIEFmdGVyIGRvaW5nIHRoYXQsIHdlIHNob3Vs ZCBwcm9ncmFtIGFnYWluIHRoZSBEQUMgd2l0aCB0aGUgcmlnaHQgdmFsdWVz Li4uICovCisJCQkvKiBMaW51eCBkbyBub3QgbWFuYWdlIHRleHQgbW9kZXMg YW5kIERBQyA4IGJpdHM6ICovCisJCQlpZiAoc2NyZWVuX2luZm8tPmxmYl9i YXNlICE9IDB4QjgwMDAKKwkJCQkgJiYgc2NyZWVuX2luZm8tPmxmYl9kZXB0 aCA8PSA4CisJCQkJICYmIGluZm9ibG9jay5DYXBhYmlsaXRpZXMuREFDOGJp dF9wcmVzZW50KSB7CisJCQkJaWYgKF9WRVNBX3NldERBQ3dpZHRoICg4KSA9 PSAwKSB7CisJCQkJCXNjcmVlbl9pbmZvLT5sYXlvdXQgPSAoY29uc3Qgc3Ry dWN0IHZlc2FfY29sb3JfbGF5b3V0X3N0cil7CisJCQkJCQl7OCwgMH0sIHs4 LCAwfSwgezgsIDB9LCB7OCwgMH19OworCQkJCX0KKwkJCQllbHNlIHsKKwkJ CQkJc2NyZWVuX2luZm8tPmxheW91dCA9IChjb25zdCBzdHJ1Y3QgdmVzYV9j b2xvcl9sYXlvdXRfc3RyKXsKKwkJCQkJCXs2LCAwfSwgezYsIDB9LCB7Niwg MH0sIHs2LCAwfX07CisJCQkJfQorCQkJfQorI2VuZGlmCisJCX0KKworCQkv KiBOb3RlOiBXZSBjYW4gaGF2ZSBhIFBNIGludGVyZmFjZSBldmVuIGlmIGdl dG1vZGVpbmZvCisJCSAgIGZhaWxlZCwgZm9yIGluc3RhbmNlIGlmIHdlIGFy ZSBpbiB0ZXh0IG1vZGUgMyAqLworCQlpZiAoX1ZFU0FfR2V0UE1pbnRlcmZh Y2UoJmFkZHIsICZsZW4pID09IDApIHsKKwkJCXNjcmVlbl9pbmZvLT52ZXNh cG1fc2VnID0gYWRkciA+PiAxNjsKKwkJCXNjcmVlbl9pbmZvLT52ZXNhcG1f b2ZmID0gYWRkciAmIDB4RkZGRjsKKwkJfQorCX0KK30KKworQ09ERSBzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHZtbGludXpfRVhUX01FTV9LICh2 b2lkKQoreworCXVuc2lnbmVkIHNob3J0IEVYVF9NRU1fSzsKKworCWlmIChf QklPU19nZXRFeHRlbmRlZE1lbW9yeSgmRVhUX01FTV9LKSAhPSAwIHx8IEVY VF9NRU1fSyA9PSAwKQorCQlFWFRfTUVNX0sgPSAoKCh1bnNpZ25lZCBzaG9y dClnZXRudnJhbSgweDE4KSkgPDwgOCkKKwkJCQkrIGdldG52cmFtKDB4MTcp OworCXJldHVybiBFWFRfTUVNX0s7Cit9CisKK0NPREUgc3RhdGljIGlubGlu ZSB2b2lkCit2bWxpbnV6X0FQTSAoc3RydWN0IGFwbV9iaW9zX2luZm8gKmFw bV9iaW9zX2luZm8pCit7CisJaWYgKF9BUE1faW5zdGFsbGF0aW9uX2NoZWNr KCZhcG1fYmlvc19pbmZvLT52ZXJzaW9uLAorCQkJCSAgICZhcG1fYmlvc19p bmZvLT5mbGFncykgPT0gMCkgeworCQlfQVBNX2Rpc2Nvbm5lY3QoKTsJLyog aWdub3JlIHBvc3NpYmxlIGVycm9yICovCisJCWlmICgoYXBtX2Jpb3NfaW5m by0+ZmxhZ3MgJiAyKSA9PSAwKSB7CisJCQkvKiBubyAzMiBiaXRzIHN1cHBv cnQsIGlnbm9yZSBBUE0gKi8KKwkJfSBlbHNlIGlmIChfQVBNX2Nvbm5lY3Rf MzJiaXQoJmFwbV9iaW9zX2luZm8tPmNzZWcsCisJCQkJCSAgICAgJmFwbV9i aW9zX2luZm8tPm9mZnNldCwKKwkJCQkJICAgICAmYXBtX2Jpb3NfaW5mby0+ Y3NlZ18xNiwKKwkJCQkJICAgICAmYXBtX2Jpb3NfaW5mby0+ZHNlZywKKwkJ CQkJICAgICAmYXBtX2Jpb3NfaW5mby0+Y3NlZ19sZW4sCisJCQkJCSAgICAg JmFwbV9iaW9zX2luZm8tPmRzZWdfbGVuKSAhPSAwKSB7CisJCQlhcG1fYmlv c19pbmZvLT5mbGFncyAmPSB+MjsgLyogcmVtb3ZlIDMyYml0cyBzdXBwb3J0 ICovCisJCX0gZWxzZSB7CisJCQkvKiBSZWRvIHRoZSBpbnN0YWxsYXRpb24g Y2hlY2sgYXMgdGhlIDMyIGJpdCBjb25uZWN0CisJCQkJbW9kaWZpZXMgdGhl IGZsYWdzIHJldHVybmVkIG9uIHNvbWUgQklPU3MgOiAqLworCQkJaWYgKF9B UE1faW5zdGFsbGF0aW9uX2NoZWNrKCZhcG1fYmlvc19pbmZvLT52ZXJzaW9u LAorCQkJCQkJJmFwbV9iaW9zX2luZm8tPmZsYWdzKSAhPSAwKSB7CisJCQkJ YXBtX2Jpb3NfaW5mby0+ZmxhZ3MgJj0gfjI7CisJCQkJX0FQTV9kaXNjb25u ZWN0KCk7CisJCQl9CisJCX0KKwl9Cit9CisKK0NPREUgc3RhdGljIGlubGlu ZSB2b2lkCit2bWxpbnV6X0NPTkZJRyAoc3RydWN0IHN5c19kZXNjX3RhYmxl X2luZm8gKnN5c19kZXNjX3RhYmxlKQoreworCWZhcnB0ciBhZHIgPSBfQklP U19nZXRDb25maWd1cmF0aW9uKCk7CisKKwlpZiAoYWRyICE9IDApCisJCWdl dF9iaW9zX2NvbmYoYWRyLCBzeXNfZGVzY190YWJsZSk7Cit9CisKK0NPREUg c3RhdGljIGlubGluZSB2b2lkCit2bWxpbnV6X0VESUQgKFZCRV9FRElEX3Qg KmVkaWRfZGF0YSkKK3sKKwlpZiAoX0VESURfZGV0ZWN0KCkgIT0gMCB8fCBf RURJRF9yZWFkKGVkaWRfZGF0YSkgIT0gMCkgeworCQl1bnNpZ25lZCBjaGFy ICpwdHIgPSAodW5zaWduZWQgY2hhciAqKWVkaWRfZGF0YTsKKwkJdW5zaWdu ZWQgY3B0ID0gc2l6ZW9mKFZCRV9FRElEX3QpOworCQkvKiBmYWlsZWQsIHJl c2V0IGNvbXBsZXRlIGFyZWE6ICovCisJCXdoaWxlICgtLWNwdCkKKwkJCSpw dHIrKyA9IDB4MTM7CisJfQorfQorCitDT0RFIHN0YXRpYyBpbmxpbmUgdW5z aWduZWQKK3ZtbGludXpfRTgyMCAoc3RydWN0IGU4MjBtYXBfaW5mbyAqZTgy MG1hcCwgdW5zaWduZWQgZTgyMG1hcF9idWZzaXplKQoreworCXVuc2lnbmVk IGJ1ZnNpemUgPSBlODIwbWFwX2J1ZnNpemUsIGNvbnRfdmFsID0gMCwgYWN0 dWFsX2xlbjsKKwkvKiBVc2UgdGhhdCB0byBhdm9pZCBkYXRhIGluIC5yb2Rh dGEgd2l0aCBHQ0MtMi45NS4zOiAqLworCXVuc2lnbmVkIGVsZW1lbnRfc2l6 ZSA9IHNpemVvZihzdHJ1Y3QgZTgyMG1hcF9pbmZvKTsKKworCXdoaWxlICgg ICBidWZzaXplID49IGVsZW1lbnRfc2l6ZQorCSAgICAgICAmJiAoYWN0dWFs X2xlbiA9IF9CSU9TX1F1ZXJ5TWVtb3J5TWFwKCZjb250X3ZhbCwKKwkJCQkJ YnVmc2l6ZSwgZTgyMG1hcCkpICE9IDAKKwkgICAgICAgJiYgY29udF92YWwg IT0gMCkgeworCQlidWZzaXplIC09IGFjdHVhbF9sZW47CisJCWU4MjBtYXAg PSAodm9pZCAqKWU4MjBtYXAgKyBhY3R1YWxfbGVuOworCX0KKwlyZXR1cm4g KGU4MjBtYXBfYnVmc2l6ZSAtIGJ1ZnNpemUpIC8gZWxlbWVudF9zaXplOwor fQorCitDT0RFIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQKK3ZtbGludXpfTUJS U0lHICh1bnNpZ25lZCAqTUJSU0lHLCB1bnNpZ25lZCB0b3RhbF9NQlJTSUdf ZW50cmllcykKK3sKKwl1bnNpZ25lZCBidWZmZXJbNTEyIC8gc2l6ZW9mKHVu c2lnbmVkKV0sIGNwdDsKKyNkZWZpbmUgRUREX01CUl9TSUdfT0ZGU0VUIDB4 MUI4ICAvKiBvZmZzZXQgb2Ygc2lnbmF0dXJlIGluIHRoZSBNQlIgKi8KKwor CWZvciAoY3B0ID0gMDsgY3B0IDwgdG90YWxfTUJSU0lHX2VudHJpZXM7IGNw dCsrKSB7CisJCWlmIChfQklPU0RJU0tfUldzZWN0b3IoMHg4MCArIGNwdCwg MCwgMCwgMSwgMSwKKwkJCQkJIHN0YWNrX2ZhcnB0cihidWZmZXIpLCAxKSAh PSAwKQorCQkJcmV0dXJuIGNwdDsKKwkJKk1CUlNJRysrID0gYnVmZmVyW0VE RF9NQlJfU0lHX09GRlNFVCAvIHNpemVvZih1bnNpZ25lZCldOworCX0KKwly ZXR1cm4gY3B0OworfQorCitDT0RFIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQK K3ZtbGludXpfRUREIChzdHJ1Y3QgZWRkX2luZm8gKmVkZCwgdW5zaWduZWQg dG90YWxfRUREX2VudHJpZXMpCit7CisJdW5zaWduZWQgY3B0LCBlZGRjcHQ7 CisKKwlmb3IgKGNwdCA9IGVkZGNwdCA9IDA7IGNwdCA8IDE2ICYmIGVkZGNw dCA8IHRvdGFsX0VERF9lbnRyaWVzOyBjcHQrKykgeworCQl1bnNpZ25lZCBj aGFyIGV4dGVuc2lvbiwgc3RhdHVzOworCQl1bnNpZ25lZCBzaG9ydCB0bXBj eCwgdG1wZHg7CisJCWZhcnB0ciBEQlRhZHI7CisJCXVuc2lnbmVkIGNoYXIg Q21vc0RyaXZlVHlwZSwgc3RhdDsKKwkJc3RydWN0IGVkZF9pbmZvICplZGRw dHIgPSAmZWRkW2VkZGNwdF07CisKKwkJaWYgKF9FQklPU0RJU0tfcHJvYmUo MHg4MCArIGNwdCwgJmVkZHB0ci0+dmVyc2lvbiwgJmV4dGVuc2lvbiwKKwkJ CSAgICAgKGViaW9zX2JpdG1hcF90ICopICZlZGRwdHItPmludGVyZmFjZV9z dXBwb3J0KSkKKwkJCWNvbnRpbnVlOworCQllZGRwdHItPmRldmljZSA9IDB4 ODAgKyBjcHQ7CisJCWVkZHB0ci0+cGFyYW1zLmxlbmd0aCA9IHNpemVvZihl ZGRwdHItPnBhcmFtcyk7CisJCWVkZHB0ci0+cGFyYW1zLmluZm9fZmxhZ3Mg PSAwOwkvKiBidWdneSBCSU9TID8gKi8KKwkJLyogRG9uJ3QgY2hlY2sgZm9y IGZhaWwgcmV0dXJuLCBpdCBkb2Vzbid0IG1hdHRlcjogKi8KKwkJX0VCSU9T RElTS19nZXRwYXJhbSgweDgwICsgY3B0LAorCQkJCShlYmlvc2luZm9fdCAq KSAmZWRkcHRyLT5wYXJhbXMsICZzdGF0dXMpOworCQlpZiAoX0JJT1NESVNL X2dldHBhcmFtKDB4ODAgKyBjcHQsICZ0bXBjeCwgJnRtcGR4LAorCQkJCSZE QlRhZHIsICZDbW9zRHJpdmVUeXBlLCAmc3RhdCkgIT0gMCkgeworCQkJZWRk cHRyLT5tYXhfY3lsID0gMDsKKwkJCWVkZHB0ci0+bWF4X3NlY3QgPSBlZGRw dHItPm1heF9oZWFkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWVkZHB0ci0+bWF4 X2hlYWQgPSB0bXBkeCA+PiA4OworCQkJZWRkcHRyLT5tYXhfc2VjdCA9IHRt cGN4ICYgMHgzRjsKKwkJCWVkZHB0ci0+bWF4X2N5bCA9ICgodG1wY3ggJiAw eEMwKSA8PCAyKSB8ICh0bXBjeCA+PiA4KTsKKwkJfQorCQllZGRjcHQrKzsK Kwl9CisJcmV0dXJuIGVkZGNwdDsKK30KKworCisvKioKKyAqKiBDb21tYW5k IGxpbmUgc3R1ZmY6CisgKiovCitDT0RFIHN0YXRpYyBpbmxpbmUgdm9pZAor dm1saW51el9DTURMSU5FIChjaGFyICpjb21tYW5kX2xpbmUsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKnByb3Bvc2VkX2NtZGxpbmUsCisJCSBmYXJwdHIgZXh0 cmFfY21kbGluZV9mYXJwdHIsCisJCSBjb25zdCBjaGFyICpjbWRsaW5lX25h bWUsIGNvbnN0IGNoYXIgKmNtZGxpbmVfZXh0cmFwYXJhbSkKK3sKKwljaGFy ICpjbWRwdHIgPSBjb21tYW5kX2xpbmU7CisKKwkvKiBpbnNlcnQgYXQgYmVn aW5uaW5nIHRoZSBuYW1lIG9mIHRoZSB1bmNvbXByZXNzZWQgR1pJUCBmaWxl OiAqLworCWlmIChjbWRsaW5lX25hbWUgJiYgKmNtZGxpbmVfbmFtZSkgewor CQlkbworCQkJKmNtZHB0cisrID0gKmNtZGxpbmVfbmFtZSsrOworCQl3aGls ZSAoKmNtZGxpbmVfbmFtZSk7CisJCSpjbWRwdHIrKyA9ICcgJzsKKwl9CisK KwkvKiBpbnNlcnQgdGhlbjogY29uc29sZT10dHlTPyw5NjAwLG4sNyBvciB2 aWRlbz12ZXNhLAorCQlrZXlib2FyZD0/PywgTnVtTG9jaz1vbi9vZmYsIG1v dXNlPS9kZXYvcHNhdXgsCisJCUNPTFM9LCBMSU5FUz0gcHJvcG9zZWQgYnkg R3VqaW4gKi8KKwlpZiAocHJvcG9zZWRfY21kbGluZSAmJiAqcHJvcG9zZWRf Y21kbGluZSkgeworCQlkbworCQkJKmNtZHB0cisrID0gKnByb3Bvc2VkX2Nt ZGxpbmUrKzsKKwkJd2hpbGUgKCpwcm9wb3NlZF9jbWRsaW5lKTsKKwkJKmNt ZHB0cisrID0gJyAnOworCX0KKworCS8qIEFkZCBuZWFyYnkgZW5kIHRoZSBH dWppbiBndWppbl9wYXJhbS5leHRyYV9jbWRsaW5lIGZpZWxkOiAqLworCS8q IFdlIGFzc3VtZSB0aGVyZSBndWppbl9wYXJhbS5leHRyYV9jbWRsaW5lIGlz IGNvcnJlY3RseSB6ZXJvIHRlcm1pbmF0ZWQgKi8KKwkvKiBOb3RlOiB3ZSB3 aWxsIGhhdmUgInJvb3Q9IiBwYXJhbWV0ZXIgZnJvbSBHdWppbiBzZXR1cCBz Y3JlZW4gZmlyc3QsCisJICAgc28gdGhhdCBpZiB0aGUgb25lIGluIHRoZSBH WklQIGNvbW1lbnQgaWYgZXJyb25lb3VzLCB3ZSBjYW4ganVzdAorCSAgIG92 ZXJ3cml0ZSBpdCB3aXRoIHRoZSBHdWppbiBzZXR1cCAoVE9DSEVDSzogd2hl biB0d28gInJvb3Q9IiBhcmUKKwkgICBnaXZlbiBvbiB0aGUgY29tbWFuZCBs aW5lLCBvbmx5IHRoZSBmaXJzdCBvbmUgaXMgdGFrZW4pICovCisJaWYgKGV4 dHJhX2NtZGxpbmVfZmFycHRyICE9IDAgJiYgcGVla2IoZXh0cmFfY21kbGlu ZV9mYXJwdHIpICE9IDApIHsKKwkJKmNtZHB0cisrID0gJyAnOyAvKiB0d28g c3BhY2VzIGFzIHNlcGFyYXRvciAqLworCQlmb3IgKDs7KSB7CisJCQkqY21k cHRyID0gcGVla2IoZXh0cmFfY21kbGluZV9mYXJwdHIrKyk7CisJCQlpZiAo KmNtZHB0ciA8ICcgJykgeyAvKiBzdG9wIGF0IFwwLCBcbiwgXHIgb3IgXHQg Ki8KKwkJCQkqY21kcHRyID0gJ1wwJzsKKwkJCQlicmVhazsKKwkJCX0KKwkJ CWNtZHB0cisrOworCQl9CisJfQorCisJLyogYWRkIGF0IGVuZCB0aGUgcGFy YW1zIGluIHRoZSBjb21tZW50IHBhcnQgb2YgdGhlIEdaSVAgZmlsZTogKi8K KwkvKiBUaGlzIG1heSBvciBtYXkgbm90IHN0b3AgYXQgdGhlIGZpcnN0IG5l d2xpbmUgKi8KKwlpZiAoY21kbGluZV9leHRyYXBhcmFtICYmICpjbWRsaW5l X2V4dHJhcGFyYW0pIHsKKwkJKmNtZHB0cisrID0gJyAnOworCQlkbworCQkJ KmNtZHB0cisrID0gKmNtZGxpbmVfZXh0cmFwYXJhbSsrOworCQl3aGlsZSAo KmNtZGxpbmVfZXh0cmFwYXJhbSAhPSAwICYmICpjbWRsaW5lX2V4dHJhcGFy YW0gIT0gJ1xuJyk7CisJfQorCSpjbWRwdHIgPSAnXDAnOworfQorCisvKioK KyAqKiBPUFRJT05BTDogSWYgd2Ugd2FudCB0byB1c2UgdGhlIGRhdGEgc3Ry dWN0dXJlcyBvZiBHdWppbiB0byB0cnkgdG8KKyAqKiBmaW5kIGFuZCBtYXRj aCB0aGUgcm9vdCBmaWxlc3lzdGVtIG9mIHRoZSBrZXJuZWwgbG9hZGVkICh0 aGF0IHBhcnQKKyAqKiBjYW4gYmUgY29tcGxldGVseSBkaXNhYmxlZCk6Cisg KiovCisjaWZkZWYgUk9PVF9FWFRFTlNJVkVfU0VBUkNICisKK3N0cnVjdCBk ZXNjX3N0ciB7CisJdW5zaWduZWQgaW5vZGU7CisJdW5zaWduZWQgZmlsZXNp emU7CisJdW5zaWduZWQgY2hhciBkaXNrOworCXVuc2lnbmVkIGNoYXIgcGFy dGl0aW9uOwkvKiAweEZGIGZvciBNQlIgKi8KKwl1bnNpZ25lZCBjaGFyIG5h bWVfb2Zmc2V0OwkvKiB0byBhZnRlciB0aGUgcGF0dGVybiAqLworCWVudW0g Y3VyZGlyX2UgeyBpblJvb3QgPSAwLCBpblNsYXNoQm9vdCwgaW5TbGFzaElt YWdlIH0gY3VyZGlyICA6IDM7CisJZW51bSBib290dHlwZV9lIHsgaXNfTUJS LCBpc19QQlIsIGlzX2tlcm5lbF93aXRoX2hlYWRlciwKKwkJaXNfa2VybmVs X3dpdGhvdXRfaGVhZGVyLCBpc19pbml0cmQsCisJCWlzX2JkaV9maWxlLCBp c19lbF90b3JpdG8sIGlzX2luaXRyYW1mcyB9IGJvb3R0eXBlIDogMzsKKwl1 bnNpZ25lZCBjaGFyIHVudXNlZCAgICAgOiAyOworI2RlZmluZSBOQU1FX0xF TkdUSAk1MgorCWNoYXIgZmlsZW5hbWVbTkFNRV9MRU5HVEhdOworfSBfX2F0 dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBncGxfY29tcGxpYW50 X3N0ciB7CisJdW5zaWduZWQgc2lnbmF0dXJlOworCXVuc2lnbmVkIHZlcnNp b247CisJdW5zaWduZWQgZmVhdHVyZTsKKwl1bnNpZ25lZCBzaXplOworCXN0 cnVjdCBzZXRqbXBfYnVmIHsKKwkJdW5zaWduZWQgZXNpLCBlZGksIGVicCwg ZWJ4OworCQl1bnNpZ25lZCBzaG9ydCBncywgZnMsIGVzLCBkczsKKwkJdW5z aWduZWQgc2hvcnQgZmxhZ3MsIGlwLCBjcywgc3AsIHNzOworCX0gX19hdHRy aWJ1dGVfXyAoKHBhY2tlZCkpIGptcGJ1ZjsKKwkvKiB1bnNpZ25lZCBzaG9y dCBwYWRkaW5nICovCisJdW5zaWduZWQgZmlsZW5hbWVfYXJyYXksIGdkdCwg cmVncywgZm91cktidWZmZXI7CisJdW5zaWduZWQgTE9BREVSLCBTVEFURSwg VUksIE1PVVNFLCBESSwgVVRJTCwgQk9PVFdBWTsKK307CisKK3R5cGVkZWYg c3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyICBoZWFkZXJfaWRfMHgwMTsKKwll bnVtIHsgcGxhdGZvcm1fODB4ODYgPSAwLCBwbGF0Zm9ybV9Qb3dlclBDID0g MSwKKwkJcGxhdGZvcm1fTWFjID0gMiB9IHBsYXRmb3JtX2lkIDogODsKKwl1 bnNpZ25lZCBzaG9ydCByZXNlcnZlZDsKKwl1bnNpZ25lZCBjaGFyICBtYW51 ZmFjdHVyZXJbMHgxQiAtIDB4MDQgKzFdOworCXVuc2lnbmVkIHNob3J0IGNo ZWNrc3VtOworCXVuc2lnbmVkIGNoYXIgIHNpZ25hdHVyZTFfMHg1NTsKKwl1 bnNpZ25lZCBjaGFyICBzaWduYXR1cmUyXzB4QUE7Cit9IF9fYXR0cmlidXRl X18gKChwYWNrZWQpKSBJU085NjYwX1ZhbGlkYXRpb25fZW50cnk7CisKK3R5 cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyICBib290X2luZGljYXRv cjsgLyogMHg4ODogYm9vdGFibGUsIDB4MDA6IG5vbiBib290YWJsZSAqLwor CWVudW0geyBib290X21lZGlhX25vZW11bCA9IDAsIGJvb3RfbWVkaWFfMTIw ID0gMSwgYm9vdF9tZWRpYV8xNDQgPSAyLAorCQlib290X21lZGlhXzI4OCA9 IDMsIGJvb3RfbWVkaWFfaGQgPSA0IH0gYm9vdF9tZWRpYV90eXBlIDogODsK Kwl1bnNpZ25lZCBzaG9ydCBsb2FkX3NlZ21lbnQ7IC8qIDB4N2MwIGlmIG51 bGwgKi8KKwl1bnNpZ25lZCBjaGFyICBzeXN0ZW1fdHlwZTsKKwl1bnNpZ25l ZCBjaGFyICB1bnVzZWQ7CisJdW5zaWduZWQgc2hvcnQgc2VjdG9yX2NvdW50 OworCXVuc2lnbmVkICAgICAgIHNlY3Rvcl9sYmE7CisJdW5zaWduZWQgY2hh ciAgcmVzZXJ2ZWRbMHgxRiAtIDB4MEMgKzFdOworfSBfX2F0dHJpYnV0ZV9f ICgocGFja2VkKSkgSVNPOTY2MF9EZWZhdWx0X2VudHJ5OworCitzdHJ1Y3Qg ZGlza3BhcmFtX3N0ciB7CisJZW51bSB7CWJpb3NfY2hzLCBlYmlvc19sYmEs CisJCWhhcmRpZGVfY2hzLCBoYXJkaWRlX2xiYSwgaGFyZGlkZV9sYmE0OCwg aGFyZGlkZV9hdGFwaSwKKwkJZG9zX3BhcnQKKwl9IGFjY2VzcyA6IDg7CisJ dW5zaWduZWQgY2hhcglkaXNrbmI7CS8qIEJJT1MgbnVtYmVyIG9yIERPUyBs ZXR0ZXIKKwkJCQkgICBvciAwPW1hc3Rlciwgbm9uIHplcm89c2xhdmUgKi8K Kwl1bnNpZ25lZCBjaGFyCWJpb3N0eXBlOwkvKiAxOmZsb3BweSB3L28gY2hh bmdlIGRldGVjdCwKKwkJCQkJCSAyOiB3aXRoLCAzOiBIRCAqLworCXVuc2ln bmVkIGNoYXIJZHJpdmV0eXBlOwkvKiAxOiAzNjBLLCAyOiAxLjJNLCAzOiA3 MjBLLAorCQkJCQkgNDogMS40NE0sIDY6IDIuODhNLCAweDEwOiBBVEFQSSAq LworCXVuc2lnbmVkIGNoYXIJZGlza25hbWVbMzJdOworCisJc3RydWN0IGlk ZV9hdHRyaWJ1dGVfc3RyIHsKKwkJdW5zaWduZWQgc21hcnQJCQk6IDE7CisJ CXVuc2lnbmVkIGhvc3RfcHJvdGVjdGVkX2FyZWEJOiAxOworCQl1bnNpZ25l ZCBzZWN1cml0eQkJOiAxOworCQl1bnNpZ25lZCBsYmE0OAkJCTogMTsKKwkJ dW5zaWduZWQgcmVtb3ZhYmxlCQk6IDE7CisJCXVuc2lnbmVkIFNBT1JBQgkJ CTogMTsKKwkJdW5zaWduZWQgY29uZmlnX292ZXJsYXkJCTogMTsKKwkJdW5z aWduZWQgcmVzZXJ2ZWQJCTogMjU7CisJfSBpZGVfYXR0cmlidXRlOworCXN0 cnVjdCBlcnJvcl9sb2dfc3RyIHsKKwkJdW5zaWduZWQgcmVhZF9tZWRpYQkJ CTogMTsKKwkJdW5zaWduZWQgd3JpdGVfbWVkaWEJCQk6IDE7CisJCXVuc2ln bmVkIGFjY2Vzc19vdmVyX2Rpc2tfdHJ5ZWQJCTogMTsKKwkJdW5zaWduZWQg YWNjZXNzX292ZXJfcGFydGl0aW9uX3RyeWVkCTogMTsKKwkJdW5zaWduZWQg bm9fZWJpb3NfZmN0CQkJOiAxOworCQl1bnNpZ25lZCBlYmlvc19zaXplX3pl cm8JCTogMTsKKwkJdW5zaWduZWQgY2hzX2Jpb3NfcGFydF9taXNtYXRjaAkJ OiAxOworCQl1bnNpZ25lZCBjaHNfYWp1c3RlZF9ib290c2VjdAkJOiAxOwor CQl1bnNpZ25lZCBkaXNraGVhZGVyX2lnbm9yZWQJCTogMTsKKwkJdW5zaWdu ZWQgZGlza19sb2NrZWQJCQk6IDE7CisJCXVuc2lnbmVkIGRpc2tfd2FzX3B3 X2xvY2tlZAkJOiAxOworCQl1bnNpZ25lZCBTTUFSVF9kaXNhYmxlZAkJCTog MTsKKwkJdW5zaWduZWQgU01BUlRfZmFpbHVyZQkJCTogMTsKKwkJdW5zaWdu ZWQgYW5hbHlzZV9wYXJ0aXRpb25fZmFpbGVkCTogMTsKKwkJdW5zaWduZWQg TkJfUEFSVElUSU9OX2V4Y2VkZWQJCTogMTsKKwkJdW5zaWduZWQgcGFydGl0 aW9uX292ZXJsYXAJCTogMTsKKwkJdW5zaWduZWQgcGFydGl0aW9uX292ZXJf bGltaXQJCTogMTsKKwkJdW5zaWduZWQgYmVlcl9jaGVja3N1bV9lcnJvcgkJ OiAxOworCQl1bnNpZ25lZCBiZWVyX2luX2V4dGVuZGVkX3BhcnRpdGlvbgk6 IDE7CisJCXVuc2lnbmVkIHJlc2VydmVkCQkJOiAxMzsKKwl9IGVycm9yX2xv ZzsKKwl1bnNpZ25lZCBzaG9ydAlieXRlcGVyc2VjdG9yOworCXVuc2lnbmVk IHNob3J0CW5iaGVhZDsJCSAgLyogRE9TOiBNZWRpYURlc2NyaXB0b3JCeXRl ICovCisJdW5zaWduZWQJbmJjeWxpbmRlcjsgICAgICAgLyogRE9TOiBDbHVz dGVyc09uRGlzayAqLworCXVuc2lnbmVkCUJFRVJfc2l6ZTsKKwl1bnNpZ25l ZCBsb25nIGxvbmcJQkVFUl9zZWN0b3I7CisJdW5zaWduZWQgbG9uZyBsb25n CUJFRVJfSG9zdFByb3RlY3RlZEFyZWFfc3RhcnQ7CisJdW5zaWduZWQgbG9u ZyBsb25nCUJFRVJfUmVzZXJ2ZWRBcmVhQm9vdENvZGVBZGRyZXNzOworCXVu c2lnbmVkIGxvbmcgbG9uZwlCRUVSX2Rpc2tzaXplOworCSAgc2lnbmVkIGxv bmcgbG9uZwlmdWxsZGlza19vZmZzZXQ7IC8qIE5iIHNlY3RvcnMgYmVmb3Jl IE1CUiAqLworCXVuc2lnbmVkIGxvbmcgbG9uZwlmdWxsZGlza19zaXplOwkg Lyogb25seSBpZiBNQlIgaXMgb2Zmc2V0ZWQgKi8KKwl1bnNpZ25lZCBsb25n IGxvbmcJbmJ0b3RhbHNlY3RvcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcJY29u ZmlnX21heF9sYmE7CisJdW5zaWduZWQgc2hvcnQJbmJzZWN0b3JwZXJ0cmFj azsgLyogRE9TOiBTZWN0b3JQZXJDbHVzdGVyICovCisKKwl1bnNpZ25lZCBz aG9ydAlpbmZvYml0OwkvKiBJbnQxMy80OCBleHRlbnNpb25zICovCisJdW5z aWduZWQgY2hhcgllYmlvc192ZXJzaW9uOwkvKiBpZiBwcmVzZW50LCB1c2Vk IGlmIGFjY2VzcyA9IGViaW9zICovCisJdW5zaWduZWQgY2hhcgllYmlvc19l eHRlbnNpb247CisJZWJpb3NfYml0bWFwX3QJZWJpb3NfYml0bWFwOworCXVu c2lnbmVkIHNob3J0CXJlc2VydmVkMzsJLyogZWJpb3NfYml0bWFwIGlzIDE2 IGJpdHMgKi8KKworCXVuc2lnbmVkIGNoYXIgIGViaW9zX2J1c3R5cGVbNF07 CS8qIGV4YWN0bHkgIklTQSIgb3IgIlBDSSIgKi8KKwl1bnNpZ25lZCBjaGFy ICBlYmlvc19JbnRlcmZhY2VbOF07CS8qIGV4YWN0bHkgIkFUQSIsICJBVEFQ SSIsCisJCQkJCQkJIlNDU0kiLCAiVVNCIi4uLiovCisJdW5pb24gaW50ZXJm YWNlX3BhdGhfdQllYmlvc19idXM7CisJdW5pb24gZGV2aWNlX3BhdGhfdQll Ymlvc19kZXZpY2U7CisKKwl1bnNpZ25lZCBzaG9ydAlyZXNlcnZlZDQ7CisK Kwl1bnNpZ25lZCBzaG9ydAlpZGVfbWFzdGVyX3Bhc3N3b3JkX3JldmlzaW9u OyAvKiBpZiBjb21tYW5kX3N1cHBvcnRlZDEuc2VjdXJpdHkgKi8KKwl1bnNp Z25lZCBzaG9ydAlpZGVJT2FkcjsJLyogaWYga25vd24sIGVsc2UgMCAqLwor CXVuc2lnbmVkIHNob3J0CWlkZUlPY3RybGFkcjsJLyogaWYga25vd24sIGVs c2UgMCAqLworCXVuc2lnbmVkIGNoYXIJbGJhX3NsYXZlX21hc2s7CS8qIHNl ZSBQaGVuaXggQmlvcyAoaGVhZCB8IG1hc2spICovCisJdW5zaWduZWQgY2hh cglpcnE7CQkvKiBpZiBrbm93biwgZWxzZSAwICovCisJdW5zaWduZWQgY2hh cgltdWx0aXBsZW1vZGU7CS8qIGludCAweDEzLzB4MjEsMHgyMiwweDI0IG9y IGhhcmRpZGUsCisJCQkJCQlzZXQgYnV0IG5vdCB1c2VkLiAqLworCXVuc2ln bmVkIGNoYXIJQkVFUl9kZXZpY2VfaW5kZXg7CisJc3RydWN0IGNvbmZpZ19t dWx0aXdvcmRfZG1hX3MgeworCQl1bnNpZ25lZCBzaG9ydAltb2RlMCAgICA6 IDE7CisJCXVuc2lnbmVkIHNob3J0CW1vZGUxICAgIDogMTsgLyogYW5kIGJl bG93ICovCisJCXVuc2lnbmVkIHNob3J0CW1vZGUyICAgIDogMTsgLyogYW5k IGJlbG93ICovCisJCXVuc2lnbmVkIHNob3J0CXJlc2VydmVkIDogMTM7CisJ fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaW5pdGlhbF9tdWx0aURNQSwg bWF4aW11bV9tdWx0aURNQTsKKwlzdHJ1Y3QgY29uZmlnX3VsdHJhX2RtYV9z IHsKKwkJdW5zaWduZWQgc2hvcnQJbW9kZTAgICAgOiAxOworCQl1bnNpZ25l ZCBzaG9ydAltb2RlMSAgICA6IDE7IC8qIGFuZCBiZWxvdyAqLworCQl1bnNp Z25lZCBzaG9ydAltb2RlMiAgICA6IDE7IC8qIGFuZCBiZWxvdyAqLworCQl1 bnNpZ25lZCBzaG9ydAltb2RlMyAgICA6IDE7IC8qIGFuZCBiZWxvdyAqLwor CQl1bnNpZ25lZCBzaG9ydAltb2RlNCAgICA6IDE7IC8qIGFuZCBiZWxvdyAq LworCQl1bnNpZ25lZCBzaG9ydAltb2RlNSAgICA6IDE7IC8qIGFuZCBiZWxv dyAqLworCQl1bnNpZ25lZCBzaG9ydAlyZXNlcnZlZCA6IDEwOworCX0gX19h dHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGluaXRpYWxfdWx0cmFETUEsIG1heGlt dW1fdWx0cmFETUE7CisJc3RydWN0IGNvbmZpZ19mZWF0dXJlX3MgeworCQl1 bnNpZ25lZCBzaG9ydAlzbWFydF9mZWF0dXJlCTogMTsKKwkJdW5zaWduZWQg c2hvcnQJc21hcnRfc2VsZnRlc3QJOiAxOworCQl1bnNpZ25lZCBzaG9ydAlz bWFydF9lcnJvcmxvZwk6IDE7CisJCXVuc2lnbmVkIHNob3J0CXNlY3VyaXR5 CTogMTsKKwkJdW5zaWduZWQgc2hvcnQJc3RhbmRieV9wb3dlcnVwCTogMTsK KwkJdW5zaWduZWQgc2hvcnQJUldfRE1BX3F1ZXVlZAk6IDE7CisJCXVuc2ln bmVkIHNob3J0CWFjb3VzdGljCTogMTsKKwkJdW5zaWduZWQgc2hvcnQJaG9z dF9wcm90X2FyZWEJOiAxOworCQl1bnNpZ25lZCBzaG9ydAlsYmE0OAkJOiAx OworCQl1bnNpZ25lZCBzaG9ydAlyZXNlcnZlZAk6IDc7CisJfSBfX2F0dHJp YnV0ZV9fICgocGFja2VkKSkgaW5pdGlhbF9mZWF0dXJlLCBtYXhpbXVtX2Zl YXR1cmU7CisJdW5zaWduZWQJQ2FsaWJyYXRpb25JZGVsb29wOyAvKiBuYW5v c2Vjb25kcyAoMTBeLTkpIHBlciBsb29wICovCisKKwkvKiBGb2xsb3dpbmcg dGhyZWUgb25seSBmb3IgQy9IL1MgcGFydGl0aW9uLCBmcm9tIHN0YW5kYXJk IEJJT1M6ICovCisJdW5zaWduZWQgc2hvcnQJYmlvc19uYmN5bGluZGVyOwkv KiBtYXggMTAyNCAqLworCXVuc2lnbmVkIGNoYXIJYmlvc19uYmhlYWQ7CQkv KiBtYXggMjU2ICovCisJdW5zaWduZWQgY2hhcgliaW9zX25ic2VjdG9ycGVy dHJhY2s7CS8qIG1heCA2MyAqLworCisJdW5zaWduZWQgY2hhcglib290YWJs ZTsJLyogbm9uemVybzogYm9vdGFibGUsCisJCQkJID4gMSB3aGVuIHNwZWNp YWwgYm9vdHNlY3RvciByZWNvZ25pc2VkICovCisJdW5zaWduZWQgY2hhcglP U2Rpc2tudW1iZXI7CS8qIGFzIHdyaXR0ZW4gaW4gdGhlIGJvb3QgYmxvY2sg Ki8KKworCXVuc2lnbmVkIHNob3J0CW5icGFydGl0aW9uOworCXVuc2lnbmVk IHNob3J0CW5iT1NudW1iZXI7CisJdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWQ1 OworCS8qIEZvbGxvd2luZyB2YWx1ZSBpcyBjdXJyZW50IGV4dGVuZGVkIHBy aW1hcnkgcGFydGl0aW9uLAorCSAgIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBv bmUgZXh0ZW5kZWQgcHJpbWFyeSBwYXJ0aXRpb24uICovCisJdW5zaWduZWQJ CWZpcnN0X2V4dF9wYXJ0aXRpb25fc3RhcnQ7IC8qIE5PVCBBIExPTkcgTE9O RyAqLworCXN0cnVjdCBwYXJ0aXRpb25fc3RyIHsKKwkJdW5zaWduZWQgbG9u ZyBsb25nCXN0YXJ0LCBsZW5ndGg7CisJCS8qIE9TbnVtYmVyIHNob3VsZCBi ZSBlcXVhbCB0byB0aGUgIyBpbiAvZGV2L2hkYSM6ICovCisJCXVuc2lnbmVk IGNoYXIJdHlwZSwgT1NudW1iZXI7CisJCXN0cnVjdCBwYXJ0aXRpb25fbWlz Y19zdHIgeworCQkJLyogb3JkZXIgYXMgZm91bmQgb24gZGlzazogKi8KKwkJ CXVuc2lnbmVkIGNoYXIgb3JkZXIJCTogNjsKKwkJCXVuc2lnbmVkIGNoYXIg ZnNhbmFseXNlX3Rvb2JpZwk6IDE7CisJCQl1bnNpZ25lZCBjaGFyIGZzYW5h bHlzZV9lcnJvcgk6IDE7CisJCQl1bnNpZ25lZCBjaGFyIG1heWJlX3Jvb3QJ OiAxOworCQkJdW5zaWduZWQgY2hhciBmYXRfYm9vdGFibGUJOiAxOworCQkJ dW5zaWduZWQgY2hhciBiZWVyX3BhcnRpdGlvbgk6IDE7CisJCQl1bnNpZ25l ZCBjaGFyIHN3YXBfcGFydGl0aW9uCTogMTsKKwkJCXVuc2lnbmVkIGNoYXIg cmVzZXJ2ZWQJCTogMjsKKwkJCWVudW0gcGFydF9zdGF0ZSB7CisJCQkJcGFy dF9pbnZhbGlkID0gMCwgcGFydF9hY3RpdmUsCisJCQkJcGFydF9pbmFjdGl2 ZSwgcGFydF9leHRlbmRlZAorCQkJfSBhY3RpdmUJCTogMjsKKwkJfSBfX2F0 dHJpYnV0ZV9fICgocGFja2VkKSkgbWlzYzsKKyNkZWZpbmUgTUFYX0RJU0tO QU1FU0laRQkoNjQgLSAyMCAtIDQpIC8qIGJpZ2dlciB0aGFuICJmbG9wcHki ICovCisJCXVuc2lnbmVkIGNoYXIJbmFtZVtNQVhfRElTS05BTUVTSVpFXTsK KwkJdW5pb24geworCQkJSVNPOTY2MF9WYWxpZGF0aW9uX2VudHJ5ICp2YWxp ZGF0aW9uOyAvKiBmaXJzdCBvbmUgb25seSAqLworCQkJSVNPOTY2MF9EZWZh dWx0X2VudHJ5ICpjYXRhbG9nOyAvKiBhcnJheSBpbmRleCA+PSAxICovCisJ CX0gRWxUb3JpdG87CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnBh cnRpdGlvbjsKKworCXVuc2lnbmVkCW5iZnJlZWxpc3Q7CisJc3RydWN0IGZy ZWVsaXN0X3N0ciB7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCwgbGVu Z3RoOworCX0gKmZyZWVsaXN0OworCWNoYXIgc2V0X21heF9wYXNzd29yZFsz Ml07CisJfSAqcGFyYW07CisKK3N0cnVjdCBkaXNrX2ludGVyZmFjZV9zdHIg eworCXVuc2lnbmVkCW5iZGlzazsKKwl1bnNpZ25lZCBjaGFyCW1heF9kaXNr LCBtYXhfcGFydGl0aW9uLCBtYXhfZnJlZWxpc3QsIG1heF9JREVfZm91bmQ7 CisJdW5zaWduZWQgc2hvcnQJc2l6ZW9mX2Rpc2twYXJhbV9zdHIsIHNpemVv Zl9wYXJ0aXRpb25fc3RyOworCXVuc2lnbmVkIHNob3J0CXNpemVvZl9mcmVl bGlzdF9zdHIsIHNpemVvZl9JREVfZm91bmRfc3RyOworCXVuc2lnbmVkIGNo YXIJbmJfYmlvc19mZCwgbmJfYmlvc19oZCwgY2Fubm90X3Jlc2V0X2Zsb3Bw eSwKKwkJCW5iX2Jpb3NfYmxhY2tsaXN0OworCXVuc2lnbmVkIGNoYXIJYmlv c19ibGFja2xpc3RbNF07CisJdW5zaWduZWQJcmVzZXJ2ZWQxWzJdOworCXVu c2lnbmVkIGNoYXIJKCpyZWFkc2VjdG9yKSAoc3RydWN0IGRpc2twYXJhbV9z dHIgKmRwLCBpbnQgcGFydGl0aW9uLAorCQkJCXVuc2lnbmVkIGxvbmcgbG9u ZyBsYmEsIHVuc2lnbmVkIG51bWJlciwKKwkJCQlmYXJwdHIgYnVmZmVyKTsK Kwl1bnNpZ25lZCBjaGFyCSgqd3JpdGVzZWN0b3IpIChzdHJ1Y3QgZGlza3Bh cmFtX3N0ciAqZHAsIGludCBwYXJ0aXRpb24sCisJCQkJdW5zaWduZWQgbG9u ZyBsb25nIGxiYSwgdW5zaWduZWQgbnVtYmVyLAorCQkJCWZhcnB0ciBidWZm ZXIpOworCWludAkJKCppZGVTZWN1cml0eSkgKHN0cnVjdCBkaXNrcGFyYW1f c3RyICosIGNoYXIgKiwKKwkJCQkJIHVuc2lnbmVkKTsKKwl1bnNpZ25lZCBs b25nIGxvbmcgbGFzdF9sYmFfcmVhZF9vcl93cml0ZTsKKwlzdHJ1Y3QgZGlz a3BhcmFtX3N0ciAqcGFyYW07CisJdW5zaWduZWQJbmJfSURFX2ZvdW5kOwor CXN0cnVjdCBJREVfZm91bmRfc3RyIHsKKwkJdW5zaWduZWQgc2hvcnQJaWRl SU9hZHI7CisJCXVuc2lnbmVkIHNob3J0CWlkZUlPY3RybGFkcjsKKwkJdW5z aWduZWQgY2hhcglpcnE7CisJCXVuc2lnbmVkIGNoYXIJYmlvc19vcmRlcjsK KwkJdW5zaWduZWQgc2hvcnQJcmVzZXJ2ZWQ7CisJfSAqSURFX2ZvdW5kOwor fTsKKworQ09ERSBzdGF0aWMgaW5saW5lIGludAorYWRkX2hleGxldHRlciAo dW5zaWduZWQgc2hvcnQgKnZhbCwgdW5zaWduZWQgY2hhciBoZXhsZXR0ZXIp Cit7CisJaWYgKGhleGxldHRlciA+PSAnMCcgJiYgaGV4bGV0dGVyIDw9ICc5 JykKKwkJKnZhbCA9ICgqdmFsIDw8IDQpICsgaGV4bGV0dGVyIC0gJzAnOwor CWVsc2UgaWYgKGhleGxldHRlciA+PSAnYScgJiYgaGV4bGV0dGVyIDw9ICdm JykKKwkJKnZhbCA9ICgqdmFsIDw8IDQpICsgaGV4bGV0dGVyIC0gJ2EnICsg MTA7CisJZWxzZSBpZiAoaGV4bGV0dGVyID49ICdBJyAmJiBoZXhsZXR0ZXIg PD0gJ0YnKQorCQkqdmFsID0gKCp2YWwgPDwgNCkgKyBoZXhsZXR0ZXIgLSAn QScgKyAxMDsKKwllbHNlCisJCXJldHVybiAxOworCXJldHVybiAwOworfQor CisvKiBJZiB0aGUgImlkZVswLTldPSIgYXJlIGFscmVhZHkgZ2l2ZW4gb24g dGhlIGNvbW1hbmQgbGluZSwgdGhhdCBtYXkKKyAgIGluZGljYXRlIHRoZSB1 c2VyIHdhbnRzIGEgc3BlY2lhbCBvcmRlciAtIGFuZCB3ZSBwcm9iZSB0aGF0 IG9yZGVyCisgICB0byBndWVzcyB0aGUgcm9vdCBwYXJ0aXRpb246ICovCitD T0RFIHN0YXRpYyBpbmxpbmUgdm9pZAoraW5pdF9JREVfZm91bmRfZnJvbV9j bWRsaW5lIChzdHJ1Y3QgSURFX2ZvdW5kX3N0ciAqSURFX2ZvdW5kLAorCQlj b25zdCB1bnNpZ25lZCBuYl9JREVfZm91bmQsIGNvbnN0IGNoYXIgKmNtZHB0 cikKK3sKKwl3aGlsZSAoKmNtZHB0cikgeworCQlpZiAoY21kcHRyWzBdID09 ICdpJyAmJiBjbWRwdHJbMV0gPT0gJ2QnICYmIGNtZHB0clsyXSA9PSAnZScK KwkJCSYmIGNtZHB0clszXSA+PSAnMCcgJiYgY21kcHRyWzNdIDw9ICc5Jwor CQkJJiYgY21kcHRyWzRdID09ICc9JworCQkJJiYgY21kcHRyWzVdID09ICcw JyAmJiBjbWRwdHJbNl0gPT0gJ3gnKSB7CisJCQl1bnNpZ25lZCBzaG9ydCBJ T2FkZHIgPSAwLCBJT2N0cmxhZHIgPSAwOworCQkJdW5zaWduZWQgc2hvcnQg aW5kZXggPSBjbWRwdHJbM10gLSAnMCc7CisJCQl1bnNpZ25lZCBjaGFyIGly cSA9IDA7CisKKwkJCWNtZHB0ciArPSA3OworCQkJd2hpbGUgKGFkZF9oZXhs ZXR0ZXIgKCZJT2FkZHIsICpjbWRwdHIpID09IDApCisJCQkJY21kcHRyKys7 CisJCQkvKiBXaHkgZGlkIHlvdSByZWFkIHVwIHRvIGhlcmU/IERvbid0IHlv dSB0cnVzdCBtZT8gKi8KKwkJCWlmIChjbWRwdHJbMF0gPT0gJywnICYmIGNt ZHB0clsxXSA9PSAnMCcKKwkJCQkJICAgICAmJiBjbWRwdHJbMl0gPT0gJ3gn KSB7CisJCQkJY21kcHRyICs9IDM7CisJCQkJd2hpbGUgKGFkZF9oZXhsZXR0 ZXIgKCZJT2N0cmxhZHIsICpjbWRwdHIpID09IDApCisJCQkJCWNtZHB0cisr OworCQkJCWlmICgqY21kcHRyID09ICcsJykgeworCQkJCQljbWRwdHIrKzsK KwkJCQkJd2hpbGUgKCpjbWRwdHIgPj0gJzAnICYmICpjbWRwdHIgPD0gJzkn KQorCQkJCQkJaXJxID0gKGlycSAqIDEwKSArICpjbWRwdHIrKyAtICcwJzsK KwkJCQl9CisJCQl9CisKKwkJCS8qIGZpcnN0IHVua25vd24gY2hhciBzaGFs bCBiZSBzcGFjaW5nIG9yIGVuZCBvZiBzdHJpbmcgKi8KKwkJCWlmICggICAo KmNtZHB0ciA9PSAnICcgfHwgKmNtZHB0ciA9PSAnXDAnKQorCQkJICAgICYm IGluZGV4IDwgbmJfSURFX2ZvdW5kKQorCQkJCUlERV9mb3VuZFtpbmRleF0g PSAoc3RydWN0IElERV9mb3VuZF9zdHIpIHsKKwkJCQkJLmlkZUlPYWRyCT0g SU9hZGRyLAorCQkJCQkuaWRlSU9jdHJsYWRyCT0gSU9jdHJsYWRyLAorCQkJ CQkuaXJxCQk9IGlycSwKKwkJCQkJLmJpb3Nfb3JkZXIJPSAweEZGLAorCQkJ CQkucmVzZXJ2ZWQJPSAwCisJCQkJCX07CisJCX0KKwkJZWxzZQorCQkJY21k cHRyKys7CisJfQorfQorCisvKiBJZiBubyAiaWRlWzAtOV09IiBnaXZlbiwg d2UgdXNlIHRoZSBCSU9TIG9yZGVyIGZvdW5kIGJ5IEd1amluOworICBpZiBH dWppbiBrbm93cyBtb3JlIElERXMgKGp1c3Qgb25lIGlkZSBhZGRlZCBsaWtl OiBpZGUyPTB4Li4uCisgIGJ1dCBub3QgaWRlMD0gYW5kIGlkZTE9KSBhZGQg dGhlIG9idmlvdXMgbWlzc2luZyBvbmVzLAorICB3aXRob3V0IGVyYXNpbmcg bm9yIG9mZnNldGluZyB0aGUgdXNlciBnaXZlbiBpbmZvcm1hdGlvbjogKi8K K0NPREUgc3RhdGljIGlubGluZSB2b2lkCitpbml0X0lERV9mb3VuZF9mcm9t X0RJIChzdHJ1Y3QgSURFX2ZvdW5kX3N0ciAqSURFX2ZvdW5kLAorCQljb25z dCB1bnNpZ25lZCBuYl9JREVfZm91bmQsCisJCWNvbnN0IHN0cnVjdCBkaXNr X2ludGVyZmFjZV9zdHIgKkRJKQoreworCXVuc2lnbmVkIGNwdDsKKworCWZv ciAoY3B0ID0gMDsgY3B0IDwgREktPm5iX0lERV9mb3VuZDsgY3B0KyspIHsK KwkJdW5zaWduZWQgaSwgajsKKwkJZm9yIChpID0gMDsgaSA8IG5iX0lERV9m b3VuZDsgaSsrKQorCQkJaWYgKElERV9mb3VuZFtpXS5pZGVJT2FkciA9PSBE SS0+SURFX2ZvdW5kW2NwdF0uaWRlSU9hZHIpCisJCQkJYnJlYWs7CisJCWlm IChpIDwgbmJfSURFX2ZvdW5kKQorCQkJY29udGludWU7IC8qIGFscmVhZHkg Z2l2ZW4gKi8KKwkJZm9yIChqID0gMDsgaiA8IG5iX0lERV9mb3VuZDsgaisr KQorCQkJaWYgKElERV9mb3VuZFtqXS5pZGVJT2FkciA9PSAwKQorCQkJCWJy ZWFrOyAvKiBmaXJzdCB1bnVzZWQgKi8KKwkJaWYgKGogPCBuYl9JREVfZm91 bmQpCisJCQlJREVfZm91bmRbal0gPSBESS0+SURFX2ZvdW5kW2NwdF07CisJ fQorfQorCitDT0RFIHN0YXRpYyBpbmxpbmUgdm9pZAorZmluYWxpc2VfY21k bGluZSAoc3RydWN0IElERV9mb3VuZF9zdHIgKklERV9mb3VuZCwgdW5zaWdu ZWQgbmJfSURFX2ZvdW5kLAorCQkgIGNoYXIgKmNvbW1hbmRfbGluZSkKK3sK KwlzdGF0aWMgQ09OU1QgY2hhciBpdG9hX2FycmF5W10gPSAiMDEyMzQ1Njc4 OWFiY2RlZiI7CisJdW5zaWduZWQgY3B0OworCWNoYXIgKmNtZHB0ciA9IGNv bW1hbmRfbGluZTsKKworCXdoaWxlICgqY21kcHRyICE9ICdcMCcpCisJCWNt ZHB0cisrOworCWZvciAoY3B0ID0gMDsgY3B0IDwgbmJfSURFX2ZvdW5kOyBj cHQrKykgeworCQl1bnNpZ25lZCBzaG9ydCB2YWw7CisJCWlmICggICBJREVf Zm91bmRbY3B0XS5pZGVJT2FkciA9PSAwCisJCSAgICB8fCBJREVfZm91bmRb Y3B0XS5iaW9zX29yZGVyID09IDB4RkYpCisJCQljb250aW51ZTsKKwkJaWYg KGNtZHB0ciAtIGNvbW1hbmRfbGluZSA+IDEwMjQpCisJCQlicmVhazsKKwkJ KmNtZHB0cisrID0gJyAnOworCQkqY21kcHRyKysgPSAnaSc7ICpjbWRwdHIr KyA9ICdkJzsgKmNtZHB0cisrID0gJ2UnOworCQkqY21kcHRyKysgPSAnMCcg KyBjcHQ7CisJCSpjbWRwdHIrKyA9ICc9JzsgKmNtZHB0cisrID0gJzAnOyAq Y21kcHRyKysgPSAneCc7CisJCXZhbCA9IElERV9mb3VuZFtjcHRdLmlkZUlP YWRyOworCQlpZiAodmFsICYgMHhGMDAwKQorCQkJKmNtZHB0cisrID0gaXRv YV9hcnJheVt2YWwgPj4gMTJdOworCQkqY21kcHRyKysgPSBpdG9hX2FycmF5 Wyh2YWwgPj4gOCkgJiAweDBGXTsKKwkJKmNtZHB0cisrID0gaXRvYV9hcnJh eVsodmFsID4+IDQpICYgMHgwRl07CisJCSpjbWRwdHIrKyA9IGl0b2FfYXJy YXlbKHZhbCA+PiAwKSAmIDB4MEZdOworCQl2YWwgPSBJREVfZm91bmRbY3B0 XS5pZGVJT2N0cmxhZHI7CisJCWlmICh2YWwpIHsKKwkJCSpjbWRwdHIrKyA9 ICcsJzsKKwkJCSpjbWRwdHIrKyA9ICcwJzsKKwkJCSpjbWRwdHIrKyA9ICd4 JzsKKwkJCWlmICh2YWwgJiAweEYwMDApCisJCQkJKmNtZHB0cisrID0gaXRv YV9hcnJheVt2YWwgPj4gMTJdOworCQkJKmNtZHB0cisrID0gaXRvYV9hcnJh eVsodmFsID4+IDgpICYgMHgwRl07CisJCQkqY21kcHRyKysgPSBpdG9hX2Fy cmF5Wyh2YWwgPj4gNCkgJiAweDBGXTsKKwkJCSpjbWRwdHIrKyA9IGl0b2Ff YXJyYXlbKHZhbCA+PiAwKSAmIDB4MEZdOworCQkJdmFsID0gSURFX2ZvdW5k W2NwdF0uaXJxOyAvKiA8IDEwMCAqLworCQkJaWYgKHZhbCkgeworCQkJCSpj bWRwdHIrKyA9ICcsJzsKKwkJCQkqY21kcHRyKysgPSBpdG9hX2FycmF5W3Zh bCAvIDEwXTsKKwkJCQkqY21kcHRyKysgPSBpdG9hX2FycmF5W3ZhbCAlIDEw XTsKKwkJCX0KKwkJfQorCQkqY21kcHRyID0gJ1wwJzsKKwl9Cit9CisKKy8q IHJvb3Q9IHBhcmFtZXRlciBub3QgcHJlc2VudCwgc2V0IGl0IGRlcGVuZGlu ZyBvbiBzeXN0ZW1fZGVzYy0+ZGlzaywKKyAgIHN5c3RlbV9kZXNjLT5wYXJ0 aXRpb24gYW5kIHRoZSBudW1iZXIgb2Ygc2xhc2ggaW4gdGhlIGtlcm5lbCBu YW1lIGFzCisgICBmb3VuZCBpbiB0aGUgR1pJUCBuYW1lIGZpZWxkLgorICAg Tm90ZSB0aGF0IHdlIGFzc3VtZSB0aGF0IElGIHRoZSBrZXJuZWwgZmlsZSBs b2FkZWQgd2FzIGluIHRoZSB0b3AKKyAgIGRpcmVjdG9yeSBBTkQgdGhlIHBh cnRpdGlvbiBzaXplIGlzIHRvbyBzbWFsbCwgaXQgaXMgYSAiL2Jvb3QiCisg ICBwYXJ0aXRpb24gYW5kIHRoZSByZWFsIHJvb3QgaXMgdGhlIE5FWFQgcGFy dGl0aW9uIG9mIHR5cGUgMHg4MyBpZiBpdCBleGlzdHMuCisgICBHdWppbiBw cmVmZXJzIGEgbG90IGhhdmluZyBvbmx5IG9uZSByb290IHBhcnRpdGlvbiBj b250YWlubmluZyBldmVyeXRoaW5nCisgICBpbmNsdWRpbmcgIi9ib290Iiwg YnV0IHRyeSB0byBzdGF5IGNvbXBhdGlibGUuICovCitDT0RFIHN0YXRpYyBp bmxpbmUgdm9pZAorYWRkX3Jvb3RfcGFyYW1ldGVyIChjb25zdCBzdHJ1Y3Qg ZGVzY19zdHIgKnN5c3RlbV9kZXNjLCBjaGFyICpjbWRwdHIsCisJCQljb25z dCBzdHJ1Y3QgSURFX2ZvdW5kX3N0ciBJREVfZm91bmRbMTBdLAorCQkJY29u c3QgdW5zaWduZWQgbmJfSURFX2ZvdW5kLAorCQkJY29uc3Qgc3RydWN0IGRp c2tfaW50ZXJmYWNlX3N0ciAqREksCisJCQljb25zdCB1bnNpZ25lZCBuYl9z bGFzaF9pbl9rZXJuZWxuYW1lKQorIHsKKwljb25zdCBzdHJ1Y3QgZGlza3Bh cmFtX3N0ciAqY29uc3QgZHAgPSAmREktPnBhcmFtW3N5c3RlbV9kZXNjLT5k aXNrXTsKKwljb25zdCB1bnNpZ25lZCBtaW5fcGFydF9zaXplID0gNjQwICog MTAyNCAqIDEwMjQgLyBkcC0+Ynl0ZXBlcnNlY3RvcjsKKwl1bnNpZ25lZCBP U251bWJlciA9IGRwLT5wYXJ0aXRpb25bc3lzdGVtX2Rlc2MtPnBhcnRpdGlv bl0uT1NudW1iZXI7CisJc3RhdGljIENPTlNUIGNoYXIgcm9vdF9wYXR0ZXJu W10gPSAiIHJvb3Q9L2Rldi8iOworCisJaWYgKCAgIHN5c3RlbV9kZXNjLT5j dXJkaXIgPT0gaW5Sb290CisJICAgICYmIG5iX3NsYXNoX2luX2tlcm5lbG5h bWUgIT0gMSAvKiBub3QgcmVhbGx5IGNyZWF0ZWQgaW4gcm9vdCBkaXIgKi8K KwkgICAgJiYgZHAtPnBhcnRpdGlvbltzeXN0ZW1fZGVzYy0+cGFydGl0aW9u XS5sZW5ndGggPCBtaW5fcGFydF9zaXplKSB7CisJCS8qIGZpbmQgdGhlIG5l eHQgYmlnZ2VyIDB4ODMgcGFydGl0aW9uIG9uIHNhbWUgZGlzazogKi8KKwkJ dW5zaWduZWQgcGFydGl0aW9uOworCQlmb3IgKHBhcnRpdGlvbiA9IHN5c3Rl bV9kZXNjLT5wYXJ0aXRpb247CisJCSAgICBwYXJ0aXRpb24gPCBkcC0+bmJw YXJ0aXRpb247CisJCSAgICBwYXJ0aXRpb24rKykKKwkJCWlmICggICBkcC0+ cGFydGl0aW9uW3BhcnRpdGlvbl0ubGVuZ3RoID4gbWluX3BhcnRfc2l6ZQor CQkJICAgICYmIGRwLT5wYXJ0aXRpb25bcGFydGl0aW9uXS50eXBlID09IDB4 ODMpIHsKKwkJCQlPU251bWJlciA9IGRwLT5wYXJ0aXRpb25bcGFydGl0aW9u XS5PU251bWJlcjsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwlpZiAoZHAt PmlkZUlPYWRyICE9IDApIHsKKwkJLyogc2VyaW91c2x5IGxvb2tzIGxpa2Ug YW4gSURFIGRpc2ssIGlzbid0IGl0PyAqLworCQl1bnNpZ25lZCBjcHRpZGU7 CisJCWZvciAoY3B0aWRlID0gMDsgY3B0aWRlIDwgbmJfSURFX2ZvdW5kOyBj cHRpZGUrKykKKwkJCWlmIChkcC0+aWRlSU9hZHIgPT0gSURFX2ZvdW5kW2Nw dGlkZV0uaWRlSU9hZHIpCisJCQkJYnJlYWs7CisJCWlmIChjcHRpZGUgPCBu Yl9JREVfZm91bmQpIHsKKwkJCWNvbnN0IGNoYXIgKnB0ciA9IHJvb3RfcGF0 dGVybjsKKwkJCXdoaWxlICgqcHRyKQorCQkJCSpjbWRwdHIrKyA9ICpwdHIr KzsKKwkJCSpjbWRwdHIrKyA9ICdoJzsKKwkJCSpjbWRwdHIrKyA9ICdkJzsK KwkJCSpjbWRwdHIrKyA9ICdhJyArIDIgKiBjcHRpZGUgKyAhIShkcC0+bGJh X3NsYXZlX21hc2sgJiAweDEwKTsKKwkJCSpjbWRwdHIrKyA9ICcwJyArIE9T bnVtYmVyOworCQkJKmNtZHB0ciA9ICdcMCc7CisJCX0KKwl9IGVsc2Ugewor CQkvKiBjb3VudCBudW1iZXIgb2YgW0VdQklPUyBoYXJkIGRpc2tzIGFuZCBj b21wYXJlIHRvIHRoZQorCQludW1iZXIgb2YgSURFIGhhcmQgZGlzayB0byBr bm93IGlmIHRoZXJlIGFyZSBTQ1NJIGRpc2tzOiAqLworCQl1bnNpZ25lZCBj cHRfYmlvc19kaXNrID0gMCwgY3B0X2lkZV9kaXNrID0gMCwgY3B0ZGlzazsK KwkJdW5zaWduZWQgY2hhciBtYXliZV9zY3NpID0gMDsKKwkJY29uc3QgY2hh ciAqcHRyID0gcm9vdF9wYXR0ZXJuOworCisJCWZvciAoY3B0ZGlzayA9IDA7 IGNwdGRpc2sgPCBESS0+bmJkaXNrOyBjcHRkaXNrKyspIHsKKwkJCWlmICgg IERJLT5wYXJhbVtjcHRkaXNrXS5hY2Nlc3MgPT0gYmlvc19jaHMKKwkJCSAg IHx8IERJLT5wYXJhbVtjcHRkaXNrXS5hY2Nlc3MgPT0gZWJpb3NfbGJhKSB7 CisJCQkJaWYgKERJLT5wYXJhbVtjcHRkaXNrXS5kaXNrbmIgPj0gMHg4MCkg eworCQkJCQljcHRfYmlvc19kaXNrKys7CisJCQkJCWlmIChESS0+cGFyYW1b Y3B0ZGlza10uaWRlSU9hZHIgPT0gMCkKKwkJCQkJCW1heWJlX3Njc2kgPSAx OworCQkJCX0gLyogZWxzZSBmbG9wcHkgZGlzayAqLworCQkJfQorCQkJZWxz ZSBpZiAoREktPnBhcmFtW2NwdGRpc2tdLmFjY2VzcyA9PSBoYXJkaWRlX2No cworCQkJICAgIHx8IERJLT5wYXJhbVtjcHRkaXNrXS5hY2Nlc3MgPT0gaGFy ZGlkZV9sYmEKKwkJCSAgICB8fCBESS0+cGFyYW1bY3B0ZGlza10uYWNjZXNz ID09IGhhcmRpZGVfbGJhNDgpCisJCQkJY3B0X2lkZV9kaXNrKys7IC8qIG5v dCBDRFJPTSwgbm90IGVtcHR5IElERSAqLworCQl9CisJCXdoaWxlICgqcHRy KQorCQkJKmNtZHB0cisrID0gKnB0cisrOworCQkvKiBJZiB3ZSBoYXZlIHRo ZSBzYW1lIGFtb3VudCBvciBsZXNzIEJJT1MgZGlza3MgdGhhbiBJREUKKwkJ ZGlza3MsIHdlIGFzc3VtZSB3ZSBoYXZlIGEgbm9ybWFsIChvciBhIHZlcnkg b2xkIHcvbyBFQklPUykgUEMKKwkJd2l0aG91dCBTQ1NJIG9yIFVTQiBkcml2 ZXMsIHRoZW4gYXNzdW1lIEJJT1MgbWFwcGluZyBsaWtlCisJCUlERSBtYXBw aW5nOiAweDgwIG1hc3RlciBvbiBJREUwOyBlbHNlIHdlIGFzc3VtZSBhbGwg U0NTSQorCQlkcml2ZXMgYXJlIGFmdGVyIHRoZSBCSU9TL0lERSBkcml2ZXM6 ICovCisJCWlmIChtYXliZV9zY3NpICE9IDAgJiYgY3B0X2Jpb3NfZGlzayA+ IGNwdF9pZGVfZGlzaworCQkJJiYgZHAtPmRpc2tuYiA+PSAweDgwICsgY3B0 X2Jpb3NfZGlzaykKKwkJCSpjbWRwdHIrKyA9ICdzJzsKKwkJZWxzZSB7CisJ CQljcHRfYmlvc19kaXNrID0gMDsgLyogbm8gc2RhIHRvIGhkYSBjb3JyZWN0 aW9uICovCisJCQkqY21kcHRyKysgPSAnaCc7CisJCX0KKwkJKmNtZHB0cisr ID0gJ2QnOworCQkvKiBJZiBib290c2VjdG9yIE9TZGlza251bWJlciBpbml0 aWFsaXNlZCB0byBzb21ldGhpbmcKKwkJCWVsc2UgdGhhbiAwIG9yIDB4ODAs IHdlIGFzc3VtZSB0aGUgdXNlciBmb3JjZWQKKwkJCWl0IGFuZCB1c2UgdGhh dCB2YWx1ZSAoJ2EnIGZvciBudW1iZXIgMHg4MCk6ICovCisJCWlmICgoZHAt Pk9TZGlza251bWJlciAmIDB4N0YpICE9IDApCisJCQkqY21kcHRyKysgPSAn YScgKyAoZHAtPk9TZGlza251bWJlciAmIDB4N0YpOworCQllbHNlCisJCQkq Y21kcHRyKysgPSAnYScgKyBkcC0+ZGlza25iIC0gMHg4MCAtIGNwdF9iaW9z X2Rpc2s7CisJCSpjbWRwdHIrKyA9ICcwJyArIE9TbnVtYmVyOworCQkqY21k cHRyID0gJ1wwJzsKKwl9Cit9CisKK0NPREUgc3RhdGljIHZvaWQKK3ZtbGlu dXpfUk9PVCAoY29uc3Qgc3RydWN0IGRlc2Nfc3RyICpzeXN0ZW1fZGVzYywK KwkgICAgICBjb25zdCBzdHJ1Y3QgZ3BsX2NvbXBsaWFudF9zdHIgKnRvZ3Bs LAorCSAgICAgIGNoYXIgKmNvbW1hbmRfbGluZSwgdW5zaWduZWQgbmJfc2xh c2hfaW5fa2VybmVsbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgZGlza19pbnRl cmZhY2Vfc3RyICpESSA9CisJCSAoY29uc3Qgc3RydWN0IGRpc2tfaW50ZXJm YWNlX3N0ciAqKXRvZ3BsLT5ESTsKKwljaGFyICpjbWRwdHI7CisjaWYgMAkv KiBwcm9ibGVtIHdpdGggbGlua2VyLCBzbyBkbyBub3QgY2FsbCBtZW1zZXQg Ki8KKwlzdHJ1Y3QgSURFX2ZvdW5kX3N0ciBJREVfZm91bmRbMTBdID0ge307 CisjZWxzZQorCXN0cnVjdCBJREVfZm91bmRfc3RyIElERV9mb3VuZFsxMF07 CisJdW5zaWduZWQgaSA9IHNpemVvZiAoSURFX2ZvdW5kKSAvIHNpemVvZihJ REVfZm91bmRbMF0pOworCXdoaWxlIChpLS0pCisJCUlERV9mb3VuZFtpXS5p ZGVJT2FkciA9IElERV9mb3VuZFtpXS5pZGVJT2N0cmxhZHIKKwkJCT0gSURF X2ZvdW5kW2ldLmlycSA9IElERV9mb3VuZFtpXS5iaW9zX29yZGVyCisJCQk9 IElERV9mb3VuZFtpXS5yZXNlcnZlZCA9IDA7CisjZW5kaWYKKworI2lmIDAK KwlEQkcoInRvZ3BsID0gMHgiLCAodW5zaWduZWQpdG9ncGwsICI6ICIpOwor CURCRygic2lnbmF0dXJlID0gMHgiLCB0b2dwbC0+c2lnbmF0dXJlLCAiLCAi KTsKKwlEQkcoInZlcnNpb24gPSAweCIsIHRvZ3BsLT52ZXJzaW9uLCAiLCAi KTsKKwlEQkcoImZlYXR1cmUgPSAweCIsIHRvZ3BsLT5mZWF0dXJlLCAiLCAi KTsKKwlEQkcoInNpemUgPSAweCIsIHRvZ3BsLT5zaXplLCAiLCAiKTsKKwlE QkcoIm9mZnNldG9mKHN0cnVjdCBncGxfY29tcGxpYW50X3N0ciwgREkpICsg NCA9IDB4IiwKKwkJIG9mZnNldG9mKHN0cnVjdCBncGxfY29tcGxpYW50X3N0 ciwgREkpICsgNCwgIlxyXG4iKTsKKwlEQkdfV0FJVCgpOworI2VuZGlmCisK KwlpZiAodG9ncGwgPT0gMCB8fCB0b2dwbC0+c2lnbmF0dXJlICE9IDE2OTgw MzI3CisJICAgIHx8ICh0b2dwbC0+dmVyc2lvbiA+PiA4KSAhPSAxIHx8ICh0 b2dwbC0+ZmVhdHVyZSAmIDEpID09IDAKKwkgICAgfHwgdG9ncGwtPnNpemUg PD0gb2Zmc2V0b2Yoc3RydWN0IGdwbF9jb21wbGlhbnRfc3RyLCBESSkgKyA0 KQorCQlyZXR1cm47CisKKwlpbml0X0lERV9mb3VuZF9mcm9tX2NtZGxpbmUg KElERV9mb3VuZCwKKwkJc2l6ZW9mKElERV9mb3VuZCkvc2l6ZW9mKElERV9m b3VuZFswXSksIGNvbW1hbmRfbGluZSk7CisJaW5pdF9JREVfZm91bmRfZnJv bV9ESSAoSURFX2ZvdW5kLAorCQlzaXplb2YoSURFX2ZvdW5kKS9zaXplb2Yo SURFX2ZvdW5kWzBdKSwgREkpOworCisjaWYgMAorCXsKKwl1bnNpZ25lZCBj cHQ7CisKKwlmb3IgKGNwdCA9IDA7IGNwdCA8IHNpemVvZihJREVfZm91bmQp L3NpemVvZihJREVfZm91bmRbMF0pOyBjcHQrKykgeworCQlEQkcoIklERV9m b3VuZFtjcHQgPSAweCIsIGNwdCwgIl0gOiAiKTsKKwkJREJHKCJpZGVJT2Fk ciA9IDB4IiwgSURFX2ZvdW5kW2NwdF0uaWRlSU9hZHIsICIsICIpOworCQlE QkcoImlkZUlPY3RybGFkciA9IDB4IiwgSURFX2ZvdW5kW2NwdF0uaWRlSU9j dHJsYWRyLCAiLCAiKTsKKwkJREJHKCJpcnEgPSAweCIsIElERV9mb3VuZFtj cHRdLmlycSwgIiwgIik7CisJCURCRygiYmlvc19vcmRlciA9IDB4IiwgSURF X2ZvdW5kW2NwdF0uYmlvc19vcmRlciwgIlxyXG4iKTsKKwkJfQorCURCR19X QUlUKCk7CisJfQorI2VuZGlmCisKKwkvKiBJZiAicm9vdD0iIGlzIGdpdmVu LCBkbyBub3QgdHJ5IHRvIGd1ZXNzIGl0OiAqLworCWZvciAoY21kcHRyID0g Y29tbWFuZF9saW5lOyAqY21kcHRyICE9ICdcMCc7IGNtZHB0cisrKQorCQlp ZiAoY21kcHRyWzBdID09ICdyJyAmJiBjbWRwdHJbMV0gPT0gJ28nICYmIGNt ZHB0clsyXSA9PSAnbycKKwkJCSYmIGNtZHB0clszXSA9PSAndCcgJiYgY21k cHRyWzRdID09ICc9JykKKwkJCWJyZWFrOworCisJLyogc2l6ZW9mIHN0cnVj dCBkaXNrcGFyYW1fc3RyIDI1Niwgc2l6ZW9mIHN0cnVjdCBwYXJ0aXRpb25f c3RyIDY0ICovCisJaWYgKCpjbWRwdHIgPT0gJ1wwJworCSAgICAmJiBzaXpl b2YgKHN0cnVjdCBkaXNrcGFyYW1fc3RyKSA9PSBESS0+c2l6ZW9mX2Rpc2tw YXJhbV9zdHIKKwkgICAgJiYgc2l6ZW9mIChzdHJ1Y3QgcGFydGl0aW9uX3N0 cikgPT0gREktPnNpemVvZl9wYXJ0aXRpb25fc3RyCisJICAgICYmIERJLT5w YXJhbVtzeXN0ZW1fZGVzYy0+ZGlza10uYnl0ZXBlcnNlY3RvciAhPSAwKQor CQlhZGRfcm9vdF9wYXJhbWV0ZXIgKHN5c3RlbV9kZXNjLCBjbWRwdHIsIElE RV9mb3VuZCwKKwkJCQlzaXplb2YoSURFX2ZvdW5kKS9zaXplb2YoSURFX2Zv dW5kWzBdKSwKKwkJCQlESSwgbmJfc2xhc2hfaW5fa2VybmVsbmFtZSk7CisK KwkvKiBBZGQgdGhpcyBhZnRlciAicm9vdD0iLCBsaW1pdGVkIGNvbW1hbmQg bGluZSBsZW5ndGggKi8KKwlmaW5hbGlzZV9jbWRsaW5lIChJREVfZm91bmQs CisJCXNpemVvZihJREVfZm91bmQpL3NpemVvZihJREVfZm91bmRbMF0pLCBj b21tYW5kX2xpbmUpOworfQorCisjZWxzZQkvKiBST09UX0VYVEVOU0lWRV9T RUFSQ0ggKi8KKworc3RydWN0IGRlc2Nfc3RyOworc3RydWN0IGdwbF9jb21w bGlhbnRfc3RyOworI2RlZmluZSB2bWxpbnV6X1JPT1QoYSwgYiwgYywgZCkJ Lyogbm90aGluZyAqLworCisjZW5kaWYJLyogUk9PVF9FWFRFTlNJVkVfU0VB UkNIICovCisKK0NPREUgc3RhdGljIGlubGluZSB2b2lkCit2bWxpbnV6X0RJ U0tTICh1bmlvbiBkcml2ZV9pbmZvICpkcml2ZTEsIHVuaW9uIGRyaXZlX2lu Zm8gKmRyaXZlMgorI2lmZGVmIFJPT1RfRVhURU5TSVZFX1NFQVJDSAorCQks IGNvbnN0IHN0cnVjdCBkaXNrX2ludGVyZmFjZV9zdHIgKkRJCisjZW5kaWYK KwkJKQoreworCXVuc2lnbmVkIG5ic2VjdDsKKwl1bnNpZ25lZCBjaGFyIHN0 YXR1cywgZGlzayA9IDB4ODA7CisJdW5pb24gZHJpdmVfaW5mbyAqZHJpdmUg PSBkcml2ZTE7CisJZmFycHRyIHZlY3RvcmFkciA9IChmYXJwdHIpKDB4NDEg KiA0KTsKKworCXdoaWxlIChkaXNrIDw9IDB4ODEpIHsKKyNpZmRlZiBST09U X0VYVEVOU0lWRV9TRUFSQ0gKKwkJLyogU29tZSBvbGQgYW5kIGNvbW1vbiBT Q1NJIGNhcmQgd2lsbCBkbyBhbiBpbnZhbGlkCisJCWluc3RydWN0aW9uIGV4 Y2VwdGlvbiBpbiBfQklPU0RJU0tfZ2V0dHlwZSwgaWYgdGhlCisJCUJJT1Mg aGFzIG5vdCBiZWVuIHVwZGF0ZWQgKi8KKwkJaW50IGNwdDsKKwkJZm9yIChj cHQgPSAwOyBjcHQgPCBESS0+bmJfYmlvc19ibGFja2xpc3Q7IGNwdCsrKQor CQkJaWYgKERJLT5iaW9zX2JsYWNrbGlzdFtjcHRdID09IGRpc2spCisJCQkJ YnJlYWs7CisJCWlmIChjcHQgPCBESS0+bmJfYmlvc19ibGFja2xpc3QpCisJ CQljb250aW51ZTsKKyNlbmRpZgorCisJCWlmIChfQklPU0RJU0tfZ2V0dHlw ZSAoZGlzaywgJm5ic2VjdCwgJnN0YXR1cykgPT0gMCkKKwkJCWdldF9kcml2 ZV9pbmZvICh2ZWN0b3JhZHIsIGRyaXZlKTsKKwkJZGlzaysrOworCQl2ZWN0 b3JhZHIgPSAoZmFycHRyKSgweDQ2ICogNCk7CisJCWRyaXZlID0gZHJpdmUy OworCX0KK30KKworLyoqCisgKiogVEhFIGZ1bmN0aW9uOgorICoqLworc3Ry dWN0IExPQURFUl9zdHIgeworCXVuc2lnbmVkIHNob3J0IHNpemVvZl9sb2Fk ZXJfc3RyLCBzaXplb2ZfZmlsZWxvYWRfc3RyOworCXN0cnVjdCBmaWxlbG9h ZF9zdHIgeworCQkvKiBpbnB1dDogKi8KKwkJdW5zaWduZWQgbG9hZF9hZGRy ZXNzLCBtYXhfc2l6ZV9vcl9jcmMzMjsKKwkJLyogb25seSBmb3IgWE1TIHVz ZTogKi8KKwkJdW5zaWduZWQgS0JhbGxvY2VkOworCQl1bnNpZ25lZCBzaG9y dCBoYW5kbGU7CisJCS8qIEZvciByZWZlcmVuY2U6ICovCisJCXVuc2lnbmVk IHNob3J0IEJPT1RXQVlfZGVzY19pbmRleDsKKwkJLyogb3V0cHV0OiAqLwor CQl1bnNpZ25lZCBjb21wcmVzc2VkX3NpemUsIHVuY29tcHJlc3NlZF9zaXpl OworCX0gZmlsZWxvYWRbM10sICpjdXJmaWxlbG9hZDsJLyoga2VybmVsIGFu ZCBpbml0cmQgKi8KKwlpbnQgaW5pdHJkX2luZGV4OworCXVuc2lnbmVkIHNo b3J0IG1pbm9yX21ham9yX3Jvb3Q7CisJdW5zaWduZWQgc2hvcnQgbGljZW5z ZV9jb21wbGlhbnQ7CisJdW5zaWduZWQgdm1saW51el9ieXRlX3RyZWF0ZWQ7 IC8qIGhlYWRlciArIGtlcm5lbCBHWklQICovCisJdW5zaWduZWQgdW5jb21w cmVzc2VkX3NpZ25hdHVyZTsKKwl1bnNpZ25lZCByYW1kaXNrX21heDsKKwl1 bnNpZ25lZCBhY2NlcHRfdW5jb21wcmVzc2VkX2luaXRyZF9maWxlc2l6ZTsK Kwl1bnNpZ25lZCBjaGFyIHBvc3RfY29tbWVudF9yb3csIHBvc3RfY29tbWVu dF9jb2w7CisJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQxOworCXVuc2lnbmVk IHJlc2VydmVkWzVdOworCS8qIEluaXRpYWxpc2VkIGZyb20gdGhlICJjb21t ZW50IiBsaW5lIG9mIHRoZSBHWklQIGZpbGUgKi8KKwl1bmlvbiB7CisJCXVu c2lnbmVkIGFycmF5WzMyXTsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIE5P TkdQTF9wcm9kdWN0SUQ7CisJCQl1bnNpZ25lZCBOT05HUExfcHJvZHVjdE5C OworCQkJdW5zaWduZWQgbWluX2d1amluX3ZlcnNpb247CS8qIDB4MTAwIGZv ciAxLjAgKi8KKwkJCXVuc2lnbmVkIGxhdGVfcmVsb2NhdGlvbl9hZGRyZXNz OworCQkJdW5zaWduZWQgcnVuYWRyOworCQkJdW5zaWduZWQgcGFyYW1hZHI7 CS8qIHVzdWFsbHkgMHgwMDA4MDAwMCAqLworCQkJdW5zaWduZWQgcmVhbGZj dF9zaXplOwkvKiBpbiBieXRlcyAqLworCQkJdW5zaWduZWQgbWlucmFtOwkv KiBpbiBraWxvYnl0ZXMgKi8KKwkJCXVuc2lnbmVkIG9wdGlvbjsKKwkJCXVu c2lnbmVkIG1hc2tjcHU7CisJCQl1bnNpZ25lZCBtYXNrRGZsYWdzOyAvKiBy ZXF1ZXN0IHRob3NlIGJpdHMgc2V0LAorCQkJCQljcHVpZCAweDAwMDAwMDAx IGluIGVkeCAodXN1YWwpICovCisJCQl1bnNpZ25lZCBtYXNrQ2ZsYWdzOyAv KiByZXF1ZXN0IHRob3NlIGJpdHMgc2V0LAorCQkJCQljcHVpZCAweDAwMDAw MDAxIGluIGVjeCAobmV3KSAqLworCQkJdW5zaWduZWQgbWFza0JmbGFnczsg LyogdW51c2VkIG9uIFBDcyAqLworCQkJdW5zaWduZWQgbWFza0FmbGFnczsg LyogcmVxdWVzdCB0aG9zZSBiaXRzIHNldCwKKwkJCQkJY3B1aWQgMHg4MDAw MDAwMSAqLworCQkJdW5zaWduZWQgbWFza3Zlc2E7IC8qIGlmIGJpdCAoOC0x KSBzZXQsCisJCQkJCQlWRVNBIDhCUFAgc3VwcG9ydGVkICovCisJCQl1bnNp Z25lZCBtYXNrcmVzb2x1dGlvbjsgLyogYml0IHNldCA9PiBleGNsdWRlCisJ CQkJCQl0aG9zZSBtb2RlcyAqLworCQl9IGVsZW07CisJfSBjb21tZW50Owor CS8qIHJlbGF0ZWQgdG8gTGludXggdmVyc2lvbjogKi8KKwljaGFyIGNtZGxp bmVfZXh0cmFwYXJhbVs1MTJdOworCWNoYXIgY21kbGluZV9uYW1lWzEyOF07 Cit9OworCitDT0RFIF9fYXR0cmlidXRlX18gKChjZGVjbCwgcmVncGFybSgw KSkpIHVuc2lnbmVkCitsaW51eF9zZXRfcGFyYW1zICh1bnNpZ25lZCBsb2Nh bF9yZXR1cm5fYWRkcmVzcywKKwkJICB1bnNpZ25lZCB0b3RhbG1lbSwKKwkJ ICBzdHJ1Y3QgbG9hZGVyX3QgYm9vdGxvYWRlcl90eXBlLAorCQkgIHN0cnVj dCBsaW51eF9wYXJhbSAqTG54UGFyYW0sCisJCSAgY29uc3Qgc3RydWN0IExP QURFUl9zdHIgKmxvYWRlciwKKwkJICBjb25zdCBzdHJ1Y3QgZ3BsX2NvbXBs aWFudF9zdHIgKnRvZ3BsLAorCQkgIGNvbnN0IHN0cnVjdCBkZXNjX3N0ciAq c3lzdGVtX2Rlc2MsCisJCSAgaW50IHByb3Bvc2VkX3JvdywKKwkJICBjaGFy ICoqc3RyaW5ncHRyLAorCQkgIHVuc2lnbmVkIGNoYXIgKnByb3Bvc2VkX2Nt ZGxpbmUpCit7CisJdW5zaWduZWQgY2hhciAqcHRyOworCXVuc2lnbmVkIG5i X3NsYXNoX2luX2tlcm5lbG5hbWUgPSAwOworCXRlc3RfbGludXhfcGFyYW1f c3RydWN0KCk7CisKKwl2bWxpbnV6X1ZJREVPICgmTG54UGFyYW0tPnNjcmVl bl9pbmZvLCAmTG54UGFyYW0tPmluX291dC52aWRfbW9kZSwKKwkJICAgICAg cHJvcG9zZWRfcm93KTsKKworCS8qIEp1c3QgbmVlZGVkIGZvciBvbGQga2Vy bmVscywgYmVmb3JlIDIuMi54OiAqLworCUxueFBhcmFtLT5zY3JlZW5faW5m by5FWFRfTUVNX0sgPSB2bWxpbnV6X0VYVF9NRU1fSygpOworCisJLyogb2xk IENvbW1hbmQgTGluZSBtYWdpYyBmb3IgMi4yLSBrZXJuZWxzOiAqLworCUxu eFBhcmFtLT5zY3JlZW5faW5mby5DTF9NQUdJQyA9IDB4QTMzRjsKKwlMbnhQ YXJhbS0+c2NyZWVuX2luZm8uQ0xfT0ZGU0VUID0gb2Zmc2V0b2Yoc3RydWN0 IGxpbnV4X3BhcmFtLAorCQkJCQkJICAgY29tbWFuZF9saW5lKTsKKwkvKiBO ZXcgQ29tbWFuZCBMaW5lIG1hZ2ljIGZvciAyLjQrIGtlcm5lbHM6ICovCisJ TG54UGFyYW0tPmluX291dC5jbWRfbGluZV9wdHIgPSBsb2FkZXItPmNvbW1l bnQuZWxlbS5wYXJhbWFkcgorCSAgICArIG9mZnNldG9mIChzdHJ1Y3QgbGlu dXhfcGFyYW0sIGNvbW1hbmRfbGluZSk7CisKKy8qICBMbnhQYXJhbS0+aW5f b3V0LmhlYWRlcl9zaWduYXR1cmUubG9uZ3dvcmQgPSB7IHsgJ0gnLCAnZCcs ICdyJywgJ1MnIH0gfTsgKi8KKwlMbnhQYXJhbS0+aW5fb3V0LmhlYWRlcl92 ZXJzaW9uX251bWJlciA9IDB4MDIwMjsKKwlMbnhQYXJhbS0+aW5fb3V0LnJh bWRpc2tfaW1hZ2UgPSBsb2FkZXItPmZpbGVsb2FkWzFdLmxvYWRfYWRkcmVz czsKKwlMbnhQYXJhbS0+aW5fb3V0LnJhbWRpc2tfc2l6ZSA9IGxvYWRlci0+ ZmlsZWxvYWRbMV0udW5jb21wcmVzc2VkX3NpemU7CisJTG54UGFyYW0tPmlu X291dC50eXBlX29mX2xvYWRlciA9IGJvb3Rsb2FkZXJfdHlwZTsKKworCUxu eFBhcmFtLT5BTFRfTUVNX0sgPSB0b3RhbG1lbTsKKworCXZtbGludXpfQVBN ICgmTG54UGFyYW0tPmFwbV9iaW9zX2luZm8pOworCisJX1g4NlNwZWVkU3Rl cFNtaSAoJkxueFBhcmFtLT5YODZTcGVlZFN0ZXBTbWkpOworCXZtbGludXpf RElTS1MgKCZMbnhQYXJhbS0+ZHJpdmUxLCAmTG54UGFyYW0tPmRyaXZlMgor I2lmZGVmIFJPT1RfRVhURU5TSVZFX1NFQVJDSAorCQkJLCAoY29uc3Qgc3Ry dWN0IGRpc2tfaW50ZXJmYWNlX3N0ciAqKXRvZ3BsLT5ESQorI2VuZGlmCisJ CQkpOworCXZtbGludXpfQ09ORklHICgmTG54UGFyYW0tPnN5c19kZXNjX3Rh YmxlKTsKKwkvKiBkbyB2bWxpbnV6X0VESUQoKSBiZWZvcmUgdm1saW51el9F ODIwKCkgc28gdGhhdCBpZiB0aGUgbGF0ZXIKKwkgZnVuY3Rpb24gZGVzY3Jp YmVzIG1vcmUgdGhhbiAxOCAoYW5kIGxlc3MgdGhhbiAzMikgYmxvY2tzIG9m IG1lbW9yeSwKKwkgdGhlIG1vcmUgaW1wb3J0YW50IGluZm9ybWF0aW9uIGVy YXNlcyB0aGUgbGVzcyBpbXBvcnRhbnQgb25lLgorCSBTaW5jZSAyLjYuMTIg dGhlcmUgaXNuJ3QgYW55IG92ZXJ3cml0ZSBwcm9ibGVtLiovCisJdm1saW51 el9FRElEICgmTG54UGFyYW0tPmVkaWRfZGF0YSk7CisJTG54UGFyYW0tPm5i X0U4MjBfZW50cmllcyA9IHZtbGludXpfRTgyMCAoTG54UGFyYW0tPmU4MjBt YXAsCisJCXNpemVvZihMbnhQYXJhbS0+ZTgyMG1hcCkpOworCisJLyogTm93 IHRoZSBjb21tYW5kIGxpbmUgc3R1ZmY6ICovCisJdm1saW51el9DTURMSU5F IChMbnhQYXJhbS0+Y29tbWFuZF9saW5lLCBwcm9wb3NlZF9jbWRsaW5lLAor CQkJKihmYXJwdHIgKilzdHJpbmdwdHIsCisJCQlsb2FkZXItPmNtZGxpbmVf bmFtZSwgbG9hZGVyLT5jbWRsaW5lX2V4dHJhcGFyYW0pOworCisJZm9yIChw dHIgPSBMbnhQYXJhbS0+Y29tbWFuZF9saW5lOyAqcHRyICE9ICdcMCc7IHB0 cisrKSB7CisJCS8qIERvIG5vdCB0cnkgdG8gYmUgaW50ZWxsaWdlbnQgYW5k IGRvIGEgMzIgYml0cyBjb21wYXJlLAorCQkgICBpdCB3aWxsIGdlbmVyYXRl IGNvbnN0YW50IGluIC5yb2RhdGEuc3RyMS4xIG9yIC5yb2RhdGEKKwkJICAg d2l0aCBhIHZlcnNpb24gb2YgR0NDIG9yIGFub3RoZXIuICovCisJCWlmIChw dHJbMF0gPT0gJ2UnICYmIHB0clsxXSA9PSAnZCcgJiYgcHRyWzJdID09ICdk JworCQkJCSAgJiYgcHRyWzNdID09ICc9JykKKwkJCWJyZWFrOworCX0KKwkv KiBJIGRvIG5vdCBrbm93IGFib3V0IGVkZD1za2lwbWJyLCBpZiB0aGVyZSBp cyBhIHJlYWQgZXJyb3IKKwkJR3VqaW4gd2lsbCBub3QgZXZlbiBib290IHVw IHRvIHRoZXJlLi4uICovCisJaWYgKCpwdHIgPT0gJ1wwJyB8fCBwdHJbNF0g IT0gJ28nIHx8IHB0cls1XSAhPSAnZicgfHwgcHRyWzZdICE9ICdmJykgewor CQlMbnhQYXJhbS0+bmJfTUJSU0lHX2VudHJpZXMgPSB2bWxpbnV6X01CUlNJ RyAoTG54UGFyYW0tPk1CUlNJRywKKwkJCXNpemVvZihMbnhQYXJhbS0+TUJS U0lHKS9zaXplb2YoTG54UGFyYW0tPk1CUlNJR1swXSkpOworCQlMbnhQYXJh bS0+bmJfRUREX2VudHJpZXMgPSB2bWxpbnV6X0VERCAoTG54UGFyYW0tPmVk ZCwKKwkJCXNpemVvZihMbnhQYXJhbS0+ZWRkKS9zaXplb2YoTG54UGFyYW0t PmVkZFswXSkpOworCX0KKworCWZvciAocHRyID0gTG54UGFyYW0tPmNvbW1h bmRfbGluZTsgKnB0ciAhPSAnXDAnOyBwdHIrKykgeworI2RlZmluZSBlbmRw YXJhbShjKSAoKGMpID09ICcgJyB8fCAoYykgPT0gJ1xuJyB8fCAoYykgPT0g J1x0JyB8fCAoYykgPT0gJ1wwJykKKwkJaWYgKHB0clswXSA9PSAncicgJiYg KHB0clsxXSA9PSAndycgfHwgcHRyWzFdID09ICdvJykKKwkJCQkgICYmIGVu ZHBhcmFtKHB0clsyXSkpIHsKKwkJCUxueFBhcmFtLT5pbl9vdXQucm9vdF9m bGFncy5yZWFkX29ubHkKKwkJCQkJPSAocHRyWzFdID09ICd3Jyk/IDAgOiAx OworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQl3aGlsZSAoIWVuZHBhcmFt KCpwdHIpKQorCQkJCXB0cisrOworCQl9CisJfQorCisJaWYgKGxvYWRlci0+ Y21kbGluZV9uYW1lKQorCQlmb3IgKHB0ciA9ICh1bnNpZ25lZCBjaGFyICop bG9hZGVyLT5jbWRsaW5lX25hbWU7CisJCSAgICAgKnB0ciAhPSAnXDAnOwor CQkgICAgIHB0cisrKQorCQkJaWYgKCpwdHIgPT0gJy8nKQorCQkJCW5iX3Ns YXNoX2luX2tlcm5lbG5hbWUrKzsKKwl2bWxpbnV6X1JPT1QgKHN5c3RlbV9k ZXNjLCB0b2dwbCwgTG54UGFyYW0tPmNvbW1hbmRfbGluZSwKKwkJCW5iX3Ns YXNoX2luX2tlcm5lbG5hbWUpOworCisJdGVzdF92Z2FwcmludCgpOworCisJ KnN0cmluZ3B0ciA9IDA7IC8qIEd1amluIHdpbGwgbm90IHByaW50IGFueXRo aW5nIGJ5IGRlZmF1bHQgKi8KKy8vCSpzdHJpbmdwdHIgPSBMbnhQYXJhbS0+ Y29tbWFuZF9saW5lOworCisJcmV0dXJuIDA7Cit9Cg== --0-2013220204-1170719900=:67267--