From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2155 invoked by alias); 23 Sep 2009 18:33:06 -0000 Received: (qmail 2065 invoked by uid 22791); 23 Sep 2009 18:33:00 -0000 X-SWARE-Spam-Status: No, hits=1.4 required=5.0 tests=AWL,BAYES_20,J_CHICKENPOX_14,J_CHICKENPOX_34,J_CHICKENPOX_63,J_CHICKENPOX_64,J_CHICKENPOX_66,SARE_BAYES_5x8,SARE_BAYES_6x8,SARE_BAYES_7x8 X-Spam-Check-By: sourceware.org Received: from shell4.BAYAREA.NET (HELO shell4.bayarea.net) (209.128.82.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 23 Sep 2009 18:32:52 +0000 Received: (qmail 28039 invoked from network); 23 Sep 2009 11:32:50 -0700 Received: from 209-128-106-254.bayarea.net (HELO redwood.eagercon.com) (209.128.106.254) by shell4.bayarea.net with SMTP; 23 Sep 2009 11:32:47 -0700 Message-ID: <4ABA69CE.5040707@eagercon.com> Date: Wed, 23 Sep 2009 18:33:00 -0000 From: Michael Eager User-Agent: Thunderbird 2.0.0.23 (X11/20090825) MIME-Version: 1.0 To: "gdb-patches@sourceware.org" Subject: [PATCH] Add support for Xilinx MicroBlaze Content-Type: multipart/mixed; boundary="------------000900020103020602020901" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-09/txt/msg00728.txt.bz2 This is a multi-part message in MIME format. --------------000900020103020602020901 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 876 Hi -- Attached is a revised patch which adds support for the Xilinx MicroBlaze. I believe that I've addressed all of the previous comments. This patch requires a small patch to binutils/opcodes which is being submitted shortly. The simulator for Xilinx MicroBlaze has been approved by the maintainers and will be checked in. 2009-09-23 Michael Eager * configure.tgt: Add targets microblaze*-linux-*, microblaze*-xilinx-*. * doc/gdb.texinfo: Add MicroBlaze. * MAINTAINERS: Add self as maintainer for MicroBlaze. * Makefile.in: Build microblaze-tdep.o, microblaze-linux-tdep.o. * microblaze-linux-tdep.c: New. * microblaze-rom.c: New. * microblaze-tdep.c: New. * microblaze-tdep.h: New. * NEWS: Announce Xilinx MicroBlaze support. -- Michael Eager eager@eagercon.com 1960 Park Blvd., Palo Alto, CA 94306 650-325-8077 --------------000900020103020602020901 Content-Type: text/plain; name="mb-gdb.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="mb-gdb.patch" Content-length: 70508 ZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBI QVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2RiL2dkYi9jb25m aWd1cmUudGd0IG1iLWdkYi9nZGIvY29uZmlndXJlLnRndAotLS0gZ2RiL2dk Yi9jb25maWd1cmUudGd0CTIwMDktMDgtMDYgMDM6Mjg6MzguMDAwMDAwMDAw IC0wNzAwCisrKyBtYi1nZGIvZ2RiL2NvbmZpZ3VyZS50Z3QJMjAwOS0wOS0y MSAxMjoxMjozMi4wMDAwMDAwMDAgLTA3MDAKQEAgLTMxMyw2ICszMTMsMTkg QEAgbWVwLSotKikKIAkjIE5vIHNpbSBuZWVkZWQuIFRhcmdldCB1c2VzIFNJ RC4KIAk7OwogCittaWNyb2JsYXplKi1saW51eC0qKQorCSMgVGFyZ2V0OiBY aWxpbnggTWljcm9CbGF6ZSBydW5uaW5nIExpbnV4CisJZ2RiX3RhcmdldF9v YnM9Im1pY3JvYmxhemUtdGRlcC5vIG1pY3JvYmxhemUtbGludXgtdGRlcC5v IG1pY3JvYmxhemUtcm9tLm8gXAorCQkJbW9uaXRvci5vIGRzcmVjLm8gc29s aWIubyBzb2xpYi1zdnI0Lm8gY29yZWxvdy5vIFwKKwkJCXN5bWZpbGUtbWVt Lm8iCisJZ2RiX3NpbT0uLi9zaW0vbWljcm9ibGF6ZS9saWJzaW0uYQorCTs7 CittaWNyb2JsYXplKi14aWxpbngtKikKKwkjIFRhcmdldDogWGlsaW54IE1p Y3JvQmxhemUgcnVubmluZyBzdGFuZGFsb25lCisJZ2RiX3RhcmdldF9vYnM9 Im1pY3JvYmxhemUtdGRlcC5vIG1pY3JvYmxhemUtcm9tLm8gbW9uaXRvci5v IGRzcmVjLm8iCisJZ2RiX3NpbT0uLi9zaW0vbWljcm9ibGF6ZS9saWJzaW0u YQorCTs7CisKIG1pcHMqLXNnaS1pcml4NSopCiAJIyBUYXJnZXQ6IE1JUFMg U0dJIHJ1bm5pbmcgSXJpeCA1CiAJZ2RiX3RhcmdldF9vYnM9Im1pcHMtdGRl cC5vIG1pcHMtaXJpeC10ZGVwLm8gc29saWIubyBzb2xpYi1pcml4Lm8iCmRp ZmYgLXVyTnAgLS1leGNsdWRlICcqLnN3cCcgLS1leGNsdWRlIERFVi1QSEFT RSAtLWV4Y2x1ZGUgLnN2biAtLWV4Y2x1ZGUgQ1ZTIGdkYi9nZGIvZG9jL2dk Yi50ZXhpbmZvIG1iLWdkYi9nZGIvZG9jL2dkYi50ZXhpbmZvCi0tLSBnZGIv Z2RiL2RvYy9nZGIudGV4aW5mbwkyMDA5LTA5LTA2IDEwOjE0OjQzLjAwMDAw MDAwMCAtMDcwMAorKysgbWItZ2RiL2dkYi9kb2MvZ2RiLnRleGluZm8JMjAw OS0wOS0yMyAxMTowMjozOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTUxNyw2ICs1 MTcsOSBAQCBUZW5zaWxpY2EsIEluYy5AOiBjb250cmlidXRlZCBzdXBwb3J0 IGZvCiB3aG8gaGF2ZSB3b3JrZWQgb24gdGhlIFh0ZW5zYSBwb3J0IG9mIEB2 YWx1ZXtHREJOfSBpbiB0aGUgcGFzdCBpbmNsdWRlCiBTdGV2ZSBUamlhbmcs IEpvaG4gTmV3bGluLCBhbmQgU2NvdHQgRm9laG5lci4KIAorTWljaGFlbCBF YWdlciBhbmQgc3RhZmYgb2YgWGlsaW54LCBJbmMuLCBjb250cmlidXRlZCBz dXBwb3J0IGZvciB0aGUKK1hpbGlueCBNaWNyb0JsYXplIGFyY2hpdGVjdHVy ZS4KKwogQG5vZGUgU2FtcGxlIFNlc3Npb24KIEBjaGFwdGVyIEEgU2FtcGxl IEB2YWx1ZXtHREJOfSBTZXNzaW9uCiAKQEAgLTE2NDI3LDYgKzE2NDMwLDcg QEAgYWNjZXB0YWJsZSBjb21tYW5kcy4KICogQVJNOjogICAgICAgICAgICAg ICAgICAgICAgICAgQVJNIFJESQogKiBNMzJSL0Q6OiAgICAgICAgICAgICAg ICAgICAgICBSZW5lc2FzIE0zMlIvRAogKiBNNjhLOjogICAgICAgICAgICAg ICAgICAgICAgICBNb3Rvcm9sYSBNNjhLCisqIE1pY3JvQmxhemU6OgkJCVhp bGlueCBNaWNyb0JsYXplCiAqIE1JUFMgRW1iZWRkZWQ6OiAgICAgICAgICAg ICAgIE1JUFMgRW1iZWRkZWQKICogT3BlblJJU0MgMTAwMDo6ICAgICAgICAg ICAgICAgT3BlblJpc2MgMTAwMAogKiBQQTo6ICAgICAgICAgICAgICAgICAg ICAgICAgICBIUCBQQSBFbWJlZGRlZApAQCAtMTY2NzgsNiArMTY2ODIsMzgg QEAgZEJVRyBST00gbW9uaXRvciBmb3IgTW90b3JvbGEgQ29sZEZpcmUuCiAK IEBlbmQgdGFibGUKIAorQG5vZGUgTWljcm9CbGF6ZQorQHN1YnNlY3Rpb24g TWljcm9CbGF6ZQorQGNpbmRleCBYaWxpbnggTWljcm9CbGF6ZQorQGNpbmRl eCBYTUQsIFhpbGlueCBNaWNyb3Byb2Nlc3NvciBEZWJ1Z2dlcgorCitUaGUg TWljcm9CbGF6ZSBpcyBhIHNvZnQtY29yZSBwcm9jZXNzb3Igc3VwcG9ydGVk IG9uIHZhcmlvdXMgWGlsaW54CitGUEdBcywgc3VjaCBhcyBTcGFydGFuIG9y IFZpcnRleCBzZXJpZXMuICBCb2FyZHMgd2l0aCB0aGVzZSBwcm9jZXNzb3Jz Cit1c3VhbGx5IGhhdmUgSlRBRyBwb3J0cyB3aGljaCBjb25uZWN0IHRvIGEg aG9zdCBzeXN0ZW0gcnVubmluZyB0aGUgWGlsaW54CitFbWJlZGRlZCBEZXZl bG9wbWVudCBLaXQgKEVESykgb3IgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0 IChTREspLgorVGhpcyBob3N0IHN5c3RlbSBpcyB1c2VkIHRvIGRvd25sb2Fk IHRoZSBjb25maWd1cmF0aW9uIGJpdHN0cmVhbSB0bwordGhlIHRhcmdldCBG UEdBLiAgVGhlIFhpbGlueCBNaWNyb3Byb2Nlc3NvciBEZWJ1Z2dlciAoWE1E KSBwcm9ncmFtCitjb21tdW5pY2F0ZXMgd2l0aCB0aGUgdGFyZ2V0IGJvYXJk IHVzaW5nIHRoZSBKVEFHIGludGVyZmFjZSBhbmQKK3ByZXNlbnRzIGEgQGNv ZGV7Z2Ric2VydmVyfSBpbnRlcmZhY2UgdG8gdGhlIGJvYXJkLiAgQnkgZGVm YXVsdAorQGNvZGV7eG1kfSB1c2VzIHBvcnQgQGNvZGV7MTIzNH0uIChXaGls ZSBpdCBpcyBwb3NzaWJsZSB0byBjaGFuZ2UgCit0aGlzIGRlZmF1bHQgcG9y dCwgaXQgcmVxdWlyZXMgdGhlIHVzZSBvZiB1bmRvY3VtZW50ZWQgQGNvZGV7 eG1kfSAKK2NvbW1hbmRzLiAgQ29udGFjdCBYaWxpbnggc3VwcG9ydCBpZiB5 b3UgbmVlZCB0byBkbyB0aGlzLikKKworVXNlIHRoZXNlIEdEQiBjb21tYW5k cyB0byBjb25uZWN0IHRvIHRoZSBNaWNyb0JsYXplIHRhcmdldCBwcm9jZXNz b3IuCisKK0B0YWJsZSBAY29kZQorQGl0ZW0gdGFyZ2V0IHJlbW90ZSA6MTIz NAorVXNlIHRoaXMgY29tbWFuZCB0byBjb25uZWN0IHRvIHRoZSB0YXJnZXQg aWYgeW91IGFyZSBydW5uaW5nIEB2YWx1ZXtHREJOfQorb24gdGhlIHNhbWUg c3lzdGVtIGFzIEBjb2Rle3htZH0uCisKK0BpdGVtIHRhcmdldCByZW1vdGUg WE1ELUhPU1Q6MTIzNAorVXNlIHRoaXMgY29tbWFuZCB0byBjb25uZWN0IHRv IHRoZSB0YXJnZXQgaWYgaXQgaXMgY29ubmVjdGVkIHRvIEBjb2Rle3htZH0K K3J1bm5pbmcgb24gYSBkaWZmZXJlbnQgc3lzdGVtIG5hbWVkIEBjb2Rle1hN RC1IT1NUfS4KKworQGl0ZW0gbG9hZAorVXNlIHRoaXMgY29tbWFuZCB0byBk b3dubG9hZCBhIHByb2dyYW0gdG8gdGhlIE1pY3JvQmxhemUgdGFyZ2V0Lgor QGVuZCB0YWJsZQorCiBAbm9kZSBNSVBTIEVtYmVkZGVkCiBAc3Vic2VjdGlv biBNSVBTIEVtYmVkZGVkCiAKZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dw JyAtLWV4Y2x1ZGUgREVWLVBIQVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVk ZSBDVlMgZ2RiL2dkYi9NQUlOVEFJTkVSUyBtYi1nZGIvZ2RiL01BSU5UQUlO RVJTCi0tLSBnZGIvZ2RiL01BSU5UQUlORVJTCTIwMDktMDgtMDYgMDM6Mjg6 MzcuMDAwMDAwMDAwIC0wNzAwCisrKyBtYi1nZGIvZ2RiL01BSU5UQUlORVJT CTIwMDktMDktMDYgMTI6MjY6MDUuMDAwMDAwMDAwIC0wNzAwCkBAIC0yOTAs NiArMjkwLDEwIEBAIHRoZSBuYXRpdmUgbWFpbnRhaW5lciB3aGVuIHJlc29s dmluZyBBQkkKIAltZXAJCS0tdGFyZ2V0PW1lcC1lbGYgLC1XZXJyb3IKIAkJ CUtldmluIEJ1ZXR0bmVyCQlrZXZpbmJAcmVkaGF0LmNvbQogCisJbWljcm9i bGF6ZQktLXRhcmdldD1taWNyb2JsYXplLXhpbGlueC1lbGYgLC1XZXJyb3IK KwkJCS0tdGFyZ2V0PW1pY3JvYmxhemUtbGludXgtZ251ICwtV2Vycm9yCisJ CQlNaWNoYWVsIEVhZ2VyCQllYWdlckBlYWdlcmNvbi5jb20KKwogCW1pcHMJ CS0tdGFyZ2V0PW1pcHMtZWxmICwtV2Vycm9yCiAKIAltbjEwMzAwCQktLXRh cmdldD1tbjEwMzAwLWVsZiBicm9rZW4KZGlmZiAtdXJOcCAtLWV4Y2x1ZGUg Jyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBIQVNFIC0tZXhjbHVkZSAuc3ZuIC0t ZXhjbHVkZSBDVlMgZ2RiL2dkYi9NYWtlZmlsZS5pbiBtYi1nZGIvZ2RiL01h a2VmaWxlLmluCi0tLSBnZGIvZ2RiL01ha2VmaWxlLmluCTIwMDktMDgtMjcg MDk6MDg6MzQuMDAwMDAwMDAwIC0wNzAwCisrKyBtYi1nZGIvZ2RiL01ha2Vm aWxlLmluCTIwMDktMDgtMjcgMTI6MjA6MDEuMDAwMDAwMDAwIC0wNzAwCkBA IC00OTgsNiArNDk4LDcgQEAgQUxMX1RBUkdFVF9PQlMgPSBcCiAJbTY4a2Jz ZC10ZGVwLm8gbTY4a2xpbnV4LXRkZXAubyBtNjhrLXRkZXAubyBcCiAJbTg4 ay10ZGVwLm8gXAogCW1lcC10ZGVwLm8gXAorCW1pY3JvYmxhemUtdGRlcC5v IG1pY3JvYmxhemUtbGludXgtdGRlcC5vIFwKIAltaXBzLWlyaXgtdGRlcC5v IG1pcHMtbGludXgtdGRlcC5vIFwKIAltaXBzbmJzZC10ZGVwLm8gbWlwcy10 ZGVwLm8gXAogCW1uMTAzMDAtbGludXgtdGRlcC5vIG1uMTAzMDAtdGRlcC5v IFwKQEAgLTEzOTAsNiArMTM5MSw3IEBAIEFMTERFUEZJTEVTID0gXAogCW02 OGtic2QtbmF0LmMgbTY4a2JzZC10ZGVwLmMgXAogCW02OGtsaW51eC1uYXQu YyBtNjhrbGludXgtdGRlcC5jIFwKIAltODhrLXRkZXAuYyBtODhrYnNkLW5h dC5jIFwKKwltaWNyb2JsYXplLXRkZXAuYyBtaWNyb2JsYXplLWxpbnV4LXRk ZXAuYyBcCiAJbWluZ3ctaGRlcC5jIFwKIAltaXBzLWxpbnV4LW5hdC5jIG1p cHMtbGludXgtdGRlcC5jIFwKIAltaXBzLWlyaXgtdGRlcC5jIFwKZGlmZiAt dXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBIQVNFIC0t ZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2RiL2dkYi9taWNyb2JsYXpl LWxpbnV4LXRkZXAuYyBtYi1nZGIvZ2RiL21pY3JvYmxhemUtbGludXgtdGRl cC5jCi0tLSBnZGIvZ2RiL21pY3JvYmxhemUtbGludXgtdGRlcC5jCTE5Njkt MTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBtYi1nZGIvZ2Ri L21pY3JvYmxhemUtbGludXgtdGRlcC5jCTIwMDktMDktMjEgMTI6MjM6MzMu MDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTM5IEBACisvKiBUYXJnZXQt ZGVwZW5kZW50IGNvZGUgZm9yIFhpbGlueCBNaWNyb0JsYXplLgorICAgQ29w eXJpZ2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK KyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAgIDAyMTEw LTEzMDEsIFVTQS4gICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVk ZSAiZnJhbWUuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgorI2luY2x1ZGUg InN5bXRhYi5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1ZGUgImdk YmNvcmUuaCIKKyNpbmNsdWRlICJnZGJjbWQuaCIKKyNpbmNsdWRlICJzeW1m aWxlLmgiCisjaW5jbHVkZSAib2JqZmlsZXMuaCIKKyNpbmNsdWRlICJyZWdj YWNoZS5oIgorI2luY2x1ZGUgInZhbHVlLmgiCisjaW5jbHVkZSAib3NhYmku aCIKKyNpbmNsdWRlICJyZWdzZXQuaCIKKyNpbmNsdWRlICJzb2xpYi1zdnI0 LmgiCisjaW5jbHVkZSAibWljcm9ibGF6ZS10ZGVwLmgiCisjaW5jbHVkZSAi dHJhZC1mcmFtZS5oIgorI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorI2lu Y2x1ZGUgInRyYW1wLWZyYW1lLmgiCisKKworc3RhdGljIGludAorbWljcm9i bGF6ZV9saW51eF9tZW1vcnlfcmVtb3ZlX2JyZWFrcG9pbnQgKHN0cnVjdCBi cF90YXJnZXRfaW5mbyAqYnBfdGd0KQoreworICBDT1JFX0FERFIgYWRkciA9 IGJwX3RndC0+cGxhY2VkX2FkZHJlc3M7CisgIGNvbnN0IGdkYl9ieXRlICpi cDsKKyAgaW50IHZhbDsKKyAgaW50IGJwbGVuOworICBnZGJfYnl0ZSBvbGRf Y29udGVudHNbQlJFQUtQT0lOVF9NQVhdOworCisgIC8qIERldGVybWluZSBh cHByb3ByaWF0ZSBicmVha3BvaW50IGNvbnRlbnRzIGFuZCBzaXplIGZvciB0 aGlzIGFkZHJlc3MuICAqLworICBicCA9IGdkYmFyY2hfYnJlYWtwb2ludF9m cm9tX3BjIChnZGJhcmNoLCAmYWRkciwgJmJwbGVuKTsKKyAgaWYgKGJwID09 IE5VTEwpCisgICAgZXJyb3IgKF8oIlNvZnR3YXJlIGJyZWFrcG9pbnRzIG5v dCBpbXBsZW1lbnRlZCBmb3IgdGhpcyB0YXJnZXQuIikpOworCisgIHZhbCA9 IHRhcmdldF9yZWFkX21lbW9yeSAoYWRkciwgb2xkX2NvbnRlbnRzLCBicGxl bik7CisKKyAgLyogSWYgb3VyIGJyZWFrcG9pbnQgaXMgbm8gbG9uZ2VyIGF0 IHRoZSBhZGRyZXNzLCB0aGlzIG1lYW5zIHRoYXQgdGhlCisgICAgIHByb2dy YW0gbW9kaWZpZWQgdGhlIGNvZGUgb24gdXMsIHNvIGl0IGlzIHdyb25nIHRv IHB1dCBiYWNrIHRoZQorICAgICBvbGQgdmFsdWUuICAqLworICBpZiAoKHZh bCA9PSAwKSAmJiAobWVtY21wIChicCwgb2xkX2NvbnRlbnRzLCBicGxlbikg PT0gMCkpCisgICAgdmFsID0gdGFyZ2V0X3dyaXRlX21lbW9yeSAoYWRkciwg YnBfdGd0LT5zaGFkb3dfY29udGVudHMsIGJwbGVuKTsKKworICByZXR1cm4g dmFsOworfQorCitzdGF0aWMgdm9pZAorbWljcm9ibGF6ZV9saW51eF9zaWd0 cmFtcF9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUsCisJ CQkJIHN0cnVjdCB0cmFkX2ZyYW1lX2NhY2hlICp0aGlzX2NhY2hlLAorCQkJ CSBDT1JFX0FERFIgZnVuYywgTE9OR0VTVCBvZmZzZXQsCisJCQkJIGludCBi aWFzKQoreworICBDT1JFX0FERFIgYmFzZTsKKyAgQ09SRV9BRERSIGdwcmVn czsKKyAgaW50IHJlZ251bTsKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gg PSBnZXRfZnJhbWVfYXJjaCAobmV4dF9mcmFtZSk7CisgIHN0cnVjdCBnZGJh cmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworCisg IGJhc2UgPSBmcmFtZV91bndpbmRfcmVnaXN0ZXJfdW5zaWduZWQgKG5leHRf ZnJhbWUsIFNQX1JFR05VTSk7CisgIGlmICgoYmlhcyA+IDApICYmIChmcmFt ZV9wY191bndpbmQgKG5leHRfZnJhbWUpICE9IGZ1bmMpKQorICAgIC8qIFNl ZSBiZWxvdywgc29tZSBzaWduYWwgdHJhbXBvbGluZXMgaW5jcmVtZW50IHRo ZSBzdGFjayBhcyB0aGVpcgorICAgICAgIGZpcnN0IGluc3RydWN0aW9uLCBu ZWVkIHRvIGNvbXBlbnNhdGUgZm9yIHRoYXQuICAqLworICAgIGJhc2UgLT0g YmlhczsKKworICAvKiBGaW5kIHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3Rl ciBidWZmZXIuICAqLworICBncHJlZ3MgPSBiYXNlICsgb2Zmc2V0OworCisg IC8qIFJlZ2lzdGVycyBzYXZlZCBvbiBzdGFjay4gICovCisgIGZvciAocmVn bnVtID0gMDsgcmVnbnVtIDwgTUlDUk9CTEFaRV9CVFJfUkVHTlVNOyByZWdu dW0rKykKKyAgICB0cmFkX2ZyYW1lX3NldF9yZWdfYWRkciAodGhpc19jYWNo ZSwgcmVnbnVtLCBncHJlZ3MgKyByZWdudW0gKiBSRUdJU1RFUl9TSVpFKTsK KyAgdHJhZF9mcmFtZV9zZXRfaWQgKHRoaXNfY2FjaGUsIGZyYW1lX2lkX2J1 aWxkIChiYXNlLCBmdW5jKSk7Cit9CisKKworc3RhdGljIHZvaWQKK21pY3Jv YmxhemVfbGludXhfc2lnaGFuZGxlcl9jYWNoZV9pbml0IChjb25zdCBzdHJ1 Y3QgdHJhbXBfZnJhbWUgKnNlbGYsCisJCQkJCXN0cnVjdCBmcmFtZV9pbmZv ICpuZXh0X2ZyYW1lLAorCQkJCQlzdHJ1Y3QgdHJhZF9mcmFtZV9jYWNoZSAq dGhpc19jYWNoZSwKKwkJCQkJQ09SRV9BRERSIGZ1bmMpCit7CisgIG1pY3Jv YmxhemVfbGludXhfc2lndHJhbXBfY2FjaGUgKG5leHRfZnJhbWUsIHRoaXNf Y2FjaGUsIGZ1bmMsCisJCQkJICAgMCAvKiBPZmZzZXQgdG8gdWNvbnRleHRf dC4gICovCisJCQkJICAgKyAyNCAvKiBPZmZzZXQgdG8gLnJlZy4gICovLAor CQkJCSAgIDApOworfQorCitzdGF0aWMgc3RydWN0IHRyYW1wX2ZyYW1lIG1p Y3JvYmxhemVfbGludXhfc2lnaGFuZGxlcl90cmFtcF9mcmFtZSA9IHsKKyAg U0lHVFJBTVBfRlJBTUUsCisgIDQsCisgIHsKKyAgICB7IDB4MzE4MDAwNzcs IC0xIH0sIC8qIGFkZGlrIFIxMixSMCwxMTkuICAqLworICAgIHsgMHhiOWNj MDAwOCwgLTEgfSwgLyogYnJraSBSMTQsOC4gICovCisgICAgeyBUUkFNUF9T RU5USU5FTF9JTlNOIH0sCisgIH0sCisgIG1pY3JvYmxhemVfbGludXhfc2ln aGFuZGxlcl9jYWNoZV9pbml0Cit9OworCisKK3N0YXRpYyB2b2lkCittaWNy b2JsYXplX2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGlu Zm8sCisJCQkgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKK3sKKyAgc3Ry dWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJj aCk7CisKKyAgc2V0X2dkYmFyY2hfbWVtb3J5X3JlbW92ZV9icmVha3BvaW50 IChnZGJhcmNoLAorCQkJCQltaWNyb2JsYXplX2xpbnV4X21lbW9yeV9yZW1v dmVfYnJlYWtwb2ludCk7CisKKyAgLyogU2hhcmVkIGxpYnJhcnkgaGFuZGxp bmcuICAqLworICBzZXRfc29saWJfc3ZyNF9mZXRjaF9saW5rX21hcF9vZmZz ZXRzIChnZGJhcmNoLAorCQkJCQkgc3ZyNF9pbHAzMl9mZXRjaF9saW5rX21h cF9vZmZzZXRzKTsKKworICAvKiBUcmFtcG9saW5lcy4gICovCisgIHRyYW1w X2ZyYW1lX3ByZXBlbmRfdW53aW5kZXIgKGdkYmFyY2gsCisJCQkJJm1pY3Jv YmxhemVfbGludXhfc2lnaGFuZGxlcl90cmFtcF9mcmFtZSk7Cit9CisKK3Zv aWQKK19pbml0aWFsaXplX21pY3JvYmxhemVfbGludXhfdGRlcCAodm9pZCkK K3sKKyAgZ2RiYXJjaF9yZWdpc3Rlcl9vc2FiaSAoYmZkX2FyY2hfbWljcm9i bGF6ZSwgMCwKKyAgICAgIEdEQl9PU0FCSV9MSU5VWCwgbWljcm9ibGF6ZV9s aW51eF9pbml0X2FiaSk7Cit9CmRpZmYgLXVyTnAgLS1leGNsdWRlICcqLnN3 cCcgLS1leGNsdWRlIERFVi1QSEFTRSAtLWV4Y2x1ZGUgLnN2biAtLWV4Y2x1 ZGUgQ1ZTIGdkYi9nZGIvbWljcm9ibGF6ZS1yb20uYyBtYi1nZGIvZ2RiL21p Y3JvYmxhemUtcm9tLmMKLS0tIGdkYi9nZGIvbWljcm9ibGF6ZS1yb20uYwkx OTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgbWItZ2Ri L2dkYi9taWNyb2JsYXplLXJvbS5jCTIwMDktMDktMjEgMTI6MjM6MzAuMDAw MDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTkwIEBACisvKiBSZW1vdGUgZGVi dWdnaW5nIGludGVyZmFjZSB0byBYaWxpbnggTWljcm9CbGF6ZS4KKyAgIENv cHlyaWdodCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgICAwMjEx MC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVkZSAiZGVmcy5oIgorI2luY2x1 ZGUgImdkYmNvcmUuaCIKKyNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRl ICJtb25pdG9yLmgiCisjaW5jbHVkZSAiZ2RiX3N0cmluZy5oIgorI2luY2x1 ZGUgInNlcmlhbC5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisKK3N0YXRp YyBjaGFyICpwaWNvYnVnX2luaXRzW10gPQoreyJcciIsIE5VTEx9OworCitz dGF0aWMgc3RydWN0IHRhcmdldF9vcHMgcGljb2J1Z19vcHM7CitzdGF0aWMg c3RydWN0IG1vbml0b3Jfb3BzIHBpY29idWdfY21kczsKKworLyogUGljb2J1 ZyBvbmx5IHN1cHBvcnRzIGEgc3Vic2V0IG9mIHJlZ2lzdGVycyBmcm9tIE1D b3JlLiBJbiByZWFsaXR5LAorICAgaXQgZG9lc24ndCBzdXBwb3J0IHNzMSwg ZWl0aGVyLiAgKi8KK3N0YXRpYyBjaGFyICpwaWNvYnVnX3JlZ25hbWVzW10g PSB7CisgICJyMCIsICAgInIxIiwgICAicjIiLCAgICJyMyIsICAgInI0Iiwg ICAicjUiLCAgICJyNiIsICAgInI3IiwKKyAgInI4IiwgICAicjkiLCAgICJy MTAiLCAgInIxMSIsICAicjEyIiwgICJyMTMiLCAgInIxNCIsICAicjE1IiwK KyAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAs ICAgICAgMCwgICAgICAwLAorICAwLCAgICAgIDAsICAgICAgMCwgICAgICAw LCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsCisgICJwc3IiLCAg InZiciIsICAiZXBzciIsICJmcHNyIiwgImVwYyIsICAiZnBjIiwgIDAsICAg ICAgInNzMSIsCisgICJzczIiLCAgInNzMyIsICAic3M0IiwgIDAsICAgICAg MCwgICAgICAwLCAgICAgIDAsICAgICAgMCwKKyAgMCwgICAgICAwLCAgICAg IDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLAor ICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwg ICAgICAwLCAgICAgIDAsCisgICJwYyIgfTsKKworCisKK3ZvaWQKK3BpY29i dWdfb3BlbiAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBtb25p dG9yX29wZW4gKGFyZ3MsICZwaWNvYnVnX2NtZHMsIGZyb21fdHR5KTsKK30K Ky8qIFdlIGNob29zZSB0byB3cml0ZSBvdXIgb3duIGR1bXByZWdzIHJvdXRp bmUsIHNpbmNlIHRoZSBvdXRwdXQgb2YKKyAgIHRoZSByZWdpc3RlciBkdW1w aW5nIGlzIHJhdGhlciBkaWZmaWN1bHQgdG8gZW5jYXBzdWxhdGUgaW4gYQor ICAgcmVnZXhwOgorCitwaWNvYnVnPiByZAorICAgICBwYyAyZjAwMDMxZSAg ICAgIGVwYyAyZjAwMDMxZSAgICAgIGZwYyAwMDAwMDAwMAorICAgIHBzciA4 MDAwMDEwMSAgICAgZXBzciA4MDAwMDEwMSAgICAgZnBzciAwMDAwMDAwMAor c3MwLXNzNCBiYWQwYmVlZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAw MDAwMDAwMCAgICAgIHZiciAzMDAwNWMwMAorICByMC1yNyAyZjBmZmY0YyAw MDAwMDA5MCAwMDAwMDAwMSAwMDAwMDAwMiAwMDAwMDAwMyAwMDAwMDAwNCAw MDAwMDAwNSAwMDAwMDAwNgorIHI4LXIxNSAyZjBmZmY2NCAwMDAwMDAwMCAw MDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAy ZjAwMDMxZQorKi8KKworc3RhdGljIGludAorcGljb2J1Z19kdW1wcmVncyAo c3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSkKK3sKKyAgc3RydWN0IGdkYmFy Y2ggKmdkYmFyY2ggPSBnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpOwor ICBjaGFyIGJ1ZlsxMDI0XTsKKyAgaW50IHJlc3BfbGVuOworICBjaGFyICpw OworCisgIC8qIFNlbmQgdGhlIGR1bXAgcmVnaXN0ZXIgY29tbWFuZCB0byB0 aGUgbW9uaXRvciBhbmQKKyAgICAgZ2V0IHRoZSByZXBseS4gICovCisgIG1v bml0b3JfcHJpbnRmIChwaWNvYnVnX2NtZHMuZHVtcF9yZWdpc3RlcnMpOwor ICByZXNwX2xlbiA9IG1vbml0b3JfZXhwZWN0X3Byb21wdCAoYnVmLCBzaXpl b2YgKGJ1ZikpOworCisgIHAgPSBzdHJ0b2sgKGJ1ZiwgIiBcdFxyXG4iKTsK KyAgd2hpbGUgKHApCisgICAgeworICAgICAgaWYgKHN0cmNociAocCwgJy0n KSkKKwl7CisJICAvKiBnb3QgYSByYW5nZS4gZWl0aGVyIHIwLXI3LCByOC1y MTUgb3Igc3MwLXNzNC4gICovCisJICBpZiAoc3RybmNtcCAocCwgInIwIiwg MikgPT0gMCB8fCBzdHJuY21wIChwLCAicjgiLCAyKSA9PSAwKQorCSAgICB7 CisJICAgICAgaW50IHJuID0gKHBbMV0gPT0gJzAnID8gMCA6IDgpOworCSAg ICAgIGludCBpID0gMDsKKworCSAgICAgIC8qIEdldCB0aGUgbmV4dCA4IHZh bHVlcyBhbmQgcmVjb3JkIHRoZW0uICAqLworCSAgICAgIHdoaWxlIChpIDwg OCkKKwkJeworCQkgIHAgPSBzdHJ0b2sgKE5VTEwsICIgXHRcclxuIik7CisJ CSAgaWYgKHApCisJCSAgICBtb25pdG9yX3N1cHBseV9yZWdpc3RlciAocmVn Y2FjaGUsIHJuICsgaSwgcCk7CisJCSAgaSsrOworCQl9CisJICAgIH0KKwkg IGVsc2UgaWYgKHN0cm5jbXAgKHAsICJzcyIsIDIpID09IDApCisJICAgIHsK KwkgICAgICAvKiBnZXQgdGhlIG5leHQgZml2ZSB2YWx1ZXMsIGlnbm9yaW5n IHRoZSBmaXJzdC4gICovCisJICAgICAgaW50IHJuOworCSAgICAgIHAgPSBz dHJ0b2sgKE5VTEwsICIgXHRcclxuIik7CisJICAgICAgZm9yIChybiA9IDM5 OyBybiA8IDQzOyBybisrKQorCQl7CisJCSAgcCA9IHN0cnRvayAoTlVMTCwg IiBcdFxyXG4iKTsKKwkJICBpZiAocCkKKwkJICAgIG1vbml0b3Jfc3VwcGx5 X3JlZ2lzdGVyIChyZWdjYWNoZSwgcm4sIHApOworCQl9CisJICAgIH0KKwkg IGVsc2UKKwkgICAgeworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAg ICAgZWxzZQorCXsKKwkgIC8qIFNpbXBsZSByZWdpc3RlciB0eXBlLCBwYWly ZWQuICAqLworCSAgY2hhciAqbmFtZSA9IHA7CisJICBpbnQgaTsKKworCSAg LyogR2V0IGFuZCByZWNvcmQgdmFsdWUuICAqLworCSAgcCA9IHN0cnRvayAo TlVMTCwgIiBcdFxyXG4iKTsKKwkgIGlmIChwKQorCSAgICB7CisJICAgICAg Zm9yIChpID0gMDsgaSA8IGdkYmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gpOyBp KyspCisJCXsKKwkJICBpZiAocGljb2J1Z19yZWduYW1lc1tpXQorCQkgICAg ICAmJiAoc3RyY21wIChwaWNvYnVnX3JlZ25hbWVzW2ldLCBuYW1lKSA9PSAw KSkKKwkJICAgIGJyZWFrOworCQl9CisKKwkgICAgICBpZiAoaSA8PSBnZGJh cmNoX251bV9yZWdzIChnZGJhcmNoKSkKKwkJbW9uaXRvcl9zdXBwbHlfcmVn aXN0ZXIgKHJlZ2NhY2hlLCBpLCBwKTsKKwkgICAgfQorCX0KKyAgICAgIHAg PSBzdHJ0b2sgKE5VTEwsICIgXHRcclxuIik7CisgICAgfQorCisgIHJldHVy biAwOworfQorCitzdGF0aWMgdm9pZAoraW5pdF9waWNvYnVnX2NtZHMgKHZv aWQpCit7CisgIHBpY29idWdfY21kcy5mbGFncyA9IE1PX0dFVE1FTV9ORUVE U19SQU5HRSB8IE1PX0NMUl9CUkVBS19VU0VTX0FERFIKKwkJICAgICAgIHwg TU9fUFJJTlRfUFJPR1JBTV9PVVRQVVQ7CisKKyAgcGljb2J1Z19jbWRzLmlu aXQgPSBwaWNvYnVnX2luaXRzOwkJLyogSW5pdCBzdHJpbmdzCQkqLworICBw aWNvYnVnX2NtZHMuY29udCA9ICJnXG4iOwkJCS8qIGNvbnRpbnVlIGNvbW1h bmQJKi8KKyAgcGljb2J1Z19jbWRzLnN0ZXAgPSAic1xuIjsJCQkvKiBzaW5n bGUgc3RlcAkJKi8KKyAgcGljb2J1Z19jbWRzLnNldF9icmVhayA9ICJiciAl eFxuIjsJCS8qIHNldCBhIGJyZWFrcG9pbnQJKi8KKyAgcGljb2J1Z19jbWRz LmNscl9icmVhayA9ICJub2JyICV4XG4iOwkJLyogY2xlYXIgYSBicmVha3Bv aW50CSovCisgIHBpY29idWdfY21kcy5jbHJfYWxsX2JyZWFrID0gIm5vYnJc biI7CS8qIGNsZWFyIGFsbCBicmVha3BvaW50cyAqLworICBwaWNvYnVnX2Nt ZHMuc2V0bWVtLmNtZGIgPSAibW0gJXggJXggO2JcbiI7CS8qIHNldG1lbS5j bWRiIChhZGRyLCB2YWx1ZSkgKi8KKyAgcGljb2J1Z19jbWRzLnNldG1lbS5j bWR3ID0gIm1tICV4ICV4IDtoXG4iOwkvKiBzZXRtZW0uY21kdyAoYWRkciwg dmFsdWUpICovCisgIHBpY29idWdfY21kcy5zZXRtZW0uY21kbCA9ICJtbSAl eCAleCA7d1xuIjsJLyogc2V0bWVtLmNtZGwgKGFkZHIsIHZhbHVlKSAqLwor ICBwaWNvYnVnX2NtZHMuZ2V0bWVtLmNtZGIgPSAibWQgJXggJXhcbiI7CS8q IGdldG1lbS5jbWRiIChzdGFydCBhZGRyLAorCQkJCQkJICAgZW5kIGFkZHIp IAkJKi8KKyAgcGljb2J1Z19jbWRzLmdldG1lbS5yZXNwX2RlbGltID0gIjoi OwkJLyogZ2V0bWVtLnJlc3BfZGVsaW0JKi8KKyAgcGljb2J1Z19jbWRzLnNl dHJlZy5jbWQgPSAicm0gJXMgJXhcbiI7CS8qIHNldHJlZy5jbWQgKG5hbWUs IHZhbHVlKSAqLworICBwaWNvYnVnX2NtZHMuZ2V0cmVnLmNtZCA9ICJyZCAl c1xuIjsJCS8qIGdldHJlZy5jbWQgKG5hbWUpCSovCisgIHBpY29idWdfY21k cy5nZXRyZWcucmVzcF9kZWxpbSA9ICI6IjsJCS8qIGdldHJlZy5yZXNwX2Rl bGltCSovCisgIHBpY29idWdfY21kcy5kdW1wX3JlZ2lzdGVycyA9ICJyZFxu IjsJCS8qIGR1bXBfcmVnaXN0ZXJzCSovCisgIHBpY29idWdfY21kcy5kdW1w cmVncyA9IHBpY29idWdfZHVtcHJlZ3M7CS8qIGR1bXAgcmVnaXN0ZXJzIHBh cnNlciAqLworICBwaWNvYnVnX2NtZHMubG9hZCA9ICJsb1xuIjsJCQkvKiBk b3dubG9hZCBjb21tYW5kCSovCisgIHBpY29idWdfY21kcy5wcm9tcHQgPSAi cGljb2J1Zz4gIjsJCS8qIG1vbml0b3IgY29tbWFuZCBwcm9tcHQgKi8KKyAg cGljb2J1Z19jbWRzLmxpbmVfdGVybSA9ICJcbiI7CQkvKiBlbmQtb2YtbGlu ZSB0ZXJtaW5hdG9yICovCisgIHBpY29idWdfY21kcy50YXJnZXQgPSAmcGlj b2J1Z19vcHM7CQkvKiB0YXJnZXQgb3BlcmF0aW9ucwkqLworICBwaWNvYnVn X2NtZHMuc3RvcGJpdHMgPSBTRVJJQUxfMV9TVE9QQklUUzsJLyogbnVtYmVy IG9mIHN0b3AgYml0cwkqLworICBwaWNvYnVnX2NtZHMucmVnbmFtZXMgPSBw aWNvYnVnX3JlZ25hbWVzOwkvKiByZWdpc3RlcnMgbmFtZXMJKi8KKyAgcGlj b2J1Z19jbWRzLm51bV9icmVha3BvaW50cyA9IDIwOwkJLyogbnVtYmVyIG9m IGJyZWFrcG9pbnRzICovCisgIHBpY29idWdfY21kcy5tYWdpYyA9IE1PTklU T1JfT1BTX01BR0lDOwkvKiBtYWdpYwkJKi8KK30KKwordm9pZAorX2luaXRp YWxpemVfcGljb2J1Z19yb20gKCkKK3sKKyAgaW50IGk7CisKKyAgLyogSW5p dGlhbGl6ZSBtMzJyIFJldkMgbW9uaXRvciB0YXJnZXQuICAqLworICBpbml0 X3BpY29idWdfY21kcyAoKTsKKyAgaW5pdF9tb25pdG9yX29wcyAoJnBpY29i dWdfb3BzKTsKKyAgcGljb2J1Z19vcHMudG9fc2hvcnRuYW1lID0gInBpY29i dWciOworICBwaWNvYnVnX29wcy50b19sb25nbmFtZSA9ICJwaWNvYnVnIG1v bml0b3IiOworICBwaWNvYnVnX29wcy50b19kb2MgPSAiRGVidWcgdmlhIHRo ZSBwaWNvYnVnIG1vbml0b3IuXG5cCitTcGVjaWZ5IHRoZSBzZXJpYWwgZGV2 aWNlIGl0IGlzIGNvbm5lY3RlZCB0byAoZS5nLiAvZGV2L3R0eWEpLiI7Cisg IHBpY29idWdfb3BzLnRvX29wZW4gPSBwaWNvYnVnX29wZW47CisKKyAgYWRk X3RhcmdldCAoJnBpY29idWdfb3BzKTsKK30KZGlmZiAtdXJOcCAtLWV4Y2x1 ZGUgJyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBIQVNFIC0tZXhjbHVkZSAuc3Zu IC0tZXhjbHVkZSBDVlMgZ2RiL2dkYi9taWNyb2JsYXplLXRkZXAuYyBtYi1n ZGIvZ2RiL21pY3JvYmxhemUtdGRlcC5jCi0tLSBnZGIvZ2RiL21pY3JvYmxh emUtdGRlcC5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAw CisrKyBtYi1nZGIvZ2RiL21pY3JvYmxhemUtdGRlcC5jCTIwMDktMDktMjMg MTA6Mjc6MDguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsODk1IEBACisv KiBUYXJnZXQtZGVwZW5kZW50IGNvZGUgZm9yIFhpbGlueCBNaWNyb0JsYXpl LgorICAgQ29weXJpZ2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK KyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEK KyAgIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpbmNsdWRlICJkZWZzLmgi CisjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorI2luY2x1ZGUgImRpcy1hc20u aCIKKyNpbmNsdWRlICJmcmFtZS5oIgorI2luY2x1ZGUgInRyYWQtZnJhbWUu aCIKKyNpbmNsdWRlICJzeW10YWIuaCIKKyNpbmNsdWRlICJ2YWx1ZS5oIgor I2luY2x1ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgImJyZWFrcG9pbnQuaCIK KyNpbmNsdWRlICJpbmZlcmlvci5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgi CisjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiZnJhbWUuaCIKKyNp bmNsdWRlICJmcmFtZS1iYXNlLmgiCisjaW5jbHVkZSAiZnJhbWUtdW53aW5k LmgiCisjaW5jbHVkZSAiZHdhcmYyLWZyYW1lLmgiCisjaW5jbHVkZSAib3Nh YmkuaCIKKworI2luY2x1ZGUgImdkYl9hc3NlcnQuaCIKKyNpbmNsdWRlICJn ZGJfc3RyaW5nLmgiCisjaW5jbHVkZSAidGFyZ2V0LWRlc2NyaXB0aW9ucy5o IgorCisKKy8qIEZJWE1FIC0gdGhpcyBzaG91bGRuJ3QgYmUgaGVyZSAqLwor I2luY2x1ZGUgIi4uL29wY29kZXMvbWljcm9ibGF6ZS1vcGNtLmgiCisKKyNp bmNsdWRlICJtaWNyb2JsYXplLXRkZXAuaCIKKworZXh0ZXJuIGVudW0gbWlj cm9ibGF6ZV9pbnN0ciBnZXRfaW5zbl9taWNyb2JsYXplIChsb25nLCBiZmRf Ym9vbGVhbiAqLAorCQllbnVtIG1pY3JvYmxhemVfaW5zdHJfdHlwZSAqLCBz aG9ydCAqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1pY3JvYmxhemVfZ2V0 X3RhcmdldF9hZGRyZXNzIChsb25nLCBiZmRfYm9vbGVhbiwgaW50LCBsb25n LCBsb25nLAorCQkJCQkgICAgIGxvbmcsIGJmZF9ib29sZWFuICosIGJmZF9i b29sZWFuICopOworCisMCisvKiBUaGUgcmVnaXN0ZXJzIG9mIHRoZSBYaWxp bnggbWljcm9ibGF6ZSBwcm9jZXNzb3IgKi8KKworc3RhdGljIGNvbnN0IGNo YXIgKm1pY3JvYmxhemVfcmVnaXN0ZXJfbmFtZXNbXSA9Cit7CisgICJyMCIs ICAgInIxIiwgICJyMiIsICAgICJyMyIsICAgInI0IiwgICAicjUiLCAgICJy NiIsICAgInI3IiwKKyAgInI4IiwgICAicjkiLCAgInIxMCIsICAgInIxMSIs ICAicjEyIiwgICJyMTMiLCAgInIxNCIsICAicjE1IiwKKyAgInIxNiIsICAi cjE3IiwgInIxOCIsICAgInIxOSIsICAicjIwIiwgICJyMjEiLCAgInIyMiIs ICAicjIzIiwKKyAgInIyNCIsICAicjI1IiwgInIyNiIsICAgInIyNyIsICAi cjI4IiwgICJyMjkiLCAgInIzMCIsICAicjMxIiwKKyAgInJwYyIsICAicm1z ciIsICJyZWFyIiwgInJlc3IiLCAicmZzciIsICJyYnRyIiwKKyAgInJwdnIw IiwgInJwdnIxIiwgInJwdnIyIiwgInJwdnIzIiwgInJwdnI0IiwgInJwdnI1 IiwgInJwdnI2IiwKKyAgInJwdnI3IiwgInJwdnI4IiwgInJwdnI5IiwgInJw dnIxMCIsICJycHZyMTEiLAorICAicmVkciIsICJycGlkIiwgInJ6cHIiLCAi cnRsYngiLCAicnRsYnN4IiwgInJ0bGJsbyIsICJydGxiaGkiCit9OworCisj ZGVmaW5lIE1JQ1JPQkxBWkVfTlVNX1JFR1MgQVJSQVlfU0laRSAobWljcm9i bGF6ZV9yZWdpc3Rlcl9uYW1lcykKKworI2RlZmluZSBtYl9lcnJvcihtc2cp IGludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5FX18sIF8obXNnKSkK KworZXh0ZXJuIGVudW0gbWljcm9ibGF6ZV9pbnN0ciBtaWNyb2JsYXplX2Rl Y29kZV9pbnNuIChsb25nLCBpbnQgKiwgaW50ICosCisJCQkJCQkgICAgIGlu dCAqLCBpbnQgKik7CisMCitzdGF0aWMgaW50IG1pY3JvYmxhemVfZGVidWcg PSAwOworCitzdGF0aWMgdm9pZAorbWljcm9ibGF6ZV9kdW1wX2luc24gKGNo YXIgKmNvbW1udCwgQ09SRV9BRERSIHBjLCBpbnQgaW5zbikKK3sKKyAgaWYg KG1pY3JvYmxhemVfZGVidWcpCisgICAgeworICAgICAgcHJpbnRmX2ZpbHRl cmVkICgiTUlDUk9CTEFaRTogICVzICUwOHggJTA4eCAiLAorCQkgICAgICAg Y29tbW50LCAodW5zaWduZWQgaW50KSBwYywgKHVuc2lnbmVkIGludCkgaW5z bik7CisgICAgICAvKiBwcmludF9pbnNuX21pY3JvYmxhemUgKHBjLCAmdG1f cHJpbnRfaW5zbl9pbmZvKTsgKi8KKyAgICAgIHByaW50Zl9maWx0ZXJlZCAo IlxuIik7CisgICAgfQorfQorI2RlZmluZSBtaWNyb2JsYXplX2luc25fZGVi dWcoYXJncykgXAorCXsgaWYgKG1pY3JvYmxhemVfZGVidWcpIHByaW50Zl9m aWx0ZXJlZCBhcmdzOyB9CisjZGVmaW5lIG1iX3dhcm4obXNnKSBcCisJIGlm IChtaWNyb2JsYXplX2RlYnVnKSBwcmludGYgKCJtYl93YXJuaW5nOiAlczol ZCAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCBfKG1zZykpCisKKwwKKy8q IFJldHVybiB0aGUgbmFtZSBvZiByZWdpc3RlciBSRUdOVU0uICAqLworCitz dGF0aWMgY29uc3QgY2hhciAqCittaWNyb2JsYXplX3JlZ2lzdGVyX25hbWUg KHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtKQoreworICBp ZiAoKHJlZ251bSA+PSAwKSAmJiAocmVnbnVtIDwgTUlDUk9CTEFaRV9OVU1f UkVHUykpCisgICAgcmV0dXJuIG1pY3JvYmxhemVfcmVnaXN0ZXJfbmFtZXNb cmVnbnVtXTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg dHlwZSAqCittaWNyb2JsYXplX3JlZ2lzdGVyX3R5cGUgKHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtKQoreworICBpZiAocmVnbnVtID09 IE1JQ1JPQkxBWkVfU1BfUkVHTlVNKQorICAgIHJldHVybiBidWlsdGluX3R5 cGUgKGdkYmFyY2gpLT5idWlsdGluX2RhdGFfcHRyOworCisgIGlmIChyZWdu dW0gPT0gTUlDUk9CTEFaRV9QQ19SRUdOVU0pCisgICAgcmV0dXJuIGJ1aWx0 aW5fdHlwZSAoZ2RiYXJjaCktPmJ1aWx0aW5fZnVuY19wdHI7CisKKyAgcmV0 dXJuIGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCktPmJ1aWx0aW5faW50OworfQor CisMCisvKiBGZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gYXQgUEMuICAqLworCit1 bnNpZ25lZCBsb25nCittaWNyb2JsYXplX2ZldGNoX2luc3RydWN0aW9uIChD T1JFX0FERFIgcGMpCit7CisgIGdkYl9ieXRlIGJ1Zls0XTsKKyAgdW5zaWdu ZWQgbG9uZyBpbnNuOworICBpbnQgaTsKKworICAvKiBJZiB3ZSBjYW4ndCBy ZWFkIHRoZSBpbnN0cnVjdGlvbiBhdCBQQywgcmV0dXJuIHplcm8uICAqLwor ICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChwYywgYnVmLCBzaXplb2YgKGJ1 ZikpKQorICAgIHJldHVybiAwOworCisgIGluc24gPSAwOworICBmb3IgKGkg PSAwOyBpIDwgc2l6ZW9mIChidWYpOyBpKyspCisgICAgaW5zbiA9IChpbnNu IDw8IDgpIHwgYnVmW2ldOworICByZXR1cm4gaW5zbjsKK30KKwwKKworc3Rh dGljIENPUkVfQUREUgorbWljcm9ibGF6ZV9wdXNoX2R1bW15X2NvZGUgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgc3AsCisJCQkgICAg Q09SRV9BRERSIGZ1bmNhZGRyLAorCQkJICAgIHN0cnVjdCB2YWx1ZSAqKmFy Z3MsIGludCBuYXJncywKKwkJCSAgICBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlw ZSwKKwkJCSAgICBDT1JFX0FERFIgKnJlYWxfcGMsIENPUkVfQUREUiAqYnBf YWRkciwKKwkJCSBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlKQoreworICBt Yl93YXJuICgicHVzaF9kdW1teV9jb2RlIG5vdCBpbXBsZW1lbnRlZCIpOwor ICByZXR1cm4gc3A7Cit9CisKKworc3RhdGljIENPUkVfQUREUgorbWljcm9i bGF6ZV9wdXNoX2R1bW15X2NhbGwgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNo LCBzdHJ1Y3QgdmFsdWUgKmZ1bmN0aW9uLAorCQkJICAgIHN0cnVjdCByZWdj YWNoZSAqcmVnY2FjaGUsIENPUkVfQUREUiBicF9hZGRyLAorCQkJICAgIGlu dCBuYXJncywgc3RydWN0IHZhbHVlICoqYXJncywgQ09SRV9BRERSIHNwLAor CQkJICAgIGludCBzdHJ1Y3RfcmV0dXJuLCBDT1JFX0FERFIgc3RydWN0X2Fk ZHIpCit7CisgIG1iX3dhcm4gKCJzdG9yZV9hcmd1bWVudHMgbm90IGltcGxl bWVudGVkIik7CisgIHJldHVybiBzcDsKK30KKworLyogUmV0dXJuIGEgcG9p bnRlciB0byBhIHN0cmluZyBvZiBieXRlcyB0aGF0IGVuY29kZSBhIGJyZWFr cG9pbnQKKyAgIGluc3RydWN0aW9uLCBzdG9yZSB0aGUgbGVuZ3RoIG9mIHRo ZSBzdHJpbmcgaW4gKkxFTi4gKi8KKworc3RhdGljIGNvbnN0IGdkYl9ieXRl ICoKK21pY3JvYmxhemVfYnJlYWtwb2ludF9mcm9tX3BjIChzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSICpwYywgaW50ICpsZW4pCit7Cisg IHN0YXRpYyBnZGJfYnl0ZSBicmVha19pbnNuW10gPSBCUkVBS1BPSU5UOwor CisgICpsZW4gPSBzaXplb2YgKGJyZWFrX2luc24pOworICByZXR1cm4gYnJl YWtfaW5zbjsKK30KKwwKKy8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEg ZnJhbWUgY2FjaGUuICAqLworCitzdGF0aWMgc3RydWN0IG1pY3JvYmxhemVf ZnJhbWVfY2FjaGUgKgorbWljcm9ibGF6ZV9hbGxvY19mcmFtZV9jYWNoZSAo dm9pZCkKK3sKKyAgc3RydWN0IG1pY3JvYmxhemVfZnJhbWVfY2FjaGUgKmNh Y2hlOworICBpbnQgaTsKKworICBjYWNoZSA9IEZSQU1FX09CU1RBQ0tfWkFM TE9DIChzdHJ1Y3QgbWljcm9ibGF6ZV9mcmFtZV9jYWNoZSk7CisKKyAgLyog QmFzZSBhZGRyZXNzLiAgKi8KKyAgY2FjaGUtPmJhc2UgPSAwOworICBjYWNo ZS0+cGMgPSAwOworCisgIC8qIEZyYW1lbGVzcyB1bnRpbCBwcm92ZW4gb3Ro ZXJ3aXNlLiAgKi8KKyAgY2FjaGUtPmZyYW1lbGVzc19wID0gMTsKKworICBy ZXR1cm4gY2FjaGU7Cit9CisKKy8qIEZ1bmN0aW9uIHByb2xvZ3VlcyBvbiB0 aGUgWGlsaW54IG1pY3JvYmxhemUgcHJvY2Vzc29ycyBjb25zaXN0IG9mOgor CisgICAtIGFkanVzdG1lbnRzIHRvIHRoZSBzdGFjayBwb2ludGVyIChyMSkg KGFkZGkgcjEsIHIxLCBpbW0pCisgICAtIG1ha2luZyBhIGNvcHkgb2YgcjEg aW50byBhbm90aGVyIHJlZ2lzdGVyIChhICJmcmFtZSIgcG9pbnRlcikKKyAg ICAgKGFkZCByPywgcjEsIHIwKQorICAgLSBzdG9yZSB3b3JkL211bHRpcGxl cyB0aGF0IHVzZSByMSBvciB0aGUgZnJhbWUgcG9pbnRlciBhcyB0aGUKKyAg ICAgYmFzZSBhZGRyZXNzIChzd2kgcj8sIHIxLCBpbW0gT1Igc3dpIHI/LCBm cCwgaW1tKQorCisgICBOb3RlIHRoYXQgbWljcm9ibGF6ZSByZWFsbHkgZG9l c24ndCBoYXZlIGEgcmVhbCBmcmFtZSBwb2ludGVyLgorICAgSW5zdGVhZCwg dGhlIGNvbXBpbGVyIG1heSBjb3B5IHRoZSBTUCBpbnRvIGEgcmVnaXN0ZXIg KHVzdWFsbHkKKyAgIHIxOSkgdG8gYWN0IGFzIGFuIGFyZyBwb2ludGVyLiAg Rm9yIG91ciB0YXJnZXQtZGVwZW5kZW50IHB1cnBvc2VzLAorICAgdGhlIGZy YW1lIGluZm8ncyAiZnJhbWUiIG1lbWJlciB3aWxsIGJlIHRoZSBiZWdpbm5p bmcgb2YgdGhlCisgICBmcmFtZS4gVGhlIFNQIGNvdWxkLCBpbiBmYWN0LCBw b2ludCBiZWxvdyB0aGlzLgorCisgICBUaGUgcHJvbG9ndWUgZW5kcyB3aGVu IGFuIGluc3RydWN0aW9uIGZhaWxzIHRvIG1lZXQgZWl0aGVyIG9mCisgICB0 aGVzZSBjcml0ZXJpYS4gKi8KKworLyogQW5hbHl6ZSB0aGUgcHJvbG9ndWUg dG8gZGV0ZXJtaW5lIHdoZXJlIHJlZ2lzdGVycyBhcmUgc2F2ZWQsCisgICB0 aGUgZW5kIG9mIHRoZSBwcm9sb2d1ZSwgZXRjLiBSZXR1cm4gdGhlIGFkZHJl c3Mgb2YgdGhlIGZpcnN0IGxpbmUKKyAgIG9mICJyZWFsIiBjb2RlIChpLmUu LCB0aGUgZW5kIG9mIHRoZSBwcm9sb2d1ZSkuICovCisKK0NPUkVfQUREUgor bWljcm9ibGF6ZV9hbmFseXplX3Byb2xvZ3VlIChDT1JFX0FERFIgcGMsIENP UkVfQUREUiBjdXJyZW50X3BjLAorCQkJICAgICBzdHJ1Y3QgbWljcm9ibGF6 ZV9mcmFtZV9jYWNoZSAqY2FjaGUpCit7CisgIGNoYXIgKm5hbWU7CisgIENP UkVfQUREUiBmdW5jX2FkZHIsIGZ1bmNfZW5kLCBhZGRyLCBzdG9wLCBwcm9s b2d1ZV9lbmRfYWRkciA9IDA7CisgIHVuc2lnbmVkIGxvbmcgaW5zbjsKKyAg aW50IHJuLCByZCwgcmEsIHJiLCBpbW07CisgIGVudW0gbWljcm9ibGF6ZV9p bnN0ciBvcDsKKyAgaW50IGZsYWdzID0gMDsKKyAgYmZkX2Jvb2xlYW4gc2F2 ZV9oaWRkZW5fcG9pbnRlcl9mb3VuZCA9IEZBTFNFOworICBiZmRfYm9vbGVh biBub25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSBGQUxTRTsKKworICAv KiBwcmludGYoIm1pY3JvYmxhemVfYW5hbHl6ZV9wcm9sb2d1ZSAocGMgPSAw eCU4Ljh4LCAiCisJICAgICJjdXJyZW50X3BjID0gMHglOC44eCwgY2FjaGUg PSAweCU4Ljh4KVxuIiwKKwkgICAgKGludCkgcGMsIChpbnQpIGN1cnJlbnRf cGMsIChpbnQpIGNhY2hlKTsJKi8KKworICAvKiBGaW5kIHRoZSBzdGFydCBv ZiB0aGlzIGZ1bmN0aW9uLiAqLworICBmaW5kX3BjX3BhcnRpYWxfZnVuY3Rp b24gKHBjLCAmbmFtZSwgJmZ1bmNfYWRkciwgJmZ1bmNfZW5kKTsKKyAgaWYg KGZ1bmNfYWRkciA8IHBjKQorICAgIHBjID0gZnVuY19hZGRyOworCisgIGlm IChjdXJyZW50X3BjIDwgcGMpCisgICAgcmV0dXJuIGN1cnJlbnRfcGM7CisK KyAgIC8qIEluaXRpYWxpemUgaW5mbyBhYm91dCBmcmFtZSAqLworICAgY2Fj aGUtPmZyYW1lc2l6ZSA9IDA7CisgICBjYWNoZS0+ZnBfcmVnbnVtID0gTUlD Uk9CTEFaRV9TUF9SRUdOVU07CisgICBjYWNoZS0+ZnJhbWVsZXNzX3AgPSAx OworCisgIC8qIFN0YXJ0IGRlY29kaW5nIHRoZSBwcm9sb2d1ZS4gIFdlIHN0 YXJ0IGJ5IGNoZWNraW5nIHR3byBzcGVjaWFsIGNhc2VzOgorCisgICAgIDEu IFdlJ3JlIGFib3V0IHRvIHJldHVybgorICAgICAyLiBXZSdyZSBhdCB0aGUg Zmlyc3QgaW5zbiBvZiB0aGUgcHJvbG9ndWUuCisKKyAgICAgSWYgd2UncmUg YWJvdXQgdG8gcmV0dXJuLCBvdXIgZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBk ZWFsbG9jYXRlZC4KKyAgICAgSWYgd2UgYXJlIHN0b3BwZWQgYXQgdGhlIGZp cnN0IGluc3RydWN0aW9uIG9mIGEgcHJvbG9ndWUsCisgICAgIHRoZW4gb3Vy IGZyYW1lIGhhcyBub3QgeWV0IGJlZW4gc2V0IHVwLiAqLworCisgIC8qIEdl dCB0aGUgZmlyc3QgaW5zbiBmcm9tIG1lbW9yeSAqLworCisgIGluc24gPSBt aWNyb2JsYXplX2ZldGNoX2luc3RydWN0aW9uIChwYyk7CisgIG9wID0gbWlj cm9ibGF6ZV9kZWNvZGVfaW5zbiAoaW5zbiwgJnJkLCAmcmEsICZyYiwgJmlt bSk7CisKKyAgaWYgKElTX1JFVFVSTihvcCkpCisgICAgcmV0dXJuIHBjOwor CisgIC8qIFN0YXJ0IGF0IGJlZ2lubmluZyBvZiBmdW5jdGlvbiBhbmQgYW5h bHl6ZSB1bnRpbCB3ZSBnZXQgdG8gdGhlCisgICAgIGN1cnJlbnQgcGMsIG9y IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB3aGljaGV2ZXIgaXMgZmlyc3Qu ICovCisgIHN0b3AgPSAoY3VycmVudF9wYyA8IGZ1bmNfZW5kID8gY3VycmVu dF9wYyA6IGZ1bmNfZW5kKTsKKworICBtaWNyb2JsYXplX2luc25fZGVidWco KCJNSUNST0JMQVpFOiBTY2FubmluZyBwcm9sb2d1ZTogbmFtZT0lcywgIgor CQkJICJmdW5jX2FkZHI9MHgleCwgc3RvcD0weCV4XG4iLAorCQkJIG5hbWUs ICh1bnNpZ25lZCBpbnQpIGZ1bmNfYWRkciwKKwkJCSAodW5zaWduZWQgaW50 KSBzdG9wKSk7CisKKyAgZm9yIChhZGRyID0gZnVuY19hZGRyOyBhZGRyIDwg c3RvcDsgYWRkciArPSBJTlNUX1dPUkRfU0laRSkKKyAgICB7CisgICAgICBp bnNuID0gbWljcm9ibGF6ZV9mZXRjaF9pbnN0cnVjdGlvbiAoYWRkcik7Cisg ICAgICBvcCA9IG1pY3JvYmxhemVfZGVjb2RlX2luc24gKGluc24sICZyZCwg JnJhLCAmcmIsICZpbW0pOworICAgICAgbWljcm9ibGF6ZV9kdW1wX2luc24g KCJnb3QgMjogIiwgYWRkciwgaW5zbik7CisKKyAgICAgIC8qIFRoaXMgY29k ZSBpcyB2ZXJ5IHNlbnNpdGl2ZSB0byB3aGF0IGZ1bmN0aW9ucyBhcmUgcHJl c2VudCBpbiB0aGUKKwkgcHJvbG9ndWUuICBJdCBhc3N1bWVzIHRoYXQgdGhl IChhZGRpLCBhZGRpaywgc3dpLCBzdykgY2FuIGJlIHRoZSAKKwkgb25seSBp bnN0cnVjdGlvbnMgaW4gdGhlIHByb2xvZ3VlLiAgKi8KKyAgICAgIGlmIChJ U19VUERBVEVfU1Aob3AsIHJkLCByYSkpCisJeworCSAgbWljcm9ibGF6ZV9p bnNuX2RlYnVnICgKKwkJKCJNSUNST0JMQVpFOiBnb3QgYWRkaSByMSxyMSwl ZDsgY29udG51aW5nXG4iLCBpbW0pKTsKKwkgIGlmIChjYWNoZS0+ZnJhbWVz aXplKQorCSAgICBicmVhazsJLyogYnJlYWsgaWYgZnJhbWVzaXplIGFscmVh ZHkgY29tcHV0ZWQgKi8KKwkgIGNhY2hlLT5mcmFtZXNpemUgPSAtMSAqIGlt bTsgLyogc3RhY2sgZ3Jvd3MgdG93YXJkcyBsb3cgbWVtb3J5ICovCisJICBj YWNoZS0+ZnJhbWVsZXNzX3AgPSAwOyAvKiBGcmFtZSBmb3VuZC4gKi8KKwkg IHNhdmVfaGlkZGVuX3BvaW50ZXJfZm91bmQgPSBGQUxTRTsKKwkgIG5vbl9z dGFja19pbnN0cnVjdGlvbl9mb3VuZCA9IEZBTFNFOworCSAgY29udGludWU7 CisJfQorICAgICAgZWxzZSBpZiAoSVNfU1BJTExfU1Aob3AsIHJkLCByYSkp CisJeworCSAgLyogU3BpbGwgc3RhY2sgcG9pbnRlciAqLworCSAgY2FjaGUt PnJlZ2lzdGVyX29mZnNldHNbcmRdID0gaW1tOyAvKiBTUCBzcGlsbGVkIGJl Zm9yZSB1cGRhdGluZyAqLworCisJICBtaWNyb2JsYXplX2luc25fZGVidWcg KAorCQkoIk1JQ1JPQkxBWkU6IHN3aSByMSByMSAlZCwgY29udGludWluZ1xu IiwgaW1tKSk7CisJICBzYXZlX2hpZGRlbl9wb2ludGVyX2ZvdW5kID0gRkFM U0U7CisJICBpZiAoIWNhY2hlLT5mcmFtZXNpemUpCisJICAgIG5vbl9zdGFj a19pbnN0cnVjdGlvbl9mb3VuZCA9IEZBTFNFOworCSAgY29udGludWU7CisJ fQorICAgICAgZWxzZSBpZiAoSVNfU1BJTExfUkVHKG9wLCByZCwgcmEpKQor CXsKKwkgIC8qIFNwaWxsIHJlZ2lzdGVyICovCisJICBjYWNoZS0+cmVnaXN0 ZXJfb2Zmc2V0c1tyZF0gPSBpbW0gLSBjYWNoZS0+ZnJhbWVzaXplOworCQkv KiByZWcgc3BpbGxlZCBhZnRlciB1cGRhdGluZyAqLworCisJICBtaWNyb2Js YXplX2luc25fZGVidWcgKAorCQkoIk1JQ1JPQkxBWkU6IHN3aSAlZCByMSAl ZCwgY29udGludWluZ1xuIiwgcmQsIGltbSkpOworCSAgc2F2ZV9oaWRkZW5f cG9pbnRlcl9mb3VuZCA9IEZBTFNFOworCSAgaWYgKCFjYWNoZS0+ZnJhbWVz aXplKQorCSAgICBub25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSBGQUxT RTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGVsc2UgaWYgKElTX0FMU09f U1BJTExfUkVHKG9wLCByZCwgcmEsIHJiKSkKKwl7CisJICAvKiBTcGlsbCBy ZWdpc3RlciAqLworCSAgY2FjaGUtPnJlZ2lzdGVyX29mZnNldHNbcmRdID0g MCAtIGNhY2hlLT5mcmFtZXNpemU7CisJCS8qIHJlZyBzcGlsbGVkIGFmdGVy IHVwZGF0aW5nICovCisKKwkgIG1pY3JvYmxhemVfaW5zbl9kZWJ1ZyAoCisJ CSgiTUlDUk9CTEFaRTogc3cgJWQgcjAgcjEsIGNvbnRpbnVpbmdcbiIsIHJk KSk7CisJICBzYXZlX2hpZGRlbl9wb2ludGVyX2ZvdW5kID0gRkFMU0U7CisJ ICBpZiAoIWNhY2hlLT5mcmFtZXNpemUpCisJICAgIG5vbl9zdGFja19pbnN0 cnVjdGlvbl9mb3VuZCA9IEZBTFNFOworCSAgY29udGludWU7CisJfQorICAg ICAgZWxzZSBpZiAoSVNfU0VUVVBfRlAob3AsIHJhLCByYikpCisJeworCSAg LyogV2UgaGF2ZSBhIGZyYW1lIHBvaW50ZXIuICBOb3RlCisJICAgICB0aGUg cmVnaXN0ZXIgd2hpY2ggaXMgYWN0aW5nIGFzIHRoZSBmcmFtZSBwb2ludGVy LiAqLworCSAgZmxhZ3MgfD0gTVlfRlJBTUVfSU5fRlA7CisJICBmbGFncyAm PSB+TVlfRlJBTUVfSU5fU1A7CisJICBjYWNoZS0+ZnBfcmVnbnVtID0gcmQ7 CisJICBtaWNyb2JsYXplX2luc25fZGVidWcgKAorCQkoIk1JQ1JPQkxBWkU6 IEZvdW5kIGEgZnJhbWUgcG9pbnRlcjogciVkXG4iLAorCQkgY2FjaGUtPmZw X3JlZ251bSkpOworCSAgc2F2ZV9oaWRkZW5fcG9pbnRlcl9mb3VuZCA9IEZB TFNFOworCSAgaWYgKCFjYWNoZS0+ZnJhbWVzaXplKQorCSAgICBub25fc3Rh Y2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSBGQUxTRTsKKwkgIGNvbnRpbnVlOwor CX0KKyAgICAgIGVsc2UgaWYgKElTX1NQSUxMX1JFR19GUChvcCwgcmQsIHJh LCBjYWNoZS0+ZnBfcmVnbnVtKSkKKwl7CisJICBjYWNoZS0+cmVnaXN0ZXJf b2Zmc2V0c1tyZF0gPSBpbW0gLSBjYWNoZS0+ZnJhbWVzaXplOworCQkvKiBy ZWcgc3BpbGxlZCBhZnRlciB1cGRhdGluZyAqLworCisJICBtaWNyb2JsYXpl X2luc25fZGVidWcgKAorCQkoIk1JQ1JPQkxBWkU6IHN3aSAlZCAlZCAlZCwg Y29udGludWluZ1xuIiwgcmQsIHJhLCBpbW0pKTsKKwkgIHNhdmVfaGlkZGVu X3BvaW50ZXJfZm91bmQgPSBGQUxTRTsKKwkgIGlmICghY2FjaGUtPmZyYW1l c2l6ZSkKKwkgICAgbm9uX3N0YWNrX2luc3RydWN0aW9uX2ZvdW5kID0gRkFM U0U7CisJICBjb250aW51ZTsKKwl9CisgICAgICBlbHNlIGlmIChJU19TQVZF X0hJRERFTl9QVFIob3AsIHJkLCByYSwgcmIpKQorCXsKKwkgIC8qIElmIHRo ZSBmaXJzdCBhcmd1bWVudCBpcyBhIGhpZGRlbiBwb2ludGVyIHRvIHRoZSBh cmVhIHdoZXJlIHRoZQorCSAgICAgcmV0dXJuIHN0cnVjdHVyZSBpcyB0byBi ZSBzYXZlZCwgdGhlbiBpdCBpcyBzYXZlZCBhcyBwYXJ0IG9mIHRoZQorCSAg ICAgcHJvbG9ndWUgKi8KKworCSAgbWljcm9ibGF6ZV9pbnNuX2RlYnVnICgK KwkJKCJNSUNST0JMQVpFOiBhZGQgJWQgJWQgJWQsIGNvbnRpbnVpbmdcbiIs IHJkLCByYSwgcmIpKTsKKwkgIHNhdmVfaGlkZGVuX3BvaW50ZXJfZm91bmQg PSBUUlVFOworCSAgaWYgKCFjYWNoZS0+ZnJhbWVzaXplKQorCSAgICBub25f c3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSBGQUxTRTsKKwkgIGNvbnRpbnVl OworCX0KKworICAgICAgLyogQXMgYSByZXN1bHQgb2YgdGhlIG1vZGlmaWNh dGlvbiBpbiB0aGUgbmV4dCBzdGVwIHdoZXJlIHdlIGNvbnRpbnVlCisJIHRv IGFuYWx5emUgdGhlIHByb2xvZ3VlIHRpbGwgd2UgcmVhY2ggYSBjb250cm9s IGZsb3cgaW5zdHJ1Y3Rpb24sCisJIHdlIG5lZWQgYW5vdGhlciB2YXJpYWJs ZSB0byBzdG9yZSB3aGVuIGV4YWN0bHkgYSBub24tc3RhY2sKKwkgaW5zdHJ1 Y3Rpb24gd2FzIGVuY291bnRlcmVkLCB3aGljaCBpcyB0aGUgY3VycmVudCBk ZWZpbml0aW9uCisJIG9mIGEgcHJvbG9ndWUuICAqLworICAgICAgaWYgKCFu b25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQpCisJcHJvbG9ndWVfZW5kX2Fk ZHIgPSBhZGRyOworICAgICAgbm9uX3N0YWNrX2luc3RydWN0aW9uX2ZvdW5k ID0gVFJVRTsKKworICAgICAgLyogV2hlbiBvcHRpbWl6YXRpb25zIGFyZSBl bmFibGVkLCBpdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0IHByb2xvZ3VlCisJ IGluc3RydWN0aW9ucyBhcmUgbm90IG1peGVkIGluIHdpdGggb3RoZXIgaW5z dHJ1Y3Rpb25zIGZyb20gdGhlCisJIHByb2dyYW0uIFNvbWUgcHJvZ3JhbXMg c2hvdyB0aGlzIGJlaGF2aW9yIGF0IC1PMi4gVGhpcyBjYW4gYmUKKwkgYXZv aWRlZCBieSBhZGRpbmcgLWZuby1zY2hlZHVsZS1pbnNuczIgc3dpdGNoIGFz IG9mIG5vdyAoZWRrIDguMSkKKwkgSW4gc3VjaCBjYXNlcywgd2Ugc2NhbiB0 aGUgZnVuY3Rpb24gdW50aWwgd2Ugc2VlIHRoZSBmaXJzdCBjb250cm9sCisJ IGluc3RydWN0aW9uLiAgKi8KKworICAgICAgeworCSAgICAgIHVuc2lnbmVk IG9wID0gKHVuc2lnbmVkKWluc24gPj4gMjY7CisKKwkgICAgICBpZiAoIShv cCA9PSAweDI2IHx8IG9wID09IDB4MjcgfHwgb3AgPT0gMHgyZCB8fCBvcCA9 PSAweDJlCisJCSAgfHwgb3AgPT0gMHgyZikpCisJCSAgICAgIC8qIGNvbnRp bnVlIGlmIG5vdCBjb250cm9sIGZsb3cgKGJyYW5jaCwgcmV0dXJuKSAqLwor CQkgICAgICBjb250aW51ZTsKKwkgICAgICBlbHNlIGlmIChvcCA9PSAweDJj KQorCQkgICAgICBjb250aW51ZTsgICAgLyogY29udGludWUgaWYgaW1tICov CisgICAgICB9CisKKyAgICAgIC8qIFRoaXMgaXMgbm90IGEgcHJvbG9ndWUg aW5zbiwgc28gc3RvcCBoZXJlLiAqLworICAgICAgbWljcm9ibGF6ZV9pbnNu X2RlYnVnICgKKwkJKCJtaWNyb2JsYXplOiBpbnNuIGlzIG5vdCBhIHByb2xv Z3VlIGluc24gLS0gZW5kaW5nIHNjYW5cbiIpKTsKKyAgICAgIGJyZWFrOwor ICAgIH0KKworICBtaWNyb2JsYXplX2luc25fZGVidWcgKCgibWljcm9ibGF6 ZTogZG9uZSBhbmFseXppbmcgcHJvbG9ndWVcbiIpKTsKKyAgbWljcm9ibGF6 ZV9pbnNuX2RlYnVnICgoIm1pY3JvYmxhemU6IHByb2xvZ3VlIGVuZCA9IDB4 JXhcbiIsIChpbnQpIGFkZHIpKTsKKworICAvKiBJZiB0aGUgbGFzdCBpbnN0 cnVjdGlvbiB3YXMgYW4gYWRkIHJkLCByNSwgcjAgdGhlbiBkb24ndCBjb3Vu dCBpdCBhcworICAgICBwYXJ0IG9mIHRoZSBwcm9sb2d1ZSAqLworICBpZiAo c2F2ZV9oaWRkZW5fcG9pbnRlcl9mb3VuZCkKKyAgICBwcm9sb2d1ZV9lbmRf YWRkciAtPSBJTlNUX1dPUkRfU0laRTsKKworICByZXR1cm4gcHJvbG9ndWVf ZW5kX2FkZHI7Cit9CisKK3N0YXRpYyBDT1JFX0FERFIKK21pY3JvYmxhemVf dW53aW5kX3BjIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IGZy YW1lX2luZm8gKm5leHRfZnJhbWUpCit7CisgIGdkYl9ieXRlIGJ1Zls0XTsK KyAgQ09SRV9BRERSIHBjOworCisgIGZyYW1lX3Vud2luZF9yZWdpc3RlciAo bmV4dF9mcmFtZSwgTUlDUk9CTEFaRV9QQ19SRUdOVU0sIGJ1Zik7CisgIHBj ID0gZXh0cmFjdF90eXBlZF9hZGRyZXNzIChidWYsIGJ1aWx0aW5fdHlwZSAo Z2RiYXJjaCktPmJ1aWx0aW5fZnVuY19wdHIpOworICAvKiBGb3Igc2VudGlu ZWwgZnJhbWUsIHJldHVybiBhZGRyZXNzIGlzIGFjdHVhbCBQQy4gIEZvciBv dGhlciBmcmFtZXMsCisgICAgIHJldHVybiBhZGRyZXNzIGlzIHBjKzguICBU aGlzIGlzIGEgd29ya2Fyb3VuZCBiZWNhdXNlIGdjYyBkb2VzIG5vdAorICAg ICBnZW5lcmF0ZSBjb3JyZWN0IHJldHVybiBhZGRyZXNzIGluIENJRS4gKi8K KyAgaWYgKGZyYW1lX3JlbGF0aXZlX2xldmVsIChuZXh0X2ZyYW1lKSA+PSAw KQorICAgIHBjICs9IDg7CisgIHJldHVybiBwYzsKK30KKworLyogUmV0dXJu IFBDIG9mIGZpcnN0IHJlYWwgaW5zdHJ1Y3Rpb24gb2YgdGhlIGZ1bmN0aW9u IHN0YXJ0aW5nIGF0CisgICBTVEFSVF9QQy4gICovCisKK0NPUkVfQUREUgor bWljcm9ibGF6ZV9za2lwX3Byb2xvZ3VlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCwgQ09SRV9BRERSIHN0YXJ0X3BjKQoreworICBzdHJ1Y3Qgc3ltdGFi X2FuZF9saW5lIHNhbDsKKyAgQ09SRV9BRERSIGZ1bmNfc3RhcnQsIGZ1bmNf ZW5kLCBvc3RhcnRfcGM7CisgIHN0cnVjdCBtaWNyb2JsYXplX2ZyYW1lX2Nh Y2hlIGNhY2hlOworCisgIC8qIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBtZXRo b2QsIGZpbmQgdGhlIGVuZCBvZiB0aGUgcHJvbG9ndWUgYnkKKyAgICAgdXNp bmcgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gIERlYnVnZ2luZyBpbmZv IGRvZXMgbm90IGFsd2F5cworICAgICBnaXZlIHRoZSByaWdodCBhbnN3ZXIg c2luY2UgcGFyYW1ldGVycyBhcmUgc3RvcmVkIG9uIHN0YWNrIGFmdGVyIHRo aXMuCisgICAgIEFsd2F5cyBhbmFseXplIHRoZSBwcm9sb2d1ZS4gICovCisg IGlmIChmaW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24gKHN0YXJ0X3BjLCBOVUxM LCAmZnVuY19zdGFydCwgJmZ1bmNfZW5kKSkKKyAgICB7CisgICAgICBzYWwg PSBmaW5kX3BjX2xpbmUgKGZ1bmNfc3RhcnQsIDApOworCisgICAgICBpZiAo c2FsLmVuZCA8IGZ1bmNfZW5kCisJICAmJiBzdGFydF9wYyA8PSBzYWwuZW5k KQorCXN0YXJ0X3BjID0gc2FsLmVuZDsKKyAgICB9CisKKyAgb3N0YXJ0X3Bj ID0gbWljcm9ibGF6ZV9hbmFseXplX3Byb2xvZ3VlIChmdW5jX3N0YXJ0LCAw eGZmZmZmZmZmVUwsICZjYWNoZSk7CisKKyAgaWYgKG9zdGFydF9wYyA+IHN0 YXJ0X3BjKQorICAgIHJldHVybiBvc3RhcnRfcGM7CisgIHJldHVybiBzdGFy dF9wYzsKK30KKworLyogTm9ybWFsIGZyYW1lcy4gICovCisKK3N0cnVjdCBt aWNyb2JsYXplX2ZyYW1lX2NhY2hlICoKK21pY3JvYmxhemVfZnJhbWVfY2Fj aGUgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lLCB2b2lkICoqdGhp c19jYWNoZSkKK3sKKyAgc3RydWN0IG1pY3JvYmxhemVfZnJhbWVfY2FjaGUg KmNhY2hlOworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFt ZV9hcmNoIChuZXh0X2ZyYW1lKTsKKyAgQ09SRV9BRERSIGZ1bmMsIHBjLCBm cDsKKyAgaW50IHJuOworCisgIGlmICgqdGhpc19jYWNoZSkKKyAgICByZXR1 cm4gKnRoaXNfY2FjaGU7CisKKyAgY2FjaGUgPSBtaWNyb2JsYXplX2FsbG9j X2ZyYW1lX2NhY2hlICgpOworICAqdGhpc19jYWNoZSA9IGNhY2hlOworICBj YWNoZS0+c2F2ZWRfcmVncyA9IHRyYWRfZnJhbWVfYWxsb2Nfc2F2ZWRfcmVn cyAobmV4dF9mcmFtZSk7CisKKyAgLyogQ2xlYXIgb2Zmc2V0cyB0byBzYXZl ZCByZWdzIGluIGZyYW1lLiAqLworICBmb3IgKHJuID0gMDsgcm4gPCBnZGJh cmNoX251bV9yZWdzIChnZGJhcmNoKTsgcm4rKykKKyAgICBjYWNoZS0+cmVn aXN0ZXJfb2Zmc2V0c1tybl0gPSAtMTsKKworICBmdW5jID0gZ2V0X2ZyYW1l X2Z1bmMgKG5leHRfZnJhbWUpOworCisgIGNhY2hlLT5wYyA9IGdldF9mcmFt ZV9hZGRyZXNzX2luX2Jsb2NrIChuZXh0X2ZyYW1lKTsKKworICByZXR1cm4g Y2FjaGU7Cit9CisKK3N0YXRpYyB2b2lkCittaWNyb2JsYXplX2ZyYW1lX3Ro aXNfaWQgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lLCB2b2lkICoq dGhpc19jYWNoZSwKKwkJICAgICAgIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19p ZCkKK3sKKyAgc3RydWN0IG1pY3JvYmxhemVfZnJhbWVfY2FjaGUgKmNhY2hl ID0KKyAgICBtaWNyb2JsYXplX2ZyYW1lX2NhY2hlIChuZXh0X2ZyYW1lLCB0 aGlzX2NhY2hlKTsKKworICAvKiBUaGlzIG1hcmtzIHRoZSBvdXRlcm1vc3Qg ZnJhbWUuICAqLworICBpZiAoY2FjaGUtPmJhc2UgPT0gMCkKKyAgICByZXR1 cm47CisKKyAgKCp0aGlzX2lkKSA9IGZyYW1lX2lkX2J1aWxkIChjYWNoZS0+ YmFzZSwgY2FjaGUtPnBjKTsKK30KKworc3RhdGljIHN0cnVjdCB2YWx1ZSAq CittaWNyb2JsYXplX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFt ZV9pbmZvICp0aGlzX2ZyYW1lLAorCQkJCSB2b2lkICoqdGhpc19jYWNoZSwg aW50IHJlZ251bSkKK3sKKyAgc3RydWN0IG1pY3JvYmxhemVfZnJhbWVfY2Fj aGUgKmNhY2hlID0KKyAgICBtaWNyb2JsYXplX2ZyYW1lX2NhY2hlICh0aGlz X2ZyYW1lLCB0aGlzX2NhY2hlKTsKKworICAvKiBGSVhNRTogIFJld29yayB0 aGlzIGNvZGUgYW5kIGFkZCBjb21tZW50cy4gKi8KKyAgaWYgKGNhY2hlLT5m cmFtZWxlc3NfcCkKKyAgICB7CisgICAgICBpZiAocmVnbnVtID09IE1JQ1JP QkxBWkVfUENfUkVHTlVNKQorICAgICAgICByZWdudW0gPSAxNTsKKyAgICAg IGlmIChyZWdudW0gPT0gTUlDUk9CTEFaRV9TUF9SRUdOVU0pCisgICAgICAg IHJlZ251bSA9IDE7CisgICAgICByZXR1cm4gdHJhZF9mcmFtZV9nZXRfcHJl dl9yZWdpc3RlciAodGhpc19mcmFtZSwgY2FjaGUtPnNhdmVkX3JlZ3MsIHJl Z251bSk7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIHRyYWRfZnJhbWVf Z2V0X3ByZXZfcmVnaXN0ZXIgKHRoaXNfZnJhbWUsIGNhY2hlLT5zYXZlZF9y ZWdzLAorCQkJCQkgcmVnbnVtKTsKKworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGZyYW1lX3Vud2luZCBtaWNyb2JsYXplX2ZyYW1lX3Vud2luZCA9Cit7 CisgIE5PUk1BTF9GUkFNRSwKKyAgbWljcm9ibGF6ZV9mcmFtZV90aGlzX2lk LAorICBtaWNyb2JsYXplX2ZyYW1lX3ByZXZfcmVnaXN0ZXIsCisgIE5VTEws CisgIGRlZmF1bHRfZnJhbWVfc25pZmZlcgorfTsKKwwKK3N0YXRpYyBDT1JF X0FERFIKK21pY3JvYmxhemVfZnJhbWVfYmFzZV9hZGRyZXNzIChzdHJ1Y3Qg ZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCit7 CisgIHN0cnVjdCBtaWNyb2JsYXplX2ZyYW1lX2NhY2hlICpjYWNoZSA9Cisg ICAgbWljcm9ibGF6ZV9mcmFtZV9jYWNoZSAobmV4dF9mcmFtZSwgdGhpc19j YWNoZSk7CisKKyAgcmV0dXJuIGNhY2hlLT5iYXNlOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGZyYW1lX2Jhc2UgbWljcm9ibGF6ZV9mcmFtZV9iYXNl ID0KK3sKKyAgJm1pY3JvYmxhemVfZnJhbWVfdW53aW5kLAorICBtaWNyb2Js YXplX2ZyYW1lX2Jhc2VfYWRkcmVzcywKKyAgbWljcm9ibGF6ZV9mcmFtZV9i YXNlX2FkZHJlc3MsCisgIG1pY3JvYmxhemVfZnJhbWVfYmFzZV9hZGRyZXNz Cit9OworDAorLyogRXh0cmFjdCBmcm9tIGFuIGFycmF5IFJFR0JVRiBjb250 YWluaW5nIHRoZSAocmF3KSByZWdpc3RlciBzdGF0ZSwgYQorICAgZnVuY3Rp b24gcmV0dXJuIHZhbHVlIG9mIFRZUEUsIGFuZCBjb3B5IHRoYXQgaW50byBW QUxCVUYuICAqLworc3RhdGljIHZvaWQKK21pY3JvYmxhemVfZXh0cmFjdF9y ZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICp0eXBlLCBzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLAorCQkJCSBnZGJfYnl0ZSAqdmFsYnVmKQoreworICBn ZGJfYnl0ZSBidWZbOF07CisKKyAgLyogQ29weSB0aGUgcmV0dXJuIHZhbHVl IChzdGFydGluZykgaW4gUkVUVkFMX1JFR05VTSB0byBWQUxCVUYuICovCisg IHN3aXRjaCAoVFlQRV9MRU5HVEgodHlwZSkpCisgICAgeworICAgICAgY2Fz ZSAxOgkvKiByZXR1cm4gbGFzdCBieXRlIGluIHRoZSByZWdpc3RlciAqLwor CXJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgTUlDUk9CTEFaRV9S RVRWQUxfUkVHTlVNLCBidWYpOworCW1lbWNweSh2YWxidWYsIGJ1ZiArIFJF R0lTVEVSX1NJWkUgLSAxLCAxKTsKKwlyZXR1cm47CisgICAgICBjYXNlIDI6 CS8qIHJldHVybiBsYXN0IDIgYnl0ZXMgaW4gcmVnaXN0ZXIgKi8KKwltZW1j cHkodmFsYnVmLCBidWYgKyBSRUdJU1RFUl9TSVpFIC0gMiwgMik7CisJcmV0 dXJuOworICAgICAgY2FzZSA0OgkvKiBmb3Igc2l6ZXMgNCBvciA4LCBjb3B5 IHRoZSByZXF1aXJlZCBsZW5ndGggKi8KKyAgICAgIGNhc2UgODoKKwlyZWdj YWNoZV9jb29rZWRfcmVhZCAocmVnY2FjaGUsIE1JQ1JPQkxBWkVfUkVUVkFM X1JFR05VTSwgYnVmKTsKKwlyZWdjYWNoZV9jb29rZWRfcmVhZCAocmVnY2Fj aGUsIE1JQ1JPQkxBWkVfUkVUVkFMX1JFR05VTSsxLCBidWYrNCk7CisJbWVt Y3B5ICh2YWxidWYsIGJ1ZiwgVFlQRV9MRU5HVEggKHR5cGUpKTsKKwlyZXR1 cm47CisgICAgICBkZWZhdWx0OgorCXByaW50Zl9maWx0ZXJlZCgiRmF0YWwg ZXJyb3I6IHVuc3VwcG9ydGVkIHJldHVybiB2YWx1ZSBzaXplICIKKwkJCSJy ZXF1ZXN0ZWQgKCVzIEAgJWQpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwor ICAgIH0KK30KKworLyogU3RvcmUgdGhlIHJldHVybiB2YWx1ZSBpbiBWQUxC VUYgKG9mIHR5cGUgVFlQRSkgd2hlcmUgdGhlIGNhbGxlcgorICAgZXhwZWN0 cyB0byBzZWUgaXQuCisKKyAgIEludGVnZXJzIGFyZSBzdG9yZWQgaW4gcjMu CisKKyAgIFZhbHVlcyBsZXNzIHRoYW4gMzIgYml0cyAoc2hvcnQsIGJvb2xl YW4pIGFyZSBzdG9yZWQgaW4gcjIsIHJpZ2h0CisgICBqdXN0aWZpZWQgYW5k IHNpZ24gb3IgemVybyBleHRlbmRlZC4JCUZJWE1FCisKKyAgIExvbmdzIGFy ZSBzdG9yZWQgaW4gcjMgKG1vc3Qgc2lnbmlmaWNhbnQgd29yZCkgYW5kIHI0 IChsZWFzdAorICAgc2lnbmlmaWNhbnQgd29yZCkuCisKKyAgIFNtYWxsIHN0 cnVjdHVyZXMgYXJlIGFsd2F5cyByZXR1cm5lZCBvbiBzdGFjay4KKyovCisK K3N0YXRpYyB2b2lkCittaWNyb2JsYXplX3N0b3JlX3JldHVybl92YWx1ZSAo c3RydWN0IHR5cGUgKnR5cGUsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUs CisJCQkgICAgICAgY29uc3QgZ2RiX2J5dGUgKnZhbGJ1ZikKK3sKKyAgaW50 IGxlbiA9IFRZUEVfTEVOR1RIICh0eXBlKTsKKyAgZ2RiX2J5dGUgYnVmWzhd OworCisgIG1lbXNldCAoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisKKyAgLyog SW50ZWdyYWwgYW5kIHBvaW50ZXIgcmV0dXJuIHZhbHVlcy4gICovCisKKyAg aWYgKGxlbiA+IDQpCisgICAgeworICAgICAgIGdkYl9hc3NlcnQgKGxlbiA9 PSA4KTsKKyAgICAgICBtZW1jcHkgKGJ1ZiwgdmFsYnVmLCA4KTsKKyAgICAg ICByZWdjYWNoZV9jb29rZWRfd3JpdGUgKHJlZ2NhY2hlLCBNSUNST0JMQVpF X1JFVFZBTF9SRUdOVU0rMSwgYnVmICsgNCk7CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgIC8qID8/PyBEbyB3ZSBuZWVkIHRvIGRvIGFueSBzaWdu LWV4dGVuc2lvbiBoZXJlPyAgKi8KKyAgICAgICBtZW1jcHkgKGJ1ZiArIDQg LSBsZW4sIHZhbGJ1ZiwgbGVuKTsKKyAgICB9CisgIHJlZ2NhY2hlX2Nvb2tl ZF93cml0ZSAocmVnY2FjaGUsIE1JQ1JPQkxBWkVfUkVUVkFMX1JFR05VTSwg YnVmKTsKK30KKworc3RhdGljIGVudW0gcmV0dXJuX3ZhbHVlX2NvbnZlbnRp b24KK21pY3JvYmxhemVfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCwgc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwKKwkJCSBzdHJ1Y3Qg dHlwZSAqdHlwZSwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKwkJCSBn ZGJfYnl0ZSAqcmVhZGJ1ZiwgY29uc3QgZ2RiX2J5dGUgKndyaXRlYnVmKQor eworICBpZiAocmVhZGJ1ZikKKyAgICBtaWNyb2JsYXplX2V4dHJhY3RfcmV0 dXJuX3ZhbHVlICh0eXBlLCByZWdjYWNoZSwgcmVhZGJ1Zik7CisgIGlmICh3 cml0ZWJ1ZikKKyAgICBtaWNyb2JsYXplX3N0b3JlX3JldHVybl92YWx1ZSAo dHlwZSwgcmVnY2FjaGUsIHdyaXRlYnVmKTsKKworICByZXR1cm4gUkVUVVJO X1ZBTFVFX1JFR0lTVEVSX0NPTlZFTlRJT047Cit9CisKK3N0YXRpYyBpbnQK K21pY3JvYmxhemVfc3RhYnNfYXJndW1lbnRfaGFzX2FkZHIgKHN0cnVjdCBn ZGJhcmNoICpnZGJhcmNoLCBzdHJ1Y3QgdHlwZSAqdHlwZSkKK3sKKyAgcmV0 dXJuIChUWVBFX0xFTkdUSCAodHlwZSkgPT0gMTYpOwkJLyogRklYTUUgKi8K K30KKwwKK2ludAorbWljcm9ibGF6ZV9jYW5fdXNlX2hhcmR3YXJlX3dhdGNo cG9pbnRzIChlbnVtIGJwdHlwZSB0eXBlLCBpbnQgbGVuLCBpbnQgb3QpCit7 CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAg ICAgIHsKKwljYXNlIGJwX2hhcmR3YXJlX2JyZWFrcG9pbnQ6CisJICBjb3Vu dCA9IDI7CisJICBicmVhazsKKwljYXNlIGJwX3JlYWRfd2F0Y2hwb2ludDoK KwkgIGNvdW50ID0gMTsKKwkgIGJyZWFrOworCWNhc2UgYnBfaGFyZHdhcmVf d2F0Y2hwb2ludDoKKwkgIGNvdW50ID0gMTsKKwkgIGJyZWFrOworCWRlZmF1 bHQ6CisJICBjb3VudCA9IDA7CisgICAgICB9CisgICAgcmV0dXJuIGNvdW50 OworfQorCisvKiBTaW11bGF0ZSBzaW5nbGUtc3RlcCBjYWxscywgc2luY2Ug bWljcm9ibGF6ZSBkb2VzIG5vdCBzdXBwb3J0IAorICAgc2luZ2xlLXN0ZXBw aW5nICovCisKKy8qIHNpbmdsZV9zdGVwKCkgaXMgY2FsbGVkIGp1c3QgYmVm b3JlIHdlIHdhbnQgdG8gcmVzdW1lIHRoZSBpbmZlcmlvciwKKyAgIGlmIHdl IHdhbnQgdG8gc2luZ2xlLXN0ZXAgaXQgYnV0IHRoZXJlIGlzIG5vIGhhcmR3 YXJlIG9yIGtlcm5lbAorICAgc2luZ2xlLXN0ZXAgc3VwcG9ydC4gIFdlIGZp bmQgYWxsIHRoZSBwb3NzaWJsZSB0YXJnZXRzIG9mIHRoZQorICAgY29taW5n IGluc3RydWN0aW9uIGFuZCBicmVha3BvaW50IHRoZW0uCisKKyAgIHNpbmds ZV9zdGVwIGlzIGFsc28gY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIGluZmVyaW9y IHN0b3BzLiAgSWYgd2UgaGFkCisgICBzZXQgdXAgYSBzaW11bGF0ZWQgc2lu Z2xlLXN0ZXAsIHdlIHVuZG8gb3VyIGRhbWFnZS4gICovCisKK2ludAorbWlj cm9ibGF6ZV9zb2Z0d2FyZV9zaW5nbGVfc3RlcCAoc3RydWN0IGZyYW1lX2lu Zm8gKmZyYW1lKQoreworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdl dF9mcmFtZV9hcmNoIChmcmFtZSk7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAg KnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworICBzdHJ1Y3QgcmVn Y2FjaGUgKnJlZ2NhY2hlID0gZ2V0X2N1cnJlbnRfcmVnY2FjaGUgKCk7CisK KyAgLyogU2F2ZSB0aGUgYWRkcmVzcyBhbmQgdGhlIHZhbHVlcyBvZiB0aGUg bmV4dF9wYyBhbmQgdGhlIHRhcmdldCAqLworICBzdGF0aWMgc3RydWN0IHNz dGVwX2JyZWFrcworICB7CisgICAgQ09SRV9BRERSIGFkZHJlc3M7CisgICAg YmZkX2Jvb2xlYW4gdmFsaWQ7CisgIH0gc3RlcGJyZWFrc1syXTsKKworICBD T1JFX0FERFIgcGM7CisgIGxvbmcgaW5zbjsKKyAgZW51bSBtaWNyb2JsYXpl X2luc3RyIG1pbnN0cjsKKyAgYmZkX2Jvb2xlYW4gaXN1bnNpZ25lZG51bTsK KyAgZW51bSBtaWNyb2JsYXplX2luc3RyX3R5cGUgaW5zbl90eXBlOworICBz aG9ydCBkZWxheV9zbG90czsKKyAgaW50IGltbTsKKyAgYmZkX2Jvb2xlYW4g aW1tZm91bmQgPSBGQUxTRTsKKworICAvKiBTZXQgYSBicmVha3BvaW50IGF0 IHRoZSBuZXh0IGluc3RydWN0aW9uICovCisgIC8qIElmIHRoZSBjdXJyZW50 IGluc3RydWN0aW9uIGlzIGFuIGltbSwgc2V0IGl0IGF0IHRoZSBpbnN0IGFm dGVyICovCisgIC8qIElmIHRoZSBpbnN0cnVjdGlvbiBoYXMgYSBkZWxheSBz bG90LCBza2lwIHRoZSBkZWxheSBzbG90ICovCisgIHBjID0gZ2V0X2ZyYW1l X3JlZ2lzdGVyX3Vuc2lnbmVkIChmcmFtZSwgTUlDUk9CTEFaRV9QQ19SRUdO VU0pOworICBpbnNuID0gbWljcm9ibGF6ZV9mZXRjaF9pbnN0cnVjdGlvbiAo cGMpOworICBtaW5zdHIgPSBnZXRfaW5zbl9taWNyb2JsYXplIChpbnNuLCAm aXN1bnNpZ25lZG51bSwgJmluc25fdHlwZSwKKwkJCQkmZGVsYXlfc2xvdHMp OworICBpZiAoaW5zbl90eXBlID09IGltbWVkaWF0ZV9pbnN0KQorICAgIHsK KyAgICAgIGludCByZCwgcmEsIHJiOworICAgICAgaW1tZm91bmQgPSBUUlVF OworICAgICAgbWluc3RyID0gbWljcm9ibGF6ZV9kZWNvZGVfaW5zbiAoaW5z biwgJnJkLCAmcmEsICZyYiwgJmltbSk7CisgICAgICBwYyA9IHBjICsgSU5T VF9XT1JEX1NJWkU7CisgICAgICBpbnNuID0gbWljcm9ibGF6ZV9mZXRjaF9p bnN0cnVjdGlvbiAocGMpOworICAgICAgbWluc3RyID0gZ2V0X2luc25fbWlj cm9ibGF6ZSAoaW5zbiwgJmlzdW5zaWduZWRudW0sICZpbnNuX3R5cGUsCisJ CQkJICAgICZkZWxheV9zbG90cyk7CisgICAgfQorICBzdGVwYnJlYWtzWzBd LmFkZHJlc3MgPSBwYyArIChkZWxheV9zbG90cyAqIElOU1RfV09SRF9TSVpF KSArIElOU1RfV09SRF9TSVpFOworICBpZiAoaW5zbl90eXBlICE9IHJldHVy bl9pbnN0KQorICAgIHsKKyAgICAgIHN0ZXBicmVha3NbMF0udmFsaWQgPSBU UlVFOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHN0ZXBicmVha3Nb MF0udmFsaWQgPSBGQUxTRTsKKyAgICB9CisKKyAgLyogTm93IGNoZWNrIGZv ciBicmFuY2ggb3IgcmV0dXJuIGluc3RydWN0aW9ucyAqLworICBpZiAoaW5z bl90eXBlID09IGJyYW5jaF9pbnN0IHx8IGluc25fdHlwZSA9PSByZXR1cm5f aW5zdCkKKyAgICB7CisgICAgICBpbnQgbGltbTsKKyAgICAgIGludCBscmQs IGxyYSwgbHJiOworICAgICAgVUxPTkdFU1QgcmEsIHJiOworICAgICAgYmZk X2Jvb2xlYW4gdGFyZ2V0dmFsaWQ7CisgICAgICBiZmRfYm9vbGVhbiB1bmNv bmRpdGlvbmFsYnJhbmNoOworICAgICAgbWljcm9ibGF6ZV9kZWNvZGVfaW5z bihpbnNuLCAmbHJkLCAmbHJhLCAmbHJiLCAmbGltbSk7CisgICAgICBpZiAo bHJhID49IDAgJiYgbHJhIDwgZ2RiYXJjaF9udW1fcmVncyAoZ2RiYXJjaCkp CisJcmVnY2FjaGVfY29va2VkX3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCBs cmEsICZyYSk7CisgICAgICBlbHNlCisJcmEgPSAwOworICAgICAgaWYgKGxy YiA+PSAwICYmIGxyYiA8IGdkYmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gpKQor CXJlZ2NhY2hlX2Nvb2tlZF9yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgbHJi LCAmcmIpOworICAgICAgZWxzZQorCXJiID0gMDsKKyAgICAgIHN0ZXBicmVh a3NbMV0uYWRkcmVzcyA9CisJIG1pY3JvYmxhemVfZ2V0X3RhcmdldF9hZGRy ZXNzIChpbnNuLCBpbW1mb3VuZCwgaW1tLCBwYywKKwkJCQkJcmEsIHJiLCAm dGFyZ2V0dmFsaWQsCisJCQkJCSZ1bmNvbmRpdGlvbmFsYnJhbmNoKTsKKyAg ICAgIGlmICh1bmNvbmRpdGlvbmFsYnJhbmNoKQorCS8qIFRoaXMgaXMgYSB1 bmNvbmRpdGlvbmFsIGJyYW5jaDogd2lsbCBub3QgY29tZSB0byB0aGUgbmV4 dCBhZGRyZXNzICovCisJc3RlcGJyZWFrc1swXS52YWxpZCA9IEZBTFNFOwor ICAgICAgaWYgKHRhcmdldHZhbGlkCisJICAmJiAoc3RlcGJyZWFrc1swXS52 YWxpZCA9PSBGQUxTRQorCSAgICAgIHx8IChzdGVwYnJlYWtzWzBdLmFkZHJl c3MgIT0gc3RlcGJyZWFrc1sxXS5hZGRyZXNzKSkKKwkgICYmIChzdGVwYnJl YWtzWzFdLmFkZHJlc3MgIT0gcGMpKQorCXsKKwkgIHN0ZXBicmVha3NbMV0u dmFsaWQgPSBUUlVFOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBzdGVwYnJl YWtzWzFdLnZhbGlkID0gRkFMU0U7CisJfQorICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgICBzdGVwYnJlYWtzWzFdLnZhbGlkID0gRkFMU0U7CisgICAg fQorCisgIC8qIEluc2VydCB0aGUgYnJlYWtwb2ludHMgKi8KKyAgaWYgKHN0 ZXBicmVha3NbMF0udmFsaWQpCisgICAgaW5zZXJ0X3NpbmdsZV9zdGVwX2Jy ZWFrcG9pbnQgKGdkYmFyY2gsICBzdGVwYnJlYWtzWzBdLmFkZHJlc3MpOwor ICBpZiAoc3RlcGJyZWFrc1sxXS52YWxpZCkKKyAgICBpbnNlcnRfc2luZ2xl X3N0ZXBfYnJlYWtwb2ludCAoZ2RiYXJjaCwgIHN0ZXBicmVha3NbMV0uYWRk cmVzcyk7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCittaWNy b2JsYXplX3dyaXRlX3BjIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBD T1JFX0FERFIgcGMpCit7CisgIHJlZ2NhY2hlX2Nvb2tlZF93cml0ZV91bnNp Z25lZCAocmVnY2FjaGUsIE1JQ1JPQkxBWkVfUENfUkVHTlVNLCBwYyk7Cit9 CisMCitzdGF0aWMgaW50IGR3YXJmMl90b19yZWdfbWFwWzc4XSA9Cit7IDAg IC8qIHIwICAqLywgICAxICAvKiByMSAgKi8sICAgMiAgLyogcjIgICovLCAg IDMgIC8qIHIzICAqLywgIC8qICAwLSAzICovCisgIDQgIC8qIHI0ICAqLywg ICA1ICAvKiByNSAgKi8sICAgNiAgLyogcjYgICovLCAgIDcgIC8qIHI3ICAq LywgIC8qICA0LSA3ICovCisgIDggIC8qIHI4ICAqLywgICA5ICAvKiByOSAg Ki8sICAxMCAgLyogcjEwICovLCAgMTEgIC8qIHIxMSAqLywgIC8qICA4LTEx ICovCisgIDEyIC8qIHIxMiAqLywgIDEzICAvKiByMTMgKi8sICAxNCAgLyog cjE0ICovLCAgMTUgIC8qIHIxNSAqLywgIC8qIDEyLTE1ICovCisgIDE2IC8q IHIxNiAqLywgIDE3ICAvKiByMTcgKi8sICAxOCAgLyogcjE4ICovLCAgMTkg IC8qIHIxOSAqLywgIC8qIDE2LTE5ICovCisgIDIwIC8qIHIyMCAqLywgIDIx ICAvKiByMjEgKi8sICAyMiAgLyogcjIyICovLCAgMjMgIC8qIHIyMyAqLywg IC8qIDIwLTIzICovCisgIDI0IC8qIHIyNCAqLywgIDI1ICAvKiByMjUgKi8s ICAyNiAgLyogcjI2ICovLCAgMjcgIC8qIHIyNyAqLywgIC8qIDI0LTI1ICov CisgIDI4IC8qIHIyOCAqLywgIDI5ICAvKiByMjkgKi8sICAzMCAgLyogcjMw ICovLCAgMzEgIC8qIHIzMSAqLywgIC8qIDI4LTMxICovCisgIC0xIC8qICRm MCAqLywgIC0xICAvKiAkZjEgKi8sICAtMSAgLyogJGYyICovLCAgLTEgIC8q ICRmMyAqLywgIC8qIDMyLTM1ICovCisgIC0xIC8qICRmNCAqLywgIC0xICAv KiAkZjUgKi8sICAtMSAgLyogJGY2ICovLCAgLTEgIC8qICRmNyAqLywgIC8q IDM2LTM5ICovCisgIC0xIC8qICRmOCAqLywgIC0xICAvKiAkZjkgKi8sICAt MSAgLyogJGYxMCAqLywgLTEgIC8qICRmMTEgKi8sIC8qIDQwLTQzICovCisg IC0xIC8qICRmMTIgKi8sIC0xICAvKiAkZjEzICovLCAtMSAgLyogJGYxNCAq LywgLTEgIC8qICRmMTUgKi8sIC8qIDQ0LTQ3ICovCisgIC0xIC8qICRmMTYg Ki8sIC0xICAvKiAkZjE3ICovLCAtMSAgLyogJGYxOCAqLywgLTEgIC8qICRm MTkgKi8sIC8qIDQ4LTUxICovCisgIC0xIC8qICRmMjAgKi8sIC0xICAvKiAk ZjIxICovLCAtMSAgLyogJGYyMiAqLywgLTEgIC8qICRmMjMgKi8sIC8qIDUy LTU1ICovCisgIC0xIC8qICRmMjQgKi8sIC0xICAvKiAkZjI1ICovLCAtMSAg LyogJGYyNiAqLywgLTEgIC8qICRmMjcgKi8sIC8qIDU2LTU5ICovCisgIC0x IC8qICRmMjggKi8sIC0xICAvKiAkZjI5ICovLCAtMSAgLyogJGYzMCAqLywg LTEgIC8qICRmMzEgKi8sIC8qIDYwLTYzICovCisgIC0xIC8qIGhpICAgKi8s IC0xICAvKiBsbyAgICovLCAtMSAgLyogYWNjdW0qLywgMzMgIC8qIHJtc3Ig Ki8sIC8qIDY0LTY3ICovCisgIC0xIC8qICRmY2MxKi8sIC0xICAvKiAkZmNj MiovLCAtMSAgLyogJGZjYzMqLywgLTEgIC8qICRmY2M0Ki8sIC8qIDY4LTcx ICovCisgIC0xIC8qICRmY2M1Ki8sIC0xICAvKiAkZmNjNiovLCAtMSAgLyog JGZjYzcqLywgLTEgIC8qICRhcCAgKi8sIC8qIDcyLTc1ICovCisgIC0xIC8q ICRyYXAgKi8sIC0xICAvKiAkZnJwICovCQkJCQkgLyogNzYtNzcgKi8KK307 CisKK3N0YXRpYyBpbnQKK21pY3JvYmxhemVfZHdhcmYyX3JlZ190b19yZWdu dW0gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnKQoreworICBy ZXR1cm4gZHdhcmYyX3RvX3JlZ19tYXBbcmVnXTsKK30KKworc3RhdGljIHN0 cnVjdCBnZGJhcmNoICoKK21pY3JvYmxhemVfZ2RiYXJjaF9pbml0IChzdHJ1 Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFy Y2hlcykKK3sKKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcDsKKyAgc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2g7CisKKyAgLyogSWYgdGhlcmUgaXMgYWxy ZWFkeSBhIGNhbmRpZGF0ZSwgdXNlIGl0LiAgKi8KKyAgYXJjaGVzID0gZ2Ri YXJjaF9saXN0X2xvb2t1cF9ieV9pbmZvIChhcmNoZXMsICZpbmZvKTsKKyAg aWYgKGFyY2hlcyAhPSBOVUxMKQorICAgIHJldHVybiBhcmNoZXMtPmdkYmFy Y2g7CisKKyAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBuZXcgYXJjaGl0 ZWN0dXJlLiAgKi8KKyAgdGRlcCA9IFhNQUxMT0MgKHN0cnVjdCBnZGJhcmNo X3RkZXApOworICBnZGJhcmNoID0gZ2RiYXJjaF9hbGxvYyAoJmluZm8sIHRk ZXApOworCisgIHNldF9nZGJhcmNoX2xvbmdfZG91YmxlX2JpdCAoZ2RiYXJj aCwgMTI4KTsKKyAgLyogc2V0X2dkYmFyY2hfbG9uZ19kb3VibGVfZm9ybWF0 IChnZGJhcmNoLCAmZmxvYXRmb3JtYXRfbWljcm9ibGF6ZV9xdWFkKTsgKi8K KworICBzZXRfZ2RiYXJjaF9udW1fcmVncyAoZ2RiYXJjaCwgTUlDUk9CTEFa RV9OVU1fUkVHUyk7CisgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX25hbWUgKGdk YmFyY2gsIG1pY3JvYmxhemVfcmVnaXN0ZXJfbmFtZSk7CisgIHNldF9nZGJh cmNoX3JlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIG1pY3JvYmxhemVfcmVnaXN0 ZXJfdHlwZSk7CisKKyAgLyogUmVnaXN0ZXIgbnVtYmVycyBvZiB2YXJpb3Vz IGltcG9ydGFudCByZWdpc3RlcnMuICAqLworICBzZXRfZ2RiYXJjaF9zcF9y ZWdudW0gKGdkYmFyY2gsIE1JQ1JPQkxBWkVfU1BfUkVHTlVNKTsgLyogJHNw ICovCisgIHNldF9nZGJhcmNoX3BjX3JlZ251bSAoZ2RiYXJjaCwgTUlDUk9C TEFaRV9QQ19SRUdOVU0pOyAvKiAkcGMgKi8KKworICAvKiBNYXAgRHdhcmYy IHJlZ2lzdGVycyB0byBHREIgcmVnaXN0ZXJzLiAqLworICBzZXRfZ2RiYXJj aF9kd2FyZjJfcmVnX3RvX3JlZ251bSAoZ2RiYXJjaCwgbWljcm9ibGF6ZV9k d2FyZjJfcmVnX3RvX3JlZ251bSk7CisKKyAgLyogQ2FsbCBkdW1teSBjb2Rl LiAgKi8KKyAgc2V0X2dkYmFyY2hfY2FsbF9kdW1teV9sb2NhdGlvbiAoZ2Ri YXJjaCwgT05fU1RBQ0spOworICBzZXRfZ2RiYXJjaF9wdXNoX2R1bW15X2Nv ZGUgKGdkYmFyY2gsIG1pY3JvYmxhemVfcHVzaF9kdW1teV9jb2RlKTsKKyAg c2V0X2dkYmFyY2hfcHVzaF9kdW1teV9jYWxsIChnZGJhcmNoLCBtaWNyb2Js YXplX3B1c2hfZHVtbXlfY2FsbCk7CisKKyAgc2V0X2dkYmFyY2hfcmV0dXJu X3ZhbHVlIChnZGJhcmNoLCBtaWNyb2JsYXplX3JldHVybl92YWx1ZSk7Cisg IHNldF9nZGJhcmNoX3N0YWJzX2FyZ3VtZW50X2hhc19hZGRyCisgICAgKGdk YmFyY2gsIG1pY3JvYmxhemVfc3RhYnNfYXJndW1lbnRfaGFzX2FkZHIpOwor CisgIHNldF9nZGJhcmNoX3NraXBfcHJvbG9ndWUgKGdkYmFyY2gsIG1pY3Jv YmxhemVfc2tpcF9wcm9sb2d1ZSk7CisKKyAgLyogU3RhY2sgZ3Jvd3MgZG93 bndhcmQuICAqLworICBzZXRfZ2RiYXJjaF9pbm5lcl90aGFuIChnZGJhcmNo LCBjb3JlX2FkZHJfbGVzc3RoYW4pOworCisgIHNldF9nZGJhcmNoX2JyZWFr cG9pbnRfZnJvbV9wYyAoZ2RiYXJjaCwgbWljcm9ibGF6ZV9icmVha3BvaW50 X2Zyb21fcGMpOworCisgIHNldF9nZGJhcmNoX2ZyYW1lX2FyZ3Nfc2tpcCAo Z2RiYXJjaCwgOCk7CisKKyAgc2V0X2dkYmFyY2hfcHJpbnRfaW5zbiAoZ2Ri YXJjaCwgcHJpbnRfaW5zbl9taWNyb2JsYXplKTsKKworICBzZXRfZ2RiYXJj aF9zb2Z0d2FyZV9zaW5nbGVfc3RlcCAoZ2RiYXJjaCwgbWljcm9ibGF6ZV9z b2Z0d2FyZV9zaW5nbGVfc3RlcCk7CisgIHNldF9nZGJhcmNoX3dyaXRlX3Bj IChnZGJhcmNoLCBtaWNyb2JsYXplX3dyaXRlX3BjKTsKKworICBzZXRfZ2Ri YXJjaF91bndpbmRfcGMgKGdkYmFyY2gsIG1pY3JvYmxhemVfdW53aW5kX3Bj KTsKKworICBmcmFtZV9iYXNlX3NldF9kZWZhdWx0IChnZGJhcmNoLCAmbWlj cm9ibGF6ZV9mcmFtZV9iYXNlKTsKKworICAvKiBIb29rIGluIEFCSS1zcGVj aWZpYyBvdmVycmlkZXMsIGlmIHRoZXkgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQu ICAqLworICBnZGJhcmNoX2luaXRfb3NhYmkgKGluZm8sIGdkYmFyY2gpOwor CisgIC8qIFVud2luZCB0aGUgZnJhbWUuICovCisgIGR3YXJmMl9hcHBlbmRf dW53aW5kZXJzIChnZGJhcmNoKTsKKyAgZnJhbWVfdW53aW5kX2FwcGVuZF91 bndpbmRlciAoZ2RiYXJjaCwgJm1pY3JvYmxhemVfZnJhbWVfdW53aW5kKTsK KyAgZnJhbWVfYmFzZV9hcHBlbmRfc25pZmZlciAoZ2RiYXJjaCwgZHdhcmYy X2ZyYW1lX2Jhc2Vfc25pZmZlcik7CisKKyAgcmV0dXJuIGdkYmFyY2g7Cit9 CisKK2ludAorbWljcm9ibGF6ZV9mcmFtZV9udW1fYXJnc19wIChzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiYXJjaCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFBy b3ZpZGUgYSBwcm90b3R5cGUgdG8gc2lsZW5jZSAtV21pc3NpbmctcHJvdG90 eXBlcy4gICovCit2b2lkIF9pbml0aWFsaXplX21pY3JvYmxhemVfdGRlcCAo dm9pZCk7CisKK3ZvaWQKK19pbml0aWFsaXplX21pY3JvYmxhemVfdGRlcCAo dm9pZCkKK3sKKyAgcmVnaXN0ZXJfZ2RiYXJjaF9pbml0IChiZmRfYXJjaF9t aWNyb2JsYXplLCBtaWNyb2JsYXplX2dkYmFyY2hfaW5pdCk7CisKKyAgLyog RGVidWcgdGhpcyBmaWxlcyBpbnRlcm5hbHMuICovCisgIGFkZF9zZXRzaG93 X3ppbnRlZ2VyX2NtZCAoIm1pY3JvYmxhemUiLCBjbGFzc19tYWludGVuYW5j ZSwKKwkJCSAgICAmbWljcm9ibGF6ZV9kZWJ1ZywgXygiXAorU2V0IG1pY3Jv YmxhemUgZGVidWdnaW5nLiIpLCBfKCJcCitTaG93IG1pY3JvYmxhemUgZGVi dWdnaW5nLiIpLCBfKCJcCitXaGVuIG5vbi16ZXJvLCBtaWNyb2JsYXplIHNw ZWNpZmljIGRlYnVnZ2luZyBpcyBlbmFibGVkLiIpLAorCQkJICAgIE5VTEws CisJCQkgICAgTlVMTCwgCisJCQkgICAgJnNldGRlYnVnbGlzdCwgJnNob3dk ZWJ1Z2xpc3QpOworCit9CmRpZmYgLXVyTnAgLS1leGNsdWRlICcqLnN3cCcg LS1leGNsdWRlIERFVi1QSEFTRSAtLWV4Y2x1ZGUgLnN2biAtLWV4Y2x1ZGUg Q1ZTIGdkYi9nZGIvbWljcm9ibGF6ZS10ZGVwLmggbWItZ2RiL2dkYi9taWNy b2JsYXplLXRkZXAuaAotLS0gZ2RiL2dkYi9taWNyb2JsYXplLXRkZXAuaAkx OTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgbWItZ2Ri L2dkYi9taWNyb2JsYXplLXRkZXAuaAkyMDA5LTA5LTIxIDE0OjA1OjUwLjAw MDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDE5NyBAQAorLyogVGFyZ2V0LWRl cGVuZGVudCBjb2RlIGZvciBYaWxpbnggTWljcm9CbGF6ZS4KKyAgIENvcHly aWdodCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisg ICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor ICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEKKyAgIDAyMTEwLTEzMDEsIFVTQS4gICov CisKKyNpZm5kZWYgTUlDUk9CTEFaRV9UREVQX0gKKyNkZWZpbmUgTUlDUk9C TEFaRV9UREVQX0ggMQorCisjdW5kZWYgTUlDUk9CTEFaRV9ERUJVRworI2lm ZGVmIE1JQ1JPQkxBWkVfREVCVUcKK2ludCBtaWNyb2JsYXplX2RlYnVnID0g MTsKKyNlbmRpZgorCisvKiBNaWNyb2JsYXplIGFyY2hpdGVjdHVyZS1zcGVj aWZpYyBpbmZvcm1hdGlvbi4gICovCisKK3N0cnVjdCBnZGJhcmNoX3RkZXAK K3sKK307CisKK3N0cnVjdCBtaWNyb2JsYXplX2ZyYW1lX2NhY2hlCit7Cisg IC8qIEJhc2UgYWRkcmVzcy4gICovCisgIENPUkVfQUREUiBiYXNlOworICBD T1JFX0FERFIgcGM7CisKKyAgLyogRG8gd2UgaGF2ZSBhIGZyYW1lPyAgKi8K KyAgaW50IGZyYW1lbGVzc19wOworCisgIC8qIEZyYW1lIHNpemUuICAqLwor ICBpbnQgZnJhbWVzaXplOworCisgIC8qIEZyYW1lIHJlZ2lzdGVyLiAgKi8K KyAgaW50IGZwX3JlZ251bTsKKworICAvKiBPZmZzZXRzIHRvIHNhdmVkIHJl Z2lzdGVycy4gICovCisgIGludCByZWdpc3Rlcl9vZmZzZXRzWzU3XTsJLyog TXVzdCBtYXRjaCBNSUNST0JMQVpFX05VTV9SRUdTLiAgKi8KKworICAvKiBU YWJsZSBvZiBzYXZlZCByZWdpc3RlcnMuICAqLworICBzdHJ1Y3QgdHJhZF9m cmFtZV9zYXZlZF9yZWcgKnNhdmVkX3JlZ3M7Cit9OworCisvKiBSZWdpc3Rl ciBudW1iZXJzLiAgKi8KK2VudW0gbWljcm9ibGF6ZV9yZWdudW0gCit7Cisg IE1JQ1JPQkxBWkVfUjBfUkVHTlVNLAorICBNSUNST0JMQVpFX1IxX1JFR05V TSwgTUlDUk9CTEFaRV9TUF9SRUdOVU0gPSBNSUNST0JMQVpFX1IxX1JFR05V TSwKKyAgTUlDUk9CTEFaRV9SMl9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjNf UkVHTlVNLCBNSUNST0JMQVpFX1JFVFZBTF9SRUdOVU0gPSBNSUNST0JMQVpF X1IzX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SNF9SRUdOVU0sCisgIE1JQ1JP QkxBWkVfUjVfUkVHTlVNLAorICBNSUNST0JMQVpFX1I2X1JFR05VTSwKKyAg TUlDUk9CTEFaRV9SN19SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjhfUkVHTlVN LAorICBNSUNST0JMQVpFX1I5X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMTBf UkVHTlVNLAorICBNSUNST0JMQVpFX1IxMV9SRUdOVU0sCisgIE1JQ1JPQkxB WkVfUjEyX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMTNfUkVHTlVNLAorICBN SUNST0JMQVpFX1IxNF9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjE1X1JFR05V TSwKKyAgTUlDUk9CTEFaRV9SMTZfUkVHTlVNLAorICBNSUNST0JMQVpFX1Ix N19SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjE4X1JFR05VTSwKKyAgTUlDUk9C TEFaRV9SMTlfUkVHTlVNLAorICBNSUNST0JMQVpFX1IyMF9SRUdOVU0sCisg IE1JQ1JPQkxBWkVfUjIxX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMjJfUkVH TlVNLAorICBNSUNST0JMQVpFX1IyM19SRUdOVU0sCisgIE1JQ1JPQkxBWkVf UjI0X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMjVfUkVHTlVNLAorICBNSUNS T0JMQVpFX1IyNl9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjI3X1JFR05VTSwK KyAgTUlDUk9CTEFaRV9SMjhfUkVHTlVNLAorICBNSUNST0JMQVpFX1IyOV9S RUdOVU0sCisgIE1JQ1JPQkxBWkVfUjMwX1JFR05VTSwKKyAgTUlDUk9CTEFa RV9SMzFfUkVHTlVNLAorICBNSUNST0JMQVpFX1BDX1JFR05VTSwKKyAgTUlD Uk9CTEFaRV9NU1JfUkVHTlVNLAorICBNSUNST0JMQVpFX0VBUl9SRUdOVU0s CisgIE1JQ1JPQkxBWkVfRVNSX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9GU1Jf UkVHTlVNLAorICBNSUNST0JMQVpFX0JUUl9SRUdOVU0sCisgIE1JQ1JPQkxB WkVfUFZSMF9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUFZSMV9SRUdOVU0sCisg IE1JQ1JPQkxBWkVfUFZSMl9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUFZSM19S RUdOVU0sCisgIE1JQ1JPQkxBWkVfUFZSNF9SRUdOVU0sCisgIE1JQ1JPQkxB WkVfUFZSNV9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUFZSNl9SRUdOVU0sCisg IE1JQ1JPQkxBWkVfUFZSN19SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUFZSOF9S RUdOVU0sCisgIE1JQ1JPQkxBWkVfUFZSOV9SRUdOVU0sCisgIE1JQ1JPQkxB WkVfUFZSMTBfUkVHTlVNLAorICBNSUNST0JMQVpFX1BWUjExX1JFR05VTSwK KyAgTUlDUk9CTEFaRV9SRURSX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SUElE X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SWlBSX1JFR05VTSwKKyAgTUlDUk9C TEFaRV9SVExCWF9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUlRMQlNYX1JFR05V TSwKKyAgTUlDUk9CTEFaRV9SVExCTE9fUkVHTlVNLAorICBNSUNST0JMQVpF X1JUTEJISV9SRUdOVU0KK307CisKKyNkZWZpbmUgUldTRFBfUkVHTlVNIDEz CisjZGVmaW5lIExJTktfUkVHTlVNIDE1CisjZGVmaW5lIFBSX1JFR05VTSAx NQorI2RlZmluZSBGSVJTVF9BUkdSRUcgNQorI2RlZmluZSBMQVNUX0FSR1JF RyAxMAorI2RlZmluZSBSRVRWQUxfUkVHTlVNIDMKKworLyogQWxsIHJlZ2lz dGVycyBhcmUgMzIgYml0cy4gICovCisjZGVmaW5lIFJFR0lTVEVSX1NJWkUg NAorCisvKiBUaGUgYmFzZSBvZiB0aGUgY3VycmVudCBmcmFtZSBpcyBhY3R1 YWxseSBpbiB0aGUgc3RhY2sgcG9pbnRlci4KKyAgIFRoaXMgaGFwcGVucyB3 aGVuIHRoZXJlIGlzIG5vIGZyYW1lIHBvaW50ZXIgKG1pY3JvYmxhemUgQUJJ IGRvZXMgbm90CisgICByZXF1aXJlIGEgZnJhbWUgcG9pbnRlcikgb3Igd2hl biB3ZSdyZSBzdG9wcGVkIGluIHRoZSBwcm9sb2d1ZSBvcgorICAgZXBpbG9n dWUgaXRzZWxmLiAgSW4gdGhlc2UgY2FzZXMsIG1pY3JvYmxhemVfYW5hbHl6 ZV9wcm9sb2d1ZSB3aWxsIG5lZWQKKyAgIHRvIHVwZGF0ZSBmaS0+ZnJhbWUg YmVmb3JlIHJldHVybmluZyBvciBhbmFseXppbmcgdGhlIHJlZ2lzdGVyCisg ICBzYXZlIGluc3RydWN0aW9ucy4gICovCisjZGVmaW5lIE1ZX0ZSQU1FX0lO X1NQIDB4MQorCisvKiBUaGUgYmFzZSBvZiB0aGUgY3VycmVudCBmcmFtZSBp cyBpbiBhIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIuCisgICBUaGlzIHJlZ2lz dGVyIGlzIG5vdGVkIGluIGZyYW1lX2V4dHJhX2luZm8tPmZwX3JlZ251bS4K KworICAgTm90ZSB0aGF0IHRoZSBleGlzdGFuY2Ugb2YgYW4gRlAgbWlnaHQg YWxzbyBpbmRpY2F0ZSB0aGF0IHRoZQorICAgZnVuY3Rpb24gaGFzIGNhbGxl ZCBhbGxvY2EuICAqLworI2RlZmluZSBNWV9GUkFNRV9JTl9GUCAweDIKKwor LyogVGhpcyBmbGFnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgZnJh bWUgaXMgdGhlIHRvcC1tb3N0CisgICBmcmFtZS4gVGhpcyB0ZWxscyBmcmFt ZSBjaGFpbiBub3QgdG8gYm90aGVyIHRyeWluZyB0byB1bndpbmQKKyAgIGJl eW9uZCB0aGlzIGZyYW1lLiAgKi8KKyNkZWZpbmUgTk9fTU9SRV9GUkFNRVMg MHg0CisKKworLyogSW5zdHJ1Y3Rpb24gbWFjcm9zIHVzZWQgZm9yIGFuYWx5 emluZyB0aGUgcHJvbG9ndWUuICAqLworLyogVGhpcyBzZXQgb2YgaW5zdHJ1 Y3Rpb24gbWFjcm9zIG5lZWQgdG8gYmUgY2hhbmdlZCB3aGVuZXZlciB0aGUK KyAgIHByb2xvZ3VlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgY291bGQg aGF2ZSBtb3JlIGluc3RydWN0aW9ucyBvcgorICAgZGlmZmVyZW50IHR5cGUg b2YgaW5zdHJ1Y3Rpb25zLgorICAgVGhpcyBzZXQgYWxzbyBuZWVkcyB0byBi ZSB2ZXJpZmllZCBpZiBpdCBpcyBjb21wbGV0ZS4gICovCisjZGVmaW5lIElT X1JFVFVSTihvcCkgKG9wID09IHJ0c2QgfHwgb3AgPT0gcnRpZCkKKyNkZWZp bmUgSVNfVVBEQVRFX1NQKG9wLCByZCwgcmEpIFwKKwkoKG9wID09IGFkZGlr IHx8IG9wID09IGFkZGkpICYmIHJkID09IFJFR19TUCAmJiByYSA9PSBSRUdf U1ApCisjZGVmaW5lIElTX1NQSUxMX1NQKG9wLCByZCwgcmEpIFwKKwkoKG9w ID09IHN3aSB8fCBvcCA9PSBzdykgJiYgcmQgPT0gUkVHX1NQICYmIHJhID09 IFJFR19TUCkKKyNkZWZpbmUgSVNfU1BJTExfUkVHKG9wLCByZCwgcmEpIFwK KwkoKG9wID09IHN3aSB8fCBvcCA9PSBzdykgJiYgcmQgIT0gUkVHX1NQICYm IHJhID09IFJFR19TUCkKKy8qIFRoZSBiYXNlIG9mIHRoZSBjdXJyZW50IGZy YW1lIGlzIGFjdHVhbGx5IGluIHRoZSBzdGFjayBwb2ludGVyLgorICAgVGhp cyBoYXBwZW5zIHdoZW4gdGhlcmUgaXMgbm8gZnJhbWUgcG9pbnRlciAobWlj cm9ibGF6ZSBBQkkgZG9lcyBub3QKKyAgIHJlcXVpcmUgYSBmcmFtZSBwb2lu dGVyKSBvciB3aGVuIHdlJ3JlIHN0b3BwZWQgaW4gdGhlIHByb2xvZ3VlIG9y CisgICBlcGlsb2d1ZSBpdHNlbGYuICBJbiB0aGVzZSBjYXNlcywgbWljcm9i bGF6ZV9hbmFseXplX3Byb2xvZ3VlIHdpbGwgbmVlZAorICAgdG8gdXBkYXRl IGZpLT5mcmFtZSBiZWZvcmUgcmV0dXJuaW5nIG9yIGFuYWx5emluZyB0aGUg cmVnaXN0ZXIKKyAgIHNhdmUgaW5zdHJ1Y3Rpb25zLiAgKi8KKyNkZWZpbmUg TVlfRlJBTUVfSU5fU1AgMHgxCisKKy8qIFRoZSBiYXNlIG9mIHRoZSBjdXJy ZW50IGZyYW1lIGlzIGluIGEgZnJhbWUgcG9pbnRlciByZWdpc3Rlci4KKyAg IFRoaXMgcmVnaXN0ZXIgaXMgbm90ZWQgaW4gZnJhbWVfZXh0cmFfaW5mby0+ ZnBfcmVnbnVtLgorCisgICBOb3RlIHRoYXQgdGhlIGV4aXN0YW5jZSBvZiBh biBGUCBtaWdodCBhbHNvIGluZGljYXRlIHRoYXQgdGhlCisgICBmdW5jdGlv biBoYXMgY2FsbGVkIGFsbG9jYS4gICovCisjZGVmaW5lIE1ZX0ZSQU1FX0lO X0ZQIDB4MgorCisvKiBUaGlzIGZsYWcgaXMgc2V0IHRvIGluZGljYXRlIHRo YXQgdGhpcyBmcmFtZSBpcyB0aGUgdG9wLW1vc3QKKyAgIGZyYW1lLiBUaGlz IHRlbGxzIGZyYW1lIGNoYWluIG5vdCB0byBib3RoZXIgdHJ5aW5nIHRvIHVu d2luZAorICAgYmV5b25kIHRoaXMgZnJhbWUuICAqLworI2RlZmluZSBOT19N T1JFX0ZSQU1FUyAweDQKKyNkZWZpbmUgSVNfQUxTT19TUElMTF9SRUcob3As IHJkLCByYSwgcmIpIFwKKwkoKG9wID09IHN3aSB8fCBvcCA9PSBzdykgJiYg cmQgIT0gUkVHX1NQICYmIHJhID09IDAgJiYgcmIgPT0gUkVHX1NQKQorI2Rl ZmluZSBJU19TRVRVUF9GUChvcCwgcmEsIHJiKSBcCisJKChvcCA9PSBhZGQg fHwgb3AgPT0gYWRkaWsgfHwgb3AgPT0gYWRkaykgJiYgcmEgPT0gUkVHX1NQ ICYmIHJiID09IDApCisjZGVmaW5lIElTX1NQSUxMX1JFR19GUChvcCwgcmQs IHJhLCBmcHJlZ251bSkgXAorCSgob3AgPT0gc3dpIHx8IG9wID09IHN3KSAm JiByZCAhPSBSRUdfU1AgJiYgcmEgPT0gZnByZWdudW0gJiYgcmEgIT0gMCkK KyNkZWZpbmUgSVNfU0FWRV9ISURERU5fUFRSKG9wLCByZCwgcmEsIHJiKSBc CisJKChvcCA9PSBhZGQgfHwgb3AgPT0gYWRkaWspICYmIHJhID09IEZJUlNU X0FSR1JFRyAmJiByYiA9PSAwKQorCisvKiBCUkVBS1BPSU5UIGRlZmluZXMg dGhlIGJyZWFrcG9pbnQgdGhhdCBzaG91bGQgYmUgdXNlZC4gICovCisjaWZk ZWYgX19NSUNST0JMQVpFX1VDTElOVVhfXworI2RlZmluZSBCUkVBS1BPSU5U IHsweGI5LCAweGNjLCAweDAwLCAweDYwfQorI2Vsc2UKKyNkZWZpbmUgQlJF QUtQT0lOVCB7MHg5OCwgMHgwYywgMHgwMCwgMHgwMH0KKyNlbmRpZgorCisj ZW5kaWYgLyogbWljcm9ibGF6ZS10ZGVwLmggKi8KZGlmZiAtdXJOcCAtLWV4 Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBIQVNFIC0tZXhjbHVkZSAu c3ZuIC0tZXhjbHVkZSBDVlMgZ2RiL2dkYi9ORVdTIG1iLWdkYi9nZGIvTkVX UwotLS0gZ2RiL2dkYi9ORVdTCTIwMDktMDktMDYgMTA6MTQ6NDIuMDAwMDAw MDAwIC0wNzAwCisrKyBtYi1nZGIvZ2RiL05FV1MJMjAwOS0wOS0yMyAxMDo0 MTo1NS4wMDAwMDAwMDAgLTA3MDAKQEAgLTQ0Miw2ICs0NDIsMTEgQEAgTGF0 dGljZSBNaWNvMzIgICAgICAgICAgICAgICAgICBsbTMyLSoKIHg4NiBESUNP UwkJCWlbMzQ1NjddODYtKi1kaWNvcyoKIHg4Nl82NCBESUNPUwkJICAgICAg ICB4ODZfNjQtKi1kaWNvcyoKIFMrY29yZSAzCQkJc2NvcmUtKi0qCitYaWxp bnggTWljcm9CbGF6ZQkJbWljcm9ibGF6ZS0qLSoKKworKiBOZXcgU2ltdWxh dG9ycworCitYaWxpbnggTWljcm9CbGF6ZQkJbWljcm9ibGF6ZQogCiAqIFRo ZSBHREIgcmVtb3RlIHN0dWIsIGdkYnNlcnZlciwgbm93IHN1cHBvcnRzIHg4 NiBXaW5kb3dzIENFCiAgIChtaW5ndzMyY2UpIGRlYnVnZ2luZy4K --------------000900020103020602020901--