From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3138 invoked by alias); 25 May 2002 21:53:36 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 3127 invoked from network); 25 May 2002 21:53:33 -0000 Received: from unknown (HELO ma103.mailarmory.com) (216.17.222.195) by sources.redhat.com with SMTP; 25 May 2002 21:53:33 -0000 Received: from deimos.frii.net (deimos.frii.com [216.17.128.2]) by ma103.mailarmory.com (8.12.3/8.12.3) with ESMTP id g4PLrWHQ092302 for ; Sat, 25 May 2002 15:53:32 -0600 (MDT) Received: from ari-co11-100.rasserver.net (ari-co11-100.rasserver.net [204.32.196.100]) by deimos.frii.net (8.12.3/8.12.3) with ESMTP id g4PLrFgU008509 for ; Sat, 25 May 2002 15:53:16 -0600 (MDT) Date: Sat, 25 May 2002 19:32:00 -0000 From: "Theodore A. Roth" X-X-Sender: troth@bozoland.mynet To: gdb-patches@sources.redhat.com Subject: [RFA] pull AVR port into gdb-5.2 branch Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-1865518803-1022363935=:29230" X-SW-Source: 2002-05/txt/msg00914.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323328-1865518803-1022363935=:29230 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-length: 674 Howdy, I'd like to apply the attached patch to the gdb-5.2 branch. This is just pulling the AVR port from the main trunk. Is there anything special that I should do instead of applying this patch and then committing the changes to the branch? I looked through the cvs info manual, but it only talks about merging branches onto the main line. It didn't seem obvious to me how to go from main line to branch. Once this patch goes in, I'll make the changes to MAINTAINERS and NEWS on the 5.2 branch separately. Ted Roth * Makefile.in: Add support for AVR target. * configure.tgt: Add support for AVR target. * avr-tdep.c: New file * config/avr/avr.mt: New file. --8323328-1865518803-1022363935=:29230 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="gdb-5.2-avr-0.0.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="gdb-5.2-avr-0.0.patch" Content-length: 64018 CSogTWFrZWZpbGUuaW46IEFkZCBzdXBwb3J0IGZvciBBVlIgdGFyZ2V0Lg0K CSogY29uZmlndXJlLnRndDogQWRkIHN1cHBvcnQgZm9yIEFWUiB0YXJnZXQu DQoJKiBhdnItdGRlcC5jOiBOZXcgZmlsZQ0KCSogY29uZmlnL2F2ci9hdnIu bXQ6IE5ldyBmaWxlLg0KDQpkaWZmIC11ck4gZ2RiLTUuMi9nZGIvTWFrZWZp bGUuaW4gZ2RiLTUuMi1hdnIvZ2RiL01ha2VmaWxlLmluDQotLS0gZ2RiLTUu Mi9nZGIvTWFrZWZpbGUuaW4JTW9uIEZlYiAyNSAxMToxNTo1MiAyMDAyDQor KysgZ2RiLTUuMi1hdnIvZ2RiL01ha2VmaWxlLmluCVR1ZSBBcHIgMzAgMTA6 MzE6MTAgMjAwMg0KQEAgLTExNjksNiArMTE2OSw3IEBADQogCWEyOWstdGRl cC5jIGE2OHYtbmF0LmMgYWxwaGEtbmF0LmMgYWxwaGEtdGRlcC5jIFwNCiAJ YXJtLWxpbnV4LW5hdC5jIGFybS1saW51eC10ZGVwLmMgYXJtLXRkZXAuYyBh cm1uYnNkLW5hdC5jIFwNCiAJYXJtbmJzZC10ZGVwLmMgXA0KKwlhdnItdGRl cC5jIFwNCiAJY29mZi1zb2xpYi5jIFwNCiAJY29yZS1zb2wyLmMgY29yZS1y ZWdzZXQuYyBjb3JlLWFvdXQuYyBjb3JlbG93LmMgXA0KIAlkY2FjaGUuYyBk ZWx0YTY4LW5hdC5jIGRweDItbmF0LmMgZHN0cmVhZC5jIGV4ZWMuYyBmb3Jr LWNoaWxkLmMgXA0KQEAgLTEyNTYsNiArMTI1Nyw5IEBADQogDQogYXJtbmJz ZC10ZGVwLm86IGFybW5ic2QtdGRlcC5jICQoZGVmc19oKSBhcm0tdGRlcC5o DQogDQorYXZyLXRkZXAubzogYXZyLXRkZXAuYyAkKGRlZnNfaCkgJChnZGJj bWRfaCkgJChnZGJjb3JlX2gpICQoaW5mZXJpb3JfaCkgXA0KKwkkKHN5bWZp bGVfaCkgJChyZWdjYWNoZV9oKSAkKGFyY2hfdXRpbHNfaCkNCisNCiBiY2Fj aGUubzogYmNhY2hlLmMgJChiY2FjaGVfaCkgJChkZWZzX2gpDQogDQogYmxv Y2tmcmFtZS5vOiBibG9ja2ZyYW1lLmMgJChkZWZzX2gpICQoZ2RiY29yZV9o KSAkKGluZmVyaW9yX2gpIFwNCmRpZmYgLXVyTiBnZGItNS4yL2dkYi9hdnIt dGRlcC5jIGdkYi01LjItYXZyL2dkYi9hdnItdGRlcC5jDQotLS0gZ2RiLTUu Mi9nZGIvYXZyLXRkZXAuYwlXZWQgRGVjIDMxIDE3OjAwOjAwIDE5NjkNCisr KyBnZGItNS4yLWF2ci9nZGIvYXZyLXRkZXAuYwlUdWUgQXByIDMwIDEwOjMy OjAyIDIwMDINCkBAIC0wLDAgKzEsMTM3NCBAQA0KKy8qIFRhcmdldC1kZXBl bmRlbnQgY29kZSBmb3IgQXRtZWwgQVZSLCBmb3IgR0RCLg0KKyAgIENvcHly aWdodCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAy DQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQorDQorICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLg0KKw0KKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5DQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisg ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uDQorDQorICAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws DQorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl DQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCisNCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlDQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs YWNlIC0gU3VpdGUgMzMwLA0KKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg VVNBLiAgKi8NCisNCisvKiBDb250cmlidXRlZCBieSBUaGVvZG9yZSBBLiBS b3RoLCB0cm90aEB2ZXJpbmV0LmNvbSAqLw0KKw0KKy8qIFBvcnRpb25zIG9m IHRoaXMgZmlsZSB3ZXJlIHRha2VuIGZyb20gdGhlIG9yaWdpbmFsIGdkYi00 LjE4IHBhdGNoIGRldmVsb3BlZA0KKyAgIGJ5IERlbmlzIENoZXJ0eWtvdiwg ZGVuaXNjQG92ZXJ0YS5ydSAqLw0KKw0KKyNpbmNsdWRlICJkZWZzLmgiDQor I2luY2x1ZGUgImdkYmNtZC5oIg0KKyNpbmNsdWRlICJnZGJjb3JlLmgiDQor I2luY2x1ZGUgImluZmVyaW9yLmgiDQorI2luY2x1ZGUgInN5bWZpbGUuaCIN CisjaW5jbHVkZSAiYXJjaC11dGlscy5oIg0KKyNpbmNsdWRlICJyZWdjYWNo ZS5oIg0KKw0KKy8qIEFWUiBCYWNrZ3JvdW5kOg0KKw0KKyAgIChBVlIgbWlj cm9zIGFyZSBwdXJlIEhhcnZhcmQgQXJjaGl0ZWN0dXJlIHByb2Nlc3NvcnMu KQ0KKw0KKyAgIFRoZSBBVlIgZmFtaWx5IG9mIG1pY3JvY29udHJvbGxlcnMg aGF2ZSB0aHJlZSBkaXN0aW5jdGx5IGRpZmZlcmVudCBtZW1vcnkNCisgICBz cGFjZXM6IGZsYXNoLCBzcmFtIGFuZCBlZXByb20uIFRoZSBmbGFzaCBpcyAx NiBiaXRzIHdpZGUgYW5kIGlzIHVzZWQgZm9yDQorICAgdGhlIG1vc3QgcGFy dCB0byBzdG9yZSBwcm9ncmFtIGluc3RydWN0aW9ucy4gVGhlIHNyYW0gaXMg OCBiaXRzIHdpZGUgYW5kIGlzDQorICAgdXNlZCBmb3IgdGhlIHN0YWNrIGFu ZCB0aGUgaGVhcC4gU29tZSBkZXZpY2VzIGxhY2sgc3JhbSBhbmQgc29tZSBj YW4gaGF2ZQ0KKyAgIGFuIGFkZGl0aW9uYWwgZXh0ZXJuYWwgc3JhbSBhZGRl ZCBvbiBhcyBhIHBlcmlwaGVyYWwuDQorDQorICAgVGhlIGVlcHJvbSBpcyA4 IGJpdHMgd2lkZSBhbmQgaXMgdXNlZCB0byBzdG9yZSBkYXRhIHdoZW4gdGhl IGRldmljZSBpcw0KKyAgIHBvd2VyZWQgZG93bi4gRWVwcm9tIGlzIG5vdCBk aXJlY3RseSBhY2Nlc3NpYmxlLCBpdCBjYW4gb25seSBiZSBhY2Nlc3NlZA0K KyAgIHZpYSBpby1yZWdpc3RlcnMgdXNpbmcgYSBzcGVjaWFsIGFsZ29yaXRo bS4gQWNjZXNzaW5nIGVlcHJvbSB2aWEgZ2RiJ3MNCisgICByZW1vdGUgc2Vy aWFsIHByb3RvY29sICgnbScgb3IgJ00nIHBhY2tldHMpIGxvb2tzIGRpZmZp Y3VsdCB0byBkbyBhbmQgaXMNCisgICBub3QgaW5jbHVkZWQgYXQgdGhpcyB0 aW1lLg0KKw0KKyAgIFtUaGUgZWVwcm9tIGNvdWxkIGJlIHJlYWQgbWFudWFs bHkgdmlhIGBgeC9iIDxlYWRkciArIEFWUl9FTUVNX1NUQVJUPicnIG9yDQor ICAgd3JpdHRlbiB1c2luZyBgYHNldCB7dW5zaWduZWQgY2hhcn08ZWFkZHIg KyBBVlJfRU1FTV9TVEFSVD4nJy4gIEZvciB0aGlzIHRvDQorICAgd29yaywg dGhlIHJlbW90ZSB0YXJnZXQgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSBlZXBy b20gYWNjZXNzZXMgYW5kIHBlcmZvcm0NCisgICB0aGUgYWRkcmVzcyB0cmFu c2xhdGlvbi5dDQorDQorICAgQWxsIHRocmVlIG1lbW9yeSBzcGFjZXMgaGF2 ZSBwaHlzaWNhbCBhZGRyZXNzZXMgYmVnaW5uaW5nIGF0IDB4MC4gSW4NCisg ICBhZGRpdGlvbiwgdGhlIGZsYXNoIGlzIGFkZHJlc3NlZCBieSBnY2MvYmlu dXRpbHMvZ2RiIHdpdGggcmVzcGVjdCB0byA4IGJpdA0KKyAgIGJ5dGVzIGlu c3RlYWQgb2YgdGhlIDE2IGJpdCB3aWRlIHdvcmRzIHVzZWQgYnkgdGhlIHJl YWwgZGV2aWNlIGZvciB0aGUNCisgICBQcm9ncmFtIENvdW50ZXIuDQorDQor ICAgSW4gb3JkZXIgZm9yIHJlbW90ZSB0YXJnZXRzIHRvIHdvcmsgY29ycmVj dGx5LCBleHRyYSBiaXRzIG11c3QgYmUgYWRkZWQgdG8NCisgICBhZGRyZXNz ZXMgYmVmb3JlIHRoZXkgYXJlIHNlbmQgdG8gdGhlIHRhcmdldCBvciByZWNl aXZlZCBmcm9tIHRoZSB0YXJnZXQNCisgICB2aWEgdGhlIHJlbW90ZSBzZXJp YWwgcHJvdG9jb2wuIFRoZSBleHRyYSBiaXRzIGFyZSB0aGUgTVNCcyBhbmQg YXJlIHVzZWQgdG8NCisgICBkZWNvZGUgd2hpY2ggbWVtb3J5IHNwYWNlIHRo ZSBhZGRyZXNzIGlzIHJlZmVycmluZyB0by4gKi8NCisNCisjdW5kZWYgWE1B TExPQw0KKyNkZWZpbmUgWE1BTExPQyhUWVBFKSAoKFRZUEUqKSB4bWFsbG9j IChzaXplb2YgKFRZUEUpKSkNCisNCisjdW5kZWYgRVhUUkFDVF9JTlNODQor I2RlZmluZSBFWFRSQUNUX0lOU04oYWRkcikgZXh0cmFjdF91bnNpZ25lZF9p bnRlZ2VyKGFkZHIsMikNCisNCisvKiBDb25zdGFudHM6IHByZWZpeGVkIHdp dGggQVZSXyB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMgKi8NCisNCitl bnVtDQorew0KKyAgQVZSX1JFR19XID0gMjQsDQorICBBVlJfUkVHX1ggPSAy NiwNCisgIEFWUl9SRUdfWSA9IDI4LA0KKyAgQVZSX0ZQX1JFR05VTSA9IDI4 LA0KKyAgQVZSX1JFR19aID0gMzAsDQorDQorICBBVlJfU1JFR19SRUdOVU0g PSAzMiwNCisgIEFWUl9TUF9SRUdOVU0gPSAzMywNCisgIEFWUl9QQ19SRUdO VU0gPSAzNCwNCisNCisgIEFWUl9OVU1fUkVHUyA9IDMyICsgMSAvKlNSRUcq LyArIDEgLypTUCovICsgMSAvKlBDKi8sDQorICBBVlJfTlVNX1JFR19CWVRF UyA9IDMyICsgMSAvKlNSRUcqLyArIDIgLypTUCovICsgNCAvKlBDKi8sDQor DQorICBBVlJfUENfUkVHX0lOREVYID0gMzUsCS8qIGluZGV4IGludG8gYXJy YXkgb2YgcmVnaXN0ZXJzICovDQorDQorICBBVlJfTUFYX1BST0xPR1VFX1NJ WkUgPSA1NiwJLyogYnl0ZXMgKi8NCisNCisgIC8qIENvdW50IG9mIHB1c2hl ZCByZWdpc3RlcnMuIEZyb20gcjIgdG8gcjE3IChpbmNsdXNpdmVseSksIHIy OCwgcjI5ICovDQorICBBVlJfTUFYX1BVU0hFUyA9IDE4LA0KKw0KKyAgLyog TnVtYmVyIG9mIHRoZSBsYXN0IHB1c2hlZCByZWdpc3Rlci4gcjE3IGZvciBj dXJyZW50IGF2ci1nY2MgKi8NCisgIEFWUl9MQVNUX1BVU0hFRF9SRUdOVU0g PSAxNywNCisNCisgIC8qIEZJWE1FOiBUUm90aC8yMDAyLTAxLT8/OiBDYW4g d2Ugc2hpZnQgYWxsIHRoZXNlIG1lbW9yeSBtYXNrcyBsZWZ0IDgNCisgICAg IGJpdHM/IERvIHRoZXNlIGhhdmUgdG8gbWF0Y2ggdGhlIGJmZCB2bWEgdmFs dWVzPy4gSXQgc3VyZSB3b3VsZCBtYWtlDQorICAgICB0aGluZ3MgZWFzaWVy IGluIHRoZSBmdXR1cmUgaWYgdGhleSBkaWRuJ3QgbmVlZCB0byBtYXRjaC4N CisNCisgICAgIE5vdGU6IEkgY2hvc2UgdGhlc2UgdmFsdWVzIHNvIGFzIHRv IGJlIGNvbnNpc3RlbnQgd2l0aCBiZmQgdm1hDQorICAgICBhZGRyZXNzZXMu DQorDQorICAgICBUUm90aC8yMDAyLTA0LTA4OiBUaGVyZSBpcyBhbHJlYWR5 IGEgY29uZmxpY3Qgd2l0aCB2ZXJ5IGxhcmdlIHByb2dyYW1zDQorICAgICBp biB0aGUgbWVnYTEyOC4gVGhlIG1lZ2ExMjggaGFzIDEyOEsgaW5zdHJ1Y3Rp b24gYnl0ZXMgKDY0SyB3b3JkcyksDQorICAgICB0aHVzIHRoZSBNb3N0IFNp Z25pZmljYW50IEJpdCBpcyAweDEwMDAwIHdoaWNoIGdldHMgbWFza2VkIG9m ZiBteQ0KKyAgICAgQVZSX01FTV9NQVNLLg0KKw0KKyAgICAgVGhlIHByb2Js ZW0gbWFuaWZlc3RzIGl0c2VsZiB3aGVuIHRyeWluZyB0byBzZXQgYSBicmVh a3BvaW50IGluIGENCisgICAgIGZ1bmN0aW9uIHdoaWNoIHJlc2lkZXMgaW4g dGhlIHVwcGVyIGhhbGYgb2YgdGhlIGluc3RydWN0aW9uIHNwYWNlIGFuZA0K KyAgICAgdGh1cyByZXF1aXJlcyBhIDE3LWJpdCBhZGRyZXNzLg0KKw0KKyAg ICAgRm9yIG5vdywgSSd2ZSBqdXN0IHJlbW92ZWQgdGhlIEVFUFJPTSBtYXNr IGFuZCBjaGFuZ2VkIEFWUl9NRU1fTUFTSw0KKyAgICAgZnJvbSAweDAwZmYw MDAwIHRvIDB4MDBmMDAwMDAuIEVlcHJvbSBpcyBub3QgYWNjZXNzaWJsZSBm cm9tIGdkYiB5ZXQsDQorICAgICBidXQgY291bGQgYmUgZm9yIHNvbWUgcmVt b3RlIHRhcmdldHMgYnkganVzdCBhZGRpbmcgdGhlIGNvcnJlY3Qgb2Zmc2V0 DQorICAgICB0byB0aGUgYWRkcmVzcyBhbmQgbGV0dGluZyB0aGUgcmVtb3Rl IHRhcmdldCBoYW5kbGUgdGhlIGxvdy1sZXZlbA0KKyAgICAgZGV0YWlscyBv ZiBhY3R1YWxseSBhY2Nlc3NpbmcgdGhlIGVlcHJvbS4gKi8NCisNCisgIEFW Ul9JTUVNX1NUQVJUID0gMHgwMDAwMDAwMCwJLyogSU5TTiBtZW1vcnkgKi8N CisgIEFWUl9TTUVNX1NUQVJUID0gMHgwMDgwMDAwMCwJLyogU1JBTSBtZW1v cnkgKi8NCisjaWYgMQ0KKyAgLyogTm8gZWVwcm9tIG1hc2sgZGVmaW5lZCAq Lw0KKyAgQVZSX01FTV9NQVNLID0gMHgwMGYwMDAwMCwJLyogbWFzayB0byBk ZXRlcm1pbmUgbWVtb3J5IHNwYWNlICovDQorI2Vsc2UNCisgIEFWUl9FTUVN X1NUQVJUID0gMHgwMDgxMDAwMCwJLyogRUVQUk9NIG1lbW9yeSAqLw0KKyAg QVZSX01FTV9NQVNLID0gMHgwMGZmMDAwMCwJLyogbWFzayB0byBkZXRlcm1p bmUgbWVtb3J5IHNwYWNlICovDQorI2VuZGlmDQorfTsNCisNCisvKiBBbnkg ZnVuY3Rpb24gd2l0aCBhIGZyYW1lIGxvb2tzIGxpa2UgdGhpcw0KKyAgIC4u Li4uLi4gICAgPC1TUCBQT0lOVFMgSEVSRQ0KKyAgIExPQ0FMUzEgICAgPC1G UCBQT0lOVFMgSEVSRQ0KKyAgIExPQ0FMUzANCisgICBTQVZFRCBGUA0KKyAg IFNBVkVEIFIzDQorICAgU0FWRUQgUjINCisgICBSRVQgUEMNCisgICBGSVJT VCBBUkcNCisgICBTRUNPTkQgQVJHICovDQorDQorc3RydWN0IGZyYW1lX2V4 dHJhX2luZm8NCit7DQorICBDT1JFX0FERFIgcmV0dXJuX3BjOw0KKyAgQ09S RV9BRERSIGFyZ3NfcG9pbnRlcjsNCisgIGludCBsb2NhbHNfc2l6ZTsNCisg IGludCBmcmFtZXJlZzsNCisgIGludCBmcmFtZXNpemU7DQorICBpbnQgaXNf bWFpbjsNCit9Ow0KKw0KK3N0cnVjdCBnZGJhcmNoX3RkZXANCit7DQorICAv KiBGSVhNRTogVFJvdGg6IGlzIHRoZXJlIGFueXRoaW5nIHRvIHB1dCBoZXJl PyAqLw0KKyAgaW50IGZvbzsNCit9Ow0KKw0KKy8qIExvb2t1cCB0aGUgbmFt ZSBvZiBhIHJlZ2lzdGVyIGdpdmVuIGl0J3MgbnVtYmVyLiAqLw0KKw0KK3N0 YXRpYyBjaGFyICoNCithdnJfcmVnaXN0ZXJfbmFtZSAoaW50IHJlZ251bSkN Cit7DQorICBzdGF0aWMgY2hhciAqcmVnaXN0ZXJfbmFtZXNbXSA9IHsNCisg ICAgInIwIiwgInIxIiwgInIyIiwgInIzIiwgInI0IiwgInI1IiwgInI2Iiwg InI3IiwNCisgICAgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAicjEyIiwg InIxMyIsICJyMTQiLCAicjE1IiwNCisgICAgInIxNiIsICJyMTciLCAicjE4 IiwgInIxOSIsICJyMjAiLCAicjIxIiwgInIyMiIsICJyMjMiLA0KKyAgICAi cjI0IiwgInIyNSIsICJyMjYiLCAicjI3IiwgInIyOCIsICJyMjkiLCAicjMw IiwgInIzMSIsDQorICAgICJTUkVHIiwgIlNQIiwgIlBDIg0KKyAgfTsNCisg IGlmIChyZWdudW0gPCAwKQ0KKyAgICByZXR1cm4gTlVMTDsNCisgIGlmIChy ZWdudW0gPj0gKHNpemVvZiAocmVnaXN0ZXJfbmFtZXMpIC8gc2l6ZW9mICgq cmVnaXN0ZXJfbmFtZXMpKSkNCisgICAgcmV0dXJuIE5VTEw7DQorICByZXR1 cm4gcmVnaXN0ZXJfbmFtZXNbcmVnbnVtXTsNCit9DQorDQorLyogSW5kZXgg d2l0aGluIGByZWdpc3RlcnMnIG9mIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBz cGFjZSBmb3INCisgICByZWdpc3RlciBSRUdOVU0uICAqLw0KKw0KK3N0YXRp YyBpbnQNCithdnJfcmVnaXN0ZXJfYnl0ZSAoaW50IHJlZ251bSkNCit7DQor ICBpZiAocmVnbnVtIDwgQVZSX1BDX1JFR05VTSkNCisgICAgcmV0dXJuIHJl Z251bTsNCisgIGVsc2UNCisgICAgcmV0dXJuIEFWUl9QQ19SRUdfSU5ERVg7 DQorfQ0KKw0KKy8qIE51bWJlciBvZiBieXRlcyBvZiBzdG9yYWdlIGluIHRo ZSBhY3R1YWwgbWFjaGluZSByZXByZXNlbnRhdGlvbiBmb3INCisgICByZWdp c3RlciBSRUdOVU0uICAqLw0KKw0KK3N0YXRpYyBpbnQNCithdnJfcmVnaXN0 ZXJfcmF3X3NpemUgKGludCByZWdudW0pDQorew0KKyAgc3dpdGNoIChyZWdu dW0pDQorICAgIHsNCisgICAgY2FzZSBBVlJfUENfUkVHTlVNOg0KKyAgICAg IHJldHVybiA0Ow0KKyAgICBjYXNlIEFWUl9TUF9SRUdOVU06DQorICAgIGNh c2UgQVZSX0ZQX1JFR05VTToNCisgICAgICByZXR1cm4gMjsNCisgICAgZGVm YXVsdDoNCisgICAgICByZXR1cm4gMTsNCisgICAgfQ0KK30NCisNCisvKiBO dW1iZXIgb2YgYnl0ZXMgb2Ygc3RvcmFnZSBpbiB0aGUgcHJvZ3JhbSdzIHJl cHJlc2VudGF0aW9uDQorICAgZm9yIHJlZ2lzdGVyIE4uICAqLw0KKw0KK3N0 YXRpYyBpbnQNCithdnJfcmVnaXN0ZXJfdmlydHVhbF9zaXplIChpbnQgcmVn bnVtKQ0KK3sNCisgIHJldHVybiBUWVBFX0xFTkdUSCAoUkVHSVNURVJfVklS VFVBTF9UWVBFIChyZWdudW0pKTsNCit9DQorDQorLyogUmV0dXJuIHRoZSBH REIgdHlwZSBvYmplY3QgZm9yIHRoZSAic3RhbmRhcmQiIGRhdGEgdHlwZQ0K KyAgIG9mIGRhdGEgaW4gcmVnaXN0ZXIgTi4gICovDQorDQorc3RhdGljIHN0 cnVjdCB0eXBlICoNCithdnJfcmVnaXN0ZXJfdmlydHVhbF90eXBlIChpbnQg cmVnbnVtKQ0KK3sNCisgIHN3aXRjaCAocmVnbnVtKQ0KKyAgICB7DQorICAg IGNhc2UgQVZSX1BDX1JFR05VTToNCisgICAgICByZXR1cm4gYnVpbHRpbl90 eXBlX3Vuc2lnbmVkX2xvbmc7DQorICAgIGNhc2UgQVZSX1NQX1JFR05VTToN CisgICAgICByZXR1cm4gYnVpbHRpbl90eXBlX3Vuc2lnbmVkX3Nob3J0Ow0K KyAgICBkZWZhdWx0Og0KKyAgICAgIHJldHVybiBidWlsdGluX3R5cGVfdW5z aWduZWRfY2hhcjsNCisgICAgfQ0KK30NCisNCisvKiBJbnN0cnVjdGlvbiBh ZGRyZXNzIGNoZWNrcyBhbmQgY29udmVydGlvbnMuICovDQorDQorc3RhdGlj IENPUkVfQUREUg0KK2F2cl9tYWtlX2lhZGRyIChDT1JFX0FERFIgeCkNCit7 DQorICByZXR1cm4gKCh4KSB8IEFWUl9JTUVNX1NUQVJUKTsNCit9DQorDQor c3RhdGljIGludA0KK2F2cl9pYWRkcl9wIChDT1JFX0FERFIgeCkNCit7DQor ICByZXR1cm4gKCgoeCkgJiBBVlJfTUVNX01BU0spID09IEFWUl9JTUVNX1NU QVJUKTsNCit9DQorDQorLyogRklYTUU6IFRSb3RoOiBSZWFsbHkgbmVlZCB0 byB1c2UgYSBsYXJnZXIgbWFzayBmb3IgaW5zdHJ1Y3Rpb25zLiBTb21lDQor ICAgZGV2aWNlcyBhcmUgYWxyZWFkeSB1cCB0byAxMjhLQnl0ZXMgb2YgZmxh c2ggc3BhY2UuDQorDQorICAgVFJvdGgvMjAwMi0wNC04OiBTZWUgY29tbWVu dCBhYm92ZSB3aGVyZSBBVlJfSU1FTV9TVEFSVCBpcyBkZWZpbmVkLiAqLw0K Kw0KK3N0YXRpYyBDT1JFX0FERFINCithdnJfY29udmVydF9pYWRkcl90b19y YXcgKENPUkVfQUREUiB4KQ0KK3sNCisgIHJldHVybiAoKHgpICYgMHhmZmZm ZmZmZik7DQorfQ0KKw0KKy8qIFNSQU0gYWRkcmVzcyBjaGVja3MgYW5kIGNv bnZlcnRpb25zLiAqLw0KKw0KK3N0YXRpYyBDT1JFX0FERFINCithdnJfbWFr ZV9zYWRkciAoQ09SRV9BRERSIHgpDQorew0KKyAgcmV0dXJuICgoeCkgfCBB VlJfU01FTV9TVEFSVCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCithdnJfc2Fk ZHJfcCAoQ09SRV9BRERSIHgpDQorew0KKyAgcmV0dXJuICgoKHgpICYgQVZS X01FTV9NQVNLKSA9PSBBVlJfU01FTV9TVEFSVCk7DQorfQ0KKw0KK3N0YXRp YyBDT1JFX0FERFINCithdnJfY29udmVydF9zYWRkcl90b19yYXcgKENPUkVf QUREUiB4KQ0KK3sNCisgIHJldHVybiAoKHgpICYgMHhmZmZmZmZmZik7DQor fQ0KKw0KKy8qIEVFUFJPTSBhZGRyZXNzIGNoZWNrcyBhbmQgY29udmVydGlv bnMuIEkgZG9uJ3Qga25vdyBpZiB0aGVzZSB3aWxsIGV2ZXINCisgICBhY3R1 YWxseSBiZSB1c2VkLCBidXQgSSd2ZSBhZGRlZCB0aGVtIGp1c3QgdGhlIHNh bWUuIFRSb3RoICovDQorDQorLyogVFJvdGgvMjAwMi0wNC0wODogQ29tbWVu dGVkIG91dCBmb3Igbm93IHRvIGFsbG93IGZpeCBmb3IgcHJvYmxlbSB3aXRo IGxhcmdlDQorICAgcHJvZ3JhbXMgaW4gdGhlIG1lZ2ExMjguICovDQorDQor LyogIHN0YXRpYyBDT1JFX0FERFIgKi8NCisvKiAgYXZyX21ha2VfZWFkZHIg KENPUkVfQUREUiB4KSAqLw0KKy8qICB7ICovDQorLyogICAgcmV0dXJuICgo eCkgfCBBVlJfRU1FTV9TVEFSVCk7ICovDQorLyogIH0gKi8NCisNCisvKiAg c3RhdGljIGludCAqLw0KKy8qICBhdnJfZWFkZHJfcCAoQ09SRV9BRERSIHgp ICovDQorLyogIHsgKi8NCisvKiAgICByZXR1cm4gKCgoeCkgJiBBVlJfTUVN X01BU0spID09IEFWUl9FTUVNX1NUQVJUKTsgKi8NCisvKiAgfSAqLw0KKw0K Ky8qICBzdGF0aWMgQ09SRV9BRERSICovDQorLyogIGF2cl9jb252ZXJ0X2Vh ZGRyX3RvX3JhdyAoQ09SRV9BRERSIHgpICovDQorLyogIHsgKi8NCisvKiAg ICByZXR1cm4gKCh4KSAmIDB4ZmZmZmZmZmYpOyAqLw0KKy8qICB9ICovDQor DQorLyogQ29udmVydCBmcm9tIGFkZHJlc3MgdG8gcG9pbnRlciBhbmQgdmlj ZS12ZXJzYS4gKi8NCisNCitzdGF0aWMgdm9pZA0KK2F2cl9hZGRyZXNzX3Rv X3BvaW50ZXIgKHN0cnVjdCB0eXBlICp0eXBlLCB2b2lkICpidWYsIENPUkVf QUREUiBhZGRyKQ0KK3sNCisgIC8qIElzIGl0IGEgY29kZSBhZGRyZXNzPyAg Ki8NCisgIGlmIChUWVBFX0NPREUgKFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUp KSA9PSBUWVBFX0NPREVfRlVOQw0KKyAgICAgIHx8IFRZUEVfQ09ERSAoVFlQ RV9UQVJHRVRfVFlQRSAodHlwZSkpID09IFRZUEVfQ09ERV9NRVRIT0QpDQor ICAgIHsNCisgICAgICBzdG9yZV91bnNpZ25lZF9pbnRlZ2VyIChidWYsIFRZ UEVfTEVOR1RIICh0eXBlKSwNCisJCQkgICAgICBhdnJfY29udmVydF9pYWRk cl90b19yYXcgKGFkZHIpKTsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7DQor ICAgICAgLyogU3RyaXAgb2ZmIGFueSB1cHBlciBzZWdtZW50IGJpdHMuICAq Lw0KKyAgICAgIHN0b3JlX3Vuc2lnbmVkX2ludGVnZXIgKGJ1ZiwgVFlQRV9M RU5HVEggKHR5cGUpLA0KKwkJCSAgICAgIGF2cl9jb252ZXJ0X3NhZGRyX3Rv X3JhdyAoYWRkcikpOw0KKyAgICB9DQorfQ0KKw0KK3N0YXRpYyBDT1JFX0FE RFINCithdnJfcG9pbnRlcl90b19hZGRyZXNzIChzdHJ1Y3QgdHlwZSAqdHlw ZSwgdm9pZCAqYnVmKQ0KK3sNCisgIENPUkVfQUREUiBhZGRyID0gZXh0cmFj dF9hZGRyZXNzIChidWYsIFRZUEVfTEVOR1RIICh0eXBlKSk7DQorDQorICBp ZiAoVFlQRV9DT0RFX1NQQUNFIChUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSkp DQorICAgIHsNCisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRl cnIsICJDT0RFX1NQQUNFIC0tLS0+PiBwdHItPmFkZHI6IDB4JWx4XG4iLA0K KwkJCSAgYWRkcik7DQorICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkZXJyLA0KKwkJCSAgIisrKyBJZiB5b3Ugc2VlIHRoaXMsIHBsZWFzZSBz ZW5kIG1lIGFuIGVtYWlsIDx0cm90aEB2ZXJpbmV0LmNvbT5cbiIpOw0KKyAg ICB9DQorDQorICAvKiBJcyBpdCBhIGNvZGUgYWRkcmVzcz8gICovDQorICBp ZiAoVFlQRV9DT0RFIChUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSkgPT0gVFlQ RV9DT0RFX0ZVTkMNCisgICAgICB8fCBUWVBFX0NPREUgKFRZUEVfVEFSR0VU X1RZUEUgKHR5cGUpKSA9PSBUWVBFX0NPREVfTUVUSE9EDQorICAgICAgfHwg VFlQRV9DT0RFX1NQQUNFIChUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSkpDQor ICAgIHJldHVybiBhdnJfbWFrZV9pYWRkciAoYWRkcik7DQorICBlbHNlDQor ICAgIHJldHVybiBhdnJfbWFrZV9zYWRkciAoYWRkcik7DQorfQ0KKw0KK3N0 YXRpYyBDT1JFX0FERFINCithdnJfcmVhZF9wYyAocHRpZF90IHB0aWQpDQor ew0KKyAgcHRpZF90IHNhdmVfcHRpZDsNCisgIENPUkVfQUREUiBwYzsNCisg IENPUkVfQUREUiByZXR2YWw7DQorDQorICBzYXZlX3B0aWQgPSBpbmZlcmlv cl9wdGlkOw0KKyAgaW5mZXJpb3JfcHRpZCA9IHB0aWQ7DQorICBwYyA9IChp bnQpIHJlYWRfcmVnaXN0ZXIgKEFWUl9QQ19SRUdOVU0pOw0KKyAgaW5mZXJp b3JfcHRpZCA9IHNhdmVfcHRpZDsNCisgIHJldHZhbCA9IGF2cl9tYWtlX2lh ZGRyIChwYyk7DQorICByZXR1cm4gcmV0dmFsOw0KK30NCisNCitzdGF0aWMg dm9pZA0KK2F2cl93cml0ZV9wYyAoQ09SRV9BRERSIHZhbCwgcHRpZF90IHB0 aWQpDQorew0KKyAgcHRpZF90IHNhdmVfcHRpZDsNCisNCisgIHNhdmVfcHRp ZCA9IGluZmVyaW9yX3B0aWQ7DQorICBpbmZlcmlvcl9wdGlkID0gcHRpZDsN CisgIHdyaXRlX3JlZ2lzdGVyIChBVlJfUENfUkVHTlVNLCBhdnJfY29udmVy dF9pYWRkcl90b19yYXcgKHZhbCkpOw0KKyAgaW5mZXJpb3JfcHRpZCA9IHNh dmVfcHRpZDsNCit9DQorDQorc3RhdGljIENPUkVfQUREUg0KK2F2cl9yZWFk X3NwICh2b2lkKQ0KK3sNCisgIHJldHVybiAoYXZyX21ha2Vfc2FkZHIgKHJl YWRfcmVnaXN0ZXIgKEFWUl9TUF9SRUdOVU0pKSk7DQorfQ0KKw0KK3N0YXRp YyB2b2lkDQorYXZyX3dyaXRlX3NwIChDT1JFX0FERFIgdmFsKQ0KK3sNCisg IHdyaXRlX3JlZ2lzdGVyIChBVlJfU1BfUkVHTlVNLCBhdnJfY29udmVydF9z YWRkcl90b19yYXcgKHZhbCkpOw0KK30NCisNCitzdGF0aWMgQ09SRV9BRERS DQorYXZyX3JlYWRfZnAgKHZvaWQpDQorew0KKyAgcmV0dXJuIChhdnJfbWFr ZV9zYWRkciAocmVhZF9yZWdpc3RlciAoQVZSX0ZQX1JFR05VTSkpKTsNCit9 DQorDQorLyogVHJhbnNsYXRlIGEgR0RCIHZpcnR1YWwgQUREUi9MRU4gaW50 byBhIGZvcm1hdCB0aGUgcmVtb3RlIHRhcmdldA0KKyAgIHVuZGVyc3RhbmRz LiAgUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgdHJhbnNm ZXJlZA0KKyAgIHN0YXJ0aW5nIGF0IFRBUkdfQUREUi4gIFJldHVybiBaRVJP IGlmIG5vIGJ5dGVzIGNhbiBiZSB0cmFuc2ZlcmVkDQorICAgKHNlZ21lbnRh dGlvbiBmYXVsdCkuDQorDQorICAgVFJvdGgvMjAwMi0wNC0wODogQ291bGQg dGhpcyBiZSB1c2VkIHRvIGNoZWNrIGZvciBkZXJlZmVyZW5jaW5nIGFuIGlu dmFsaWQNCisgICBwb2ludGVyPyAqLw0KKw0KK3N0YXRpYyB2b2lkDQorYXZy X3JlbW90ZV90cmFuc2xhdGVfeGZlcl9hZGRyZXNzIChDT1JFX0FERFIgbWVt YWRkciwgaW50IG5yX2J5dGVzLA0KKwkJCQkgICBDT1JFX0FERFIgKnRhcmdf YWRkciwgaW50ICp0YXJnX2xlbikNCit7DQorICBsb25nIG91dF9hZGRyOw0K KyAgbG9uZyBvdXRfbGVuOw0KKw0KKyAgLyogRklYTUU6IFRSb3RoOiBEbyBu b3RoaW5nIGZvciBub3cuIFdpbGwgbmVlZCB0byBleGFtaW5lIG1lbWFkZHIg YXQgdGhpcw0KKyAgICAgcG9pbnQgYW5kIHNlZSBpZiB0aGUgaGlnaCBiaXQg YXJlIHNldCB3aXRoIHRoZSBtYXNrcyB0aGF0IHdlIHdhbnQuICovDQorDQor ICAqdGFyZ19hZGRyID0gbWVtYWRkcjsNCisgICp0YXJnX2xlbiA9IG5yX2J5 dGVzOw0KK30NCisNCisvKiBGdW5jdGlvbiBwb2ludGVycyBvYnRhaW5lZCBm cm9tIHRoZSB0YXJnZXQgYXJlIGhhbGYgb2Ygd2hhdCBnZGIgZXhwZWN0cyBz bw0KKyAgIG11bHRpcGx5IGJ5IDIuICovDQorDQorc3RhdGljIENPUkVfQURE Ug0KK2F2cl9jb252ZXJ0X2Zyb21fZnVuY19wdHJfYWRkciAoQ09SRV9BRERS IGFkZHIpDQorew0KKyAgcmV0dXJuIGFkZHIgKiAyOw0KK30NCisNCisvKiBh dnJfc2Nhbl9wcm9sb2d1ZSBpcyBhbHNvIHVzZWQgYXMgdGhlIGZyYW1lX2lu aXRfc2F2ZWRfcmVncygpLg0KKw0KKyAgIFB1dCBoZXJlIHRoZSBjb2RlIHRv IHN0b3JlLCBpbnRvIGZpLT5zYXZlZF9yZWdzLCB0aGUgYWRkcmVzc2VzIG9m DQorICAgdGhlIHNhdmVkIHJlZ2lzdGVycyBvZiBmcmFtZSBkZXNjcmliZWQg YnkgRlJBTUVfSU5GTy4gIFRoaXMNCisgICBpbmNsdWRlcyBzcGVjaWFsIHJl Z2lzdGVycyBzdWNoIGFzIHBjIGFuZCBmcCBzYXZlZCBpbiBzcGVjaWFsIHdh eXMNCisgICBpbiB0aGUgc3RhY2sgZnJhbWUuICBzcCBpcyBldmVuIG1vcmUg c3BlY2lhbDogdGhlIGFkZHJlc3Mgd2UgcmV0dXJuDQorICAgZm9yIGl0IElT IHRoZSBzcCBmb3IgdGhlIG5leHQgZnJhbWUuICovDQorDQorLyogRnVuY3Rp b246IGF2cl9zY2FuX3Byb2xvZ3VlIChoZWxwZXIgZnVuY3Rpb24gZm9yIGF2 cl9pbml0X2V4dHJhX2ZyYW1lX2luZm8pDQorICAgVGhpcyBmdW5jdGlvbiBk ZWNvZGVzIGEgQVZSIGZ1bmN0aW9uIHByb2xvZ3VlIHRvIGRldGVybWluZToN CisgICAgIDEpIHRoZSBzaXplIG9mIHRoZSBzdGFjayBmcmFtZQ0KKyAgICAg Mikgd2hpY2ggcmVnaXN0ZXJzIGFyZSBzYXZlZCBvbiBpdA0KKyAgICAgMykg dGhlIG9mZnNldHMgb2Ygc2F2ZWQgcmVncw0KKyAgIFRoaXMgaW5mb3JtYXRp b24gaXMgc3RvcmVkIGluIHRoZSAiZXh0cmFfaW5mbyIgZmllbGQgb2YgdGhl IGZyYW1lX2luZm8uDQorDQorICAgQSB0eXBpY2FsIEFWUiBmdW5jdGlvbiBw cm9sb2d1ZSBtaWdodCBsb29rIGxpa2UgdGhpczoNCisgICAgICAgIHB1c2gg clhYDQorICAgICAgICBwdXNoIHIyOA0KKyAgICAgICAgcHVzaCByMjkNCisg ICAgICAgIGluIHIyOCxfX1NQX0xfXw0KKyAgICAgICAgaW4gcjI5LF9fU1Bf SF9fDQorICAgICAgICBzYml3IHIyOCw8TE9DQUxTX1NJWkU+DQorICAgICAg ICBpbiBfX3RtcF9yZWdfXyxfX1NSRUdfXw0KKyAgICAgICAgY2xpDQorICAg ICAgICBvdXQgX19TUF9MX18scjI4DQorICAgICAgICBvdXQgX19TUkVHX18s X190bXBfcmVnX18NCisgICAgICAgIG91dCBfX1NQX0hfXyxyMjkNCisNCisg IEEgYC1tY2FsbC1wcm9sb2d1ZXMnIHByb2xvZ3VlIGxvb2sgbGlrZSB0aGlz Og0KKyAgICAgICAgbGRpIHIyNiw8TE9DQUxTX1NJWkU+DQorICAgICAgICBs ZGkgcjI3LDxMT0NBTFNfU0laRT4vMjY1DQorICAgICAgICBsZGkgcjMwLHBt X2xvOCguTF9mb29fYm9keSkNCisgICAgICAgIGxkaSByMzEscG1faGk4KC5M X2Zvb19ib2R5KQ0KKyAgICAgICAgcmptcCBfX3Byb2xvZ3VlX3NhdmVzX18r UlJSDQorICAuTF9mb29fYm9keTogICovDQorDQorc3RhdGljIHZvaWQNCith dnJfc2Nhbl9wcm9sb2d1ZSAoc3RydWN0IGZyYW1lX2luZm8gKmZpKQ0KK3sN CisgIENPUkVfQUREUiBwcm9sb2d1ZV9zdGFydDsNCisgIENPUkVfQUREUiBw cm9sb2d1ZV9lbmQ7DQorICBpbnQgaTsNCisgIHVuc2lnbmVkIHNob3J0IGlu c247DQorICBpbnQgcmVnbm87DQorICBpbnQgc2Nhbl9zdGFnZSA9IDA7DQor ICBjaGFyICpuYW1lOw0KKyAgc3RydWN0IG1pbmltYWxfc3ltYm9sICptc3lt Ym9sOw0KKyAgaW50IHByb2xvZ3VlX2xlbjsNCisgIHVuc2lnbmVkIGNoYXIg cHJvbG9ndWVbQVZSX01BWF9QUk9MT0dVRV9TSVpFXTsNCisgIGludCB2cGMg PSAwOw0KKw0KKyAgZmktPmV4dHJhX2luZm8tPmZyYW1lcmVnID0gQVZSX1NQ X1JFR05VTTsNCisNCisgIGlmIChmaW5kX3BjX3BhcnRpYWxfZnVuY3Rpb24N CisgICAgICAoZmktPnBjLCAmbmFtZSwgJnByb2xvZ3VlX3N0YXJ0LCAmcHJv bG9ndWVfZW5kKSkNCisgICAgew0KKyAgICAgIHN0cnVjdCBzeW10YWJfYW5k X2xpbmUgc2FsID0gZmluZF9wY19saW5lIChwcm9sb2d1ZV9zdGFydCwgMCk7 DQorDQorICAgICAgaWYgKHNhbC5saW5lID09IDApCS8qIG5vIGxpbmUgaW5m bywgdXNlIGN1cnJlbnQgUEMgKi8NCisJcHJvbG9ndWVfZW5kID0gZmktPnBj Ow0KKyAgICAgIGVsc2UgaWYgKHNhbC5lbmQgPCBwcm9sb2d1ZV9lbmQpCS8q IG5leHQgbGluZSBiZWdpbnMgYWZ0ZXIgZm4gZW5kICovDQorCXByb2xvZ3Vl X2VuZCA9IHNhbC5lbmQ7CS8qIChwcm9iYWJseSBtZWFucyBubyBwcm9sb2d1 ZSkgICovDQorICAgIH0NCisgIGVsc2UNCisgICAgLyogV2UncmUgaW4gdGhl IGJvb25kb2NrczogYWxsb3cgZm9yICovDQorICAgIC8qIDE5IHB1c2hlcywg YW4gYWRkLCBhbmQgIm12IGZwLHNwIiAqLw0KKyAgICBwcm9sb2d1ZV9lbmQg PSBwcm9sb2d1ZV9zdGFydCArIEFWUl9NQVhfUFJPTE9HVUVfU0laRTsNCisN CisgIHByb2xvZ3VlX2VuZCA9IG1pbiAocHJvbG9ndWVfZW5kLCBmaS0+cGMp Ow0KKw0KKyAgLyogU2VhcmNoIHRoZSBwcm9sb2d1ZSBsb29raW5nIGZvciBp bnN0cnVjdGlvbnMgdGhhdCBzZXQgdXAgdGhlDQorICAgICBmcmFtZSBwb2lu dGVyLCBhZGp1c3QgdGhlIHN0YWNrIHBvaW50ZXIsIGFuZCBzYXZlIHJlZ2lz dGVycy4gICovDQorDQorICBmaS0+ZXh0cmFfaW5mby0+ZnJhbWVzaXplID0g MDsNCisgIHByb2xvZ3VlX2xlbiA9IHByb2xvZ3VlX2VuZCAtIHByb2xvZ3Vl X3N0YXJ0Ow0KKyAgcmVhZF9tZW1vcnkgKHByb2xvZ3VlX3N0YXJ0LCBwcm9s b2d1ZSwgcHJvbG9ndWVfbGVuKTsNCisNCisgIC8qIFNjYW5uaW5nIG1haW4o KSdzIHByb2xvZ3VlDQorICAgICBsZGkgcjI4LGxvOCg8UkFNX0FERFI+IC0g PExPQ0FMU19TSVpFPikNCisgICAgIGxkaSByMjksaGk4KDxSQU1fQUREUj4g LSA8TE9DQUxTX1NJWkU+KQ0KKyAgICAgb3V0IF9fU1BfSF9fLHIyOQ0KKyAg ICAgb3V0IF9fU1BfTF9fLHIyOCAqLw0KKw0KKyAgaWYgKG5hbWUgJiYgc3Ry Y21wICgibWFpbiIsIG5hbWUpID09IDAgJiYgcHJvbG9ndWVfbGVuID09IDgp DQorICAgIHsNCisgICAgICBDT1JFX0FERFIgbG9jYWxzOw0KKyAgICAgIHVu c2lnbmVkIGNoYXIgaW1nW10gPSB7DQorCTB4ZGUsIDB4YmYsCQkvKiBvdXQg X19TUF9IX18scjI5ICovDQorCTB4Y2QsIDB4YmYJCS8qIG91dCBfX1NQX0xf XyxyMjggKi8NCisgICAgICB9Ow0KKw0KKyAgICAgIGZpLT5leHRyYV9pbmZv LT5mcmFtZXJlZyA9IEFWUl9GUF9SRUdOVU07DQorICAgICAgaW5zbiA9IEVY VFJBQ1RfSU5TTiAoJnByb2xvZ3VlW3ZwY10pOw0KKyAgICAgIC8qIGxkaSBy MjgsbG84KDxSQU1fQUREUj4gLSA8TE9DQUxTX1NJWkU+KSAqLw0KKyAgICAg IGlmICgoaW5zbiAmIDB4ZjBmMCkgPT0gMHhlMGMwKQ0KKwl7DQorCSAgbG9j YWxzID0gKGluc24gJiAweGYpIHwgKChpbnNuICYgMHgwZjAwKSA+PiA0KTsN CisJICBpbnNuID0gRVhUUkFDVF9JTlNOICgmcHJvbG9ndWVbdnBjICsgMl0p Ow0KKwkgIC8qIGxkaSByMjksaGk4KDxSQU1fQUREUj4gLSA8TE9DQUxTX1NJ WkU+KSAqLw0KKwkgIGlmICgoaW5zbiAmIDB4ZjBmMCkgPT0gMHhlMGQwKQ0K KwkgICAgew0KKwkgICAgICBsb2NhbHMgfD0gKChpbnNuICYgMHhmKSB8ICgo aW5zbiAmIDB4MGYwMCkgPj4gNCkpIDw8IDg7DQorCSAgICAgIGlmIChtZW1j bXAgKHByb2xvZ3VlICsgdnBjICsgNCwgaW1nLCBzaXplb2YgKGltZykpID09 IDApDQorCQl7DQorCQkgIGZpLT5mcmFtZSA9IGxvY2FsczsNCisNCisJCSAg LyogVFJvdGg6IERvZXMgLTEgbWVhbiB3ZSdyZSBpbiBtYWluPyAqLw0KKwkJ ICBmaS0+ZXh0cmFfaW5mby0+aXNfbWFpbiA9IDE7DQorCQkgIHJldHVybjsN CisJCX0NCisJICAgIH0NCisJfQ0KKyAgICB9DQorDQorICAvKiBTY2Fubmlu ZyBgLW1jYWxsLXByb2xvZ3VlcycgcHJvbG9ndWUNCisgICAgIEZJWE1FOiBt ZWdhIHByb2xvZ3VlIGhhdmUgYSAxMiBieXRlcyBsb25nICovDQorDQorICB3 aGlsZSAocHJvbG9ndWVfbGVuIDw9IDEyKQkvKiBJJ20gdXNlIHdoaWxlIHRv IGF2b2l0IG1hbnkgZ290bydzICovDQorICAgIHsNCisgICAgICBpbnQgbG9j X3NpemU7DQorICAgICAgaW50IGJvZHlfYWRkcjsNCisgICAgICB1bnNpZ25l ZCBudW1fcHVzaGVzOw0KKw0KKyAgICAgIGluc24gPSBFWFRSQUNUX0lOU04g KCZwcm9sb2d1ZVt2cGNdKTsNCisgICAgICAvKiBsZGkgcjI2LDxMT0NBTFNf U0laRT4gKi8NCisgICAgICBpZiAoKGluc24gJiAweGYwZjApICE9IDB4ZTBh MCkNCisJYnJlYWs7DQorICAgICAgbG9jX3NpemUgPSAoaW5zbiAmIDB4Zikg fCAoKGluc24gJiAweDBmMDApID4+IDQpOw0KKw0KKyAgICAgIGluc24gPSBF WFRSQUNUX0lOU04gKCZwcm9sb2d1ZVt2cGMgKyAyXSk7DQorICAgICAgLyog bGRpIHIyNyw8TE9DQUxTX1NJWkU+IC8gMjU2ICovDQorICAgICAgaWYgKChp bnNuICYgMHhmMGYwKSAhPSAweGUwYjApDQorCWJyZWFrOw0KKyAgICAgIGxv Y19zaXplIHw9ICgoaW5zbiAmIDB4ZikgfCAoKGluc24gJiAweDBmMDApID4+ IDQpKSA8PCA4Ow0KKw0KKyAgICAgIGluc24gPSBFWFRSQUNUX0lOU04gKCZw cm9sb2d1ZVt2cGMgKyA0XSk7DQorICAgICAgLyogbGRpIHIzMCxwbV9sbzgo LkxfZm9vX2JvZHkpICovDQorICAgICAgaWYgKChpbnNuICYgMHhmMGYwKSAh PSAweGUwZTApDQorCWJyZWFrOw0KKyAgICAgIGJvZHlfYWRkciA9IChpbnNu ICYgMHhmKSB8ICgoaW5zbiAmIDB4MGYwMCkgPj4gNCk7DQorDQorICAgICAg aW5zbiA9IEVYVFJBQ1RfSU5TTiAoJnByb2xvZ3VlW3ZwYyArIDZdKTsNCisg ICAgICAvKiBsZGkgcjMxLHBtX2hpOCguTF9mb29fYm9keSkgKi8NCisgICAg ICBpZiAoKGluc24gJiAweGYwZjApICE9IDB4ZTBmMCkNCisJYnJlYWs7DQor ICAgICAgYm9keV9hZGRyIHw9ICgoaW5zbiAmIDB4ZikgfCAoKGluc24gJiAw eDBmMDApID4+IDQpKSA8PCA4Ow0KKw0KKyAgICAgIGlmIChib2R5X2FkZHIg IT0gKHByb2xvZ3VlX3N0YXJ0ICsgMTApIC8gMikNCisJYnJlYWs7DQorDQor ICAgICAgbXN5bWJvbCA9IGxvb2t1cF9taW5pbWFsX3N5bWJvbCAoIl9fcHJv bG9ndWVfc2F2ZXNfXyIsIE5VTEwsIE5VTEwpOw0KKyAgICAgIGlmICghbXN5 bWJvbCkNCisJYnJlYWs7DQorDQorICAgICAgLyogRklYTUU6IHByb2xvZ3Vl IGZvciBtZWdhIGhhdmUgYSBKTVAgaW5zdGVhZCBvZiBSSk1QICovDQorICAg ICAgaW5zbiA9IEVYVFJBQ1RfSU5TTiAoJnByb2xvZ3VlW3ZwYyArIDhdKTsN CisgICAgICAvKiByam1wIF9fcHJvbG9ndWVfc2F2ZXNfXytSUlIgKi8NCisg ICAgICBpZiAoKGluc24gJiAweGYwMDApICE9IDB4YzAwMCkNCisJYnJlYWs7 DQorDQorICAgICAgLyogRXh0cmFjdCBQQyByZWxhdGl2ZSBvZmZzZXQgZnJv bSBSSk1QICovDQorICAgICAgaSA9IChpbnNuICYgMHhmZmYpIHwgKGluc24g JiAweDgwMCA/ICgtMSBeIDB4ZmZmKSA6IDApOw0KKyAgICAgIC8qIENvbnZl cnQgb2Zmc2V0IHRvIGJ5dGUgYWRkcmVzc2FibGUgbW9kZSAqLw0KKyAgICAg IGkgKj0gMjsNCisgICAgICAvKiBEZXN0aW5hdGlvbiBhZGRyZXNzICovDQor ICAgICAgaSArPSB2cGMgKyBwcm9sb2d1ZV9zdGFydCArIDEwOw0KKyAgICAg IC8qIFJlc292bGUgb2Zmc2V0IChpbiB3b3JkcykgZnJvbSBfX3Byb2xvZ3Vl X3NhdmVzX18gc3ltYm9sLg0KKyAgICAgICAgIFdoaWNoIGlzIGEgcHVzaGVz IGNvdW50IGluIGAtbWNhbGwtcHJvbG9ndWVzJyBtb2RlICovDQorICAgICAg bnVtX3B1c2hlcyA9IEFWUl9NQVhfUFVTSEVTIC0gKGkgLSBTWU1CT0xfVkFM VUVfQUREUkVTUyAobXN5bWJvbCkpIC8gMjsNCisNCisgICAgICBpZiAobnVt X3B1c2hlcyA+IEFWUl9NQVhfUFVTSEVTKQ0KKwludW1fcHVzaGVzID0gMDsN CisNCisgICAgICBpZiAobnVtX3B1c2hlcykNCisJew0KKwkgIGludCBmcm9t Ow0KKwkgIGZpLT5zYXZlZF9yZWdzW0FWUl9GUF9SRUdOVU0gKyAxXSA9IG51 bV9wdXNoZXM7DQorCSAgaWYgKG51bV9wdXNoZXMgPj0gMikNCisJICAgIGZp LT5zYXZlZF9yZWdzW0FWUl9GUF9SRUdOVU1dID0gbnVtX3B1c2hlcyAtIDE7 DQorCSAgaSA9IDA7DQorCSAgZm9yIChmcm9tID0gQVZSX0xBU1RfUFVTSEVE X1JFR05VTSArIDEgLSAobnVtX3B1c2hlcyAtIDIpOw0KKwkgICAgICAgZnJv bSA8PSBBVlJfTEFTVF9QVVNIRURfUkVHTlVNOyArK2Zyb20pDQorCSAgICBm aS0+c2F2ZWRfcmVnc1tmcm9tXSA9ICsraTsNCisJfQ0KKyAgICAgIGZpLT5l eHRyYV9pbmZvLT5sb2NhbHNfc2l6ZSA9IGxvY19zaXplOw0KKyAgICAgIGZp LT5leHRyYV9pbmZvLT5mcmFtZXNpemUgPSBsb2Nfc2l6ZSArIG51bV9wdXNo ZXM7DQorICAgICAgZmktPmV4dHJhX2luZm8tPmZyYW1lcmVnID0gQVZSX0ZQ X1JFR05VTTsNCisgICAgICByZXR1cm47DQorICAgIH0NCisNCisgIC8qIFNj YW4gaW50ZXJydXB0IG9yIHNpZ25hbCBmdW5jdGlvbiAqLw0KKw0KKyAgaWYg KHByb2xvZ3VlX2xlbiA+PSAxMikNCisgICAgew0KKyAgICAgIHVuc2lnbmVk IGNoYXIgaW1nW10gPSB7DQorCTB4NzgsIDB4OTQsCQkvKiBzZWkgKi8NCisJ MHgxZiwgMHg5MiwJCS8qIHB1c2ggcjEgKi8NCisJMHgwZiwgMHg5MiwJCS8q IHB1c2ggcjAgKi8NCisJMHgwZiwgMHhiNiwJCS8qIGluIHIwLDB4M2YgU1JF RyAqLw0KKwkweDBmLCAweDkyLAkJLyogcHVzaCByMCAqLw0KKwkweDExLCAw eDI0CQkvKiBjbHIgcjEgKi8NCisgICAgICB9Ow0KKyAgICAgIGlmIChtZW1j bXAgKHByb2xvZ3VlLCBpbWcsIHNpemVvZiAoaW1nKSkgPT0gMCkNCisJew0K KwkgIHZwYyArPSBzaXplb2YgKGltZyk7DQorCSAgZmktPnNhdmVkX3JlZ3Nb MF0gPSAyOw0KKwkgIGZpLT5zYXZlZF9yZWdzWzFdID0gMTsNCisJICBmaS0+ ZXh0cmFfaW5mby0+ZnJhbWVzaXplICs9IDM7DQorCX0NCisgICAgICBlbHNl IGlmIChtZW1jbXAgKGltZyArIDEsIHByb2xvZ3VlLCBzaXplb2YgKGltZykg LSAxKSA9PSAwKQ0KKwl7DQorCSAgdnBjICs9IHNpemVvZiAoaW1nKSAtIDE7 DQorCSAgZmktPnNhdmVkX3JlZ3NbMF0gPSAyOw0KKwkgIGZpLT5zYXZlZF9y ZWdzWzFdID0gMTsNCisJICBmaS0+ZXh0cmFfaW5mby0+ZnJhbWVzaXplICs9 IDM7DQorCX0NCisgICAgfQ0KKw0KKyAgLyogRmlyc3Qgc3RhZ2Ugb2YgdGhl IHByb2xvZ3VlIHNjYW5uaW5nLg0KKyAgICAgU2NhbiBwdXNoZXMgKi8NCisN CisgIGZvciAoOyB2cGMgPD0gcHJvbG9ndWVfbGVuOyB2cGMgKz0gMikNCisg ICAgew0KKyAgICAgIGluc24gPSBFWFRSQUNUX0lOU04gKCZwcm9sb2d1ZVt2 cGNdKTsNCisgICAgICBpZiAoKGluc24gJiAweGZlMGYpID09IDB4OTIwZikJ LyogcHVzaCByWFggKi8NCisJew0KKwkgIC8qIEJpdHMgNC05IGNvbnRhaW4g YSBtYXNrIGZvciByZWdpc3RlcnMgUjAtUjMyLiAqLw0KKwkgIHJlZ25vID0g KGluc24gJiAweDFmMCkgPj4gNDsNCisJICArK2ZpLT5leHRyYV9pbmZvLT5m cmFtZXNpemU7DQorCSAgZmktPnNhdmVkX3JlZ3NbcmVnbm9dID0gZmktPmV4 dHJhX2luZm8tPmZyYW1lc2l6ZTsNCisJICBzY2FuX3N0YWdlID0gMTsNCisJ fQ0KKyAgICAgIGVsc2UNCisJYnJlYWs7DQorICAgIH0NCisNCisgIC8qIFNl Y29uZCBzdGFnZSBvZiB0aGUgcHJvbG9ndWUgc2Nhbm5pbmcuDQorICAgICBT Y2FuOg0KKyAgICAgaW4gcjI4LF9fU1BfTF9fDQorICAgICBpbiByMjksX19T UF9IX18gKi8NCisNCisgIGlmIChzY2FuX3N0YWdlID09IDEgJiYgdnBjICsg NCA8PSBwcm9sb2d1ZV9sZW4pDQorICAgIHsNCisgICAgICB1bnNpZ25lZCBj aGFyIGltZ1tdID0gew0KKwkweGNkLCAweGI3LAkJLyogaW4gcjI4LF9fU1Bf TF9fICovDQorCTB4ZGUsIDB4YjcJCS8qIGluIHIyOSxfX1NQX0hfXyAqLw0K KyAgICAgIH07DQorICAgICAgdW5zaWduZWQgc2hvcnQgaW5zbjE7DQorDQor ICAgICAgaWYgKG1lbWNtcCAocHJvbG9ndWUgKyB2cGMsIGltZywgc2l6ZW9m IChpbWcpKSA9PSAwKQ0KKwl7DQorCSAgdnBjICs9IDQ7DQorCSAgZmktPmV4 dHJhX2luZm8tPmZyYW1lcmVnID0gQVZSX0ZQX1JFR05VTTsNCisJICBzY2Fu X3N0YWdlID0gMjsNCisJfQ0KKyAgICB9DQorDQorICAvKiBUaGlyZCBzdGFn ZSBvZiB0aGUgcHJvbG9ndWUgc2Nhbm5pbmcuIChSZWFsbHkgdHdvIHN0YWdl cykNCisgICAgIFNjYW4gZm9yOg0KKyAgICAgc2JpdyByMjgsWFggb3Igc3Vi aSByMjgsbG84KFhYKQ0KKyAgICAgc2JjaSByMjksaGk4KFhYKQ0KKyAgICAg aW4gX190bXBfcmVnX18sX19TUkVHX18NCisgICAgIGNsaQ0KKyAgICAgb3V0 IF9fU1BfTF9fLHIyOA0KKyAgICAgb3V0IF9fU1JFR19fLF9fdG1wX3JlZ19f DQorICAgICBvdXQgX19TUF9IX18scjI5ICovDQorDQorICBpZiAoc2Nhbl9z dGFnZSA9PSAyICYmIHZwYyArIDEyIDw9IHByb2xvZ3VlX2xlbikNCisgICAg ew0KKyAgICAgIGludCBsb2NhbHNfc2l6ZSA9IDA7DQorICAgICAgdW5zaWdu ZWQgY2hhciBpbWdbXSA9IHsNCisJMHgwZiwgMHhiNiwJCS8qIGluIHIwLDB4 M2YgKi8NCisJMHhmOCwgMHg5NCwJCS8qIGNsaSAqLw0KKwkweGNkLCAweGJm LAkJLyogb3V0IDB4M2QscjI4IDsgU1BMICovDQorCTB4MGYsIDB4YmUsCQkv KiBvdXQgMHgzZixyMCAgOyBTUkVHICovDQorCTB4ZGUsIDB4YmYJCS8qIG91 dCAweDNlLHIyOSA7IFNQSCAqLw0KKyAgICAgIH07DQorICAgICAgdW5zaWdu ZWQgY2hhciBpbWdfc2lnW10gPSB7DQorCTB4Y2QsIDB4YmYsCQkvKiBvdXQg MHgzZCxyMjggOyBTUEwgKi8NCisJMHhkZSwgMHhiZgkJLyogb3V0IDB4M2Us cjI5IDsgU1BIICovDQorICAgICAgfTsNCisgICAgICB1bnNpZ25lZCBjaGFy IGltZ19pbnRbXSA9IHsNCisJMHhmOCwgMHg5NCwJCS8qIGNsaSAqLw0KKwkw eGNkLCAweGJmLAkJLyogb3V0IDB4M2QscjI4IDsgU1BMICovDQorCTB4Nzgs IDB4OTQsCQkvKiBzZWkgKi8NCisJMHhkZSwgMHhiZgkJLyogb3V0IDB4M2Us cjI5IDsgU1BIICovDQorICAgICAgfTsNCisNCisgICAgICBpbnNuID0gRVhU UkFDVF9JTlNOICgmcHJvbG9ndWVbdnBjXSk7DQorICAgICAgdnBjICs9IDI7 DQorICAgICAgaWYgKChpbnNuICYgMHhmZjMwKSA9PSAweDk3MjApCS8qIHNi aXcgcjI4LFhYWCAqLw0KKwlsb2NhbHNfc2l6ZSA9IChpbnNuICYgMHhmKSB8 ICgoaW5zbiAmIDB4YzApID4+IDIpOw0KKyAgICAgIGVsc2UgaWYgKChpbnNu ICYgMHhmMGYwKSA9PSAweDUwYzApCS8qIHN1YmkgcjI4LGxvOChYWCkgKi8N CisJew0KKwkgIGxvY2Fsc19zaXplID0gKGluc24gJiAweGYpIHwgKChpbnNu ICYgMHhmMDApID4+IDQpOw0KKwkgIGluc24gPSBFWFRSQUNUX0lOU04gKCZw cm9sb2d1ZVt2cGNdKTsNCisJICB2cGMgKz0gMjsNCisJICBsb2NhbHNfc2l6 ZSArPSAoKGluc24gJiAweGYpIHwgKChpbnNuICYgMHhmMDApID4+IDQpIDw8 IDgpOw0KKwl9DQorICAgICAgZWxzZQ0KKwlyZXR1cm47DQorICAgICAgZmkt PmV4dHJhX2luZm8tPmxvY2Fsc19zaXplID0gbG9jYWxzX3NpemU7DQorICAg ICAgZmktPmV4dHJhX2luZm8tPmZyYW1lc2l6ZSArPSBsb2NhbHNfc2l6ZTsN CisgICAgfQ0KK30NCisNCisvKiBUaGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGZp Z3VyZXMgb3V0IHRoZSBmcmFtZSBhZGRyZXNzIGZvciBhIGdpdmVuIHBjIGFu ZA0KKyAgIHNwLiAgVGhpcyBpcyB0cmlja3kgIGJlY2F1c2Ugd2Ugc29tZXRp bWVzIGRvbid0IHVzZSBhbiBleHBsaWNpdA0KKyAgIGZyYW1lIHBvaW50ZXIs IGFuZCB0aGUgcHJldmlvdXMgc3RhY2sgcG9pbnRlciBpc24ndCBuZWNlc3Nh cmlseSByZWNvcmRlZA0KKyAgIG9uIHRoZSBzdGFjay4gIFRoZSBvbmx5IHJl bGlhYmxlIHdheSB0byBnZXQgdGhpcyBpbmZvIGlzIHRvDQorICAgZXhhbWlu ZSB0aGUgcHJvbG9ndWUuICAqLw0KKw0KK3N0YXRpYyB2b2lkDQorYXZyX2lu aXRfZXh0cmFfZnJhbWVfaW5mbyAoaW50IGZyb21sZWFmLCBzdHJ1Y3QgZnJh bWVfaW5mbyAqZmkpDQorew0KKyAgaW50IHJlZzsNCisNCisgIGlmIChmaS0+ bmV4dCkNCisgICAgZmktPnBjID0gRlJBTUVfU0FWRURfUEMgKGZpLT5uZXh0 KTsNCisNCisgIGZpLT5leHRyYV9pbmZvID0gKHN0cnVjdCBmcmFtZV9leHRy YV9pbmZvICopDQorICAgIGZyYW1lX29ic3RhY2tfYWxsb2MgKHNpemVvZiAo c3RydWN0IGZyYW1lX2V4dHJhX2luZm8pKTsNCisgIGZyYW1lX3NhdmVkX3Jl Z3NfemFsbG9jIChmaSk7DQorDQorICBmaS0+ZXh0cmFfaW5mby0+cmV0dXJu X3BjID0gMDsNCisgIGZpLT5leHRyYV9pbmZvLT5hcmdzX3BvaW50ZXIgPSAw Ow0KKyAgZmktPmV4dHJhX2luZm8tPmxvY2Fsc19zaXplID0gMDsNCisgIGZp LT5leHRyYV9pbmZvLT5mcmFtZXJlZyA9IDA7DQorICBmaS0+ZXh0cmFfaW5m by0+ZnJhbWVzaXplID0gMDsNCisgIGZpLT5leHRyYV9pbmZvLT5pc19tYWlu ID0gMDsNCisNCisgIGF2cl9zY2FuX3Byb2xvZ3VlIChmaSk7DQorDQorICBp ZiAoUENfSU5fQ0FMTF9EVU1NWSAoZmktPnBjLCBmaS0+ZnJhbWUsIGZpLT5m cmFtZSkpDQorICAgIHsNCisgICAgICAvKiBXZSBuZWVkIHRvIHNldHVwIGZp LT5mcmFtZSBoZXJlIGJlY2F1c2UgcnVuX3N0YWNrX2R1bW15IGdldHMgaXQg d3JvbmcNCisgICAgICAgICBieSBhc3N1bWluZyBpdCdzIGFsd2F5cyBGUC4g ICovDQorICAgICAgZmktPmZyYW1lID0gZ2VuZXJpY19yZWFkX3JlZ2lzdGVy X2R1bW15IChmaS0+cGMsIGZpLT5mcmFtZSwgZmktPmZyYW1lKTsNCisgICAg fQ0KKyAgZWxzZSBpZiAoIWZpLT5uZXh0KQkJLyogdGhpcyBpcyB0aGUgaW5u ZXJtb3N0IGZyYW1lPyAqLw0KKyAgICBmaS0+ZnJhbWUgPSByZWFkX3JlZ2lz dGVyIChmaS0+ZXh0cmFfaW5mby0+ZnJhbWVyZWcpOw0KKyAgZWxzZSBpZiAo ZmktPmV4dHJhX2luZm8tPmlzX21haW4gIT0gMSkJLyogbm90IHRoZSBpbm5l cm1vc3QgZnJhbWUsIG5vdCBgbWFpbicgKi8NCisgICAgLyogSWYgd2UgaGF2 ZSBhbiBuZXh0IGZyYW1lLCAgdGhlIGNhbGxlZSBzYXZlZCBpdC4gKi8NCisg ICAgew0KKyAgICAgIHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZpID0gZmkt Pm5leHQ7DQorICAgICAgaWYgKGZpLT5leHRyYV9pbmZvLT5mcmFtZXJlZyA9 PSBBVlJfU1BfUkVHTlVNKQ0KKwlmaS0+ZnJhbWUgPQ0KKwkgIG5leHRfZmkt PmZyYW1lICsgMiAvKiByZXQgYWRkciAqLyAgKyBuZXh0X2ZpLT5leHRyYV9p bmZvLT5mcmFtZXNpemU7DQorICAgICAgLyogRklYTUU6IEkgZG9uJ3QgYW5h bHlzZSB2YV9hcmdzIGZ1bmN0aW9ucyAgKi8NCisgICAgICBlbHNlDQorCXsN CisJICBDT1JFX0FERFIgZnAgPSAwOw0KKwkgIENPUkVfQUREUiBmcDEgPSAw Ow0KKwkgIHVuc2lnbmVkIGludCBmcF9sb3csIGZwX2hpZ2g7DQorDQorCSAg LyogU2NhbiBhbGwgZnJhbWVzICovDQorCSAgZm9yICg7IG5leHRfZmk7IG5l eHRfZmkgPSBuZXh0X2ZpLT5uZXh0KQ0KKwkgICAgew0KKwkgICAgICAvKiBs b29rIGZvciBzYXZlZCBBVlJfRlBfUkVHTlVNICovDQorCSAgICAgIGlmIChu ZXh0X2ZpLT5zYXZlZF9yZWdzW0FWUl9GUF9SRUdOVU1dICYmICFmcCkNCisJ CWZwID0gbmV4dF9maS0+c2F2ZWRfcmVnc1tBVlJfRlBfUkVHTlVNXTsNCisJ ICAgICAgLyogbG9vayBmb3Igc2F2ZWQgQVZSX0ZQX1JFR05VTSArIDEgKi8N CisJICAgICAgaWYgKG5leHRfZmktPnNhdmVkX3JlZ3NbQVZSX0ZQX1JFR05V TSArIDFdICYmICFmcDEpDQorCQlmcDEgPSBuZXh0X2ZpLT5zYXZlZF9yZWdz W0FWUl9GUF9SRUdOVU0gKyAxXTsNCisJICAgIH0NCisJICBmcF9sb3cgPSAo ZnAgPyByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChhdnJfbWFrZV9z YWRkciAoZnApLCAxKQ0KKwkJICAgIDogcmVhZF9yZWdpc3RlciAoQVZSX0ZQ X1JFR05VTSkpICYgMHhmZjsNCisJICBmcF9oaWdoID0NCisJICAgIChmcDEg PyByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChhdnJfbWFrZV9zYWRk ciAoZnAxKSwgMSkgOg0KKwkgICAgIHJlYWRfcmVnaXN0ZXIgKEFWUl9GUF9S RUdOVU0gKyAxKSkgJiAweGZmOw0KKwkgIGZpLT5mcmFtZSA9IGZwX2xvdyB8 IChmcF9oaWdoIDw8IDgpOw0KKwl9DQorICAgIH0NCisNCisgIC8qIFRSb3Ro OiBEbyB3ZSB3YW50IHRvIGRvIHRoaXMgaWYgd2UgYXJlIGluIG1haW4/IEkg ZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkDQorICAgICBzaW5jZSByZXR1cm5fcGMg bWFrZXMgbm8gc2Vuc2Ugd2hlbiB3ZSBhcmUgaW4gbWFpbi4gKi8NCisNCisg IGlmICgoZmktPnBjKSAmJiAoZmktPmV4dHJhX2luZm8tPmlzX21haW4gPT0g MCkpCS8qIFdlIGFyZSBub3QgaW4gQ0FMTF9EVU1NWSAqLw0KKyAgICB7DQor ICAgICAgQ09SRV9BRERSIGFkZHI7DQorICAgICAgaW50IGk7DQorDQorICAg ICAgYWRkciA9IGZpLT5mcmFtZSArIGZpLT5leHRyYV9pbmZvLT5mcmFtZXNp emUgKyAxOw0KKw0KKyAgICAgIC8qIFJldHVybiBhZGRyZXNzIGluIHN0YWNr IGluIGRpZmZlcmVudCBlbmRpYW5uZXNzICovDQorDQorICAgICAgZmktPmV4 dHJhX2luZm8tPnJldHVybl9wYyA9DQorCXJlYWRfbWVtb3J5X3Vuc2lnbmVk X2ludGVnZXIgKGF2cl9tYWtlX3NhZGRyIChhZGRyKSwgMSkgPDwgODsNCisg ICAgICBmaS0+ZXh0cmFfaW5mby0+cmV0dXJuX3BjIHw9DQorCXJlYWRfbWVt b3J5X3Vuc2lnbmVkX2ludGVnZXIgKGF2cl9tYWtlX3NhZGRyIChhZGRyICsg MSksIDEpOw0KKw0KKyAgICAgIC8qIFRoaXMgcmV0dXJuIGFkZHJlc3MgaW4g d29yZHMsDQorICAgICAgICAgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gdGhlIGJ5 dGVzIGFkZHJlc3MgKi8NCisgICAgICBmaS0+ZXh0cmFfaW5mby0+cmV0dXJu X3BjICo9IDI7DQorDQorICAgICAgLyogUmVzb2x2ZSBhIHB1c2hlZCByZWdp c3RlcnMgYWRkcmVzc2VzICovDQorICAgICAgZm9yIChpID0gMDsgaSA8IE5V TV9SRUdTOyBpKyspDQorCXsNCisJICBpZiAoZmktPnNhdmVkX3JlZ3NbaV0p DQorCSAgICBmaS0+c2F2ZWRfcmVnc1tpXSA9IGFkZHIgLSBmaS0+c2F2ZWRf cmVnc1tpXTsNCisJfQ0KKyAgICB9DQorfQ0KKw0KKy8qIFJlc3RvcmUgdGhl IG1hY2hpbmUgdG8gdGhlIHN0YXRlIGl0IGhhZCBiZWZvcmUgdGhlIGN1cnJl bnQgZnJhbWUgd2FzDQorICAgY3JlYXRlZC4gIFVzdWFsbHkgdXNlZCBlaXRo ZXIgYnkgdGhlICJSRVRVUk4iIGNvbW1hbmQsIG9yIGJ5DQorICAgY2FsbF9m dW5jdGlvbl9ieV9oYW5kIGFmdGVyIHRoZSBkdW1teV9mcmFtZSBpcyBmaW5p c2hlZC4gKi8NCisNCitzdGF0aWMgdm9pZA0KK2F2cl9wb3BfZnJhbWUgKHZv aWQpDQorew0KKyAgdW5zaWduZWQgcmVnbnVtOw0KKyAgQ09SRV9BRERSIHNh ZGRyOw0KKyAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lID0gZ2V0X2N1cnJl bnRfZnJhbWUgKCk7DQorDQorICBpZiAoUENfSU5fQ0FMTF9EVU1NWSAoZnJh bWUtPnBjLCBmcmFtZS0+ZnJhbWUsIGZyYW1lLT5mcmFtZSkpDQorICAgIHsN CisgICAgICBnZW5lcmljX3BvcF9kdW1teV9mcmFtZSAoKTsNCisgICAgfQ0K KyAgZWxzZQ0KKyAgICB7DQorICAgICAgLyogVFJvdGg6IFdoeSBvbmx5IGxv b3Agb3ZlciA4IHJlZ2lzdGVycz8gKi8NCisNCisgICAgICBmb3IgKHJlZ251 bSA9IDA7IHJlZ251bSA8IDg7IHJlZ251bSsrKQ0KKwl7DQorCSAgLyogRG9u J3QgZm9yZ2V0IEFWUl9TUF9SRUdOVU0gaW4gYSBmcmFtZV9zYXZlZF9yZWdz IHN0cnVjdCBpcyB0aGUNCisJICAgICBhY3R1YWwgdmFsdWUgd2Ugd2FudCwg bm90IHRoZSBhZGRyZXNzIG9mIHRoZSB2YWx1ZSB3ZSB3YW50LiAgKi8NCisJ ICBpZiAoZnJhbWUtPnNhdmVkX3JlZ3NbcmVnbnVtXSAmJiByZWdudW0gIT0g QVZSX1NQX1JFR05VTSkNCisJICAgIHsNCisJICAgICAgc2FkZHIgPSBhdnJf bWFrZV9zYWRkciAoZnJhbWUtPnNhdmVkX3JlZ3NbcmVnbnVtXSk7DQorCSAg ICAgIHdyaXRlX3JlZ2lzdGVyIChyZWdudW0sDQorCQkJICAgICAgcmVhZF9t ZW1vcnlfdW5zaWduZWRfaW50ZWdlciAoc2FkZHIsIDEpKTsNCisJICAgIH0N CisJICBlbHNlIGlmIChmcmFtZS0+c2F2ZWRfcmVnc1tyZWdudW1dICYmIHJl Z251bSA9PSBBVlJfU1BfUkVHTlVNKQ0KKwkgICAgd3JpdGVfcmVnaXN0ZXIg KHJlZ251bSwgZnJhbWUtPmZyYW1lICsgMik7DQorCX0NCisNCisgICAgICAv KiBEb24ndCBmb3JnZXQgdGhlIHVwZGF0ZSB0aGUgUEMgdG9vISAgKi8NCisg ICAgICB3cml0ZV9wYyAoZnJhbWUtPmV4dHJhX2luZm8tPnJldHVybl9wYyk7 DQorICAgIH0NCisgIGZsdXNoX2NhY2hlZF9mcmFtZXMgKCk7DQorfQ0KKw0K Ky8qIFJldHVybiB0aGUgc2F2ZWQgUEMgZnJvbSB0aGlzIGZyYW1lLiAqLw0K Kw0KK3N0YXRpYyBDT1JFX0FERFINCithdnJfZnJhbWVfc2F2ZWRfcGMgKHN0 cnVjdCBmcmFtZV9pbmZvICpmcmFtZSkNCit7DQorICBpZiAoUENfSU5fQ0FM TF9EVU1NWSAoZnJhbWUtPnBjLCBmcmFtZS0+ZnJhbWUsIGZyYW1lLT5mcmFt ZSkpDQorICAgIHJldHVybiBnZW5lcmljX3JlYWRfcmVnaXN0ZXJfZHVtbXkg KGZyYW1lLT5wYywgZnJhbWUtPmZyYW1lLA0KKwkJCQkJQVZSX1BDX1JFR05V TSk7DQorICBlbHNlDQorICAgIHJldHVybiBmcmFtZS0+ZXh0cmFfaW5mby0+ cmV0dXJuX3BjOw0KK30NCisNCitzdGF0aWMgQ09SRV9BRERSDQorYXZyX3Nh dmVkX3BjX2FmdGVyX2NhbGwgKHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSkN Cit7DQorICB1bnNpZ25lZCBjaGFyIG0xLCBtMjsNCisgIHVuc2lnbmVkIGlu dCBzcCA9IHJlYWRfcmVnaXN0ZXIgKEFWUl9TUF9SRUdOVU0pOw0KKyAgbTEg PSByZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChhdnJfbWFrZV9zYWRk ciAoc3AgKyAxKSwgMSk7DQorICBtMiA9IHJlYWRfbWVtb3J5X3Vuc2lnbmVk X2ludGVnZXIgKGF2cl9tYWtlX3NhZGRyIChzcCArIDIpLCAxKTsNCisgIHJl dHVybiAobTIgfCAobTEgPDwgOCkpICogMjsNCit9DQorDQorLyogRmlndXJl IG91dCB3aGVyZSBpbiBSRUdCVUYgdGhlIGNhbGxlZCBmdW5jdGlvbiBoYXMg bGVmdCBpdHMgcmV0dXJuIHZhbHVlLg0KKyAgIENvcHkgdGhhdCBpbnRvIFZB TEJVRi4gKi8NCisNCitzdGF0aWMgdm9pZA0KK2F2cl9leHRyYWN0X3JldHVy bl92YWx1ZSAoc3RydWN0IHR5cGUgKnR5cGUsIGNoYXIgKnJlZ2J1ZiwgY2hh ciAqdmFsYnVmKQ0KK3sNCisgIGludCB3b3Jkc2l6ZSwgbGVuOw0KKw0KKyAg d29yZHNpemUgPSAyOw0KKw0KKyAgbGVuID0gVFlQRV9MRU5HVEggKHR5cGUp Ow0KKw0KKyAgc3dpdGNoIChsZW4pDQorICAgIHsNCisgICAgY2FzZSAxOgkJ CS8qIChjaGFyKSAqLw0KKyAgICBjYXNlIDI6CQkJLyogKHNob3J0KSwgKGlu dCkgKi8NCisgICAgICBtZW1jcHkgKHZhbGJ1ZiwgcmVnYnVmICsgUkVHSVNU RVJfQllURSAoMjQpLCAyKTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSA0 OgkJCS8qIChsb25nKSwgKGZsb2F0KSAqLw0KKyAgICAgIG1lbWNweSAodmFs YnVmLCByZWdidWYgKyBSRUdJU1RFUl9CWVRFICgyMiksIDQpOw0KKyAgICAg IGJyZWFrOw0KKyAgICBjYXNlIDg6CQkJLyogKGRvdWJsZSkgKGRvZXNuJ3Qg c2VlbSB0byBoYXBwZW4sIHdoaWNoIGlzIGdvb2QsDQorCQkJCSAgIGJlY2F1 c2UgdGhpcyBhbG1vc3QgY2VydGFpbmx5IGlzbid0IHJpZ2h0LiAgKi8NCisg ICAgICBlcnJvciAoIkkgZG9uJ3Qga25vdyBob3cgYSBkb3VibGUgaXMgcmV0 dXJuZWQuIik7DQorICAgICAgYnJlYWs7DQorICAgIH0NCit9DQorDQorLyog UmV0dXJucyB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIGEgZHVtbXkuICovDQor DQorc3RhdGljIENPUkVfQUREUg0KK2F2cl9jYWxsX2R1bW15X2FkZHJlc3Mg KHZvaWQpDQorew0KKyAgcmV0dXJuIGVudHJ5X3BvaW50X2FkZHJlc3MgKCk7 DQorfQ0KKw0KKy8qIFBsYWNlIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSBpbiB0 aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXJzLg0KKyAgIFByaW1hcmlseSB1c2Vk IGJ5IHRoZSBSRVRVUk4gY29tbWFuZC4gICovDQorDQorc3RhdGljIHZvaWQN CithdnJfc3RvcmVfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqdHlwZSwg Y2hhciAqdmFsYnVmKQ0KK3sNCisgIGludCB3b3Jkc2l6ZSwgbGVuLCByZWd2 YWw7DQorDQorICB3b3Jkc2l6ZSA9IDI7DQorDQorICBsZW4gPSBUWVBFX0xF TkdUSCAodHlwZSk7DQorICBzd2l0Y2ggKGxlbikNCisgICAgew0KKyAgICBj YXNlIDE6CQkJLyogY2hhciAqLw0KKyAgICBjYXNlIDI6CQkJLyogc2hvcnQs IGludCAqLw0KKyAgICAgIHJlZ3ZhbCA9IGV4dHJhY3RfYWRkcmVzcyAodmFs YnVmLCBsZW4pOw0KKyAgICAgIHdyaXRlX3JlZ2lzdGVyICgwLCByZWd2YWwp Ow0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIDQ6CQkJLyogbG9uZywgZmxv YXQgKi8NCisgICAgICByZWd2YWwgPSBleHRyYWN0X2FkZHJlc3MgKHZhbGJ1 ZiwgbGVuKTsNCisgICAgICB3cml0ZV9yZWdpc3RlciAoMCwgcmVndmFsID4+ IDE2KTsNCisgICAgICB3cml0ZV9yZWdpc3RlciAoMSwgcmVndmFsICYgMHhm ZmZmKTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSA4OgkJCS8qIHByZXN1 bWVhYmx5IGRvdWJsZSwgYnV0IGRvZXNuJ3Qgc2VlbSB0byBoYXBwZW4gKi8N CisgICAgICBlcnJvciAoIkkgZG9uJ3Qga25vdyBob3cgdG8gcmV0dXJuIGEg ZG91YmxlLiIpOw0KKyAgICAgIGJyZWFrOw0KKyAgICB9DQorfQ0KKw0KKy8q IFNldHVwIHRoZSByZXR1cm4gYWRkcmVzcyBmb3IgYSBkdW1teSBmcmFtZSwg YXMgY2FsbGVkIGJ5DQorICAgY2FsbF9mdW5jdGlvbl9ieV9oYW5kLiAgT25s eSBuZWNlc3Nhcnkgd2hlbiB5b3UgYXJlIHVzaW5nIGFuIGVtcHR5DQorICAg Q0FMTF9EVU1NWS4gKi8NCisNCitzdGF0aWMgQ09SRV9BRERSDQorYXZyX3B1 c2hfcmV0dXJuX2FkZHJlc3MgKENPUkVfQUREUiBwYywgQ09SRV9BRERSIHNw KQ0KK3sNCisgIHVuc2lnbmVkIGNoYXIgYnVmWzJdOw0KKyAgaW50IHdvcmRz aXplID0gMjsNCisgIHN0cnVjdCBtaW5pbWFsX3N5bWJvbCAqbXN5bWJvbDsN CisgIENPUkVfQUREUiBtb25fYnJrOw0KKw0KKyAgZnByaW50Zl91bmZpbHRl cmVkIChnZGJfc3RkZXJyLCAiYXZyX3B1c2hfcmV0dXJuX2FkZHJlc3MoKSB3 YXMgY2FsbGVkXG4iKTsNCisNCisgIGJ1ZlswXSA9IDA7DQorICBidWZbMV0g PSAwOw0KKyAgc3AgLT0gd29yZHNpemU7DQorICB3cml0ZV9tZW1vcnkgKHNw ICsgMSwgYnVmLCAyKTsNCisNCisjaWYgMA0KKyAgLyogRklYTUU6IFRSb3Ro LzIwMDItMDItMTg6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWQg c2luY2UgaXQncyBhDQorICAgICBsZWZ0LW92ZXIgZnJvbSBEZW5pcycgb3Jp Z2luYWwgcGF0Y2ggd2hpY2ggdXNlZCBhdnItbW9uIGZvciB0aGUgdGFyZ2V0 DQorICAgICBpbnN0ZWFkIG9mIHRoZSBnZW5lcmljIHJlbW90ZSB0YXJnZXQu ICovDQorICBpZiAoKHN0cmNtcCAodGFyZ2V0X3Nob3J0bmFtZSwgImF2ci1t b24iKSA9PSAwKQ0KKyAgICAgICYmIChtc3ltYm9sID0gbG9va3VwX21pbmlt YWxfc3ltYm9sICgiZ2RiX2JyZWFrIiwgTlVMTCwgTlVMTCkpKQ0KKyAgICB7 DQorICAgICAgbW9uX2JyayA9IFNZTUJPTF9WQUxVRV9BRERSRVNTIChtc3lt Ym9sKTsNCisgICAgICBzdG9yZV91bnNpZ25lZF9pbnRlZ2VyIChidWYsIHdv cmRzaXplLCBtb25fYnJrIC8gMik7DQorICAgICAgc3AgLT0gd29yZHNpemU7 DQorICAgICAgd3JpdGVfbWVtb3J5IChzcCArIDEsIGJ1ZiArIDEsIDEpOw0K KyAgICAgIHdyaXRlX21lbW9yeSAoc3AgKyAyLCBidWYsIDEpOw0KKyAgICB9 DQorI2VuZGlmDQorICByZXR1cm4gc3A7DQorfQ0KKw0KK3N0YXRpYyBDT1JF X0FERFINCithdnJfc2tpcF9wcm9sb2d1ZSAoQ09SRV9BRERSIHBjKQ0KK3sN CisgIENPUkVfQUREUiBmdW5jX2FkZHIsIGZ1bmNfZW5kOw0KKyAgc3RydWN0 IHN5bXRhYl9hbmRfbGluZSBzYWw7DQorDQorICAvKiBTZWUgd2hhdCB0aGUg c3ltYm9sIHRhYmxlIHNheXMgKi8NCisNCisgIGlmIChmaW5kX3BjX3BhcnRp YWxfZnVuY3Rpb24gKHBjLCBOVUxMLCAmZnVuY19hZGRyLCAmZnVuY19lbmQp KQ0KKyAgICB7DQorICAgICAgc2FsID0gZmluZF9wY19saW5lIChmdW5jX2Fk ZHIsIDApOw0KKw0KKyAgICAgIGlmIChzYWwubGluZSAhPSAwICYmIHNhbC5l bmQgPCBmdW5jX2VuZCkNCisJcmV0dXJuIHNhbC5lbmQ7DQorICAgIH0NCisN CisvKiBFaXRoZXIgd2UgZGlkbid0IGZpbmQgdGhlIHN0YXJ0IG9mIHRoaXMg ZnVuY3Rpb24gKG5vdGhpbmcgd2UgY2FuIGRvKSwNCisgICBvciB0aGVyZSdz IG5vIGxpbmUgaW5mbywgb3IgdGhlIGxpbmUgYWZ0ZXIgdGhlIHByb2xvZ3Vl IGlzIGFmdGVyDQorICAgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gKHRoZXJl IHByb2JhYmx5IGlzbid0IGEgcHJvbG9ndWUpLiAqLw0KKw0KKyAgcmV0dXJu IHBjOw0KK30NCisNCitzdGF0aWMgQ09SRV9BRERSDQorYXZyX2ZyYW1lX2Fk ZHJlc3MgKHN0cnVjdCBmcmFtZV9pbmZvICpmaSkNCit7DQorICByZXR1cm4g YXZyX21ha2Vfc2FkZHIgKGZpLT5mcmFtZSk7DQorfQ0KKw0KKy8qIEdpdmVu IGEgR0RCIGZyYW1lLCBkZXRlcm1pbmUgdGhlIGFkZHJlc3Mgb2YgdGhlIGNh bGxpbmcgZnVuY3Rpb24ncyBmcmFtZS4NCisgICBUaGlzIHdpbGwgYmUgdXNl ZCB0byBjcmVhdGUgYSBuZXcgR0RCIGZyYW1lIHN0cnVjdCwgYW5kIHRoZW4N CisgICBJTklUX0VYVFJBX0ZSQU1FX0lORk8gYW5kIElOSVRfRlJBTUVfUEMg d2lsbCBiZSBjYWxsZWQgZm9yIHRoZSBuZXcgZnJhbWUuDQorDQorICAgRm9y IHVzLCB0aGUgZnJhbWUgYWRkcmVzcyBpcyBpdHMgc3RhY2sgcG9pbnRlciB2 YWx1ZSwgc28gd2UgbG9vayB1cA0KKyAgIHRoZSBmdW5jdGlvbiBwcm9sb2d1 ZSB0byBkZXRlcm1pbmUgdGhlIGNhbGxlcidzIHNwIHZhbHVlLCBhbmQgcmV0 dXJuIGl0LiAgKi8NCisNCitzdGF0aWMgQ09SRV9BRERSDQorYXZyX2ZyYW1l X2NoYWluIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUpDQorew0KKyAgaWYg KFBDX0lOX0NBTExfRFVNTVkgKGZyYW1lLT5wYywgZnJhbWUtPmZyYW1lLCBm cmFtZS0+ZnJhbWUpKQ0KKyAgICB7DQorICAgICAgLyogaW5pdGlhbGl6ZSB0 aGUgcmV0dXJuX3BjIG5vdyAqLw0KKyAgICAgIGZyYW1lLT5leHRyYV9pbmZv LT5yZXR1cm5fcGMgPSBnZW5lcmljX3JlYWRfcmVnaXN0ZXJfZHVtbXkgKGZy YW1lLT5wYywNCisJCQkJCQkJCSAgZnJhbWUtPg0KKwkJCQkJCQkJICBmcmFt ZSwNCisJCQkJCQkJCSAgQVZSX1BDX1JFR05VTSk7DQorICAgICAgcmV0dXJu IGZyYW1lLT5mcmFtZTsNCisgICAgfQ0KKyAgcmV0dXJuIChmcmFtZS0+ZXh0 cmFfaW5mby0+aXNfbWFpbiA/IDANCisJICA6IGZyYW1lLT5mcmFtZSArIGZy YW1lLT5leHRyYV9pbmZvLT5mcmFtZXNpemUgKyAyIC8qIHJldCBhZGRyICov ICk7DQorfQ0KKw0KKy8qIFN0b3JlIHRoZSBhZGRyZXNzIG9mIHRoZSBwbGFj ZSBpbiB3aGljaCB0byBjb3B5IHRoZSBzdHJ1Y3R1cmUgdGhlDQorICAgc3Vi cm91dGluZSB3aWxsIHJldHVybi4gIFRoaXMgaXMgY2FsbGVkIGZyb20gY2Fs bF9mdW5jdGlvbi4gDQorDQorICAgV2Ugc3RvcmUgc3RydWN0cyB0aHJvdWdo IGEgcG9pbnRlciBwYXNzZWQgaW4gdGhlIGZpcnN0IEFyZ3VtZW50DQorICAg cmVnaXN0ZXIuICovDQorDQorc3RhdGljIHZvaWQNCithdnJfc3RvcmVfc3Ry dWN0X3JldHVybiAoQ09SRV9BRERSIGFkZHIsIENPUkVfQUREUiBzcCkNCit7 DQorICB3cml0ZV9yZWdpc3RlciAoMCwgYWRkcik7DQorfQ0KKw0KKy8qIEV4 dHJhY3QgZnJvbSBhbiBhcnJheSBSRUdCVUYgY29udGFpbmluZyB0aGUgKHJh dykgcmVnaXN0ZXIgc3RhdGUNCisgICB0aGUgYWRkcmVzcyBpbiB3aGljaCBh IGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gaXRzIHN0cnVjdHVyZSB2YWx1ZSwN CisgICBhcyBhIENPUkVfQUREUiAob3IgYW4gZXhwcmVzc2lvbiB0aGF0IGNh biBiZSB1c2VkIGFzIG9uZSkuICovDQorDQorc3RhdGljIENPUkVfQUREUg0K K2F2cl9leHRyYWN0X3N0cnVjdF92YWx1ZV9hZGRyZXNzIChjaGFyICpyZWdi dWYpDQorew0KKyAgcmV0dXJuIChleHRyYWN0X2FkZHJlc3MgKChyZWdidWYp ICsgUkVHSVNURVJfQllURSAoMCksDQorCQkJICAgUkVHSVNURVJfUkFXX1NJ WkUgKDApKSB8IEFWUl9TTUVNX1NUQVJUKTsNCit9DQorDQorLyogU2V0dXAg dGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBmb3IgY2FsbGluZyBhIGZ1bmN0aW9u IGluIHRoZSBpbmZlcmlvci4NCisNCisgICBPbiB0aGUgQVZSIGFyY2hpdGVj dHVyZSwgdGhlcmUgYXJlIDE4IHJlZ2lzdGVycyAoUjI1IHRvIFI4KSB3aGlj aCBhcmUNCisgICBkZWRpY2F0ZWQgZm9yIHBhc3NpbmcgZnVuY3Rpb24gYXJn dW1lbnRzLiAgVXAgdG8gdGhlIGZpcnN0IDE4IGFyZ3VtZW50cw0KKyAgIChk ZXBlbmRpbmcgb24gc2l6ZSkgbWF5IGdvIGludG8gdGhlc2UgcmVnaXN0ZXJz LiAgVGhlIHJlc3QgZ28gb24gdGhlIHN0YWNrLg0KKw0KKyAgIEFyZ3VtZW50 cyB0aGF0IGFyZSBsYXJnZXIgdGhhbiBXT1JEU0laRSBieXRlcyB3aWxsIGJl IHNwbGl0IGJldHdlZW4gdHdvIG9yDQorICAgbW9yZSByZWdpc3RlcnMgYXMg YXZhaWxhYmxlLCBidXQgd2lsbCBOT1QgYmUgc3BsaXQgYmV0d2VlbiBhIHJl Z2lzdGVyIGFuZA0KKyAgIHRoZSBzdGFjay4NCisNCisgICBBbiBleGNlcHRp b25hbCBjYXNlIGV4aXN0cyBmb3Igc3RydWN0IGFyZ3VtZW50cyAoYW5kIHBv c3NpYmx5IG90aGVyDQorICAgYWdncmVnYXRlcyBzdWNoIGFzIGFycmF5cykg LS0gaWYgdGhlIHNpemUgaXMgbGFyZ2VyIHRoYW4gV09SRFNJWkUgYnl0ZXMg YnV0DQorICAgbm90IGEgbXVsdGlwbGUgb2YgV09SRFNJWkUgYnl0ZXMuICBJ biB0aGlzIGNhc2UgdGhlIGFyZ3VtZW50IGlzIG5ldmVyIHNwbGl0DQorICAg YmV0d2VlbiB0aGUgcmVnaXN0ZXJzIGFuZCB0aGUgc3RhY2ssIGJ1dCBpbnN0 ZWFkIGlzIGNvcGllZCBpbiBpdHMgZW50aXJldHkNCisgICBvbnRvIHRoZSBz dGFjaywgQU5EIGFsc28gY29waWVkIGludG8gYXMgbWFueSByZWdpc3RlcnMg YXMgdGhlcmUgaXMgcm9vbQ0KKyAgIGZvci4gIEluIG90aGVyIHdvcmRzLCBz cGFjZSBpbiByZWdpc3RlcnMgcGVybWl0dGluZywgdHdvIGNvcGllcyBvZiB0 aGUgc2FtZQ0KKyAgIGFyZ3VtZW50IGFyZSBwYXNzZWQgaW4uICBBcyBmYXIg YXMgSSBjYW4gdGVsbCwgb25seSB0aGUgb25lIG9uIHRoZSBzdGFjayBpcw0K KyAgIHVzZWQsIGFsdGhvdWdoIHRoYXQgbWF5IGJlIGEgZnVuY3Rpb24gb2Yg dGhlIGxldmVsIG9mIGNvbXBpbGVyDQorICAgb3B0aW1pemF0aW9uLiAgSSBz dXNwZWN0IHRoaXMgaXMgYSBjb21waWxlciBidWcuICBBcmd1bWVudHMgb2Yg dGhlc2Ugb2RkDQorICAgc2l6ZXMgYXJlIGxlZnQtanVzdGlmaWVkIHdpdGhp biB0aGUgd29yZCAoYXMgb3Bwb3NlZCB0byBhcmd1bWVudHMgc21hbGxlcg0K KyAgIHRoYW4gV09SRFNJWkUgYnl0ZXMsIHdoaWNoIGFyZSByaWdodC1qdXN0 aWZpZWQpLg0KKyANCisgICBJZiB0aGUgZnVuY3Rpb24gaXMgdG8gcmV0dXJu IGFuIGFnZ3JlZ2F0ZSB0eXBlIHN1Y2ggYXMgYSBzdHJ1Y3QsIHRoZSBjYWxs ZXINCisgICBtdXN0IGFsbG9jYXRlIHNwYWNlIGludG8gd2hpY2ggdGhlIGNh bGxlZSB3aWxsIGNvcHkgdGhlIHJldHVybiB2YWx1ZS4gIEluDQorICAgdGhp cyBjYXNlLCBhIHBvaW50ZXIgdG8gdGhlIHJldHVybiB2YWx1ZSBsb2NhdGlv biBpcyBwYXNzZWQgaW50byB0aGUgY2FsbGVlDQorICAgaW4gcmVnaXN0ZXIg UjAsIHdoaWNoIGRpc3BsYWNlcyBvbmUgb2YgdGhlIG90aGVyIGFyZ3VtZW50 cyBwYXNzZWQgaW4gdmlhDQorICAgcmVnaXN0ZXJzIFIwIHRvIFIyLiAqLw0K Kw0KK3N0YXRpYyBDT1JFX0FERFINCithdnJfcHVzaF9hcmd1bWVudHMgKGlu dCBuYXJncywgc3RydWN0IHZhbHVlICoqYXJncywgQ09SRV9BRERSIHNwLA0K KwkJICAgIGludCBzdHJ1Y3RfcmV0dXJuLCBDT1JFX0FERFIgc3RydWN0X2Fk ZHIpDQorew0KKyAgaW50IHN0YWNrX2FsbG9jLCBzdGFja19vZmZzZXQ7DQor ICBpbnQgd29yZHNpemU7DQorICBpbnQgYXJncmVnOw0KKyAgaW50IGFyZ251 bTsNCisgIHN0cnVjdCB0eXBlICp0eXBlOw0KKyAgQ09SRV9BRERSIHJlZ3Zh bDsNCisgIGNoYXIgKnZhbDsNCisgIGNoYXIgdmFsYnVmWzRdOw0KKyAgaW50 IGxlbjsNCisNCisgIHdvcmRzaXplID0gMTsNCisjaWYgMA0KKyAgLyogTm93 IG1ha2Ugc3VyZSB0aGVyZSdzIHNwYWNlIG9uIHRoZSBzdGFjayAqLw0KKyAg Zm9yIChhcmdudW0gPSAwLCBzdGFja19hbGxvYyA9IDA7IGFyZ251bSA8IG5h cmdzOyBhcmdudW0rKykNCisgICAgc3RhY2tfYWxsb2MgKz0gVFlQRV9MRU5H VEggKFZBTFVFX1RZUEUgKGFyZ3NbYXJnbnVtXSkpOw0KKyAgc3AgLT0gc3Rh Y2tfYWxsb2M7CQkvKiBtYWtlIHJvb20gb24gc3RhY2sgZm9yIGFyZ3MgKi8N CisgIC8qIHdlIG1heSBvdmVyLWFsbG9jYXRlIGEgbGl0dGxlIGhlcmUsIGJ1 dCB0aGF0IHdvbid0IGh1cnQgYW55dGhpbmcgKi8NCisjZW5kaWYNCisgIGFy Z3JlZyA9IDI1Ow0KKyAgaWYgKHN0cnVjdF9yZXR1cm4pCQkvKiAic3RydWN0 IHJldHVybiIgcG9pbnRlciB0YWtlcyB1cCBvbmUgYXJncmVnICovDQorICAg IHsNCisgICAgICB3cml0ZV9yZWdpc3RlciAoLS1hcmdyZWcsIHN0cnVjdF9h ZGRyKTsNCisgICAgfQ0KKw0KKyAgLyogTm93IGxvYWQgYXMgbWFueSBhcyBw b3NzaWJsZSBvZiB0aGUgZmlyc3QgYXJndW1lbnRzIGludG8gcmVnaXN0ZXJz LCBhbmQNCisgICAgIHB1c2ggdGhlIHJlc3Qgb250byB0aGUgc3RhY2suICBU aGVyZSBhcmUgM04gYnl0ZXMgaW4gdGhyZWUgcmVnaXN0ZXJzDQorICAgICBh dmFpbGFibGUuICBMb29wIHRocnUgYXJncyBmcm9tIGZpcnN0IHRvIGxhc3Qu ICAqLw0KKw0KKyAgZm9yIChhcmdudW0gPSAwLCBzdGFja19vZmZzZXQgPSAw OyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKyspDQorICAgIHsNCisgICAgICB0 eXBlID0gVkFMVUVfVFlQRSAoYXJnc1thcmdudW1dKTsNCisgICAgICBsZW4g PSBUWVBFX0xFTkdUSCAodHlwZSk7DQorICAgICAgdmFsID0gKGNoYXIgKikg VkFMVUVfQ09OVEVOVFMgKGFyZ3NbYXJnbnVtXSk7DQorDQorICAgICAgLyog Tk9URSBXRUxMISEhISEgIFRoaXMgaXMgbm90IGFuICJlbHNlIGlmIiBjbGF1 c2UhISEgIFRoYXQncyBiZWNhdXNlDQorICAgICAgICAgc29tZSAqJl4lJCB0 aGluZ3MgZ2V0IHBhc3NlZCBvbiB0aGUgc3RhY2sgQU5EIGluIHRoZSByZWdp c3RlcnMhICAqLw0KKyAgICAgIHdoaWxlIChsZW4gPiAwKQ0KKwl7CQkJLyog dGhlcmUncyByb29tIGluIHJlZ2lzdGVycyAqLw0KKwkgIGxlbiAtPSB3b3Jk c2l6ZTsNCisJICByZWd2YWwgPSBleHRyYWN0X2FkZHJlc3MgKHZhbCArIGxl biwgd29yZHNpemUpOw0KKwkgIHdyaXRlX3JlZ2lzdGVyIChhcmdyZWctLSwg cmVndmFsKTsNCisJfQ0KKyAgICB9DQorICByZXR1cm4gc3A7DQorfQ0KKw0K Ky8qIEluaXRpYWxpemUgdGhlIGdkYmFyY2ggc3RydWN0dXJlIGZvciB0aGUg QVZSJ3MuICovDQorDQorc3RhdGljIHN0cnVjdCBnZGJhcmNoICoNCithdnJf Z2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVj dCBnZGJhcmNoX2xpc3QgKmFyY2hlcykNCit7DQorICAvKiBGSVhNRTogVFJv dGgvMjAwMi0wMi0xODogSSBoYXZlIG5vIGlkZWEgaWYgYXZyX2NhbGxfZHVt bXlfd29yZHNbXSBzaG91bGQNCisgICAgIGJlIGJpZ2dlciBvciBub3QuIElu aXRpYWwgdGVzdGluZyBzZWVtcyB0byBzaG93IHRoYXQgYGNhbGwgbXlfZnVu YygpYA0KKyAgICAgd29ya3MgYW5kIGJhY2t0cmFjZSBmcm9tIGEgYnJlYWtw b2ludCB3aXRoaW4gdGhlIGNhbGwgbG9va3MgY29ycmVjdC4NCisgICAgIEFk bWl0dGVkbHksIEkgaGF2ZW4ndCB0ZXN0ZWQgd2l0aCBtb3JlIHRoYW4gYSB2 ZXJ5IHNpbXBsZSBwcm9ncmFtLiAqLw0KKyAgc3RhdGljIExPTkdFU1QgYXZy X2NhbGxfZHVtbXlfd29yZHNbXSA9IHsgMCB9Ow0KKw0KKyAgc3RydWN0IGdk YmFyY2ggKmdkYmFyY2g7DQorICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVw Ow0KKw0KKyAgLyogRmluZCBhIGNhbmRpZGF0ZSBhbW9uZyB0aGUgbGlzdCBv ZiBwcmUtZGVjbGFyZWQgYXJjaGl0ZWN0dXJlcy4gKi8NCisgIGFyY2hlcyA9 IGdkYmFyY2hfbGlzdF9sb29rdXBfYnlfaW5mbyAoYXJjaGVzLCAmaW5mbyk7 DQorICBpZiAoYXJjaGVzICE9IE5VTEwpDQorICAgIHJldHVybiBhcmNoZXMt PmdkYmFyY2g7DQorDQorICAvKiBOb25lIGZvdW5kLCBjcmVhdGUgYSBuZXcg YXJjaGl0ZWN0dXJlIGZyb20gdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkLiAq Lw0KKyAgdGRlcCA9IFhNQUxMT0MgKHN0cnVjdCBnZGJhcmNoX3RkZXApOw0K KyAgZ2RiYXJjaCA9IGdkYmFyY2hfYWxsb2MgKCZpbmZvLCB0ZGVwKTsNCisN CisgIC8qIElmIHdlIGV2ZXIgbmVlZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBk ZXZpY2UgdHlwZXMsIGRvIGl0IGhlcmUuICovDQorICBzd2l0Y2ggKGluZm8u YmZkX2FyY2hfaW5mby0+bWFjaCkNCisgICAgew0KKyAgICBjYXNlIGJmZF9t YWNoX2F2cjE6DQorICAgIGNhc2UgYmZkX21hY2hfYXZyMjoNCisgICAgY2Fz ZSBiZmRfbWFjaF9hdnIzOg0KKyAgICBjYXNlIGJmZF9tYWNoX2F2cjQ6DQor ICAgIGNhc2UgYmZkX21hY2hfYXZyNToNCisgICAgICBicmVhazsNCisgICAg fQ0KKw0KKyAgc2V0X2dkYmFyY2hfc2hvcnRfYml0IChnZGJhcmNoLCAyICog VEFSR0VUX0NIQVJfQklUKTsNCisgIHNldF9nZGJhcmNoX2ludF9iaXQgKGdk YmFyY2gsIDIgKiBUQVJHRVRfQ0hBUl9CSVQpOw0KKyAgc2V0X2dkYmFyY2hf bG9uZ19iaXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOw0KKyAg c2V0X2dkYmFyY2hfbG9uZ19sb25nX2JpdCAoZ2RiYXJjaCwgOCAqIFRBUkdF VF9DSEFSX0JJVCk7DQorICBzZXRfZ2RiYXJjaF9wdHJfYml0IChnZGJhcmNo LCAyICogVEFSR0VUX0NIQVJfQklUKTsNCisgIHNldF9nZGJhcmNoX2FkZHJf Yml0IChnZGJhcmNoLCAzMik7DQorICBzZXRfZ2RiYXJjaF9iZmRfdm1hX2Jp dCAoZ2RiYXJjaCwgMzIpOwkvKiBGSVhNRTogVFJvdGgvMjAwMi0wMi0xODog SXMgdGhpcyBuZWVkZWQ/ICovDQorDQorICBzZXRfZ2RiYXJjaF9mbG9hdF9i aXQgKGdkYmFyY2gsIDQgKiBUQVJHRVRfQ0hBUl9CSVQpOw0KKyAgc2V0X2dk YmFyY2hfZG91YmxlX2JpdCAoZ2RiYXJjaCwgNCAqIFRBUkdFVF9DSEFSX0JJ VCk7DQorICBzZXRfZ2RiYXJjaF9sb25nX2RvdWJsZV9iaXQgKGdkYmFyY2gs IDQgKiBUQVJHRVRfQ0hBUl9CSVQpOw0KKw0KKyAgc2V0X2dkYmFyY2hfZmxv YXRfZm9ybWF0IChnZGJhcmNoLCAmZmxvYXRmb3JtYXRfaWVlZV9zaW5nbGVf bGl0dGxlKTsNCisgIHNldF9nZGJhcmNoX2RvdWJsZV9mb3JtYXQgKGdkYmFy Y2gsICZmbG9hdGZvcm1hdF9pZWVlX3NpbmdsZV9saXR0bGUpOw0KKyAgc2V0 X2dkYmFyY2hfbG9uZ19kb3VibGVfZm9ybWF0IChnZGJhcmNoLCAmZmxvYXRm b3JtYXRfaWVlZV9zaW5nbGVfbGl0dGxlKTsNCisNCisgIHNldF9nZGJhcmNo X3JlYWRfcGMgKGdkYmFyY2gsIGF2cl9yZWFkX3BjKTsNCisgIHNldF9nZGJh cmNoX3dyaXRlX3BjIChnZGJhcmNoLCBhdnJfd3JpdGVfcGMpOw0KKyAgc2V0 X2dkYmFyY2hfcmVhZF9mcCAoZ2RiYXJjaCwgYXZyX3JlYWRfZnApOw0KKyAg c2V0X2dkYmFyY2hfcmVhZF9zcCAoZ2RiYXJjaCwgYXZyX3JlYWRfc3ApOw0K KyAgc2V0X2dkYmFyY2hfd3JpdGVfc3AgKGdkYmFyY2gsIGF2cl93cml0ZV9z cCk7DQorDQorICBzZXRfZ2RiYXJjaF9udW1fcmVncyAoZ2RiYXJjaCwgQVZS X05VTV9SRUdTKTsNCisNCisgIHNldF9nZGJhcmNoX3NwX3JlZ251bSAoZ2Ri YXJjaCwgQVZSX1NQX1JFR05VTSk7DQorICBzZXRfZ2RiYXJjaF9mcF9yZWdu dW0gKGdkYmFyY2gsIEFWUl9GUF9SRUdOVU0pOw0KKyAgc2V0X2dkYmFyY2hf cGNfcmVnbnVtIChnZGJhcmNoLCBBVlJfUENfUkVHTlVNKTsNCisNCisgIHNl dF9nZGJhcmNoX3JlZ2lzdGVyX25hbWUgKGdkYmFyY2gsIGF2cl9yZWdpc3Rl cl9uYW1lKTsNCisgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX3NpemUgKGdkYmFy Y2gsIDEpOw0KKyAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfYnl0ZXMgKGdkYmFy Y2gsIEFWUl9OVU1fUkVHX0JZVEVTKTsNCisgIHNldF9nZGJhcmNoX3JlZ2lz dGVyX2J5dGUgKGdkYmFyY2gsIGF2cl9yZWdpc3Rlcl9ieXRlKTsNCisgIHNl dF9nZGJhcmNoX3JlZ2lzdGVyX3Jhd19zaXplIChnZGJhcmNoLCBhdnJfcmVn aXN0ZXJfcmF3X3NpemUpOw0KKyAgc2V0X2dkYmFyY2hfbWF4X3JlZ2lzdGVy X3Jhd19zaXplIChnZGJhcmNoLCA0KTsNCisgIHNldF9nZGJhcmNoX3JlZ2lz dGVyX3ZpcnR1YWxfc2l6ZSAoZ2RiYXJjaCwgYXZyX3JlZ2lzdGVyX3ZpcnR1 YWxfc2l6ZSk7DQorICBzZXRfZ2RiYXJjaF9tYXhfcmVnaXN0ZXJfdmlydHVh bF9zaXplIChnZGJhcmNoLCA0KTsNCisgIHNldF9nZGJhcmNoX3JlZ2lzdGVy X3ZpcnR1YWxfdHlwZSAoZ2RiYXJjaCwgYXZyX3JlZ2lzdGVyX3ZpcnR1YWxf dHlwZSk7DQorDQorICAvKiBXZSBtaWdodCBuZWVkIHRvIGRlZmluZSBvdXIg b3duIGhlcmUgb3IgZGVmaW5lIEZSQU1FX0lOSVRfU0FWRURfUkVHUyAqLw0K KyAgc2V0X2dkYmFyY2hfZ2V0X3NhdmVkX3JlZ2lzdGVyIChnZGJhcmNoLCBn ZW5lcmljX2dldF9zYXZlZF9yZWdpc3Rlcik7DQorDQorICBzZXRfZ2RiYXJj aF9wcmludF9pbnNuIChnZGJhcmNoLCBwcmludF9pbnNuX2F2cik7DQorDQor ICBzZXRfZ2RiYXJjaF91c2VfZ2VuZXJpY19kdW1teV9mcmFtZXMgKGdkYmFy Y2gsIDEpOw0KKyAgc2V0X2dkYmFyY2hfY2FsbF9kdW1teV9sb2NhdGlvbiAo Z2RiYXJjaCwgQVRfRU5UUllfUE9JTlQpOw0KKyAgc2V0X2dkYmFyY2hfY2Fs bF9kdW1teV9hZGRyZXNzIChnZGJhcmNoLCBhdnJfY2FsbF9kdW1teV9hZGRy ZXNzKTsNCisgIHNldF9nZGJhcmNoX2NhbGxfZHVtbXlfc3RhcnRfb2Zmc2V0 IChnZGJhcmNoLCAwKTsNCisgIHNldF9nZGJhcmNoX2NhbGxfZHVtbXlfYnJl YWtwb2ludF9vZmZzZXRfcCAoZ2RiYXJjaCwgMSk7DQorICBzZXRfZ2RiYXJj aF9jYWxsX2R1bW15X2JyZWFrcG9pbnRfb2Zmc2V0IChnZGJhcmNoLCAwKTsN CisgIHNldF9nZGJhcmNoX2NhbGxfZHVtbXlfbGVuZ3RoIChnZGJhcmNoLCAw KTsNCisgIHNldF9nZGJhcmNoX3BjX2luX2NhbGxfZHVtbXkgKGdkYmFyY2gs IGdlbmVyaWNfcGNfaW5fY2FsbF9kdW1teSk7DQorICBzZXRfZ2RiYXJjaF9j YWxsX2R1bW15X3AgKGdkYmFyY2gsIDEpOw0KKyAgc2V0X2dkYmFyY2hfY2Fs bF9kdW1teV93b3JkcyAoZ2RiYXJjaCwgYXZyX2NhbGxfZHVtbXlfd29yZHMp Ow0KKyAgc2V0X2dkYmFyY2hfY2FsbF9kdW1teV9zdGFja19hZGp1c3RfcCAo Z2RiYXJjaCwgMCk7DQorICBzZXRfZ2RiYXJjaF9maXhfY2FsbF9kdW1teSAo Z2RiYXJjaCwgZ2VuZXJpY19maXhfY2FsbF9kdW1teSk7DQorDQorLyogICAg c2V0X2dkYmFyY2hfYmVsaWV2ZV9wY2NfcHJvbW90aW9uIChnZGJhcmNoLCAx KTsgLy8gVFJvdGg6IHNob3VsZCB0aGlzIGJlIHNldD8gKi8NCisNCisgIHNl dF9nZGJhcmNoX2FkZHJlc3NfdG9fcG9pbnRlciAoZ2RiYXJjaCwgYXZyX2Fk ZHJlc3NfdG9fcG9pbnRlcik7DQorICBzZXRfZ2RiYXJjaF9wb2ludGVyX3Rv X2FkZHJlc3MgKGdkYmFyY2gsIGF2cl9wb2ludGVyX3RvX2FkZHJlc3MpOw0K KyAgc2V0X2dkYmFyY2hfZXh0cmFjdF9yZXR1cm5fdmFsdWUgKGdkYmFyY2gs IGF2cl9leHRyYWN0X3JldHVybl92YWx1ZSk7DQorICBzZXRfZ2RiYXJjaF9w dXNoX2FyZ3VtZW50cyAoZ2RiYXJjaCwgYXZyX3B1c2hfYXJndW1lbnRzKTsN CisgIHNldF9nZGJhcmNoX3B1c2hfZHVtbXlfZnJhbWUgKGdkYmFyY2gsIGdl bmVyaWNfcHVzaF9kdW1teV9mcmFtZSk7DQorLyogICAgc2V0X2dkYmFyY2hf cHVzaF9yZXR1cm5fYWRkcmVzcyAoZ2RiYXJjaCwgYXZyX3B1c2hfcmV0dXJu X2FkZHJlc3MpOyAqLw0KKyAgc2V0X2dkYmFyY2hfcG9wX2ZyYW1lIChnZGJh cmNoLCBhdnJfcG9wX2ZyYW1lKTsNCisNCisgIHNldF9nZGJhcmNoX3N0b3Jl X3JldHVybl92YWx1ZSAoZ2RiYXJjaCwgYXZyX3N0b3JlX3JldHVybl92YWx1 ZSk7DQorDQorICBzZXRfZ2RiYXJjaF91c2Vfc3RydWN0X2NvbnZlbnRpb24g KGdkYmFyY2gsIGdlbmVyaWNfdXNlX3N0cnVjdF9jb252ZW50aW9uKTsNCisg IHNldF9nZGJhcmNoX3N0b3JlX3N0cnVjdF9yZXR1cm4gKGdkYmFyY2gsIGF2 cl9zdG9yZV9zdHJ1Y3RfcmV0dXJuKTsNCisgIHNldF9nZGJhcmNoX2V4dHJh Y3Rfc3RydWN0X3ZhbHVlX2FkZHJlc3MgKGdkYmFyY2gsDQorCQkJCQkgICAg YXZyX2V4dHJhY3Rfc3RydWN0X3ZhbHVlX2FkZHJlc3MpOw0KKw0KKyAgc2V0 X2dkYmFyY2hfZnJhbWVfaW5pdF9zYXZlZF9yZWdzIChnZGJhcmNoLCBhdnJf c2Nhbl9wcm9sb2d1ZSk7DQorICBzZXRfZ2RiYXJjaF9pbml0X2V4dHJhX2Zy YW1lX2luZm8gKGdkYmFyY2gsIGF2cl9pbml0X2V4dHJhX2ZyYW1lX2luZm8p Ow0KKyAgc2V0X2dkYmFyY2hfc2tpcF9wcm9sb2d1ZSAoZ2RiYXJjaCwgYXZy X3NraXBfcHJvbG9ndWUpOw0KKy8qICAgIHNldF9nZGJhcmNoX3Byb2xvZ3Vl X2ZyYW1lbGVzc19wIChnZGJhcmNoLCBhdnJfcHJvbG9ndWVfZnJhbWVsZXNz X3ApOyAqLw0KKyAgc2V0X2dkYmFyY2hfaW5uZXJfdGhhbiAoZ2RiYXJjaCwg Y29yZV9hZGRyX2xlc3N0aGFuKTsNCisNCisgIHNldF9nZGJhcmNoX2RlY3Jf cGNfYWZ0ZXJfYnJlYWsgKGdkYmFyY2gsIDApOw0KKw0KKyAgc2V0X2dkYmFy Y2hfZnVuY3Rpb25fc3RhcnRfb2Zmc2V0IChnZGJhcmNoLCAwKTsNCisgIHNl dF9nZGJhcmNoX3JlbW90ZV90cmFuc2xhdGVfeGZlcl9hZGRyZXNzIChnZGJh cmNoLA0KKwkJCQkJICAgICBhdnJfcmVtb3RlX3RyYW5zbGF0ZV94ZmVyX2Fk ZHJlc3MpOw0KKyAgc2V0X2dkYmFyY2hfZnJhbWVfYXJnc19za2lwIChnZGJh cmNoLCAwKTsNCisgIHNldF9nZGJhcmNoX2ZyYW1lbGVzc19mdW5jdGlvbl9p bnZvY2F0aW9uIChnZGJhcmNoLCBmcmFtZWxlc3NfbG9va19mb3JfcHJvbG9n dWUpOwkvKiA/Pz8gKi8NCisgIHNldF9nZGJhcmNoX2ZyYW1lX2NoYWluIChn ZGJhcmNoLCBhdnJfZnJhbWVfY2hhaW4pOw0KKyAgc2V0X2dkYmFyY2hfZnJh bWVfY2hhaW5fdmFsaWQgKGdkYmFyY2gsIGdlbmVyaWNfZnVuY19mcmFtZV9j aGFpbl92YWxpZCk7DQorICBzZXRfZ2RiYXJjaF9mcmFtZV9zYXZlZF9wYyAo Z2RiYXJjaCwgYXZyX2ZyYW1lX3NhdmVkX3BjKTsNCisgIHNldF9nZGJhcmNo X2ZyYW1lX2FyZ3NfYWRkcmVzcyAoZ2RiYXJjaCwgYXZyX2ZyYW1lX2FkZHJl c3MpOw0KKyAgc2V0X2dkYmFyY2hfZnJhbWVfbG9jYWxzX2FkZHJlc3MgKGdk YmFyY2gsIGF2cl9mcmFtZV9hZGRyZXNzKTsNCisgIHNldF9nZGJhcmNoX3Nh dmVkX3BjX2FmdGVyX2NhbGwgKGdkYmFyY2gsIGF2cl9zYXZlZF9wY19hZnRl cl9jYWxsKTsNCisgIHNldF9nZGJhcmNoX2ZyYW1lX251bV9hcmdzIChnZGJh cmNoLCBmcmFtZV9udW1fYXJnc191bmtub3duKTsNCisNCisgIHNldF9nZGJh cmNoX2NvbnZlcnRfZnJvbV9mdW5jX3B0cl9hZGRyIChnZGJhcmNoLA0KKwkJ CQkJICBhdnJfY29udmVydF9mcm9tX2Z1bmNfcHRyX2FkZHIpOw0KKw0KKyAg cmV0dXJuIGdkYmFyY2g7DQorfQ0KKw0KKy8qIFNlbmQgYSBxdWVyeSByZXF1 ZXN0IHRvIHRoZSBhdnIgcmVtb3RlIHRhcmdldCBhc2tpbmcgZm9yIHZhbHVl cyBvZiB0aGUgaW8NCisgICByZWdpc3RlcnMuIElmIGFyZ3MgcGFyYW1ldGVy IGlzIG5vdCBOVUxMLCB0aGVuIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgaW5m bw0KKyAgIG9uIGEgc3BlY2lmaWMgaW8gcmVnaXN0ZXIgW1RoaXMgc3RpbGwg bmVlZHMgaW1wbGVtZW50ZWQgYW5kIGlzIGlnbm9yZWQgZm9yDQorICAgbm93 XS4gVGhlIHF1ZXJ5IHN0cmluZyBzaG91bGQgYmUgb25lIG9mIHRoZXNlIGZv cm1zOg0KKw0KKyAgICJSYXZyLmlvX3JlZyIgLT4gcmVwbHkgaXMgIk5OIiBu dW1iZXIgb2YgaW8gcmVnaXN0ZXJzDQorDQorICAgIlJhdnIuaW9fcmVnOmFk ZHIsbGVuIiB3aGVyZSBhZGRyIGlzIGZpcnN0IHJlZ2lzdGVyIGFuZCBsZW4g aXMgbnVtYmVyIG9mDQorICAgcmVnaXN0ZXJzIHRvIGJlIHJlYWQuIFRoZSBy ZXBseSBzaG91bGQgYmUgIjxOQU1FPixWVjsiIGZvciBlYWNoIGlvIHJlZ2lz dGVyDQorICAgd2hlcmUsIDxOQU1FPiBpcyBhIHN0cmluZywgYW5kIFZWIGlz IHRoZSBoZXggdmFsdWUgb2YgdGhlIHJlZ2lzdGVyLg0KKw0KKyAgIEFsbCBp byByZWdpc3RlcnMgYXJlIDgtYml0LiAqLw0KKw0KK3N0YXRpYyB2b2lkDQor YXZyX2lvX3JlZ19yZWFkX2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9t X3R0eSkNCit7DQorICBpbnQgYnVmc2l6ID0gMDsNCisgIGNoYXIgYnVmWzQw MF07DQorICBjaGFyIHF1ZXJ5WzQwMF07DQorICBjaGFyICpwOw0KKyAgdW5z aWduZWQgaW50IG5yZWcgPSAwOw0KKyAgdW5zaWduZWQgaW50IHZhbDsNCisg IGludCBpLCBqLCBrLCBzdGVwOw0KKw0KKy8qICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGVyciwgIkRFQlVHOiBhdnJfaW9fcmVnX3JlYWRfY29t bWFuZCAoXCIlc1wiLCAlZClcbiIsICovDQorLyogICAgICAgICAgICAgYXJn cywgZnJvbV90dHkpOyAqLw0KKw0KKyAgaWYgKCFjdXJyZW50X3RhcmdldC50 b19xdWVyeSkNCisgICAgew0KKyAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGVyciwNCisJCQkgICJFUlI6IGluZm8gaW9fcmVnaXN0ZXJzIE5P VCBzdXBwb3J0ZWQgYnkgY3VycmVudCB0YXJnZXRcbiIpOw0KKyAgICAgIHJl dHVybjsNCisgICAgfQ0KKw0KKyAgLyogSnVzdCBnZXQgdGhlIG1heGltdW0g YnVmZmVyIHNpemUuICovDQorICB0YXJnZXRfcXVlcnkgKChpbnQpICdSJywg MCwgMCwgJmJ1ZnNpeik7DQorICBpZiAoYnVmc2l6ID4gc2l6ZW9mIChidWYp KQ0KKyAgICBidWZzaXogPSBzaXplb2YgKGJ1Zik7DQorDQorICAvKiBGaW5k IG91dCBob3cgbWFueSBpbyByZWdpc3RlcnMgdGhlIHRhcmdldCBoYXMuICov DQorICBzdHJjcHkgKHF1ZXJ5LCAiYXZyLmlvX3JlZyIpOw0KKyAgdGFyZ2V0 X3F1ZXJ5ICgoaW50KSAnUicsIHF1ZXJ5LCBidWYsICZidWZzaXopOw0KKw0K KyAgaWYgKHN0cm5jbXAgKGJ1ZiwgIiIsIGJ1ZnNpeikgPT0gMCkNCisgICAg ew0KKyAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGVyciwNCisJ CQkgICJpbmZvIGlvX3JlZ2lzdGVycyBOT1Qgc3VwcG9ydGVkIGJ5IHRhcmdl dFxuIik7DQorICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICBpZiAoc3Nj YW5mIChidWYsICIleCIsICZucmVnKSAhPSAxKQ0KKyAgICB7DQorICAgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkZXJyLA0KKwkJCSAgIkVycm9y IGZldGNoaW5nIG51bWJlciBvZiBpbyByZWdpc3RlcnNcbiIpOw0KKyAgICAg IHJldHVybjsNCisgICAgfQ0KKw0KKyAgcmVpbml0aWFsaXplX21vcmVfZmls dGVyICgpOw0KKw0KKyAgcHJpbnRmX3VuZmlsdGVyZWQgKCJUYXJnZXQgaGFz ICV1IGlvIHJlZ2lzdGVyczpcblxuIiwgbnJlZyk7DQorDQorICAvKiBvbmx5 IGZldGNoIHVwIHRvIDggcmVnaXN0ZXJzIGF0IGEgdGltZSB0byBrZWVwIHRo ZSBidWZmZXIgc21hbGwgKi8NCisgIHN0ZXAgPSA4Ow0KKw0KKyAgZm9yIChp ID0gMDsgaSA8IG5yZWc7IGkgKz0gc3RlcCkNCisgICAgew0KKyAgICAgIGog PSBzdGVwIC0gKG5yZWcgJSBzdGVwKTsJLyogaG93IG1hbnkgcmVnaXN0ZXJz IHRoaXMgcm91bmQ/ICovDQorDQorICAgICAgc25wcmludGYgKHF1ZXJ5LCBz aXplb2YgKHF1ZXJ5KSAtIDEsICJhdnIuaW9fcmVnOiV4LCV4IiwgaSwgaik7 DQorICAgICAgdGFyZ2V0X3F1ZXJ5ICgoaW50KSAnUicsIHF1ZXJ5LCBidWYs ICZidWZzaXopOw0KKw0KKyAgICAgIHAgPSBidWY7DQorICAgICAgZm9yIChr ID0gaTsgayA8IChpICsgaik7IGsrKykNCisJew0KKwkgIGlmIChzc2NhbmYg KHAsICIlW14sXSwleDsiLCBxdWVyeSwgJnZhbCkgPT0gMikNCisJICAgIHsN CisJICAgICAgcHJpbnRmX2ZpbHRlcmVkICgiWyUwMnhdICUtMTVzIDogJTAy eFxuIiwgaywgcXVlcnksIHZhbCk7DQorCSAgICAgIHdoaWxlICgoKnAgIT0g JzsnKSAmJiAoKnAgIT0gJ1wwJykpDQorCQlwKys7DQorCSAgICAgIHArKzsJ CS8qIHNraXAgb3ZlciAnOycgKi8NCisJICAgICAgaWYgKCpwID09ICdcMCcp DQorCQlicmVhazsNCisJICAgIH0NCisJfQ0KKyAgICB9DQorfQ0KKw0KK3Zv aWQNCitfaW5pdGlhbGl6ZV9hdnJfdGRlcCAodm9pZCkNCit7DQorICByZWdp c3Rlcl9nZGJhcmNoX2luaXQgKGJmZF9hcmNoX2F2ciwgYXZyX2dkYmFyY2hf aW5pdCk7DQorDQorICAvKiBBZGQgYSBuZXcgY29tbWFuZCB0byBhbGxvdyB0 aGUgdXNlciB0byBxdWVyeSB0aGUgYXZyIHJlbW90ZSB0YXJnZXQgZm9yDQor ICAgICB0aGUgdmFsdWVzIG9mIHRoZSBpbyBzcGFjZSByZWdpc3RlcnMgaW4g YSBzYW5lciB3YXkgdGhhbiBqdXN0IHVzaW5nDQorICAgICBgeC9OTk5iIEFE RFJgLiAqLw0KKw0KKyAgLyogRklYTUU6IFRSb3RoLzIwMDItMDItMTg6IFRo aXMgc2hvdWxkIHByb2JhYmx5IGJlIGNoYW5nZWQgdG8gJ2luZm8gYXZyDQor ICAgICBpb19yZWdpc3RlcnMnIHRvIHNpZ25pZnkgaXQgaXMgbm90IGF2YWls YWJsZSBvbiBvdGhlciBwbGF0Zm9ybXMuICovDQorDQorICBhZGRfY21kICgi aW9fcmVnaXN0ZXJzIiwgY2xhc3NfaW5mbywgYXZyX2lvX3JlZ19yZWFkX2Nv bW1hbmQsDQorCSAgICJxdWVyeSByZW1vdGUgYXZyIHRhcmdldCBmb3IgaW8g c3BhY2UgcmVnaXN0ZXIgdmFsdWVzIiwgJmluZm9saXN0KTsNCit9DQpkaWZm IC11ck4gZ2RiLTUuMi9nZGIvY29uZmlnL2F2ci9hdnIubXQgZ2RiLTUuMi1h dnIvZ2RiL2NvbmZpZy9hdnIvYXZyLm10DQotLS0gZ2RiLTUuMi9nZGIvY29u ZmlnL2F2ci9hdnIubXQJV2VkIERlYyAzMSAxNzowMDowMCAxOTY5DQorKysg Z2RiLTUuMi1hdnIvZ2RiL2NvbmZpZy9hdnIvYXZyLm10CVR1ZSBBcHIgMzAg MTA6Mjk6NDAgMjAwMg0KQEAgLTAsMCArMSwxMiBAQA0KKyMgVGFyZ2V0OiBB VlINCitUREVQRklMRVM9IGF2ci10ZGVwLm8NCisNCisjDQorIyBUaGVyZSBp cyBubyBzaW11bGF0b3IgcHJvdmlkZWQgd2l0aCBnZGIgKHlldCkuDQorIw0K KyMgU2VlIDxodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0cy9zaW11 bGF2ci8+IGZvciB0aGUgc2ltdWxhdG9yDQorIyB1c2VkIGR1cmluZyBkZXZl bG9wbWVudCBvZiBhdnIgc3VwcG9ydCBmb3IgZ2RiLg0KKyMNCisjIFNpbXVs YXRvcjogQVZSDQorI1NJTV9PQlMgPSByZW1vdGUtc2ltLm8NCisjU0lNID0g Li4vc2ltL2F2ci9saWJzaW0uYQ0KZGlmZiAtdXJOIGdkYi01LjIvZ2RiL2Nv bmZpZ3VyZS50Z3QgZ2RiLTUuMi1hdnIvZ2RiL2NvbmZpZ3VyZS50Z3QNCi0t LSBnZGItNS4yL2dkYi9jb25maWd1cmUudGd0CUZyaSBNYXIgIDEgMTE6MzU6 MjMgMjAwMg0KKysrIGdkYi01LjItYXZyL2dkYi9jb25maWd1cmUudGd0CVR1 ZSBBcHIgMzAgMTA6Mjk6NDAgMjAwMg0KQEAgLTE0LDYgKzE0LDcgQEANCiAN CiBhbHBoYSopCQkJZ2RiX3RhcmdldF9jcHU9YWxwaGEgOzsNCiBhcm0qKQkJ CWdkYl90YXJnZXRfY3B1PWFybSA7Ow0KK2F2ciopCQkJZ2RiX3RhcmdldF9j cHU9YXZyIDs7DQogaHBwYSopCQkJZ2RiX3RhcmdldF9jcHU9cGEgOzsNCiBp WzM0NTZdODYqKQkJZ2RiX3RhcmdldF9jcHU9aTM4NiA7Ow0KIG02OGhjMTEq fG02ODExKikJZ2RiX3RhcmdldF9jcHU9bTY4aGMxMSA7Ow0KQEAgLTY1LDYg KzY2LDEwIEBADQogICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnZGly cz0iJGNvbmZpZ2RpcnMgcmRpLXNoYXJlIg0KICAgICAgICAgICAgICAgICAg ICAgICAgIDs7DQogDQorYXZyLSotKikJCWdkYl90YXJnZXQ9YXZyDQorCQkJ Z2RiX211bHRpX2FyY2g9eWVzDQorCQkJOzsNCisNCiBjcmlzKikgICAgICAg ICAgICAgICAgICBnZGJfdGFyZ2V0PWNyaXMgOzsNCiANCiBkMTB2LSotKikJ CWdkYl90YXJnZXQ9ZDEwdiA7Ow0K --8323328-1865518803-1022363935=:29230--