Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S262648AbVCSShE (ORCPT ); Sat, 19 Mar 2005 13:37:04 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262590AbVCSShE (ORCPT ); Sat, 19 Mar 2005 13:37:04 -0500 Received: from mailgw1.technion.ac.il ([132.68.238.34]:60334 "EHLO mailgw1.technion.ac.il") by vger.kernel.org with ESMTP id S262653AbVCSSdc (ORCPT ); Sat, 19 Mar 2005 13:33:32 -0500 Date: Sat, 19 Mar 2005 20:33:14 +0200 (IST) From: Jacques Goldberg X-X-Sender: goldberg@localhost.localdomain Reply-To: Jacques Goldberg To: Greg KH Cc: linux-kernel@vger.kernel.org Subject: Re: Need break driver<-->pci-device automatic association In-Reply-To: <20050318165124.GC14952@kroah.com> Message-ID: References: <20050318165124.GC14952@kroah.com> X-MailKey: 829.36.63 MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-1181590737-1111257194=:11358" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 80034 Lines: 1322 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-1181590737-1111257194=:11358 Content-Type: TEXT/PLAIN; charset=US-ASCII Good news! That's really what is needed (mainline). I attach the file which Sasha, author or the lmodem driver, has modified and then it works for the chips hard-wired in the routine. To locate the patched area, look for 5457 I am an experimental physicist, not a computer expert. If this kind of algorithm could be implemented in the mainlin 8250_pci.c , then I would dream of looking for an /etc/config file containing such a list, whose objects would be skipped by the serial driver. Sorry to repeat myself, but avoiding the need for the users to recompile a kernel should be the first worry when implementing a solution. Thanks - Jacques --8323328-1181590737-1111257194=:11358 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="8250_pci.c" Content-Transfer-Encoding: BASE64 Content-Description: Content-Disposition: attachment; filename="8250_pci.c" LyoNCiAqICBsaW51eC9kcml2ZXJzL2NoYXIvODI1MF9wY2kuYw0KICoNCiAq ICBQcm9iZSBtb2R1bGUgZm9yIDgyNTAvMTY1NTAtdHlwZSBQQ0kgc2VyaWFs IHBvcnRzLg0KICoNCiAqICBCYXNlZCBvbiBkcml2ZXJzL2NoYXIvc2VyaWFs LmMsIGJ5IExpbnVzIFRvcnZhbGRzLCBUaGVvZG9yZSBUcydvLg0KICoNCiAq ICBDb3B5cmlnaHQgKEMpIDIwMDEgUnVzc2VsbCBLaW5nLCBBbGwgUmlnaHRz IFJlc2VydmVkLg0KICoNCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQog KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KICogdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZS4NCiAqDQogKiAgJElkOiA4MjUwX3BjaS5jLHYgMS4yOCAyMDAyLzExLzAy IDExOjE0OjE4IHJtayBFeHAgJA0KICovDQojaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+DQojaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KI2luY2x1ZGUgPGxp bnV4L3BjaS5oPg0KI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQojaW5jbHVk ZSA8bGludXgvc3RyaW5nLmg+DQojaW5jbHVkZSA8bGludXgva2VybmVsLmg+ DQojaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+DQojaW5jbHVkZSA8bGludXgvdHR5Lmg+DQojaW5jbHVkZSA8bGlu dXgvc2VyaWFsX2NvcmUuaD4NCiNpbmNsdWRlIDxsaW51eC84MjUwX3BjaS5o Pg0KI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPg0KDQojaW5jbHVkZSA8YXNt L2J5dGVvcmRlci5oPg0KI2luY2x1ZGUgPGFzbS9pby5oPg0KDQojaW5jbHVk ZSAiODI1MC5oIg0KDQovKg0KICogRGVmaW5pdGlvbnMgZm9yIFBDSSBzdXBw b3J0Lg0KICovDQojZGVmaW5lIEZMX0JBU0VfTUFTSwkJMHgwMDA3DQojZGVm aW5lIEZMX0JBU0UwCQkweDAwMDANCiNkZWZpbmUgRkxfQkFTRTEJCTB4MDAw MQ0KI2RlZmluZSBGTF9CQVNFMgkJMHgwMDAyDQojZGVmaW5lIEZMX0JBU0Uz CQkweDAwMDMNCiNkZWZpbmUgRkxfQkFTRTQJCTB4MDAwNA0KI2RlZmluZSBG TF9HRVRfQkFTRSh4KQkJKHggJiBGTF9CQVNFX01BU0spDQoNCi8qIFVzZSBz dWNjZXNzaXZlIEJBUnMgKFBDSSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXJzKSwN CiAgIGVsc2UgdXNlIG9mZnNldCBpbnRvIHNvbWUgc3BlY2lmaWVkIEJBUiAq Lw0KI2RlZmluZSBGTF9CQVNFX0JBUlMJCTB4MDAwOA0KDQovKiBkbyBub3Qg YXNzaWduIGFuIGlycSAqLw0KI2RlZmluZSBGTF9OT0lSUQkJMHgwMDgwDQoN Ci8qIFVzZSB0aGUgQmFzZSBhZGRyZXNzIHJlZ2lzdGVyIHNpemUgdG8gY2Fw IG51bWJlciBvZiBwb3J0cyAqLw0KI2RlZmluZSBGTF9SRUdJT05fU1pfQ0FQ CTB4MDEwMA0KDQpzdHJ1Y3QgcGNpX2JvYXJkIHsNCgl1bnNpZ25lZCBpbnQg ZmxhZ3M7DQoJdW5zaWduZWQgaW50IG51bV9wb3J0czsNCgl1bnNpZ25lZCBp bnQgYmFzZV9iYXVkOw0KCXVuc2lnbmVkIGludCB1YXJ0X29mZnNldDsNCgl1 bnNpZ25lZCBpbnQgcmVnX3NoaWZ0Ow0KCXVuc2lnbmVkIGludCBmaXJzdF9v ZmZzZXQ7DQp9Ow0KDQovKg0KICogaW5pdCBmdW5jdGlvbiByZXR1cm5zOg0K ICogID4gMCAtIG51bWJlciBvZiBwb3J0cw0KICogID0gMCAtIHVzZSBib2Fy ZC0+bnVtX3BvcnRzDQogKiAgPCAwIC0gZXJyb3INCiAqLw0Kc3RydWN0IHBj aV9zZXJpYWxfcXVpcmsgew0KCXUzMgl2ZW5kb3I7DQoJdTMyCWRldmljZTsN Cgl1MzIJc3VidmVuZG9yOw0KCXUzMglzdWJkZXZpY2U7DQoJaW50CSgqaW5p dCkoc3RydWN0IHBjaV9kZXYgKmRldik7DQoJaW50CSgqc2V0dXApKHN0cnVj dCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfYm9hcmQgKmJvYXJkLA0KCQkJ IHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBpZHgpOw0KCXZvaWQJKCpl eGl0KShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsNCn07DQoNCiNkZWZpbmUgUENJ X05VTV9CQVJfUkVTT1VSQ0VTCTYNCg0Kc3RydWN0IHNlcmlhbF9wcml2YXRl IHsNCgl1bnNpZ25lZCBpbnQJCW5yOw0KCXZvaWQgX19pb21lbQkJKnJlbWFw cGVkX2JhcltQQ0lfTlVNX0JBUl9SRVNPVVJDRVNdOw0KCXN0cnVjdCBwY2lf c2VyaWFsX3F1aXJrCSpxdWlyazsNCglpbnQJCQlsaW5lWzBdOw0KfTsNCg0K c3RhdGljIHZvaWQgbW9hbl9kZXZpY2UoY29uc3QgY2hhciAqc3RyLCBzdHJ1 Y3QgcGNpX2RldiAqZGV2KQ0Kew0KCXByaW50ayhLRVJOX1dBUk5JTkcgIiVz OiAlc1xuIg0KCSAgICAgICBLRVJOX1dBUk5JTkcgIlBsZWFzZSBzZW5kIHRo ZSBvdXRwdXQgb2YgbHNwY2kgLXZ2LCB0aGlzXG4iDQoJICAgICAgIEtFUk5f V0FSTklORyAibWVzc2FnZSAoMHglMDR4LDB4JTA0eCwweCUwNHgsMHglMDR4 KSwgdGhlXG4iDQoJICAgICAgIEtFUk5fV0FSTklORyAibWFudWZhY3R1cmVy IGFuZCBuYW1lIG9mIHNlcmlhbCBib2FyZCBvclxuIg0KCSAgICAgICBLRVJO X1dBUk5JTkcgIm1vZGVtIGJvYXJkIHRvIHJtaytzZXJpYWxAYXJtLmxpbnV4 Lm9yZy51ay5cbiIsDQoJICAgICAgIHBjaV9uYW1lKGRldiksIHN0ciwgZGV2 LT52ZW5kb3IsIGRldi0+ZGV2aWNlLA0KCSAgICAgICBkZXYtPnN1YnN5c3Rl bV92ZW5kb3IsIGRldi0+c3Vic3lzdGVtX2RldmljZSk7DQp9DQoNCnN0YXRp YyBpbnQNCnNldHVwX3BvcnQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0 IHVhcnRfcG9ydCAqcG9ydCwNCgkgICBpbnQgYmFyLCBpbnQgb2Zmc2V0LCBp bnQgcmVnc2hpZnQpDQp7DQoJc3RydWN0IHNlcmlhbF9wcml2YXRlICpwcml2 ID0gcGNpX2dldF9kcnZkYXRhKGRldik7DQoJdW5zaWduZWQgbG9uZyBiYXNl LCBsZW47DQoNCglpZiAoYmFyID49IFBDSV9OVU1fQkFSX1JFU09VUkNFUykN CgkJcmV0dXJuIC1FSU5WQUw7DQoNCglpZiAocGNpX3Jlc291cmNlX2ZsYWdz KGRldiwgYmFyKSAmIElPUkVTT1VSQ0VfTUVNKSB7DQoJCWJhc2UgPSBwY2lf cmVzb3VyY2Vfc3RhcnQoZGV2LCBiYXIpOw0KCQlsZW4gPSAgcGNpX3Jlc291 cmNlX2xlbihkZXYsIGJhcik7DQoNCgkJaWYgKCFwcml2LT5yZW1hcHBlZF9i YXJbYmFyXSkNCgkJCXByaXYtPnJlbWFwcGVkX2JhcltiYXJdID0gaW9yZW1h cChiYXNlLCBsZW4pOw0KCQlpZiAoIXByaXYtPnJlbWFwcGVkX2JhcltiYXJd KQ0KCQkJcmV0dXJuIC1FTk9NRU07DQoNCgkJcG9ydC0+aW90eXBlID0gVVBJ T19NRU07DQoJCXBvcnQtPm1hcGJhc2UgPSBiYXNlICsgb2Zmc2V0Ow0KCQlw b3J0LT5tZW1iYXNlID0gcHJpdi0+cmVtYXBwZWRfYmFyW2Jhcl0gKyBvZmZz ZXQ7DQoJCXBvcnQtPnJlZ3NoaWZ0ID0gcmVnc2hpZnQ7DQoJfSBlbHNlIHsN CgkJYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcikgKyBvZmZz ZXQ7DQoJCXBvcnQtPmlvdHlwZSA9IFVQSU9fUE9SVDsNCgkJcG9ydC0+aW9i YXNlID0gYmFzZTsNCgl9DQoJcmV0dXJuIDA7DQp9DQoNCi8qDQogKiBBRkFW TEFCIHVzZXMgYSBkaWZmZXJlbnQgbWl4dHVyZSBvZiBCQVJzIGFuZCBvZmZz ZXRzDQogKiBOb3QgdGhhdCB1Z2x5IDspIC0tIEhXDQogKi8NCnN0YXRpYyBp bnQNCmFmYXZsYWJfc2V0dXAoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0 IHBjaV9ib2FyZCAqYm9hcmQsDQoJICAgICAgc3RydWN0IHVhcnRfcG9ydCAq cG9ydCwgaW50IGlkeCkNCnsNCgl1bnNpZ25lZCBpbnQgYmFyLCBvZmZzZXQg PSBib2FyZC0+Zmlyc3Rfb2Zmc2V0Ow0KCQ0KCWJhciA9IEZMX0dFVF9CQVNF KGJvYXJkLT5mbGFncyk7DQoJaWYgKGlkeCA8IDQpDQoJCWJhciArPSBpZHg7 DQoJZWxzZSB7DQoJCWJhciA9IDQ7DQoJCW9mZnNldCArPSAoaWR4IC0gNCkg KiBib2FyZC0+dWFydF9vZmZzZXQ7DQoJfQ0KDQoJcmV0dXJuIHNldHVwX3Bv cnQoZGV2LCBwb3J0LCBiYXIsIG9mZnNldCwgYm9hcmQtPnJlZ19zaGlmdCk7 DQp9DQoNCi8qDQogKiBIUCdzIFJlbW90ZSBNYW5hZ2VtZW50IENvbnNvbGUu ICBUaGUgRGl2YSBjaGlwIGNhbWUgaW4gc2V2ZXJhbA0KICogZGlmZmVyZW50 IHZlcnNpb25zLiAgTi1jbGFzcywgTDIwMDAgYW5kIEE1MDAgaGF2ZSB0d28g RGl2YSBjaGlwcywgZWFjaA0KICogd2l0aCAzIFVBUlRzICh0aGUgdGhpcmQg VUFSVCBvbiB0aGUgc2Vjb25kIGNoaXAgaXMgdW51c2VkKS4gIFN1cGVyZG9t ZQ0KICogYW5kIEtleXN0b25lIGhhdmUgb25lIERpdmEgY2hpcCB3aXRoIDMg VUFSVHMuICBTb21lIGxhdGVyIG1hY2hpbmVzIGhhdmUNCiAqIG9uZSBEaXZh IGNoaXAsIGJ1dCBpdCBoYXMgYmVlbiBleHBhbmRlZCB0byA1IFVBUlRzLg0K ICovDQpzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2lfaHBfZGl2YV9pbml0KHN0 cnVjdCBwY2lfZGV2ICpkZXYpDQp7DQoJaW50IHJjID0gMDsNCg0KCXN3aXRj aCAoZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKSB7DQoJY2FzZSBQQ0lfREVWSUNF X0lEX0hQX0RJVkFfVE9TQ0ExOg0KCWNhc2UgUENJX0RFVklDRV9JRF9IUF9E SVZBX0hBTEZET01FOg0KCWNhc2UgUENJX0RFVklDRV9JRF9IUF9ESVZBX0tF WVNUT05FOg0KCWNhc2UgUENJX0RFVklDRV9JRF9IUF9ESVZBX0VWRVJFU1Q6 DQoJCXJjID0gMzsNCgkJYnJlYWs7DQoJY2FzZSBQQ0lfREVWSUNFX0lEX0hQ X0RJVkFfVE9TQ0EyOg0KCQlyYyA9IDI7DQoJCWJyZWFrOw0KCWNhc2UgUENJ X0RFVklDRV9JRF9IUF9ESVZBX01BRVNUUk86DQoJCXJjID0gNDsNCgkJYnJl YWs7DQoJY2FzZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfUE9XRVJCQVI6DQoJ CXJjID0gMTsNCgkJYnJlYWs7DQoJfQ0KDQoJcmV0dXJuIHJjOw0KfQ0KDQov Kg0KICogSFAncyBEaXZhIGNoaXAgcHV0cyB0aGUgNHRoLzV0aCBzZXJpYWwg cG9ydCBmdXJ0aGVyIG91dCwgYW5kDQogKiBzb21lIHNlcmlhbCBwb3J0cyBh cmUgc3VwcG9zZWQgdG8gYmUgaGlkZGVuIG9uIGNlcnRhaW4gbW9kZWxzLg0K ICovDQpzdGF0aWMgaW50DQpwY2lfaHBfZGl2YV9zZXR1cChzdHJ1Y3QgcGNp X2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2JvYXJkICpib2FyZCwNCgkgICAgICBz dHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgaWR4KQ0Kew0KCXVuc2lnbmVk IGludCBvZmZzZXQgPSBib2FyZC0+Zmlyc3Rfb2Zmc2V0Ow0KCXVuc2lnbmVk IGludCBiYXIgPSBGTF9HRVRfQkFTRShib2FyZC0+ZmxhZ3MpOw0KDQoJc3dp dGNoIChkZXYtPnN1YnN5c3RlbV9kZXZpY2UpIHsNCgljYXNlIFBDSV9ERVZJ Q0VfSURfSFBfRElWQV9NQUVTVFJPOg0KCQlpZiAoaWR4ID09IDMpDQoJCQlp ZHgrKzsNCgkJYnJlYWs7DQoJY2FzZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFf RVZFUkVTVDoNCgkJaWYgKGlkeCA+IDApDQoJCQlpZHgrKzsNCgkJaWYgKGlk eCA+IDIpDQoJCQlpZHgrKzsNCgkJYnJlYWs7DQoJfQ0KCWlmIChpZHggPiAy KQ0KCQlvZmZzZXQgPSAweDE4Ow0KDQoJb2Zmc2V0ICs9IGlkeCAqIGJvYXJk LT51YXJ0X29mZnNldDsNCg0KCXJldHVybiBzZXR1cF9wb3J0KGRldiwgcG9y dCwgYmFyLCBvZmZzZXQsIGJvYXJkLT5yZWdfc2hpZnQpOw0KfQ0KDQovKg0K ICogQWRkZWQgZm9yIEVLRiBJbnRlbCBpOTYwIHNlcmlhbCBib2FyZHMNCiAq Lw0Kc3RhdGljIGludCBfX2RldmluaXQgcGNpX2ludGVsaTk2MG5pX2luaXQo c3RydWN0IHBjaV9kZXYgKmRldikNCnsNCgl1bnNpZ25lZCBsb25nIG9sZHZh bDsNCg0KCWlmICghKGRldi0+c3Vic3lzdGVtX2RldmljZSAmIDB4MTAwMCkp DQoJCXJldHVybiAtRU5PREVWOw0KDQoJLyogaXMgZmlybXdhcmUgc3RhcnRl ZD8gKi8NCglwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCAodm9p ZCopICZvbGR2YWwpOyANCglpZiAob2xkdmFsID09IDB4MDAwMDEwMDBMKSB7 IC8qIFJFU0VUIHZhbHVlICovIA0KCQlwcmludGsoS0VSTl9ERUJVRyAiTG9j YWwgaTk2MCBmaXJtd2FyZSBtaXNzaW5nIik7DQoJCXJldHVybiAtRU5PREVW Ow0KCX0NCglyZXR1cm4gMDsNCn0NCg0KLyoNCiAqIFNvbWUgUENJIHNlcmlh bCBjYXJkcyB1c2luZyB0aGUgUExYIDkwNTAgUENJIGludGVyZmFjZSBjaGlw IHJlcXVpcmUNCiAqIHRoYXQgdGhlIGNhcmQgaW50ZXJydXB0IGJlIGV4cGxp Y2l0bHkgZW5hYmxlZCBvciBkaXNhYmxlZC4gIFRoaXMNCiAqIHNlZW1zIHRv IGJlIG1haW5seSBuZWVkZWQgb24gY2FyZCB1c2luZyB0aGUgUExYIHdoaWNo IGFsc28gdXNlIEkvTw0KICogbWFwcGVkIG1lbW9yeS4NCiAqLw0Kc3RhdGlj IGludCBfX2RldmluaXQgcGNpX3BseDkwNTBfaW5pdChzdHJ1Y3QgcGNpX2Rl diAqZGV2KQ0Kew0KCXU4IGlycV9jb25maWc7DQoJdm9pZCBfX2lvbWVtICpw Ow0KDQoJaWYgKChwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCAwKSAmIElPUkVT T1VSQ0VfTUVNKSA9PSAwKSB7DQoJCW1vYW5fZGV2aWNlKCJubyBtZW1vcnkg aW4gYmFyIDAiLCBkZXYpOw0KCQlyZXR1cm4gMDsNCgl9DQoNCglpcnFfY29u ZmlnID0gMHg0MTsNCglpZiAoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9J RF9QQU5BQ09NKQ0KCQlpcnFfY29uZmlnID0gMHg0MzsNCglpZiAoKGRldi0+ dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUExYKSAmJg0KCSAgICAoZGV2LT5k ZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QTFhfUk9NVUxVUykpIHsNCgkJLyoN CgkJICogQXMgdGhlIG1lZ2F3b2xmIGNhcmRzIGhhdmUgdGhlIGludCBwaW5z IGFjdGl2ZQ0KCQkgKiBoaWdoLCBhbmQgaGF2ZSAyIFVBUlQgY2hpcHMsIGJv dGggaW50cyBtdXN0IGJlDQoJCSAqIGVuYWJsZWQgb24gdGhlIDkwNTAuIEFs c28sIHRoZSBVQVJUUyBhcmUgc2V0IGluDQoJCSAqIDE2NDUwIG1vZGUgYnkg ZGVmYXVsdCwgc28gd2UgaGF2ZSB0byBlbmFibGUgdGhlDQoJCSAqIDE2Qzk1 MCAnZW5oYW5jZWQnIG1vZGUgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZQ0KCQkg KiBkZWVwIEZJRk9zDQoJCSAqLw0KCQlpcnFfY29uZmlnID0gMHg1YjsNCgl9 DQoNCgkvKg0KCSAqIGVuYWJsZS9kaXNhYmxlIGludGVycnVwdHMNCgkgKi8N CglwID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwgMHg4 MCk7DQoJaWYgKHAgPT0gTlVMTCkNCgkJcmV0dXJuIC1FTk9NRU07DQoJd3Jp dGVsKGlycV9jb25maWcsIHAgKyAweDRjKTsNCg0KCS8qDQoJICogUmVhZCB0 aGUgcmVnaXN0ZXIgYmFjayB0byBlbnN1cmUgdGhhdCBpdCB0b29rIGVmZmVj dC4NCgkgKi8NCglyZWFkbChwICsgMHg0Yyk7DQoJaW91bm1hcChwKTsNCg0K CXJldHVybiAwOw0KfQ0KDQpzdGF0aWMgdm9pZCBfX2RldmV4aXQgcGNpX3Bs eDkwNTBfZXhpdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0Kew0KCXU4IF9faW9t ZW0gKnA7DQoNCglpZiAoKHBjaV9yZXNvdXJjZV9mbGFncyhkZXYsIDApICYg SU9SRVNPVVJDRV9NRU0pID09IDApDQoJCXJldHVybjsNCg0KCS8qDQoJICog ZGlzYWJsZSBpbnRlcnJ1cHRzDQoJICovDQoJcCA9IGlvcmVtYXAocGNpX3Jl c291cmNlX3N0YXJ0KGRldiwgMCksIDB4ODApOw0KCWlmIChwICE9IE5VTEwp IHsNCgkJd3JpdGVsKDAsIHAgKyAweDRjKTsNCg0KCQkvKg0KCQkgKiBSZWFk IHRoZSByZWdpc3RlciBiYWNrIHRvIGVuc3VyZSB0aGF0IGl0IHRvb2sgZWZm ZWN0Lg0KCQkgKi8NCgkJcmVhZGwocCArIDB4NGMpOw0KCQlpb3VubWFwKHAp Ow0KCX0NCn0NCg0KLyogU0JTIFRlY2hub2xvZ2llcyBJbmMuIFBNQy1PQ1RQ Uk8gYW5kIFAtT0NUQUwgY2FyZHMgKi8NCnN0YXRpYyBpbnQNCnNic19zZXR1 cChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2JvYXJkICpib2Fy ZCwNCgkJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGlkeCkNCnsNCgl1 bnNpZ25lZCBpbnQgYmFyLCBvZmZzZXQgPSBib2FyZC0+Zmlyc3Rfb2Zmc2V0 Ow0KDQoJYmFyID0gMDsNCg0KCWlmIChpZHggPCA0KSB7DQoJCS8qIGZpcnN0 IGZvdXIgY2hhbm5lbHMgbWFwIHRvIDAsIDB4MTAwLCAweDIwMCwgMHgzMDAg Ki8NCgkJb2Zmc2V0ICs9IGlkeCAqIGJvYXJkLT51YXJ0X29mZnNldDsNCgl9 IGVsc2UgaWYgKGlkeCA8IDgpIHsNCgkJLyogbGFzdCBmb3VyIGNoYW5uZWxz IG1hcCB0byAweDEwMDAsIDB4MTEwMCwgMHgxMjAwLCAweDEzMDAgKi8NCgkJ b2Zmc2V0ICs9IGlkeCAqIGJvYXJkLT51YXJ0X29mZnNldCArIDB4QzAwOw0K CX0gZWxzZSAvKiB3ZSBoYXZlIG9ubHkgOCBwb3J0cyBvbiBQTUMtT0NUQUxQ Uk8gKi8NCgkJcmV0dXJuIDE7DQoNCglyZXR1cm4gc2V0dXBfcG9ydChkZXYs IHBvcnQsIGJhciwgb2Zmc2V0LCBib2FyZC0+cmVnX3NoaWZ0KTsNCn0NCg0K LyoNCiogVGhpcyBkb2VzIGluaXRpYWxpemF0aW9uIGZvciBQTUMgT0NUQUxQ Uk8gY2FyZHM6DQoqIG1hcHMgdGhlIGRldmljZSBtZW1vcnksIHJlc2V0cyB0 aGUgVUFSVHMgKG5lZWRlZCwgYmMNCiogaWYgdGhlIG1vZHVsZSBpcyByZW1v dmVkIGFuZCBpbnNlcnRlZCBhZ2FpbiwgdGhlIGNhcmQNCiogaXMgaW4gdGhl IHNsZWVwIG1vZGUpIGFuZCBlbmFibGVzIGdsb2JhbCBpbnRlcnJ1cHQuDQoq Lw0KDQovKiBnbG9iYWwgY29udHJvbCByZWdpc3RlciBvZmZzZXQgZm9yIFNC UyBQTUMtT2N0YWxQcm8gKi8NCiNkZWZpbmUgT0NUX1JFR19DUl9PRkYJCTB4 NTAwDQoNCnN0YXRpYyBpbnQgX19kZXZpbml0IHNic19pbml0KHN0cnVjdCBw Y2lfZGV2ICpkZXYpDQp7DQoJdTggX19pb21lbSAqcDsNCg0KCXAgPSBpb3Jl bWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApLHBjaV9yZXNvdXJjZV9s ZW4oZGV2LDApKTsNCg0KCWlmIChwID09IE5VTEwpDQoJCXJldHVybiAtRU5P TUVNOw0KCS8qIFNldCBiaXQtNCBDb250cm9sIFJlZ2lzdGVyIChVQVJUIFJF U0VUKSBpbiB0byByZXNldCB0aGUgdWFydHMgKi8NCgl3cml0ZWIoMHgxMCxw ICsgT0NUX1JFR19DUl9PRkYpOw0KCXVkZWxheSg1MCk7DQoJd3JpdGViKDB4 MCxwICsgT0NUX1JFR19DUl9PRkYpOw0KDQoJLyogU2V0IGJpdC0yIChJTlRF TkFCTEUpIG9mIENvbnRyb2wgUmVnaXN0ZXIgKi8NCgl3cml0ZWIoMHg0LCBw ICsgT0NUX1JFR19DUl9PRkYpOw0KCWlvdW5tYXAocCk7DQoNCglyZXR1cm4g MDsNCn0NCg0KLyoNCiAqIERpc2FibGVzIHRoZSBnbG9iYWwgaW50ZXJydXB0 IG9mIFBNQy1PY3RhbFBybw0KICovDQoNCnN0YXRpYyB2b2lkIF9fZGV2ZXhp dCBzYnNfZXhpdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0Kew0KCXU4IF9faW9t ZW0gKnA7DQoNCglwID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2 LCAwKSxwY2lfcmVzb3VyY2VfbGVuKGRldiwwKSk7DQoJaWYgKHAgIT0gTlVM TCkgew0KCQl3cml0ZWIoMCwgcCArIE9DVF9SRUdfQ1JfT0ZGKTsNCgl9DQoJ aW91bm1hcChwKTsNCn0NCg0KLyoNCiAqIFNJSUcgc2VyaWFsIGNhcmRzIGhh dmUgYW4gUENJIGludGVyZmFjZSBjaGlwIHdoaWNoIGFsc28gY29udHJvbHMN CiAqIHRoZSBVQVJUIGNsb2NraW5nIGZyZXF1ZW5jeS4gRWFjaCBVQVJUIGNh biBiZSBjbG9ja2VkIGluZGVwZW5kZW50bHkNCiAqIChleGNlcHQgY2FyZHMg ZXF1aXBlZCB3aXRoIDQgVUFSVHMpIGFuZCBpbml0aWFsIGNsb2NraW5nIHNl dHRpbmdzDQogKiBhcmUgc3RvcmVkIGluIHRoZSBFRVBST00gY2hpcC4gSXQg Y2FuIGNhdXNlIHByb2JsZW1zIGJlY2F1c2UgdGhpcw0KICogdmVyc2lvbiBv ZiBzZXJpYWwgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBkaWZmZXJlbnRseSBj bG9ja2VkIFVBUlQncw0KICogb24gc2luZ2xlIFBDSSBjYXJkLiBUbyBwcmV2 ZW50IHRoaXMsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyBzZXQNCiAqIGhp Z2ggZnJlcXVlbmN5IGNsb2NraW5nIGZvciBhbGwgVUFSVCdzIG9uIGdpdmVu IGNhcmQuIEl0IGlzIHNhZmUgKEkNCiAqIGhvcGUpIGJlY2F1c2UgaXQgZG9l c24ndCB0b3VjaCBFRVBST00gc2V0dGluZ3MgdG8gcHJldmVudCBjb25mbGlj dHMNCiAqIHdpdGggb3RoZXIgT1NlcyAobGlrZSBNJCBET1MpLg0KICoNCiAq ICBTSUlHIHN1cHBvcnQgYWRkZWQgYnkgQW5kcmV5IFBhbmluIDxwYXprZUBk b25wYWMucnU+LCAxMC8xOTk5DQogKiANCiAqIFRoZXJlIGlzIHR3byBmYW1p bHkgb2YgU0lJRyBzZXJpYWwgY2FyZHMgd2l0aCBkaWZmZXJlbnQgUENJDQog KiBpbnRlcmZhY2UgY2hpcCBhbmQgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24g bWV0aG9kczoNCiAqICAgICAtIDEweCBjYXJkcyBoYXZlIGNvbnRyb2wgcmVn aXN0ZXJzIGluIElPIGFuZC9vciBtZW1vcnkgc3BhY2U7DQogKiAgICAgLSAy MHggY2FyZHMgaGF2ZSBjb250cm9sIHJlZ2lzdGVycyBpbiBzdGFuZGFyZCBQ Q0kgY29uZmlndXJhdGlvbiBzcGFjZS4NCiAqDQogKiBOb3RlOiBzb21lIFNJ SUcgY2FyZHMgYXJlIHByb2JlZCBieSB0aGUgcGFycG9ydF9zZXJpYWwgb2Jq ZWN0Lg0KICovDQoNCiNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTXzEw eCAoUENJX0RFVklDRV9JRF9TSUlHXzFTXzEweF81NTAgJiAweGZmZmMpDQoj ZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yU18xMHggKFBDSV9ERVZJQ0Vf SURfU0lJR18yU18xMHhfNTUwICYgMHhmZmY4KQ0KDQpzdGF0aWMgaW50IHBj aV9zaWlnMTB4X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikNCnsNCgl1MTYg ZGF0YTsNCgl2b2lkIF9faW9tZW0gKnA7DQoNCglzd2l0Y2ggKGRldi0+ZGV2 aWNlICYgMHhmZmY4KSB7DQoJY2FzZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNf MTB4OgkvKiAxUyAqLw0KCQlkYXRhID0gMHhmZmRmOw0KCQlicmVhazsNCglj YXNlIFBDSV9ERVZJQ0VfSURfU0lJR18yU18xMHg6CS8qIDJTLCAyUzFQICov DQoJCWRhdGEgPSAweGY3ZmY7DQoJCWJyZWFrOw0KCWRlZmF1bHQ6CQkJLyog MVMxUCwgNFMgKi8NCgkJZGF0YSA9IDB4ZmZmYjsNCgkJYnJlYWs7DQoJfQ0K DQoJcCA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksIDB4 ODApOw0KCWlmIChwID09IE5VTEwpDQoJCXJldHVybiAtRU5PTUVNOw0KDQoJ d3JpdGV3KHJlYWR3KHAgKyAweDI4KSAmIGRhdGEsIHAgKyAweDI4KTsNCgly ZWFkdyhwICsgMHgyOCk7DQoJaW91bm1hcChwKTsNCglyZXR1cm4gMDsNCn0N Cg0KI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMjB4IChQQ0lfREVW SUNFX0lEX1NJSUdfMlNfMjB4XzU1MCAmIDB4ZmZmYykNCiNkZWZpbmUgUENJ X0RFVklDRV9JRF9TSUlHXzJTMVBfMjB4IChQQ0lfREVWSUNFX0lEX1NJSUdf MlMxUF8yMHhfNTUwICYgMHhmZmZjKQ0KDQpzdGF0aWMgaW50IHBjaV9zaWln MjB4X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikNCnsNCgl1OCBkYXRhOw0K DQoJLyogQ2hhbmdlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIGZpcnN0IFVB UlQuICovDQoJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDZmLCAmZGF0 YSk7DQoJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg2ZiwgZGF0YSAm IDB4ZWYpOw0KDQoJLyogSWYgdGhpcyBjYXJkIGhhcyAyIFVBUlQsIHdlIGhh dmUgdG8gZG8gdGhlIHNhbWUgd2l0aCBzZWNvbmQgVUFSVC4gKi8NCglpZiAo KChkZXYtPmRldmljZSAmIDB4ZmZmYykgPT0gUENJX0RFVklDRV9JRF9TSUlH XzJTXzIweCkgfHwNCgkgICAgKChkZXYtPmRldmljZSAmIDB4ZmZmYykgPT0g UENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMjB4KSkgew0KCQlwY2lfcmVhZF9j b25maWdfYnl0ZShkZXYsIDB4NzMsICZkYXRhKTsNCgkJcGNpX3dyaXRlX2Nv bmZpZ19ieXRlKGRldiwgMHg3MywgZGF0YSAmIDB4ZWYpOw0KCX0NCglyZXR1 cm4gMDsNCn0NCg0KaW50IHBjaV9zaWlnMTB4X2ZuKHN0cnVjdCBwY2lfZGV2 ICpkZXYsIGludCBlbmFibGUpDQp7DQoJaW50IHJldCA9IDA7DQoJaWYgKGVu YWJsZSkNCgkJcmV0ID0gcGNpX3NpaWcxMHhfaW5pdChkZXYpOw0KCXJldHVy biByZXQ7DQp9DQoNCmludCBwY2lfc2lpZzIweF9mbihzdHJ1Y3QgcGNpX2Rl diAqZGV2LCBpbnQgZW5hYmxlKQ0Kew0KCWludCByZXQgPSAwOw0KCWlmIChl bmFibGUpDQoJCXJldCA9IHBjaV9zaWlnMjB4X2luaXQoZGV2KTsNCglyZXR1 cm4gcmV0Ow0KfQ0KDQpFWFBPUlRfU1lNQk9MKHBjaV9zaWlnMTB4X2ZuKTsN CkVYUE9SVF9TWU1CT0wocGNpX3NpaWcyMHhfZm4pOw0KDQovKg0KICogVGlt ZWRpYSBoYXMgYW4gZXhwbG9zaW9uIG9mIGJvYXJkcywgYW5kIHRvIGF2b2lk IHRoZSBQQ0kgdGFibGUgZnJvbQ0KICogZ3Jvd2luZyAqaHVnZSosIHdlIHVz ZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbGxhcHNlIHNvbWUgNzAgZW50cmllcw0K ICogaW4gdGhlIFBDSSB0YWJsZSBpbnRvIG9uZSwgZm9yIHNhbml0eSdzIGFu ZCBjb21wYWN0bmVzcydzIHNha2UuDQogKi8NCnN0YXRpYyB1bnNpZ25lZCBz aG9ydCB0aW1lZGlhX3NpbmdsZV9wb3J0W10gPSB7DQoJMHg0MDI1LCAweDQw MjcsIDB4NDAyOCwgMHg1MDI1LCAweDUwMjcsIDANCn07DQoNCnN0YXRpYyB1 bnNpZ25lZCBzaG9ydCB0aW1lZGlhX2R1YWxfcG9ydFtdID0gew0KCTB4MDAw MiwgMHg0MDM2LCAweDQwMzcsIDB4NDAzOCwgMHg0MDc4LCAweDQwNzksIDB4 NDA4NSwNCgkweDQwODgsIDB4NDA4OSwgMHg1MDM3LCAweDUwNzgsIDB4NTA3 OSwgMHg1MDg1LCAweDYwNzksIA0KCTB4NzA3OSwgMHg4MDc5LCAweDgxMzcs IDB4ODEzOCwgMHg4MjM3LCAweDgyMzgsIDB4OTA3OSwgDQoJMHg5MTM3LCAw eDkxMzgsIDB4OTIzNywgMHg5MjM4LCAweEEwNzksIDB4QjA3OSwgMHhDMDc5 LA0KCTB4RDA3OSwgMA0KfTsNCg0Kc3RhdGljIHVuc2lnbmVkIHNob3J0IHRp bWVkaWFfcXVhZF9wb3J0W10gPSB7DQoJMHg0MDU1LCAweDQwNTYsIDB4NDA5 NSwgMHg0MDk2LCAweDUwNTYsIDB4ODE1NiwgMHg4MTU3LCANCgkweDgyNTYs IDB4ODI1NywgMHg5MDU2LCAweDkxNTYsIDB4OTE1NywgMHg5MTU4LCAweDkx NTksIA0KCTB4OTI1NiwgMHg5MjU3LCAweEEwNTYsIDB4QTE1NywgMHhBMTU4 LCAweEExNTksIDB4QjA1NiwNCgkweEIxNTcsIDANCn07DQoNCnN0YXRpYyB1 bnNpZ25lZCBzaG9ydCB0aW1lZGlhX2VpZ2h0X3BvcnRbXSA9IHsNCgkweDQw NjUsIDB4NDA2NiwgMHg1MDY1LCAweDUwNjYsIDB4ODE2NiwgMHg5MDY2LCAw eDkxNjYsIA0KCTB4OTE2NywgMHg5MTY4LCAweEEwNjYsIDB4QTE2NywgMHhB MTY4LCAwDQp9Ow0KDQpzdGF0aWMgc3RydWN0IHRpbWVkaWFfc3RydWN0IHsN CglpbnQgbnVtOw0KCXVuc2lnbmVkIHNob3J0ICppZHM7DQp9IHRpbWVkaWFf ZGF0YVtdID0gew0KCXsgMSwgdGltZWRpYV9zaW5nbGVfcG9ydCB9LA0KCXsg MiwgdGltZWRpYV9kdWFsX3BvcnQgfSwNCgl7IDQsIHRpbWVkaWFfcXVhZF9w b3J0IH0sDQoJeyA4LCB0aW1lZGlhX2VpZ2h0X3BvcnQgfSwNCgl7IDAsIE5V TEwgfQ0KfTsNCg0Kc3RhdGljIGludCBfX2RldmluaXQgcGNpX3RpbWVkaWFf aW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQ0Kew0KCXVuc2lnbmVkIHNob3J0 ICppZHM7DQoJaW50IGksIGo7DQoNCglmb3IgKGkgPSAwOyB0aW1lZGlhX2Rh dGFbaV0ubnVtOyBpKyspIHsNCgkJaWRzID0gdGltZWRpYV9kYXRhW2ldLmlk czsNCgkJZm9yIChqID0gMDsgaWRzW2pdOyBqKyspDQoJCQlpZiAoZGV2LT5z dWJzeXN0ZW1fZGV2aWNlID09IGlkc1tqXSkNCgkJCQlyZXR1cm4gdGltZWRp YV9kYXRhW2ldLm51bTsNCgl9DQoJcmV0dXJuIDA7DQp9DQoNCi8qDQogKiBU aW1lZGlhL1NVTklYIHVzZXMgYSBtaXh0dXJlIG9mIEJBUnMgYW5kIG9mZnNl dHMNCiAqIFVnaCwgdGhpcyBpcyB1Z2x5IGFzIGFsbCBoZWxsIC0tLSBUWVQN CiAqLw0Kc3RhdGljIGludA0KcGNpX3RpbWVkaWFfc2V0dXAoc3RydWN0IHBj aV9kZXYgKmRldiwgc3RydWN0IHBjaV9ib2FyZCAqYm9hcmQsDQoJCSAgc3Ry dWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGlkeCkNCnsNCgl1bnNpZ25lZCBp bnQgYmFyID0gMCwgb2Zmc2V0ID0gYm9hcmQtPmZpcnN0X29mZnNldDsNCg0K CXN3aXRjaCAoaWR4KSB7DQoJY2FzZSAwOg0KCQliYXIgPSAwOw0KCQlicmVh azsNCgljYXNlIDE6DQoJCW9mZnNldCA9IGJvYXJkLT51YXJ0X29mZnNldDsN CgkJYmFyID0gMDsNCgkJYnJlYWs7DQoJY2FzZSAyOg0KCQliYXIgPSAxOw0K CQlicmVhazsNCgljYXNlIDM6DQoJCW9mZnNldCA9IGJvYXJkLT51YXJ0X29m ZnNldDsNCgkJYmFyID0gMTsNCgljYXNlIDQ6IC8qIEJBUiAyICovDQoJY2Fz ZSA1OiAvKiBCQVIgMyAqLw0KCWNhc2UgNjogLyogQkFSIDQgKi8NCgljYXNl IDc6IC8qIEJBUiA1ICovDQoJCWJhciA9IGlkeCAtIDI7DQoJfQ0KDQoJcmV0 dXJuIHNldHVwX3BvcnQoZGV2LCBwb3J0LCBiYXIsIG9mZnNldCwgYm9hcmQt PnJlZ19zaGlmdCk7DQp9DQoNCi8qDQogKiBTb21lIFRpdGFuIGNhcmRzIGFy ZSBhbHNvIGEgbGl0dGxlIHdlaXJkDQogKi8NCnN0YXRpYyBpbnQNCnRpdGFu XzQwMGxfODAwbF9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qg cGNpX2JvYXJkICpib2FyZCwNCgkJICAgICAgc3RydWN0IHVhcnRfcG9ydCAq cG9ydCwgaW50IGlkeCkNCnsNCgl1bnNpZ25lZCBpbnQgYmFyLCBvZmZzZXQg PSBib2FyZC0+Zmlyc3Rfb2Zmc2V0Ow0KDQoJc3dpdGNoIChpZHgpIHsNCglj YXNlIDA6DQoJCWJhciA9IDE7DQoJCWJyZWFrOw0KCWNhc2UgMToNCgkJYmFy ID0gMjsNCgkJYnJlYWs7DQoJZGVmYXVsdDoNCgkJYmFyID0gNDsNCgkJb2Zm c2V0ID0gKGlkeCAtIDIpICogYm9hcmQtPnVhcnRfb2Zmc2V0Ow0KCX0NCg0K CXJldHVybiBzZXR1cF9wb3J0KGRldiwgcG9ydCwgYmFyLCBvZmZzZXQsIGJv YXJkLT5yZWdfc2hpZnQpOw0KfQ0KDQpzdGF0aWMgaW50IF9fZGV2aW5pdCBw Y2lfeGlyY29tX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikNCnsNCgltc2xl ZXAoMTAwKTsNCglyZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGludA0KcGNpX2Rl ZmF1bHRfc2V0dXAoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9i b2FyZCAqYm9hcmQsDQoJCSAgc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50 IGlkeCkNCnsNCgl1bnNpZ25lZCBpbnQgYmFyLCBvZmZzZXQgPSBib2FyZC0+ Zmlyc3Rfb2Zmc2V0LCBtYXhucjsNCg0KCWJhciA9IEZMX0dFVF9CQVNFKGJv YXJkLT5mbGFncyk7DQoJaWYgKGJvYXJkLT5mbGFncyAmIEZMX0JBU0VfQkFS UykNCgkJYmFyICs9IGlkeDsNCgllbHNlDQoJCW9mZnNldCArPSBpZHggKiBi b2FyZC0+dWFydF9vZmZzZXQ7DQoNCgltYXhuciA9IChwY2lfcmVzb3VyY2Vf bGVuKGRldiwgYmFyKSAtIGJvYXJkLT5maXJzdF9vZmZzZXQpIC8NCgkJKDgg PDwgYm9hcmQtPnJlZ19zaGlmdCk7DQoNCglpZiAoYm9hcmQtPmZsYWdzICYg RkxfUkVHSU9OX1NaX0NBUCAmJiBpZHggPj0gbWF4bnIpDQoJCXJldHVybiAx Ow0KCQkJDQoJcmV0dXJuIHNldHVwX3BvcnQoZGV2LCBwb3J0LCBiYXIsIG9m ZnNldCwgYm9hcmQtPnJlZ19zaGlmdCk7DQp9DQoNCi8qIFRoaXMgc2hvdWxk IGJlIGluIGxpbnV4L3BjaV9pZHMuaCAqLw0KI2RlZmluZSBQQ0lfVkVORE9S X0lEX1NCU01PRFVMQVJJTwkweDEyNEINCiNkZWZpbmUgUENJX1NVQlZFTkRP Ul9JRF9TQlNNT0RVTEFSSU8JMHgxMjRCDQojZGVmaW5lIFBDSV9ERVZJQ0Vf SURfT0NUUFJPCQkweDAwMDENCiNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9P Q1RQUk8yMzIJMHgwMTA4DQojZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfT0NU UFJPNDIyCTB4MDIwOA0KI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX1BPQ1RB TDIzMgkweDAzMDgNCiNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9QT0NUQUw0 MjIJMHgwNDA4DQoNCi8qDQogKiBNYXN0ZXIgbGlzdCBvZiBzZXJpYWwgcG9y dCBpbml0L3NldHVwL2V4aXQgcXVpcmtzLg0KICogVGhpcyBkb2VzIG5vdCBk ZXNjcmliZSB0aGUgZ2VuZXJhbCBuYXR1cmUgb2YgdGhlIHBvcnQuDQogKiAo aWUsIGJhdWQgYmFzZSwgbnVtYmVyIGFuZCBsb2NhdGlvbiBvZiBwb3J0cywg ZXRjKQ0KICoNCiAqIFRoaXMgbGlzdCBpcyBvcmRlcmVkIGFscGhhYmV0aWNh bGx5IGJ5IHZlbmRvciB0aGVuIGRldmljZS4NCiAqIFNwZWNpZmljIGVudHJp ZXMgbXVzdCBjb21lIGJlZm9yZSBtb3JlIGdlbmVyaWMgZW50cmllcy4NCiAq Lw0Kc3RhdGljIHN0cnVjdCBwY2lfc2VyaWFsX3F1aXJrIHBjaV9zZXJpYWxf cXVpcmtzW10gPSB7DQoJLyoNCgkgKiBBRkFWTEFCIGNhcmRzLg0KCSAqICBJ dCBpcyBub3QgY2xlYXIgd2hldGhlciB0aGlzIGFwcGxpZXMgdG8gYWxsIHBy b2R1Y3RzLg0KCSAqLw0KCXsNCgkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lE X0FGQVZMQUIsDQoJCS5kZXZpY2UJCT0gUENJX0FOWV9JRCwNCgkJLnN1YnZl bmRvcgk9IFBDSV9BTllfSUQsDQoJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lE LA0KCQkuc2V0dXAJCT0gYWZhdmxhYl9zZXR1cCwNCgl9LA0KCS8qDQoJICog SFAgRGl2YQ0KCSAqLw0KCXsNCgkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lE X0hQLA0KCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfSFBfRElWQSwNCgkJ LnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsDQoJCS5zdWJkZXZpY2UJPSBQQ0lf QU5ZX0lELA0KCQkuaW5pdAkJPSBwY2lfaHBfZGl2YV9pbml0LA0KCQkuc2V0 dXAJCT0gcGNpX2hwX2RpdmFfc2V0dXAsDQoJfSwNCgkvKg0KCSAqIEludGVs DQoJICovDQoJew0KCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfSU5URUws DQoJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9JTlRFTF84MDk2MF9SUCwN CgkJLnN1YnZlbmRvcgk9IDB4ZTRiZiwNCgkJLnN1YmRldmljZQk9IFBDSV9B TllfSUQsDQoJCS5pbml0CQk9IHBjaV9pbnRlbGk5NjBuaV9pbml0LA0KCQku c2V0dXAJCT0gcGNpX2RlZmF1bHRfc2V0dXAsDQoJfSwNCgkvKg0KCSAqIFBh bmFjb20NCgkgKi8NCgl7DQoJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9Q QU5BQ09NLA0KCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfUEFOQUNPTV9R VUFETU9ERU0sDQoJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELA0KCQkuc3Vi ZGV2aWNlCT0gUENJX0FOWV9JRCwNCgkJLmluaXQJCT0gcGNpX3BseDkwNTBf aW5pdCwNCgkJLnNldHVwCQk9IHBjaV9kZWZhdWx0X3NldHVwLA0KCQkuZXhp dAkJPSBfX2RldmV4aXRfcChwY2lfcGx4OTA1MF9leGl0KSwNCgl9LAkJDQoJ ew0KCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUEFOQUNPTSwNCgkJLmRl dmljZQkJPSBQQ0lfREVWSUNFX0lEX1BBTkFDT01fRFVBTE1PREVNLA0KCQku c3VidmVuZG9yCT0gUENJX0FOWV9JRCwNCgkJLnN1YmRldmljZQk9IFBDSV9B TllfSUQsDQoJCS5pbml0CQk9IHBjaV9wbHg5MDUwX2luaXQsDQoJCS5zZXR1 cAkJPSBwY2lfZGVmYXVsdF9zZXR1cCwNCgkJLmV4aXQJCT0gX19kZXZleGl0 X3AocGNpX3BseDkwNTBfZXhpdCksDQoJfSwNCgkvKg0KCSAqIFBMWA0KCSAq Lw0KCXsNCgkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1BMWCwNCgkJLmRl dmljZQkJPSBQQ0lfREVWSUNFX0lEX1BMWF85MDUwLA0KCQkuc3VidmVuZG9y CT0gUENJX1NVQlZFTkRPUl9JRF9LRVlTUEFOLA0KCQkuc3ViZGV2aWNlCT0g UENJX1NVQkRFVklDRV9JRF9LRVlTUEFOX1NYMiwNCgkJLmluaXQJCT0gcGNp X3BseDkwNTBfaW5pdCwNCgkJLnNldHVwCQk9IHBjaV9kZWZhdWx0X3NldHVw LA0KCQkuZXhpdAkJPSBfX2RldmV4aXRfcChwY2lfcGx4OTA1MF9leGl0KSwN Cgl9LA0KCXsNCgkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1BMWCwNCgkJ LmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1BMWF9ST01VTFVTLA0KCQkuc3Vi dmVuZG9yCT0gUENJX1ZFTkRPUl9JRF9QTFgsDQoJCS5zdWJkZXZpY2UJPSBQ Q0lfREVWSUNFX0lEX1BMWF9ST01VTFVTLA0KCQkuaW5pdAkJPSBwY2lfcGx4 OTA1MF9pbml0LA0KCQkuc2V0dXAJCT0gcGNpX2RlZmF1bHRfc2V0dXAsDQoJ CS5leGl0CQk9IF9fZGV2ZXhpdF9wKHBjaV9wbHg5MDUwX2V4aXQpLA0KCX0s DQoJLyoNCgkgKiBTQlMgVGVjaG5vbG9naWVzLCBJbmMuLCBQTUMtT0NUQUxQ Uk8gMjMyDQoJICovDQoJew0KCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURf U0JTTU9EVUxBUklPLA0KCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfT0NU UFJPLA0KCQkuc3VidmVuZG9yCT0gUENJX1NVQlZFTkRPUl9JRF9TQlNNT0RV TEFSSU8sDQoJCS5zdWJkZXZpY2UJPSBQQ0lfU1VCREVWSUNFX0lEX09DVFBS TzIzMiwNCgkJLmluaXQJCT0gc2JzX2luaXQsDQoJCS5zZXR1cAkJPSBzYnNf c2V0dXAsDQoJCS5leGl0CQk9IF9fZGV2ZXhpdF9wKHNic19leGl0KSwNCgl9 LA0KCS8qDQoJICogU0JTIFRlY2hub2xvZ2llcywgSW5jLiwgUE1DLU9DVEFM UFJPIDQyMg0KCSAqLw0KCXsNCgkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lE X1NCU01PRFVMQVJJTywNCgkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX09D VFBSTywNCgkJLnN1YnZlbmRvcgk9IFBDSV9TVUJWRU5ET1JfSURfU0JTTU9E VUxBUklPLA0KCQkuc3ViZGV2aWNlCT0gUENJX1NVQkRFVklDRV9JRF9PQ1RQ Uk80MjIsDQoJCS5pbml0CQk9IHNic19pbml0LA0KCQkuc2V0dXAJCT0gc2Jz X3NldHVwLA0KCQkuZXhpdAkJPSBfX2RldmV4aXRfcChzYnNfZXhpdCksDQoJ fSwNCgkvKg0KCSAqIFNCUyBUZWNobm9sb2dpZXMsIEluYy4sIFAtT2N0YWwg MjMyDQoJICovDQoJew0KCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfU0JT TU9EVUxBUklPLA0KCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfT0NUUFJP LA0KCQkuc3VidmVuZG9yCT0gUENJX1NVQlZFTkRPUl9JRF9TQlNNT0RVTEFS SU8sDQoJCS5zdWJkZXZpY2UJPSBQQ0lfU1VCREVWSUNFX0lEX1BPQ1RBTDIz MiwNCgkJLmluaXQJCT0gc2JzX2luaXQsDQoJCS5zZXR1cAkJPSBzYnNfc2V0 dXAsDQoJCS5leGl0CQk9IF9fZGV2ZXhpdF9wKHNic19leGl0KSwNCgl9LA0K CS8qDQoJICogU0JTIFRlY2hub2xvZ2llcywgSW5jLiwgUC1PY3RhbCA0MjIN CgkgKi8NCgl7DQoJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9TQlNNT0RV TEFSSU8sDQoJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9PQ1RQUk8sDQoJ CS5zdWJ2ZW5kb3IJPSBQQ0lfU1VCVkVORE9SX0lEX1NCU01PRFVMQVJJTywN CgkJLnN1YmRldmljZQk9IFBDSV9TVUJERVZJQ0VfSURfUE9DVEFMNDIyLA0K CQkuaW5pdAkJPSBzYnNfaW5pdCwNCgkJLnNldHVwCQk9IHNic19zZXR1cCwN CgkJLmV4aXQJCT0gX19kZXZleGl0X3Aoc2JzX2V4aXQpLA0KCX0sDQoNCgkv Kg0KCSAqIFNJSUcgY2FyZHMuDQoJICogIEl0IGlzIG5vdCBjbGVhciB3aGV0 aGVyIHRoZXNlIGNvdWxkIGJlIGNvbGxhcHNlZC4NCgkgKi8NCgl7DQoJCS52 ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9TSUlHLA0KCQkuZGV2aWNlCQk9IFBD SV9ERVZJQ0VfSURfU0lJR18xU18xMHhfNTUwLA0KCQkuc3VidmVuZG9yCT0g UENJX0FOWV9JRCwNCgkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsDQoJCS5p bml0CQk9IHBjaV9zaWlnMTB4X2luaXQsDQoJCS5zZXR1cAkJPSBwY2lfZGVm YXVsdF9zZXR1cCwNCgl9LA0KCXsNCgkJLnZlbmRvcgkJPSBQQ0lfVkVORE9S X0lEX1NJSUcsDQoJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9TSUlHXzFT XzEweF82NTAsDQoJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELA0KCQkuc3Vi ZGV2aWNlCT0gUENJX0FOWV9JRCwNCgkJLmluaXQJCT0gcGNpX3NpaWcxMHhf aW5pdCwNCgkJLnNldHVwCQk9IHBjaV9kZWZhdWx0X3NldHVwLA0KCX0sDQoJ ew0KCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfU0lJRywNCgkJLmRldmlj ZQkJPSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMTB4Xzg1MCwNCgkJLnN1YnZl bmRvcgk9IFBDSV9BTllfSUQsDQoJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lE LA0KCQkuaW5pdAkJPSBwY2lfc2lpZzEweF9pbml0LA0KCQkuc2V0dXAJCT0g cGNpX2RlZmF1bHRfc2V0dXAsDQoJfSwNCgl7DQoJCS52ZW5kb3IJCT0gUENJ X1ZFTkRPUl9JRF9TSUlHLA0KCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURf U0lJR18yU18xMHhfNTUwLA0KCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwN CgkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsDQoJCS5pbml0CQk9IHBjaV9z aWlnMTB4X2luaXQsDQoJCS5zZXR1cAkJPSBwY2lfZGVmYXVsdF9zZXR1cCwN Cgl9LA0KCXsNCgkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1NJSUcsDQoJ CS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9TSUlHXzJTXzEweF82NTAsDQoJ CS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELA0KCQkuc3ViZGV2aWNlCT0gUENJ X0FOWV9JRCwNCgkJLmluaXQJCT0gcGNpX3NpaWcxMHhfaW5pdCwNCgkJLnNl dHVwCQk9IHBjaV9kZWZhdWx0X3NldHVwLA0KCX0sDQoJew0KCQkudmVuZG9y CQk9IFBDSV9WRU5ET1JfSURfU0lJRywNCgkJLmRldmljZQkJPSBQQ0lfREVW SUNFX0lEX1NJSUdfMlNfMTB4Xzg1MCwNCgkJLnN1YnZlbmRvcgk9IFBDSV9B TllfSUQsDQoJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELA0KCQkuaW5pdAkJ PSBwY2lfc2lpZzEweF9pbml0LA0KCQkuc2V0dXAJCT0gcGNpX2RlZmF1bHRf c2V0dXAsDQoJfSwNCgl7DQoJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9T SUlHLA0KCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfU0lJR180U18xMHhf NTUwLA0KCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwNCgkJLnN1YmRldmlj ZQk9IFBDSV9BTllfSUQsDQoJCS5pbml0CQk9IHBjaV9zaWlnMTB4X2luaXQs DQoJCS5zZXR1cAkJPSBwY2lfZGVmYXVsdF9zZXR1cCwNCgl9LA0KCXsNCgkJ LnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1NJSUcsDQoJCS5kZXZpY2UJCT0g UENJX0RFVklDRV9JRF9TSUlHXzRTXzEweF82NTAsDQoJCS5zdWJ2ZW5kb3IJ PSBQQ0lfQU5ZX0lELA0KCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwNCgkJ LmluaXQJCT0gcGNpX3NpaWcxMHhfaW5pdCwNCgkJLnNldHVwCQk9IHBjaV9k ZWZhdWx0X3NldHVwLA0KCX0sDQoJew0KCQkudmVuZG9yCQk9IFBDSV9WRU5E T1JfSURfU0lJRywNCgkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1NJSUdf NFNfMTB4Xzg1MCwNCgkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsDQoJCS5z dWJkZXZpY2UJPSBQQ0lfQU5ZX0lELA0KCQkuaW5pdAkJPSBwY2lfc2lpZzEw eF9pbml0LA0KCQkuc2V0dXAJCT0gcGNpX2RlZmF1bHRfc2V0dXAsDQoJfSwN Cgl7DQoJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9TSUlHLA0KCQkuZGV2 aWNlCQk9IFBDSV9ERVZJQ0VfSURfU0lJR18xU18yMHhfNTUwLA0KCQkuc3Vi dmVuZG9yCT0gUENJX0FOWV9JRCwNCgkJLnN1YmRldmljZQk9IFBDSV9BTllf SUQsDQoJCS5pbml0CQk9IHBjaV9zaWlnMjB4X2luaXQsDQoJCS5zZXR1cAkJ PSBwY2lfZGVmYXVsdF9zZXR1cCwNCgl9LA0KCXsNCgkJLnZlbmRvcgkJPSBQ Q0lfVkVORE9SX0lEX1NJSUcsDQoJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9J RF9TSUlHXzFTXzIweF82NTAsDQoJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lE LA0KCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwNCgkJLmluaXQJCT0gcGNp X3NpaWcyMHhfaW5pdCwNCgkJLnNldHVwCQk9IHBjaV9kZWZhdWx0X3NldHVw LA0KCX0sDQoJew0KCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfU0lJRywN CgkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMjB4Xzg1MCwN CgkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsDQoJCS5zdWJkZXZpY2UJPSBQ Q0lfQU5ZX0lELA0KCQkuaW5pdAkJPSBwY2lfc2lpZzIweF9pbml0LA0KCQku c2V0dXAJCT0gcGNpX2RlZmF1bHRfc2V0dXAsDQoJfSwNCgl7DQoJCS52ZW5k b3IJCT0gUENJX1ZFTkRPUl9JRF9TSUlHLA0KCQkuZGV2aWNlCQk9IFBDSV9E RVZJQ0VfSURfU0lJR18yU18yMHhfNTUwLA0KCQkuc3VidmVuZG9yCT0gUENJ X0FOWV9JRCwNCgkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsDQoJCS5pbml0 CQk9IHBjaV9zaWlnMjB4X2luaXQsDQoJCS5zZXR1cAkJPSBwY2lfZGVmYXVs dF9zZXR1cCwNCgl9LA0KCXsJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1NJ SUcsDQoJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9TSUlHXzJTXzIweF82 NTAsDQoJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELA0KCQkuc3ViZGV2aWNl CT0gUENJX0FOWV9JRCwNCgkJLmluaXQJCT0gcGNpX3NpaWcyMHhfaW5pdCwN CgkJLnNldHVwCQk9IHBjaV9kZWZhdWx0X3NldHVwLA0KCX0sDQoJew0KCQku dmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfU0lJRywNCgkJLmRldmljZQkJPSBQ Q0lfREVWSUNFX0lEX1NJSUdfMlNfMjB4Xzg1MCwNCgkJLnN1YnZlbmRvcgk9 IFBDSV9BTllfSUQsDQoJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELA0KCQku aW5pdAkJPSBwY2lfc2lpZzIweF9pbml0LA0KCQkuc2V0dXAJCT0gcGNpX2Rl ZmF1bHRfc2V0dXAsDQoJfSwNCgl7DQoJCS52ZW5kb3IJCT0gUENJX1ZFTkRP Ul9JRF9TSUlHLA0KCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfU0lJR180 U18yMHhfNTUwLA0KCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwNCgkJLnN1 YmRldmljZQk9IFBDSV9BTllfSUQsDQoJCS5pbml0CQk9IHBjaV9zaWlnMjB4 X2luaXQsDQoJCS5zZXR1cAkJPSBwY2lfZGVmYXVsdF9zZXR1cCwNCgl9LA0K CXsNCgkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1NJSUcsDQoJCS5kZXZp Y2UJCT0gUENJX0RFVklDRV9JRF9TSUlHXzRTXzIweF82NTAsDQoJCS5zdWJ2 ZW5kb3IJPSBQQ0lfQU5ZX0lELA0KCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9J RCwNCgkJLmluaXQJCT0gcGNpX3NpaWcyMHhfaW5pdCwNCgkJLnNldHVwCQk9 IHBjaV9kZWZhdWx0X3NldHVwLA0KCX0sDQoJew0KCQkudmVuZG9yCQk9IFBD SV9WRU5ET1JfSURfU0lJRywNCgkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lE X1NJSUdfNFNfMjB4Xzg1MCwNCgkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQs DQoJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELA0KCQkuaW5pdAkJPSBwY2lf c2lpZzIweF9pbml0LA0KCQkuc2V0dXAJCT0gcGNpX2RlZmF1bHRfc2V0dXAs DQoJfSwNCgkvKg0KCSAqIFRpdGFuIGNhcmRzDQoJICovDQoJew0KCQkudmVu ZG9yCQk9IFBDSV9WRU5ET1JfSURfVElUQU4sDQoJCS5kZXZpY2UJCT0gUENJ X0RFVklDRV9JRF9USVRBTl80MDBMLA0KCQkuc3VidmVuZG9yCT0gUENJX0FO WV9JRCwNCgkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsDQoJCS5zZXR1cAkJ PSB0aXRhbl80MDBsXzgwMGxfc2V0dXAsDQoJfSwNCgl7DQoJCS52ZW5kb3IJ CT0gUENJX1ZFTkRPUl9JRF9USVRBTiwNCgkJLmRldmljZQkJPSBQQ0lfREVW SUNFX0lEX1RJVEFOXzgwMEwsDQoJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lE LA0KCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwNCgkJLnNldHVwCQk9IHRp dGFuXzQwMGxfODAwbF9zZXR1cCwNCgl9LA0KCS8qDQoJICogVGltZWRpYSBj YXJkcw0KCSAqLw0KCXsNCgkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1RJ TUVESUEsDQoJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9USU1FRElBXzE4 ODksDQoJCS5zdWJ2ZW5kb3IJPSBQQ0lfVkVORE9SX0lEX1RJTUVESUEsDQoJ CS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELA0KCQkuaW5pdAkJPSBwY2lfdGlt ZWRpYV9pbml0LA0KCQkuc2V0dXAJCT0gcGNpX3RpbWVkaWFfc2V0dXAsDQoJ fSwNCgl7DQoJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9USU1FRElBLA0K CQkuZGV2aWNlCQk9IFBDSV9BTllfSUQsDQoJCS5zdWJ2ZW5kb3IJPSBQQ0lf QU5ZX0lELA0KCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwNCgkJLnNldHVw CQk9IHBjaV90aW1lZGlhX3NldHVwLA0KCX0sDQoJLyoNCgkgKiBYaXJjb20g Y2FyZHMNCgkgKi8NCgl7DQoJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9Y SVJDT00sDQoJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9YSVJDT01fWDMy MDFfTURNLA0KCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwNCgkJLnN1YmRl dmljZQk9IFBDSV9BTllfSUQsDQoJCS5pbml0CQk9IHBjaV94aXJjb21faW5p dCwNCgkJLnNldHVwCQk9IHBjaV9kZWZhdWx0X3NldHVwLA0KCX0sDQoJLyoN CgkgKiBEZWZhdWx0ICJtYXRjaCBldmVyeXRoaW5nIiB0ZXJtaW5hdG9yIGVu dHJ5DQoJICovDQoJew0KCQkudmVuZG9yCQk9IFBDSV9BTllfSUQsDQoJCS5k ZXZpY2UJCT0gUENJX0FOWV9JRCwNCgkJLnN1YnZlbmRvcgk9IFBDSV9BTllf SUQsDQoJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELA0KCQkuc2V0dXAJCT0g cGNpX2RlZmF1bHRfc2V0dXAsDQoJfQ0KfTsNCg0Kc3RhdGljIGlubGluZSBp bnQgcXVpcmtfaWRfbWF0Y2hlcyh1MzIgcXVpcmtfaWQsIHUzMiBkZXZfaWQp DQp7DQoJcmV0dXJuIHF1aXJrX2lkID09IFBDSV9BTllfSUQgfHwgcXVpcmtf aWQgPT0gZGV2X2lkOw0KfQ0KDQpzdGF0aWMgc3RydWN0IHBjaV9zZXJpYWxf cXVpcmsgKmZpbmRfcXVpcmsoc3RydWN0IHBjaV9kZXYgKmRldikNCnsNCglz dHJ1Y3QgcGNpX3NlcmlhbF9xdWlyayAqcXVpcms7DQoNCglmb3IgKHF1aXJr ID0gcGNpX3NlcmlhbF9xdWlya3M7IDsgcXVpcmsrKykNCgkJaWYgKHF1aXJr X2lkX21hdGNoZXMocXVpcmstPnZlbmRvciwgZGV2LT52ZW5kb3IpICYmDQoJ CSAgICBxdWlya19pZF9tYXRjaGVzKHF1aXJrLT5kZXZpY2UsIGRldi0+ZGV2 aWNlKSAmJg0KCQkgICAgcXVpcmtfaWRfbWF0Y2hlcyhxdWlyay0+c3VidmVu ZG9yLCBkZXYtPnN1YnN5c3RlbV92ZW5kb3IpICYmDQoJCSAgICBxdWlya19p ZF9tYXRjaGVzKHF1aXJrLT5zdWJkZXZpY2UsIGRldi0+c3Vic3lzdGVtX2Rl dmljZSkpDQoJCSAJYnJlYWs7DQoJcmV0dXJuIHF1aXJrOw0KfQ0KDQpzdGF0 aWMgX0lOTElORV8gaW50DQpnZXRfcGNpX2lycShzdHJ1Y3QgcGNpX2RldiAq ZGV2LCBzdHJ1Y3QgcGNpX2JvYXJkICpib2FyZCwgaW50IGlkeCkNCnsNCglp ZiAoYm9hcmQtPmZsYWdzICYgRkxfTk9JUlEpDQoJCXJldHVybiAwOw0KCWVs c2UNCgkJcmV0dXJuIGRldi0+aXJxOw0KfQ0KDQovKg0KICogVGhpcyBpcyB0 aGUgY29uZmlndXJhdGlvbiB0YWJsZSBmb3IgYWxsIG9mIHRoZSBQQ0kgc2Vy aWFsIGJvYXJkcw0KICogd2hpY2ggd2Ugc3VwcG9ydC4gIEl0IGlzIGRpcmVj dGx5IGluZGV4ZWQgYnkgdGhlIHBjaV9ib2FyZF9udW1fdCBlbnVtDQogKiB2 YWx1ZSwgd2hpY2ggaXMgZW5jb2RlZCBpbiB0aGUgcGNpX2RldmljZV9pZCBQ Q0kgcHJvYmUgdGFibGUncw0KICogZHJpdmVyX2RhdGEgbWVtYmVyLg0KICoN CiAqIFRoZSBtYWtldXAgb2YgdGhlc2UgbmFtZXMgYXJlOg0KICogIHBibl9i bntfYnR9X25fYmF1ZA0KICoNCiAqICBibiAgID0gUENJIEJBUiBudW1iZXIN CiAqICBidCAgID0gSW5kZXggdXNpbmcgUENJIEJBUnMNCiAqICBuICAgID0g bnVtYmVyIG9mIHNlcmlhbCBwb3J0cw0KICogIGJhdWQgPSBiYXVkIHJhdGUN CiAqDQogKiBQbGVhc2Ugbm90ZTogaW4gdGhlb3J5IGlmIG4gPSAxLCBfYnQg aW5maXggc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZS4NCiAqIGllLCBwYm5f YjBfMV8xMTUyMDAgaXMgdGhlIHNhbWUgYXMgcGJuX2IwX2J0XzFfMTE1MjAw DQogKi8NCmVudW0gcGNpX2JvYXJkX251bV90IHsNCglwYm5fZGVmYXVsdCA9 IDAsDQoNCglwYm5fYjBfMV8xMTUyMDAsDQoJcGJuX2IwXzJfMTE1MjAwLA0K CXBibl9iMF80XzExNTIwMCwNCglwYm5fYjBfNV8xMTUyMDAsDQoNCglwYm5f YjBfMV85MjE2MDAsDQoJcGJuX2IwXzJfOTIxNjAwLA0KCXBibl9iMF80Xzky MTYwMCwNCg0KCXBibl9iMF9idF8xXzExNTIwMCwNCglwYm5fYjBfYnRfMl8x MTUyMDAsDQoJcGJuX2IwX2J0XzhfMTE1MjAwLA0KDQoJcGJuX2IwX2J0XzFf NDYwODAwLA0KCXBibl9iMF9idF8yXzQ2MDgwMCwNCglwYm5fYjBfYnRfNF80 NjA4MDAsDQoNCglwYm5fYjBfYnRfMV85MjE2MDAsDQoJcGJuX2IwX2J0XzJf OTIxNjAwLA0KCXBibl9iMF9idF80XzkyMTYwMCwNCglwYm5fYjBfYnRfOF85 MjE2MDAsDQoNCglwYm5fYjFfMV8xMTUyMDAsDQoJcGJuX2IxXzJfMTE1MjAw LA0KCXBibl9iMV80XzExNTIwMCwNCglwYm5fYjFfOF8xMTUyMDAsDQoNCglw Ym5fYjFfMV85MjE2MDAsDQoJcGJuX2IxXzJfOTIxNjAwLA0KCXBibl9iMV80 XzkyMTYwMCwNCglwYm5fYjFfOF85MjE2MDAsDQoNCglwYm5fYjFfYnRfMl85 MjE2MDAsDQoNCglwYm5fYjFfMV8xMzgyNDAwLA0KCXBibl9iMV8yXzEzODI0 MDAsDQoJcGJuX2IxXzRfMTM4MjQwMCwNCglwYm5fYjFfOF8xMzgyNDAwLA0K DQoJcGJuX2IyXzFfMTE1MjAwLA0KCXBibl9iMl84XzExNTIwMCwNCg0KCXBi bl9iMl8xXzQ2MDgwMCwNCglwYm5fYjJfNF80NjA4MDAsDQoJcGJuX2IyXzhf NDYwODAwLA0KCXBibl9iMl8xNl80NjA4MDAsDQoNCglwYm5fYjJfMV85MjE2 MDAsDQoJcGJuX2IyXzRfOTIxNjAwLA0KCXBibl9iMl84XzkyMTYwMCwNCg0K CXBibl9iMl9idF8xXzExNTIwMCwNCglwYm5fYjJfYnRfMl8xMTUyMDAsDQoJ cGJuX2IyX2J0XzRfMTE1MjAwLA0KDQoJcGJuX2IyX2J0XzJfOTIxNjAwLA0K CXBibl9iMl9idF80XzkyMTYwMCwNCg0KCXBibl9iM180XzExNTIwMCwNCglw Ym5fYjNfOF8xMTUyMDAsDQoNCgkvKg0KCSAqIEJvYXJkLXNwZWNpZmljIHZl cnNpb25zLg0KCSAqLw0KCXBibl9wYW5hY29tLA0KCXBibl9wYW5hY29tMiwN CglwYm5fcGFuYWNvbTQsDQoJcGJuX3BseF9yb211bHVzLA0KCXBibl9veHNl bWksDQoJcGJuX2ludGVsX2k5NjAsDQoJcGJuX3NnaV9pb2MzLA0KCXBibl9u ZWNfbmlsZTQsDQoJcGJuX2NvbXB1dG9uZV80LA0KCXBibl9jb21wdXRvbmVf NiwNCglwYm5fY29tcHV0b25lXzgsDQoJcGJuX3Nic3hyc2lvLA0KCXBibl9l eGFyX1hSMTdDMTUyLA0KCXBibl9leGFyX1hSMTdDMTU0LA0KCXBibl9leGFy X1hSMTdDMTU4LA0KfTsNCg0KLyoNCiAqIHVhcnRfb2Zmc2V0IC0gdGhlIHNw YWNlIGJldHdlZW4gY2hhbm5lbHMNCiAqIHJlZ19zaGlmdCAgIC0gZGVzY3Jp YmVzIGhvdyB0aGUgVUFSVCByZWdpc3RlcnMgYXJlIG1hcHBlZA0KICogICAg ICAgICAgICAgICB0byBQQ0kgbWVtb3J5IGJ5IHRoZSBjYXJkLg0KICogRm9y IGV4YW1wbGUgSUVSIHJlZ2lzdGVyIG9uIFNCUywgSW5jLiBQTUMtT2N0UHJv IGlzIGxvY2F0ZWQgYXQNCiAqIG9mZnNldCAweDEwIGZyb20gdGhlIFVBUlQg YmFzZSwgd2hpbGUgVUFSVF9JRVIgaXMgZGVmaW5lZCBhcyAxDQogKiBpbiBp bmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaCwNCiAqIHNlZSBmaXJzdCBsaW5l cyBvZiBzZXJpYWxfaW4oKSBhbmQgc2VyaWFsX291dCgpIGluIDgyNTAuYw0K Ki8NCg0Kc3RhdGljIHN0cnVjdCBwY2lfYm9hcmQgcGNpX2JvYXJkc1tdIF9f ZGV2aW5pdGRhdGEgPSB7DQoJW3Bibl9kZWZhdWx0XSA9IHsNCgkJLmZsYWdz CQk9IEZMX0JBU0UwLA0KCQkubnVtX3BvcnRzCT0gMSwNCgkJLmJhc2VfYmF1 ZAk9IDExNTIwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gOCwNCgl9LA0KCVtwYm5f YjBfMV8xMTUyMDBdID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFTRTAsDQoJCS5u dW1fcG9ydHMJPSAxLA0KCQkuYmFzZV9iYXVkCT0gMTE1MjAwLA0KCQkudWFy dF9vZmZzZXQJPSA4LA0KCX0sDQoJW3Bibl9iMF8yXzExNTIwMF0gPSB7DQoJ CS5mbGFncwkJPSBGTF9CQVNFMCwNCgkJLm51bV9wb3J0cwk9IDIsDQoJCS5i YXNlX2JhdWQJPSAxMTUyMDAsDQoJCS51YXJ0X29mZnNldAk9IDgsDQoJfSwN CglbcGJuX2IwXzRfMTE1MjAwXSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0Uw LA0KCQkubnVtX3BvcnRzCT0gNCwNCgkJLmJhc2VfYmF1ZAk9IDExNTIwMCwN CgkJLnVhcnRfb2Zmc2V0CT0gOCwNCgl9LA0KCVtwYm5fYjBfNV8xMTUyMDBd ID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFTRTAsDQoJCS5udW1fcG9ydHMJPSA1 LA0KCQkuYmFzZV9iYXVkCT0gMTE1MjAwLA0KCQkudWFydF9vZmZzZXQJPSA4 LA0KCX0sDQoNCglbcGJuX2IwXzFfOTIxNjAwXSA9IHsNCgkJLmZsYWdzCQk9 IEZMX0JBU0UwLA0KCQkubnVtX3BvcnRzCT0gMSwNCgkJLmJhc2VfYmF1ZAk9 IDkyMTYwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gOCwNCgl9LA0KCVtwYm5fYjBf Ml85MjE2MDBdID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFTRTAsDQoJCS5udW1f cG9ydHMJPSAyLA0KCQkuYmFzZV9iYXVkCT0gOTIxNjAwLA0KCQkudWFydF9v ZmZzZXQJPSA4LA0KCX0sDQoJW3Bibl9iMF80XzkyMTYwMF0gPSB7DQoJCS5m bGFncwkJPSBGTF9CQVNFMCwNCgkJLm51bV9wb3J0cwk9IDQsDQoJCS5iYXNl X2JhdWQJPSA5MjE2MDAsDQoJCS51YXJ0X29mZnNldAk9IDgsDQoJfSwNCg0K CVtwYm5fYjBfYnRfMV8xMTUyMDBdID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFT RTB8RkxfQkFTRV9CQVJTLA0KCQkubnVtX3BvcnRzCT0gMSwNCgkJLmJhc2Vf YmF1ZAk9IDExNTIwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gOCwNCgl9LA0KCVtw Ym5fYjBfYnRfMl8xMTUyMDBdID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFTRTB8 RkxfQkFTRV9CQVJTLA0KCQkubnVtX3BvcnRzCT0gMiwNCgkJLmJhc2VfYmF1 ZAk9IDExNTIwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gOCwNCgl9LA0KCVtwYm5f YjBfYnRfOF8xMTUyMDBdID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFTRTB8Rkxf QkFTRV9CQVJTLA0KCQkubnVtX3BvcnRzCT0gOCwNCgkJLmJhc2VfYmF1ZAk9 IDExNTIwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gOCwNCgl9LA0KDQoJW3Bibl9i MF9idF8xXzQ2MDgwMF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNFMHxGTF9C QVNFX0JBUlMsDQoJCS5udW1fcG9ydHMJPSAxLA0KCQkuYmFzZV9iYXVkCT0g NDYwODAwLA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0sDQoJW3Bibl9iMF9i dF8yXzQ2MDgwMF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNFMHxGTF9CQVNF X0JBUlMsDQoJCS5udW1fcG9ydHMJPSAyLA0KCQkuYmFzZV9iYXVkCT0gNDYw ODAwLA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0sDQoJW3Bibl9iMF9idF80 XzQ2MDgwMF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNFMHxGTF9CQVNFX0JB UlMsDQoJCS5udW1fcG9ydHMJPSA0LA0KCQkuYmFzZV9iYXVkCT0gNDYwODAw LA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0sDQoNCglbcGJuX2IwX2J0XzFf OTIxNjAwXSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0UwfEZMX0JBU0VfQkFS UywNCgkJLm51bV9wb3J0cwk9IDEsDQoJCS5iYXNlX2JhdWQJPSA5MjE2MDAs DQoJCS51YXJ0X29mZnNldAk9IDgsDQoJfSwNCglbcGJuX2IwX2J0XzJfOTIx NjAwXSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0UwfEZMX0JBU0VfQkFSUywN CgkJLm51bV9wb3J0cwk9IDIsDQoJCS5iYXNlX2JhdWQJPSA5MjE2MDAsDQoJ CS51YXJ0X29mZnNldAk9IDgsDQoJfSwNCglbcGJuX2IwX2J0XzRfOTIxNjAw XSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0UwfEZMX0JBU0VfQkFSUywNCgkJ Lm51bV9wb3J0cwk9IDQsDQoJCS5iYXNlX2JhdWQJPSA5MjE2MDAsDQoJCS51 YXJ0X29mZnNldAk9IDgsDQoJfSwNCglbcGJuX2IwX2J0XzhfOTIxNjAwXSA9 IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0UwfEZMX0JBU0VfQkFSUywNCgkJLm51 bV9wb3J0cwk9IDgsDQoJCS5iYXNlX2JhdWQJPSA5MjE2MDAsDQoJCS51YXJ0 X29mZnNldAk9IDgsDQoJfSwNCg0KCVtwYm5fYjFfMV8xMTUyMDBdID0gew0K CQkuZmxhZ3MJCT0gRkxfQkFTRTEsDQoJCS5udW1fcG9ydHMJPSAxLA0KCQku YmFzZV9iYXVkCT0gMTE1MjAwLA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0s DQoJW3Bibl9iMV8yXzExNTIwMF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNF MSwNCgkJLm51bV9wb3J0cwk9IDIsDQoJCS5iYXNlX2JhdWQJPSAxMTUyMDAs DQoJCS51YXJ0X29mZnNldAk9IDgsDQoJfSwNCglbcGJuX2IxXzRfMTE1MjAw XSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0UxLA0KCQkubnVtX3BvcnRzCT0g NCwNCgkJLmJhc2VfYmF1ZAk9IDExNTIwMCwNCgkJLnVhcnRfb2Zmc2V0CT0g OCwNCgl9LA0KCVtwYm5fYjFfOF8xMTUyMDBdID0gew0KCQkuZmxhZ3MJCT0g RkxfQkFTRTEsDQoJCS5udW1fcG9ydHMJPSA4LA0KCQkuYmFzZV9iYXVkCT0g MTE1MjAwLA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0sDQoNCglbcGJuX2Ix XzFfOTIxNjAwXSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0UxLA0KCQkubnVt X3BvcnRzCT0gMSwNCgkJLmJhc2VfYmF1ZAk9IDkyMTYwMCwNCgkJLnVhcnRf b2Zmc2V0CT0gOCwNCgl9LA0KCVtwYm5fYjFfMl85MjE2MDBdID0gew0KCQku ZmxhZ3MJCT0gRkxfQkFTRTEsDQoJCS5udW1fcG9ydHMJPSAyLA0KCQkuYmFz ZV9iYXVkCT0gOTIxNjAwLA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0sDQoJ W3Bibl9iMV80XzkyMTYwMF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNFMSwN CgkJLm51bV9wb3J0cwk9IDQsDQoJCS5iYXNlX2JhdWQJPSA5MjE2MDAsDQoJ CS51YXJ0X29mZnNldAk9IDgsDQoJfSwNCglbcGJuX2IxXzhfOTIxNjAwXSA9 IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0UxLA0KCQkubnVtX3BvcnRzCT0gOCwN CgkJLmJhc2VfYmF1ZAk9IDkyMTYwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gOCwN Cgl9LA0KDQoJW3Bibl9iMV9idF8yXzkyMTYwMF0gPSB7DQoJCS5mbGFncwkJ PSBGTF9CQVNFMXxGTF9CQVNFX0JBUlMsDQoJCS5udW1fcG9ydHMJPSAyLA0K CQkuYmFzZV9iYXVkCT0gOTIxNjAwLA0KCQkudWFydF9vZmZzZXQJPSA4LA0K CX0sDQoNCglbcGJuX2IxXzFfMTM4MjQwMF0gPSB7DQoJCS5mbGFncwkJPSBG TF9CQVNFMSwNCgkJLm51bV9wb3J0cwk9IDEsDQoJCS5iYXNlX2JhdWQJPSAx MzgyNDAwLA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0sDQoJW3Bibl9iMV8y XzEzODI0MDBdID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFTRTEsDQoJCS5udW1f cG9ydHMJPSAyLA0KCQkuYmFzZV9iYXVkCT0gMTM4MjQwMCwNCgkJLnVhcnRf b2Zmc2V0CT0gOCwNCgl9LA0KCVtwYm5fYjFfNF8xMzgyNDAwXSA9IHsNCgkJ LmZsYWdzCQk9IEZMX0JBU0UxLA0KCQkubnVtX3BvcnRzCT0gNCwNCgkJLmJh c2VfYmF1ZAk9IDEzODI0MDAsDQoJCS51YXJ0X29mZnNldAk9IDgsDQoJfSwN CglbcGJuX2IxXzhfMTM4MjQwMF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNF MSwNCgkJLm51bV9wb3J0cwk9IDgsDQoJCS5iYXNlX2JhdWQJPSAxMzgyNDAw LA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0sDQoNCglbcGJuX2IyXzFfMTE1 MjAwXSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0UyLA0KCQkubnVtX3BvcnRz CT0gMSwNCgkJLmJhc2VfYmF1ZAk9IDExNTIwMCwNCgkJLnVhcnRfb2Zmc2V0 CT0gOCwNCgl9LA0KCVtwYm5fYjJfOF8xMTUyMDBdID0gew0KCQkuZmxhZ3MJ CT0gRkxfQkFTRTIsDQoJCS5udW1fcG9ydHMJPSA4LA0KCQkuYmFzZV9iYXVk CT0gMTE1MjAwLA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0sDQoNCglbcGJu X2IyXzFfNDYwODAwXSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0UyLA0KCQku bnVtX3BvcnRzCT0gMSwNCgkJLmJhc2VfYmF1ZAk9IDQ2MDgwMCwNCgkJLnVh cnRfb2Zmc2V0CT0gOCwNCgl9LA0KCVtwYm5fYjJfNF80NjA4MDBdID0gew0K CQkuZmxhZ3MJCT0gRkxfQkFTRTIsDQoJCS5udW1fcG9ydHMJPSA0LA0KCQku YmFzZV9iYXVkCT0gNDYwODAwLA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0s DQoJW3Bibl9iMl84XzQ2MDgwMF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNF MiwNCgkJLm51bV9wb3J0cwk9IDgsDQoJCS5iYXNlX2JhdWQJPSA0NjA4MDAs DQoJCS51YXJ0X29mZnNldAk9IDgsDQoJfSwNCglbcGJuX2IyXzE2XzQ2MDgw MF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNFMiwNCgkJLm51bV9wb3J0cwk9 IDE2LA0KCQkuYmFzZV9iYXVkCT0gNDYwODAwLA0KCQkudWFydF9vZmZzZXQJ PSA4LA0KCSB9LA0KDQoJW3Bibl9iMl8xXzkyMTYwMF0gPSB7DQoJCS5mbGFn cwkJPSBGTF9CQVNFMiwNCgkJLm51bV9wb3J0cwk9IDEsDQoJCS5iYXNlX2Jh dWQJPSA5MjE2MDAsDQoJCS51YXJ0X29mZnNldAk9IDgsDQoJfSwNCglbcGJu X2IyXzRfOTIxNjAwXSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0UyLA0KCQku bnVtX3BvcnRzCT0gNCwNCgkJLmJhc2VfYmF1ZAk9IDkyMTYwMCwNCgkJLnVh cnRfb2Zmc2V0CT0gOCwNCgl9LA0KCVtwYm5fYjJfOF85MjE2MDBdID0gew0K CQkuZmxhZ3MJCT0gRkxfQkFTRTIsDQoJCS5udW1fcG9ydHMJPSA4LA0KCQku YmFzZV9iYXVkCT0gOTIxNjAwLA0KCQkudWFydF9vZmZzZXQJPSA4LA0KCX0s DQoNCglbcGJuX2IyX2J0XzFfMTE1MjAwXSA9IHsNCgkJLmZsYWdzCQk9IEZM X0JBU0UyfEZMX0JBU0VfQkFSUywNCgkJLm51bV9wb3J0cwk9IDEsDQoJCS5i YXNlX2JhdWQJPSAxMTUyMDAsDQoJCS51YXJ0X29mZnNldAk9IDgsDQoJfSwN CglbcGJuX2IyX2J0XzJfMTE1MjAwXSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JB U0UyfEZMX0JBU0VfQkFSUywNCgkJLm51bV9wb3J0cwk9IDIsDQoJCS5iYXNl X2JhdWQJPSAxMTUyMDAsDQoJCS51YXJ0X29mZnNldAk9IDgsDQoJfSwNCglb cGJuX2IyX2J0XzRfMTE1MjAwXSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0Uy fEZMX0JBU0VfQkFSUywNCgkJLm51bV9wb3J0cwk9IDQsDQoJCS5iYXNlX2Jh dWQJPSAxMTUyMDAsDQoJCS51YXJ0X29mZnNldAk9IDgsDQoJfSwNCg0KCVtw Ym5fYjJfYnRfMl85MjE2MDBdID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFTRTJ8 RkxfQkFTRV9CQVJTLA0KCQkubnVtX3BvcnRzCT0gMiwNCgkJLmJhc2VfYmF1 ZAk9IDkyMTYwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gOCwNCgl9LA0KCVtwYm5f YjJfYnRfNF85MjE2MDBdID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFTRTJ8Rkxf QkFTRV9CQVJTLA0KCQkubnVtX3BvcnRzCT0gNCwNCgkJLmJhc2VfYmF1ZAk9 IDkyMTYwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gOCwNCgl9LA0KDQoJW3Bibl9i M180XzExNTIwMF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNFMywNCgkJLm51 bV9wb3J0cwk9IDQsDQoJCS5iYXNlX2JhdWQJPSAxMTUyMDAsDQoJCS51YXJ0 X29mZnNldAk9IDgsDQoJfSwNCglbcGJuX2IzXzhfMTE1MjAwXSA9IHsNCgkJ LmZsYWdzCQk9IEZMX0JBU0UzLA0KCQkubnVtX3BvcnRzCT0gOCwNCgkJLmJh c2VfYmF1ZAk9IDExNTIwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gOCwNCgl9LA0K DQoJLyoNCgkgKiBFbnRyaWVzIGZvbGxvd2luZyB0aGlzIGFyZSBib2FyZC1z cGVjaWZpYy4NCgkgKi8NCg0KCS8qDQoJICogUGFuYWNvbSAtIElPTUVNDQoJ ICovDQoJW3Bibl9wYW5hY29tXSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JBU0Uy LA0KCQkubnVtX3BvcnRzCT0gMiwNCgkJLmJhc2VfYmF1ZAk9IDkyMTYwMCwN CgkJLnVhcnRfb2Zmc2V0CT0gMHg0MDAsDQoJCS5yZWdfc2hpZnQJPSA3LA0K CX0sDQoJW3Bibl9wYW5hY29tMl0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNF MnxGTF9CQVNFX0JBUlMsDQoJCS5udW1fcG9ydHMJPSAyLA0KCQkuYmFzZV9i YXVkCT0gOTIxNjAwLA0KCQkudWFydF9vZmZzZXQJPSAweDQwMCwNCgkJLnJl Z19zaGlmdAk9IDcsDQoJfSwNCglbcGJuX3BhbmFjb200XSA9IHsNCgkJLmZs YWdzCQk9IEZMX0JBU0UyfEZMX0JBU0VfQkFSUywNCgkJLm51bV9wb3J0cwk9 IDQsDQoJCS5iYXNlX2JhdWQJPSA5MjE2MDAsDQoJCS51YXJ0X29mZnNldAk9 IDB4NDAwLA0KCQkucmVnX3NoaWZ0CT0gNywNCgl9LA0KDQoJLyogSSB0aGlu ayB0aGlzIGVudHJ5IGlzIGJyb2tlbiAtIHRoZSBmaXJzdF9vZmZzZXQgbG9v a3Mgd3JvbmcgLS1ybWsgKi8NCglbcGJuX3BseF9yb211bHVzXSA9IHsNCgkJ LmZsYWdzCQk9IEZMX0JBU0UyLA0KCQkubnVtX3BvcnRzCT0gNCwNCgkJLmJh c2VfYmF1ZAk9IDkyMTYwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gOCA8PCAyLA0K CQkucmVnX3NoaWZ0CT0gMiwNCgkJLmZpcnN0X29mZnNldAk9IDB4MDMsDQoJ fSwNCg0KCS8qDQoJICogVGhpcyBib2FyZCB1c2VzIHRoZSBzaXplIG9mIFBD SSBCYXNlIHJlZ2lvbiAwIHRvDQoJICogc2lnbmFsIG5vdyBtYW55IHBvcnRz IGFyZSBhdmFpbGFibGUNCgkgKi8NCglbcGJuX294c2VtaV0gPSB7DQoJCS5m bGFncwkJPSBGTF9CQVNFMHxGTF9SRUdJT05fU1pfQ0FQLA0KCQkubnVtX3Bv cnRzCT0gMzIsDQoJCS5iYXNlX2JhdWQJPSAxMTUyMDAsDQoJCS51YXJ0X29m ZnNldAk9IDgsDQoJfSwNCg0KCS8qDQoJICogRUtGIGFkZGl0aW9uIGZvciBp OTYwIEJvYXJkcyBmb3JtIEVLRiB3aXRoIHNlcmlhbCBwb3J0Lg0KCSAqIE1h eCAyNTYgcG9ydHMuDQoJICovDQoJW3Bibl9pbnRlbF9pOTYwXSA9IHsNCgkJ LmZsYWdzCQk9IEZMX0JBU0UwLA0KCQkubnVtX3BvcnRzCT0gMzIsDQoJCS5i YXNlX2JhdWQJPSA5MjE2MDAsDQoJCS51YXJ0X29mZnNldAk9IDggPDwgMiwN CgkJLnJlZ19zaGlmdAk9IDIsDQoJCS5maXJzdF9vZmZzZXQJPSAweDEwMDAw LA0KCX0sDQoJW3Bibl9zZ2lfaW9jM10gPSB7DQoJCS5mbGFncwkJPSBGTF9C QVNFMHxGTF9OT0lSUSwNCgkJLm51bV9wb3J0cwk9IDEsDQoJCS5iYXNlX2Jh dWQJPSA0NTgzMzMsDQoJCS51YXJ0X29mZnNldAk9IDgsDQoJCS5yZWdfc2hp ZnQJPSAwLA0KCQkuZmlyc3Rfb2Zmc2V0CT0gMHgyMDE3OCwNCgl9LA0KDQoJ LyoNCgkgKiBORUMgVnJjLTUwNzQgKE5pbGUgNCkgYnVpbHRpbiBVQVJULg0K CSAqLw0KCVtwYm5fbmVjX25pbGU0XSA9IHsNCgkJLmZsYWdzCQk9IEZMX0JB U0UwLA0KCQkubnVtX3BvcnRzCT0gMSwNCgkJLmJhc2VfYmF1ZAk9IDUyMDgz MywNCgkJLnVhcnRfb2Zmc2V0CT0gOCA8PCAzLA0KCQkucmVnX3NoaWZ0CT0g MywNCgkJLmZpcnN0X29mZnNldAk9IDB4MzAwLA0KCX0sDQoNCgkvKg0KCSAq IENvbXB1dG9uZSAtIHVzZXMgSU9NRU0uDQoJICovDQoJW3Bibl9jb21wdXRv bmVfNF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNFMCwNCgkJLm51bV9wb3J0 cwk9IDQsDQoJCS5iYXNlX2JhdWQJPSA5MjE2MDAsDQoJCS51YXJ0X29mZnNl dAk9IDB4NDAsDQoJCS5yZWdfc2hpZnQJPSAyLA0KCQkuZmlyc3Rfb2Zmc2V0 CT0gMHgyMDAsDQoJfSwNCglbcGJuX2NvbXB1dG9uZV82XSA9IHsNCgkJLmZs YWdzCQk9IEZMX0JBU0UwLA0KCQkubnVtX3BvcnRzCT0gNiwNCgkJLmJhc2Vf YmF1ZAk9IDkyMTYwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gMHg0MCwNCgkJLnJl Z19zaGlmdAk9IDIsDQoJCS5maXJzdF9vZmZzZXQJPSAweDIwMCwNCgl9LA0K CVtwYm5fY29tcHV0b25lXzhdID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFTRTAs DQoJCS5udW1fcG9ydHMJPSA4LA0KCQkuYmFzZV9iYXVkCT0gOTIxNjAwLA0K CQkudWFydF9vZmZzZXQJPSAweDQwLA0KCQkucmVnX3NoaWZ0CT0gMiwNCgkJ LmZpcnN0X29mZnNldAk9IDB4MjAwLA0KCX0sDQoJW3Bibl9zYnN4cnNpb10g PSB7DQoJCS5mbGFncwkJPSBGTF9CQVNFMCwNCgkJLm51bV9wb3J0cwk9IDgs DQoJCS5iYXNlX2JhdWQJPSA0NjA4MDAsDQoJCS51YXJ0X29mZnNldAk9IDI1 NiwNCgkJLnJlZ19zaGlmdAk9IDQsDQoJfSwNCgkvKg0KCSAqIEV4YXIgQ29y cC4gWFIxN0MxNVsyNDhdIER1YWwvUXVhZC9PY3RhbCBVQVJUDQoJICogIE9u bHkgYmFzaWMgMTY1NTBBIHN1cHBvcnQuDQoJICogIFhSMTdDMTVbMjRdIGFy ZSBub3QgdGVzdGVkLCBidXQgdGhleSBzaG91bGQgd29yay4NCgkgKi8NCglb cGJuX2V4YXJfWFIxN0MxNTJdID0gew0KCQkuZmxhZ3MJCT0gRkxfQkFTRTAs DQoJCS5udW1fcG9ydHMJPSAyLA0KCQkuYmFzZV9iYXVkCT0gOTIxNjAwLA0K CQkudWFydF9vZmZzZXQJPSAweDIwMCwNCgl9LA0KCVtwYm5fZXhhcl9YUjE3 QzE1NF0gPSB7DQoJCS5mbGFncwkJPSBGTF9CQVNFMCwNCgkJLm51bV9wb3J0 cwk9IDQsDQoJCS5iYXNlX2JhdWQJPSA5MjE2MDAsDQoJCS51YXJ0X29mZnNl dAk9IDB4MjAwLA0KCX0sDQoJW3Bibl9leGFyX1hSMTdDMTU4XSA9IHsNCgkJ LmZsYWdzCQk9IEZMX0JBU0UwLA0KCQkubnVtX3BvcnRzCT0gOCwNCgkJLmJh c2VfYmF1ZAk9IDkyMTYwMCwNCgkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsDQoJ fSwNCn07DQoNCi8qDQogKiBHaXZlbiBhIGNvbXBsZXRlIHVua25vd24gUENJ IGRldmljZSwgdHJ5IHRvIHVzZSBzb21lIGhldXJpc3RpY3MgdG8NCiAqIGd1 ZXNzIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgYmUsIGJhc2VkIG9u IHRoZSBwaXRpZnVsIFBDSQ0KICogc2VyaWFsIHNwZWNzLiAgUmV0dXJucyAw IG9uIHN1Y2Nlc3MsIDEgb24gZmFpbHVyZS4NCiAqLw0Kc3RhdGljIGludCBf X2RldmluaXQNCnNlcmlhbF9wY2lfZ3Vlc3NfYm9hcmQoc3RydWN0IHBjaV9k ZXYgKmRldiwgc3RydWN0IHBjaV9ib2FyZCAqYm9hcmQpDQp7DQoJaW50IG51 bV9pb21lbSwgbnVtX3BvcnQsIGZpcnN0X3BvcnQgPSAtMSwgaTsNCgkNCgkv Kg0KCSAqIElmIGl0IGlzIG5vdCBhIGNvbW11bmljYXRpb25zIGRldmljZSBv ciB0aGUgcHJvZ3JhbW1pbmcNCgkgKiBpbnRlcmZhY2UgaXMgZ3JlYXRlciB0 aGFuIDYsIGdpdmUgdXAuDQoJICoNCgkgKiAoU2hvdWxkIHdlIHRyeSB0byBt YWtlIGd1ZXNzZXMgZm9yIG11bHRpcG9ydCBzZXJpYWwgZGV2aWNlcw0KCSAq IGxhdGVyPykgDQoJICovDQoJaWYgKCgoKGRldi0+Y2xhc3MgPj4gOCkgIT0g UENJX0NMQVNTX0NPTU1VTklDQVRJT05fU0VSSUFMKSAmJg0KCSAgICAgKChk ZXYtPmNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX01P REVNKSkgfHwNCgkgICAgKGRldi0+Y2xhc3MgJiAweGZmKSA+IDYpDQoJCXJl dHVybiAtRU5PREVWOw0KDQoJbnVtX2lvbWVtID0gbnVtX3BvcnQgPSAwOw0K CWZvciAoaSA9IDA7IGkgPCBQQ0lfTlVNX0JBUl9SRVNPVVJDRVM7IGkrKykg ew0KCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKGRldiwgaSkgJiBJT1JFU09V UkNFX0lPKSB7DQoJCQludW1fcG9ydCsrOw0KCQkJaWYgKGZpcnN0X3BvcnQg PT0gLTEpDQoJCQkJZmlyc3RfcG9ydCA9IGk7DQoJCX0NCgkJaWYgKHBjaV9y ZXNvdXJjZV9mbGFncyhkZXYsIGkpICYgSU9SRVNPVVJDRV9NRU0pDQoJCQlu dW1faW9tZW0rKzsNCgl9DQoNCgkvKg0KCSAqIElmIHRoZXJlIGlzIDEgb3Ig MCBpb21lbSByZWdpb25zLCBhbmQgZXhhY3RseSBvbmUgcG9ydCwNCgkgKiB1 c2UgaXQuICBXZSBndWVzcyB0aGUgbnVtYmVyIG9mIHBvcnRzIGJhc2VkIG9u IHRoZSBJTw0KCSAqIHJlZ2lvbiBzaXplLg0KCSAqLw0KCWlmIChudW1faW9t ZW0gPD0gMSAmJiBudW1fcG9ydCA9PSAxKSB7DQoJCWJvYXJkLT5mbGFncyA9 IGZpcnN0X3BvcnQ7DQoJCWJvYXJkLT5udW1fcG9ydHMgPSBwY2lfcmVzb3Vy Y2VfbGVuKGRldiwgZmlyc3RfcG9ydCkgLyA4Ow0KCQlyZXR1cm4gMDsNCgl9 DQoNCgkvKg0KCSAqIE5vdyBndWVzcyBpZiB3ZSd2ZSBnb3QgYSBib2FyZCB3 aGljaCBpbmRleGVzIGJ5IEJBUnMuDQoJICogRWFjaCBJTyBCQVIgc2hvdWxk IGJlIDggYnl0ZXMsIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cNCgkgKiBjb25z ZWN1dGl2ZWx5Lg0KCSAqLw0KCWZpcnN0X3BvcnQgPSAtMTsNCgludW1fcG9y dCA9IDA7DQoJZm9yIChpID0gMDsgaSA8IFBDSV9OVU1fQkFSX1JFU09VUkNF UzsgaSsrKSB7DQoJCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBpKSAm IElPUkVTT1VSQ0VfSU8gJiYNCgkJICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2 LCBpKSA9PSA4ICYmDQoJCSAgICAoZmlyc3RfcG9ydCA9PSAtMSB8fCAoZmly c3RfcG9ydCArIG51bV9wb3J0KSA9PSBpKSkgew0KCQkJbnVtX3BvcnQrKzsN CgkJCWlmIChmaXJzdF9wb3J0ID09IC0xKQ0KCQkJCWZpcnN0X3BvcnQgPSBp Ow0KCQl9DQoJfQ0KDQoJaWYgKG51bV9wb3J0ID4gMSkgew0KCQlib2FyZC0+ ZmxhZ3MgPSBmaXJzdF9wb3J0IHwgRkxfQkFTRV9CQVJTOw0KCQlib2FyZC0+ bnVtX3BvcnRzID0gbnVtX3BvcnQ7DQoJCXJldHVybiAwOw0KCX0NCg0KCXJl dHVybiAtRU5PREVWOw0KfQ0KDQpzdGF0aWMgaW5saW5lIGludA0Kc2VyaWFs X3BjaV9tYXRjaGVzKHN0cnVjdCBwY2lfYm9hcmQgKmJvYXJkLCBzdHJ1Y3Qg cGNpX2JvYXJkICpndWVzc2VkKQ0Kew0KCXJldHVybg0KCSAgICBib2FyZC0+ bnVtX3BvcnRzID09IGd1ZXNzZWQtPm51bV9wb3J0cyAmJg0KCSAgICBib2Fy ZC0+YmFzZV9iYXVkID09IGd1ZXNzZWQtPmJhc2VfYmF1ZCAmJg0KCSAgICBi b2FyZC0+dWFydF9vZmZzZXQgPT0gZ3Vlc3NlZC0+dWFydF9vZmZzZXQgJiYN CgkgICAgYm9hcmQtPnJlZ19zaGlmdCA9PSBndWVzc2VkLT5yZWdfc2hpZnQg JiYNCgkgICAgYm9hcmQtPmZpcnN0X29mZnNldCA9PSBndWVzc2VkLT5maXJz dF9vZmZzZXQ7DQp9DQoNCi8qDQogKiBwY2kgZGV2aWNlcyB3aXRoIGFwcHJv cHJpYXRlIGNsYXNzIGRlY2xhcmVkLCBidXQga25vd24gYXMNCiAqIG5vbiBt b2RlbXMgb3Igc2VyaWFsDQogKi8NCnN0YXRpYyBzdHJ1Y3QgcGNpX2Rldmlj ZV9pZCBfX2RldmluaXRkYXRhIG5vbl9zZXJpYWxfcGNpX3RibFtdID0gew0K ICAgICAgIHsgICAgICAgUENJX1ZFTkRPUl9JRF9BTCwgUENJX0RFVklDRV9J RF9BTF9NNTQ1MSwNCiAgICAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9B TllfSUQsIDAsIDAsIDAgfSwNCiAgICAgICB7ICAgICAgIFBDSV9WRU5ET1Jf SURfQUwsIDB4NTQ1NywNCiAgICAgICAgICAgICAgIFBDSV9BTllfSUQsIFBD SV9BTllfSUQsIDAsIDAsIDAgfSwNCiAgICAgICB7ICAgICAgIFBDSV9WRU5E T1JfSURfQUwsIDB4NTQ1OSwNCiAgICAgICAgICAgICAgIFBDSV9BTllfSUQs IFBDSV9BTllfSUQsIDAsIDAsIDAgfSwNCiAgICAgICB7IDAsIH0NCn07DQoN Ci8qDQogKiBQcm9iZSBvbmUgc2VyaWFsIGJvYXJkLiAgVW5mb3J0dW5hdGVs eSwgdGhlcmUgaXMgbm8gcmh5bWUgbm9yIHJlYXNvbg0KICogdG8gdGhlIGFy cmFuZ2VtZW50IG9mIHNlcmlhbCBwb3J0cyBvbiBhIFBDSSBjYXJkLg0KICov DQpzdGF0aWMgaW50IF9fZGV2aW5pdA0KcGNpc2VyaWFsX2luaXRfb25lKHN0 cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lk ICplbnQpDQp7DQoJc3RydWN0IHNlcmlhbF9wcml2YXRlICpwcml2Ow0KCXN0 cnVjdCBwY2lfYm9hcmQgKmJvYXJkLCB0bXA7DQoJc3RydWN0IHBjaV9zZXJp YWxfcXVpcmsgKnF1aXJrOw0KCWludCByYywgbnJfcG9ydHMsIGk7DQoNCiAg ICAgICAgaWYgKHBjaV9tYXRjaF9kZXZpY2Uobm9uX3NlcmlhbF9wY2lfdGJs LCBkZXYpKQ0KICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOw0KDQoJ aWYgKGVudC0+ZHJpdmVyX2RhdGEgPj0gQVJSQVlfU0laRShwY2lfYm9hcmRz KSkgew0KCQlwcmludGsoS0VSTl9FUlIgInBjaV9pbml0X29uZTogaW52YWxp ZCBkcml2ZXJfZGF0YTogJWxkXG4iLA0KCQkJZW50LT5kcml2ZXJfZGF0YSk7 DQoJCXJldHVybiAtRUlOVkFMOw0KCX0NCg0KCWJvYXJkID0gJnBjaV9ib2Fy ZHNbZW50LT5kcml2ZXJfZGF0YV07DQoNCglyYyA9IHBjaV9lbmFibGVfZGV2 aWNlKGRldik7DQoJaWYgKHJjKQ0KCQlyZXR1cm4gcmM7DQoNCglpZiAoZW50 LT5kcml2ZXJfZGF0YSA9PSBwYm5fZGVmYXVsdCkgew0KCQkvKg0KCQkgKiBV c2UgYSBjb3B5IG9mIHRoZSBwY2lfYm9hcmQgZW50cnkgZm9yIHRoaXM7DQoJ CSAqIGF2b2lkIGNoYW5naW5nIGVudHJpZXMgaW4gdGhlIHRhYmxlLg0KCQkg Ki8NCgkJbWVtY3B5KCZ0bXAsIGJvYXJkLCBzaXplb2Yoc3RydWN0IHBjaV9i b2FyZCkpOw0KCQlib2FyZCA9ICZ0bXA7DQoNCgkJLyoNCgkJICogV2UgbWF0 Y2hlZCBvbmUgb2Ygb3VyIGNsYXNzIGVudHJpZXMuICBUcnkgdG8NCgkJICog ZGV0ZXJtaW5lIHRoZSBwYXJhbWV0ZXJzIG9mIHRoaXMgYm9hcmQuDQoJCSAq Lw0KCQlyYyA9IHNlcmlhbF9wY2lfZ3Vlc3NfYm9hcmQoZGV2LCBib2FyZCk7 DQoJCWlmIChyYykNCgkJCWdvdG8gZGlzYWJsZTsNCgl9IGVsc2Ugew0KCQkv Kg0KCQkgKiBXZSBtYXRjaGVkIGFuIGV4cGxpY2l0IGVudHJ5LiAgSWYgd2Ug YXJlIGFibGUgdG8NCgkJICogZGV0ZWN0IHRoaXMgYm9hcmRzIHNldHRpbmdz IHdpdGggb3VyIGhldXJpc3RpYywNCgkJICogdGhlbiB3ZSBubyBsb25nZXIg bmVlZCB0aGlzIGVudHJ5Lg0KCQkgKi8NCgkJbWVtY3B5KCZ0bXAsICZwY2lf Ym9hcmRzW3Bibl9kZWZhdWx0XSwgc2l6ZW9mKHN0cnVjdCBwY2lfYm9hcmQp KTsNCgkJcmMgPSBzZXJpYWxfcGNpX2d1ZXNzX2JvYXJkKGRldiwgJnRtcCk7 DQoJCWlmIChyYyA9PSAwICYmIHNlcmlhbF9wY2lfbWF0Y2hlcyhib2FyZCwg JnRtcCkpDQoJCQltb2FuX2RldmljZSgiUmVkdW5kYW50IGVudHJ5IGluIHNl cmlhbCBwY2lfdGFibGUuIiwNCgkJCQkgICAgZGV2KTsNCgl9DQoNCglucl9w b3J0cyA9IGJvYXJkLT5udW1fcG9ydHM7DQoNCgkvKg0KCSAqIEZpbmQgYW4g aW5pdCBhbmQgc2V0dXAgcXVpcmtzLg0KCSAqLw0KCXF1aXJrID0gZmluZF9x dWlyayhkZXYpOw0KDQoJLyoNCgkgKiBSdW4gdGhlIG5ldy1zdHlsZSBpbml0 aWFsaXphdGlvbiBmdW5jdGlvbi4NCgkgKiBUaGUgaW5pdGlhbGl6YXRpb24g ZnVuY3Rpb24gcmV0dXJuczoNCgkgKiAgPDAgIC0gZXJyb3INCgkgKiAgIDAg IC0gdXNlIGJvYXJkLT5udW1fcG9ydHMNCgkgKiAgPjAgIC0gbnVtYmVyIG9m IHBvcnRzDQoJICovDQoJaWYgKHF1aXJrLT5pbml0KSB7DQoJCXJjID0gcXVp cmstPmluaXQoZGV2KTsNCgkJaWYgKHJjIDwgMCkNCgkJCWdvdG8gZGlzYWJs ZTsNCgkJaWYgKHJjKQ0KCQkJbnJfcG9ydHMgPSByYzsNCgl9DQoNCglwcml2 ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlhbF9wcml2YXRlKSArDQoJ CSAgICAgICBzaXplb2YodW5zaWduZWQgaW50KSAqIG5yX3BvcnRzLA0KCQkg ICAgICAgR0ZQX0tFUk5FTCk7DQoJaWYgKCFwcml2KSB7DQoJCXJjID0gLUVO T01FTTsNCgkJZ290byBkZWluaXQ7DQoJfQ0KDQoJbWVtc2V0KHByaXYsIDAs IHNpemVvZihzdHJ1Y3Qgc2VyaWFsX3ByaXZhdGUpICsNCgkJCXNpemVvZih1 bnNpZ25lZCBpbnQpICogbnJfcG9ydHMpOw0KDQoJcHJpdi0+cXVpcmsgPSBx dWlyazsNCglwY2lfc2V0X2RydmRhdGEoZGV2LCBwcml2KTsNCg0KCWZvciAo aSA9IDA7IGkgPCBucl9wb3J0czsgaSsrKSB7DQoJCXN0cnVjdCB1YXJ0X3Bv cnQgc2VyaWFsX3BvcnQ7DQoJCW1lbXNldCgmc2VyaWFsX3BvcnQsIDAsIHNp emVvZihzdHJ1Y3QgdWFydF9wb3J0KSk7DQoNCgkJc2VyaWFsX3BvcnQuZmxh Z3MgPSBVUEZfU0tJUF9URVNUIHwgVVBGX0JPT1RfQVVUT0NPTkYgfA0KCQkJ CSAgICBVUEZfU0hBUkVfSVJROw0KCQlzZXJpYWxfcG9ydC51YXJ0Y2xrID0g Ym9hcmQtPmJhc2VfYmF1ZCAqIDE2Ow0KCQlzZXJpYWxfcG9ydC5pcnEgPSBn ZXRfcGNpX2lycShkZXYsIGJvYXJkLCBpKTsNCgkJc2VyaWFsX3BvcnQuZGV2 ID0gJmRldi0+ZGV2Ow0KCQlpZiAocXVpcmstPnNldHVwKGRldiwgYm9hcmQs ICZzZXJpYWxfcG9ydCwgaSkpDQoJCQlicmVhazsNCiNpZmRlZiBTRVJJQUxf REVCVUdfUENJDQoJCXByaW50aygiU2V0dXAgUENJIHBvcnQ6IHBvcnQgJXgs IGlycSAlZCwgdHlwZSAlZFxuIiwNCgkJICAgICAgIHNlcmlhbF9wb3J0Lmlv YmFzZSwgc2VyaWFsX3BvcnQuaXJxLCBzZXJpYWxfcG9ydC5pb3R5cGUpOw0K I2VuZGlmDQoJCQ0KCQlwcml2LT5saW5lW2ldID0gc2VyaWFsODI1MF9yZWdp c3Rlcl9wb3J0KCZzZXJpYWxfcG9ydCk7DQoJCWlmIChwcml2LT5saW5lW2ld IDwgMCkgew0KCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGRuJ3QgcmVn aXN0ZXIgc2VyaWFsIHBvcnQgJXM6ICVkXG4iLCBwY2lfbmFtZShkZXYpLCBw cml2LT5saW5lW2ldKTsNCgkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJcHJpdi0+ bnIgPSBpOw0KDQoJcmV0dXJuIDA7DQoNCiBkZWluaXQ6DQoJaWYgKHF1aXJr LT5leGl0KQ0KCQlxdWlyay0+ZXhpdChkZXYpOw0KIGRpc2FibGU6DQoJcGNp X2Rpc2FibGVfZGV2aWNlKGRldik7DQoJcmV0dXJuIHJjOw0KfQ0KDQpzdGF0 aWMgdm9pZCBfX2RldmV4aXQgcGNpc2VyaWFsX3JlbW92ZV9vbmUoc3RydWN0 IHBjaV9kZXYgKmRldikNCnsNCglzdHJ1Y3Qgc2VyaWFsX3ByaXZhdGUgKnBy aXYgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsNCg0KCXBjaV9zZXRfZHJ2ZGF0 YShkZXYsIE5VTEwpOw0KDQoJaWYgKHByaXYpIHsNCgkJc3RydWN0IHBjaV9z ZXJpYWxfcXVpcmsgKnF1aXJrOw0KCQlpbnQgaTsNCg0KCQlmb3IgKGkgPSAw OyBpIDwgcHJpdi0+bnI7IGkrKykNCgkJCXNlcmlhbDgyNTBfdW5yZWdpc3Rl cl9wb3J0KHByaXYtPmxpbmVbaV0pOw0KDQoJCWZvciAoaSA9IDA7IGkgPCBQ Q0lfTlVNX0JBUl9SRVNPVVJDRVM7IGkrKykgew0KCQkJaWYgKHByaXYtPnJl bWFwcGVkX2JhcltpXSkNCgkJCQlpb3VubWFwKHByaXYtPnJlbWFwcGVkX2Jh cltpXSk7DQoJCQlwcml2LT5yZW1hcHBlZF9iYXJbaV0gPSBOVUxMOw0KCQl9 DQoNCgkJLyoNCgkJICogRmluZCB0aGUgZXhpdCBxdWlya3MuDQoJCSAqLw0K CQlxdWlyayA9IGZpbmRfcXVpcmsoZGV2KTsNCgkJaWYgKHF1aXJrLT5leGl0 KQ0KCQkJcXVpcmstPmV4aXQoZGV2KTsNCg0KCQlwY2lfZGlzYWJsZV9kZXZp Y2UoZGV2KTsNCg0KCQlrZnJlZShwcml2KTsNCgl9DQp9DQoNCnN0YXRpYyBp bnQgcGNpc2VyaWFsX3N1c3BlbmRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYs IHUzMiBzdGF0ZSkNCnsNCglzdHJ1Y3Qgc2VyaWFsX3ByaXZhdGUgKnByaXYg PSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsNCg0KCWlmIChwcml2KSB7DQoJCWlu dCBpOw0KDQoJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5ucjsgaSsrKQ0KCQkJ c2VyaWFsODI1MF9zdXNwZW5kX3BvcnQocHJpdi0+bGluZVtpXSk7DQoJfQ0K CXJldHVybiAwOw0KfQ0KDQpzdGF0aWMgaW50IHBjaXNlcmlhbF9yZXN1bWVf b25lKHN0cnVjdCBwY2lfZGV2ICpkZXYpDQp7DQoJc3RydWN0IHNlcmlhbF9w cml2YXRlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKGRldik7DQoNCglpZiAo cHJpdikgew0KCQlpbnQgaTsNCg0KCQkvKg0KCQkgKiBFbnN1cmUgdGhhdCB0 aGUgYm9hcmQgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQuDQoJCSAqLw0KCQlp ZiAocHJpdi0+cXVpcmstPmluaXQpDQoJCQlwcml2LT5xdWlyay0+aW5pdChk ZXYpOw0KDQoJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5ucjsgaSsrKQ0KCQkJ c2VyaWFsODI1MF9yZXN1bWVfcG9ydChwcml2LT5saW5lW2ldKTsNCgl9DQoJ cmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBz ZXJpYWxfcGNpX3RibFtdID0gew0KCXsJUENJX1ZFTkRPUl9JRF9WMywgUENJ X0RFVklDRV9JRF9WM19WOTYwLA0KCQlQQ0lfU1VCVkVORE9SX0lEX0NPTk5F Q1RfVEVDSCwNCgkJUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4 XzIzMiwgMCwgMCwNCgkJcGJuX2IxXzhfMTM4MjQwMCB9LA0KCXsJUENJX1ZF TkRPUl9JRF9WMywgUENJX0RFVklDRV9JRF9WM19WOTYwLA0KCQlQQ0lfU1VC VkVORE9SX0lEX0NPTk5FQ1RfVEVDSCwNCgkJUENJX1NVQkRFVklDRV9JRF9D T05ORUNUX1RFQ0hfQkg0XzIzMiwgMCwgMCwNCgkJcGJuX2IxXzRfMTM4MjQw MCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9WMywgUENJX0RFVklDRV9JRF9WM19W OTYwLA0KCQlQQ0lfU1VCVkVORE9SX0lEX0NPTk5FQ1RfVEVDSCwNCgkJUENJ X1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkgyXzIzMiwgMCwgMCwNCgkJ cGJuX2IxXzJfMTM4MjQwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9WMywgUENJ X0RFVklDRV9JRF9WM19WMzUxLA0KCQlQQ0lfU1VCVkVORE9SX0lEX0NPTk5F Q1RfVEVDSCwNCgkJUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4 XzIzMiwgMCwgMCwNCgkJcGJuX2IxXzhfMTM4MjQwMCB9LA0KCXsJUENJX1ZF TkRPUl9JRF9WMywgUENJX0RFVklDRV9JRF9WM19WMzUxLA0KCQlQQ0lfU1VC VkVORE9SX0lEX0NPTk5FQ1RfVEVDSCwNCgkJUENJX1NVQkRFVklDRV9JRF9D T05ORUNUX1RFQ0hfQkg0XzIzMiwgMCwgMCwNCgkJcGJuX2IxXzRfMTM4MjQw MCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9WMywgUENJX0RFVklDRV9JRF9WM19W MzUxLA0KCQlQQ0lfU1VCVkVORE9SX0lEX0NPTk5FQ1RfVEVDSCwNCgkJUENJ X1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkgyXzIzMiwgMCwgMCwNCgkJ cGJuX2IxXzJfMTM4MjQwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9WMywgUENJ X0RFVklDRV9JRF9WM19WMzUxLA0KCQlQQ0lfU1VCVkVORE9SX0lEX0NPTk5F Q1RfVEVDSCwNCgkJUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4 XzQ4NSwgMCwgMCwNCgkJcGJuX2IxXzhfOTIxNjAwIH0sDQoJewlQQ0lfVkVO RE9SX0lEX1YzLCBQQ0lfREVWSUNFX0lEX1YzX1YzNTEsDQoJCVBDSV9TVUJW RU5ET1JfSURfQ09OTkVDVF9URUNILA0KCQlQQ0lfU1VCREVWSUNFX0lEX0NP Tk5FQ1RfVEVDSF9CSDhfNDg1XzRfNCwgMCwgMCwNCgkJcGJuX2IxXzhfOTIx NjAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX1YzLCBQQ0lfREVWSUNFX0lEX1Yz X1YzNTEsDQoJCVBDSV9TVUJWRU5ET1JfSURfQ09OTkVDVF9URUNILA0KCQlQ Q0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDRfNDg1LCAwLCAwLA0K CQlwYm5fYjFfNF85MjE2MDAgfSwNCgl7CVBDSV9WRU5ET1JfSURfVjMsIFBD SV9ERVZJQ0VfSURfVjNfVjM1MSwNCgkJUENJX1NVQlZFTkRPUl9JRF9DT05O RUNUX1RFQ0gsDQoJCVBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JI NF80ODVfMl8yLCAwLCAwLA0KCQlwYm5fYjFfNF85MjE2MDAgfSwNCgl7CVBD SV9WRU5ET1JfSURfVjMsIFBDSV9ERVZJQ0VfSURfVjNfVjM1MSwNCgkJUENJ X1NVQlZFTkRPUl9JRF9DT05ORUNUX1RFQ0gsDQoJCVBDSV9TVUJERVZJQ0Vf SURfQ09OTkVDVF9URUNIX0JIMl80ODUsIDAsIDAsDQoJCXBibl9iMV8yXzky MTYwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9WMywgUENJX0RFVklDRV9JRF9W M19WMzUxLA0KCQlQQ0lfU1VCVkVORE9SX0lEX0NPTk5FQ1RfVEVDSCwNCgkJ UENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4XzQ4NV8yXzYsIDAs IDAsDQoJCXBibl9iMV84XzkyMTYwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9W MywgUENJX0RFVklDRV9JRF9WM19WMzUxLA0KCQlQQ0lfU1VCVkVORE9SX0lE X0NPTk5FQ1RfVEVDSCwNCgkJUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RF Q0hfQkgwODExMDFWMSwgMCwgMCwNCgkJcGJuX2IxXzhfOTIxNjAwIH0sDQoJ ewlQQ0lfVkVORE9SX0lEX1YzLCBQQ0lfREVWSUNFX0lEX1YzX1YzNTEsDQoJ CVBDSV9TVUJWRU5ET1JfSURfQ09OTkVDVF9URUNILA0KCQlQQ0lfU1VCREVW SUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDA0MTEwMVYxLCAwLCAwLA0KCQlwYm5f YjFfNF85MjE2MDAgfSwNCg0KCXsJUENJX1ZFTkRPUl9JRF9TRUFMRVZFTCwg UENJX0RFVklDRV9JRF9TRUFMRVZFTF9VNTMwLA0KCQlQQ0lfQU5ZX0lELCBQ Q0lfQU5ZX0lELCAwLCAwLCANCgkJcGJuX2IyX2J0XzFfMTE1MjAwIH0sDQoJ ewlQQ0lfVkVORE9SX0lEX1NFQUxFVkVMLCBQQ0lfREVWSUNFX0lEX1NFQUxF VkVMX1VDT01NMiwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwg DQoJCXBibl9iMl9idF8yXzExNTIwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9T RUFMRVZFTCwgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VQ09NTTQyMiwNCgkJ UENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgDQoJCXBibl9iMl9idF80 XzExNTIwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9TRUFMRVZFTCwgUENJX0RF VklDRV9JRF9TRUFMRVZFTF9VQ09NTTIzMiwNCgkJUENJX0FOWV9JRCwgUENJ X0FOWV9JRCwgMCwgMCwgDQoJCXBibl9iMl9idF8yXzExNTIwMCB9LA0KCXsJ UENJX1ZFTkRPUl9JRF9TRUFMRVZFTCwgUENJX0RFVklDRV9JRF9TRUFMRVZF TF9DT01NNCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgDQoJ CXBibl9iMl9idF80XzExNTIwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9TRUFM RVZFTCwgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9DT01NOCwNCgkJUENJX0FO WV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgDQoJCXBibl9iMl84XzExNTIwMCB9 LA0KDQoJewlQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhf R1RFS19TRVJJQUwyLA0KCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAw LA0KCQlwYm5fYjJfYnRfMl8xMTUyMDAgfSwNCgl7CVBDSV9WRU5ET1JfSURf UExYLCBQQ0lfREVWSUNFX0lEX1BMWF9TUENPTTIwMCwNCgkJUENJX0FOWV9J RCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX2IyX2J0XzJfOTIxNjAwIH0s DQoJLyoNCgkgKiBWU2NvbSBTUENPTTgwMCwgZnJvbSBzbEBzLnBsDQoJICov DQoJewlQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfU1BD T004MDAsIA0KCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCANCgkJ cGJuX2IyXzhfOTIxNjAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX1BMWCwgUENJ X0RFVklDRV9JRF9QTFhfMTA3NywNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9J RCwgMCwgMCwgDQoJCXBibl9iMl80XzkyMTYwMCB9LA0KCXsJUENJX1ZFTkRP Ul9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwNTAsDQoJCVBDSV9TVUJW RU5ET1JfSURfS0VZU1BBTiwNCgkJUENJX1NVQkRFVklDRV9JRF9LRVlTUEFO X1NYMiwgMCwgMCwNCgkJcGJuX3BhbmFjb20gfSwNCgl7CVBDSV9WRU5ET1Jf SURfUEFOQUNPTSwgUENJX0RFVklDRV9JRF9QQU5BQ09NX1FVQURNT0RFTSwN CgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX3BhbmFj b200IH0sDQoJewlQQ0lfVkVORE9SX0lEX1BBTkFDT00sIFBDSV9ERVZJQ0Vf SURfUEFOQUNPTV9EVUFMTU9ERU0sDQoJCVBDSV9BTllfSUQsIFBDSV9BTllf SUQsIDAsIDAsDQoJCXBibl9wYW5hY29tMiB9LA0KCXsJUENJX1ZFTkRPUl9J RF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwNTAsDQoJCVBDSV9TVUJWRU5E T1JfSURfQ0hBU0VfUENJRkFTVCwNCgkJUENJX1NVQkRFVklDRV9JRF9DSEFT RV9QQ0lGQVNUNCwgMCwgMCwgDQoJCXBibl9iMl80XzQ2MDgwMCB9LA0KCXsJ UENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwNTAsDQoJ CVBDSV9TVUJWRU5ET1JfSURfQ0hBU0VfUENJRkFTVCwNCgkJUENJX1NVQkRF VklDRV9JRF9DSEFTRV9QQ0lGQVNUOCwgMCwgMCwgDQoJCXBibl9iMl84XzQ2 MDgwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURf UExYXzkwNTAsDQoJCVBDSV9TVUJWRU5ET1JfSURfQ0hBU0VfUENJRkFTVCwN CgkJUENJX1NVQkRFVklDRV9JRF9DSEFTRV9QQ0lGQVNUMTYsIDAsIDAsIA0K CQlwYm5fYjJfMTZfNDYwODAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX1BMWCwg UENJX0RFVklDRV9JRF9QTFhfOTA1MCwNCgkJUENJX1NVQlZFTkRPUl9JRF9D SEFTRV9QQ0lGQVNULA0KCQlQQ0lfU1VCREVWSUNFX0lEX0NIQVNFX1BDSUZB U1QxNkZNQywgMCwgMCwgDQoJCXBibl9iMl8xNl80NjA4MDAgfSwNCgl7CVBD SV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF85MDUwLA0KCQlQ Q0lfU1VCVkVORE9SX0lEX0NIQVNFX1BDSVJBUywNCgkJUENJX1NVQkRFVklD RV9JRF9DSEFTRV9QQ0lSQVM0LCAwLCAwLCANCgkJcGJuX2IyXzRfNDYwODAw IH0sDQoJewlQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhf OTA1MCwNCgkJUENJX1NVQlZFTkRPUl9JRF9DSEFTRV9QQ0lSQVMsDQoJCVBD SV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJUkFTOCwgMCwgMCwgDQoJCXBibl9i Ml84XzQ2MDgwMCB9LA0KCS8qDQoJICogTWVnYXdvbGYgUm9tdWx1cyBQQ0kg U2VyaWFsIENhcmQsIGZyb20gTWlrZSBIdWRzb24NCgkgKiAoRXhvcmF5QGlz eXMuY2EpDQoJICovDQoJewlQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklD RV9JRF9QTFhfUk9NVUxVUywNCgkJMHgxMGI1LCAweDEwNmEsIDAsIDAsDQoJ CXBibl9wbHhfcm9tdWx1cyB9LA0KCXsJUENJX1ZFTkRPUl9JRF9RVUFURUNI LCBQQ0lfREVWSUNFX0lEX1FVQVRFQ0hfUVNDMTAwLA0KCQlQQ0lfQU5ZX0lE LCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjFfNF8xMTUyMDAgfSwNCgl7 CVBDSV9WRU5ET1JfSURfUVVBVEVDSCwgUENJX0RFVklDRV9JRF9RVUFURUNI X0RTQzEwMCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJ cGJuX2IxXzJfMTE1MjAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX1FVQVRFQ0gs IFBDSV9ERVZJQ0VfSURfUVVBVEVDSF9FU0MxMDBELA0KCQlQQ0lfQU5ZX0lE LCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjFfOF8xMTUyMDAgfSwNCgl7 CVBDSV9WRU5ET1JfSURfUVVBVEVDSCwgUENJX0RFVklDRV9JRF9RVUFURUNI X0VTQzEwME0sDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsDQoJ CXBibl9iMV84XzExNTIwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9TUEVDSUFM SVgsIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzE2UENJOTU0LA0KCQlQQ0lfVkVO RE9SX0lEX1NQRUNJQUxJWCwgUENJX1NVQkRFVklDRV9JRF9TUEVDSUFMSVhf U1BFRUQ0LCAwLCAwLA0KCQlwYm5fYjBfNF85MjE2MDAgfSwNCgl7CVBDSV9W RU5ET1JfSURfT1hTRU1JLCBQQ0lfREVWSUNFX0lEX09YU0VNSV8xNlBDSTk1 NCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX2Iw XzRfMTE1MjAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgUENJX0RF VklDRV9JRF9PWFNFTUlfMTZQQ0k5NTIsDQoJCVBDSV9BTllfSUQsIFBDSV9B TllfSUQsIDAsIDAsDQoJCXBibl9iMF9idF8yXzkyMTYwMCB9LA0KDQoJLyoN CgkgKiBTQlMgVGVjaG5vbG9naWVzLCBJbmMuIFAtT2N0YWwgYW5kIFBNQy1P Q1RQUk8gY2FyZHMsDQoJICogZnJvbSBza29rb2R5bkB5YWhvby5jb20NCgkg Ki8NCgl7CVBDSV9WRU5ET1JfSURfU0JTTU9EVUxBUklPLCBQQ0lfREVWSUNF X0lEX09DVFBSTywNCgkJUENJX1NVQlZFTkRPUl9JRF9TQlNNT0RVTEFSSU8s IFBDSV9TVUJERVZJQ0VfSURfT0NUUFJPMjMyLCAwLCAwLA0KCQlwYm5fc2Jz eHJzaW8gfSwNCgl7CVBDSV9WRU5ET1JfSURfU0JTTU9EVUxBUklPLCBQQ0lf REVWSUNFX0lEX09DVFBSTywNCgkJUENJX1NVQlZFTkRPUl9JRF9TQlNNT0RV TEFSSU8sIFBDSV9TVUJERVZJQ0VfSURfT0NUUFJPNDIyLCAwLCAwLA0KCQlw Ym5fc2JzeHJzaW8gfSwNCgl7CVBDSV9WRU5ET1JfSURfU0JTTU9EVUxBUklP LCBQQ0lfREVWSUNFX0lEX09DVFBSTywNCgkJUENJX1NVQlZFTkRPUl9JRF9T QlNNT0RVTEFSSU8sIFBDSV9TVUJERVZJQ0VfSURfUE9DVEFMMjMyLCAwLCAw LA0KCQlwYm5fc2JzeHJzaW8gfSwNCgl7CVBDSV9WRU5ET1JfSURfU0JTTU9E VUxBUklPLCBQQ0lfREVWSUNFX0lEX09DVFBSTywNCgkJUENJX1NVQlZFTkRP Ul9JRF9TQlNNT0RVTEFSSU8sIFBDSV9TVUJERVZJQ0VfSURfUE9DVEFMNDIy LCAwLCAwLA0KCQlwYm5fc2JzeHJzaW8gfSwNCg0KCS8qDQoJICogRGlnaXRh biBEUzU2MC01NTgsIGZyb20gamltZEBlc29mdC5jb20NCgkgKi8NCgl7CVBD SV9WRU5ET1JfSURfQVRULCBQQ0lfREVWSUNFX0lEX0FUVF9WRU5VU19NT0RF TSwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgDQoJCXBibl9i MV8xXzExNTIwMCB9LA0KDQoJLyoNCgkgKiBUaXRhbiBFbGVjdHJvbmljIGNh cmRzDQoJICogIFRoZSA0MDBMIGFuZCA4MDBMIGhhdmUgYSBjdXN0b20gc2V0 dXAgcXVpcmsuDQoJICovDQoJewlQQ0lfVkVORE9SX0lEX1RJVEFOLCBQQ0lf REVWSUNFX0lEX1RJVEFOXzEwMCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9J RCwgMCwgMCwgDQoJCXBibl9iMF8xXzkyMTYwMCB9LA0KCXsJUENJX1ZFTkRP Ul9JRF9USVRBTiwgUENJX0RFVklDRV9JRF9USVRBTl8yMDAsDQoJCVBDSV9B TllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIA0KCQlwYm5fYjBfMl85MjE2MDAg fSwNCgl7CVBDSV9WRU5ET1JfSURfVElUQU4sIFBDSV9ERVZJQ0VfSURfVElU QU5fNDAwLA0KCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCANCgkJ cGJuX2IwXzRfOTIxNjAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX1RJVEFOLCBQ Q0lfREVWSUNFX0lEX1RJVEFOXzgwMEIsDQoJCVBDSV9BTllfSUQsIFBDSV9B TllfSUQsIDAsIDAsIA0KCQlwYm5fYjBfNF85MjE2MDAgfSwNCgl7CVBDSV9W RU5ET1JfSURfVElUQU4sIFBDSV9ERVZJQ0VfSURfVElUQU5fMTAwTCwNCgkJ UENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX2IxXzFfOTIx NjAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX1RJVEFOLCBQQ0lfREVWSUNFX0lE X1RJVEFOXzIwMEwsDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAs DQoJCXBibl9iMV9idF8yXzkyMTYwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9U SVRBTiwgUENJX0RFVklDRV9JRF9USVRBTl80MDBMLA0KCQlQQ0lfQU5ZX0lE LCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjBfYnRfNF85MjE2MDAgfSwN Cgl7CVBDSV9WRU5ET1JfSURfVElUQU4sIFBDSV9ERVZJQ0VfSURfVElUQU5f ODAwTCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJu X2IwX2J0XzhfOTIxNjAwIH0sDQoNCgl7CVBDSV9WRU5ET1JfSURfU0lJRywg UENJX0RFVklDRV9JRF9TSUlHXzFTXzEweF81NTAsDQoJCVBDSV9BTllfSUQs IFBDSV9BTllfSUQsIDAsIDAsDQoJCXBibl9iMl8xXzQ2MDgwMCB9LA0KCXsJ UENJX1ZFTkRPUl9JRF9TSUlHLCBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMTB4 XzY1MCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJu X2IyXzFfNDYwODAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX1NJSUcsIFBDSV9E RVZJQ0VfSURfU0lJR18xU18xMHhfODUwLA0KCQlQQ0lfQU5ZX0lELCBQQ0lf QU5ZX0lELCAwLCAwLA0KCQlwYm5fYjJfMV80NjA4MDAgfSwNCgl7CVBDSV9W RU5ET1JfSURfU0lJRywgUENJX0RFVklDRV9JRF9TSUlHXzJTXzEweF81NTAs DQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsDQoJCXBibl9iMl9i dF8yXzkyMTYwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9TSUlHLCBQQ0lfREVW SUNFX0lEX1NJSUdfMlNfMTB4XzY1MCwNCgkJUENJX0FOWV9JRCwgUENJX0FO WV9JRCwgMCwgMCwNCgkJcGJuX2IyX2J0XzJfOTIxNjAwIH0sDQoJewlQQ0lf VkVORE9SX0lEX1NJSUcsIFBDSV9ERVZJQ0VfSURfU0lJR18yU18xMHhfODUw LA0KCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjJf YnRfMl85MjE2MDAgfSwNCgl7CVBDSV9WRU5ET1JfSURfU0lJRywgUENJX0RF VklDRV9JRF9TSUlHXzRTXzEweF81NTAsDQoJCVBDSV9BTllfSUQsIFBDSV9B TllfSUQsIDAsIDAsDQoJCXBibl9iMl9idF80XzkyMTYwMCB9LA0KCXsJUENJ X1ZFTkRPUl9JRF9TSUlHLCBQQ0lfREVWSUNFX0lEX1NJSUdfNFNfMTB4XzY1 MCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX2Iy X2J0XzRfOTIxNjAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX1NJSUcsIFBDSV9E RVZJQ0VfSURfU0lJR180U18xMHhfODUwLA0KCQlQQ0lfQU5ZX0lELCBQQ0lf QU5ZX0lELCAwLCAwLA0KCQlwYm5fYjJfYnRfNF85MjE2MDAgfSwNCgl7CVBD SV9WRU5ET1JfSURfU0lJRywgUENJX0RFVklDRV9JRF9TSUlHXzFTXzIweF81 NTAsDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsDQoJCXBibl9i MF8xXzkyMTYwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9TSUlHLCBQQ0lfREVW SUNFX0lEX1NJSUdfMVNfMjB4XzY1MCwNCgkJUENJX0FOWV9JRCwgUENJX0FO WV9JRCwgMCwgMCwNCgkJcGJuX2IwXzFfOTIxNjAwIH0sDQoJewlQQ0lfVkVO RE9SX0lEX1NJSUcsIFBDSV9ERVZJQ0VfSURfU0lJR18xU18yMHhfODUwLA0K CQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjBfMV85 MjE2MDAgfSwNCgl7CVBDSV9WRU5ET1JfSURfU0lJRywgUENJX0RFVklDRV9J RF9TSUlHXzJTXzIweF81NTAsDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQs IDAsIDAsDQoJCXBibl9iMF9idF8yXzkyMTYwMCB9LA0KCXsJUENJX1ZFTkRP Ul9JRF9TSUlHLCBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMjB4XzY1MCwNCgkJ UENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX2IwX2J0XzJf OTIxNjAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX1NJSUcsIFBDSV9ERVZJQ0Vf SURfU0lJR18yU18yMHhfODUwLA0KCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lE LCAwLCAwLA0KCQlwYm5fYjBfYnRfMl85MjE2MDAgfSwNCgl7CVBDSV9WRU5E T1JfSURfU0lJRywgUENJX0RFVklDRV9JRF9TSUlHXzRTXzIweF81NTAsDQoJ CVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsDQoJCXBibl9iMF9idF80 XzkyMTYwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9TSUlHLCBQQ0lfREVWSUNF X0lEX1NJSUdfNFNfMjB4XzY1MCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9J RCwgMCwgMCwNCgkJcGJuX2IwX2J0XzRfOTIxNjAwIH0sDQoJewlQQ0lfVkVO RE9SX0lEX1NJSUcsIFBDSV9ERVZJQ0VfSURfU0lJR180U18yMHhfODUwLA0K CQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjBfYnRf NF85MjE2MDAgfSwNCg0KCS8qDQoJICogQ29tcHV0b25lIGRldmljZXMgc3Vi bWl0dGVkIGJ5IERvdWcgTWNOYXNoIGRtY25hc2hAY29tcHV0b25lLmNvbQ0K CSAqLw0KCXsJUENJX1ZFTkRPUl9JRF9DT01QVVRPTkUsIFBDSV9ERVZJQ0Vf SURfQ09NUFVUT05FX1BHLA0KCQlQQ0lfU1VCVkVORE9SX0lEX0NPTVBVVE9O RSwgUENJX1NVQkRFVklDRV9JRF9DT01QVVRPTkVfUEc0LA0KCQkwLCAwLCBw Ym5fY29tcHV0b25lXzQgfSwNCgl7CVBDSV9WRU5ET1JfSURfQ09NUFVUT05F LCBQQ0lfREVWSUNFX0lEX0NPTVBVVE9ORV9QRywNCgkJUENJX1NVQlZFTkRP Ul9JRF9DT01QVVRPTkUsIFBDSV9TVUJERVZJQ0VfSURfQ09NUFVUT05FX1BH OCwNCgkJMCwgMCwgcGJuX2NvbXB1dG9uZV84IH0sDQoJewlQQ0lfVkVORE9S X0lEX0NPTVBVVE9ORSwgUENJX0RFVklDRV9JRF9DT01QVVRPTkVfUEcsDQoJ CVBDSV9TVUJWRU5ET1JfSURfQ09NUFVUT05FLCBQQ0lfU1VCREVWSUNFX0lE X0NPTVBVVE9ORV9QRzYsDQoJCTAsIDAsIHBibl9jb21wdXRvbmVfNiB9LA0K DQoJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgUENJX0RFVklDRV9JRF9PWFNF TUlfMTZQQ0k5NU4sDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAs DQoJCXBibl9veHNlbWkgfSwNCgl7CVBDSV9WRU5ET1JfSURfVElNRURJQSwg UENJX0RFVklDRV9JRF9USU1FRElBXzE4ODksDQoJCVBDSV9WRU5ET1JfSURf VElNRURJQSwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX2IwX2J0XzFfOTIx NjAwIH0sDQoNCgkvKg0KCSAqIEFGQVZMQUIgc2VyaWFsIGNhcmQsIGZyb20g SGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4NCgkgKi8NCgl7 CVBDSV9WRU5ET1JfSURfQUZBVkxBQiwgUENJX0RFVklDRV9JRF9BRkFWTEFC X1AwMjgsDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsDQoJCXBi bl9iMF9idF84XzExNTIwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9BRkFWTEFC LCBQQ0lfREVWSUNFX0lEX0FGQVZMQUJfUDAzMCwNCgkJUENJX0FOWV9JRCwg UENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX2IwX2J0XzhfMTE1MjAwIH0sDQoN Cgl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX0RT RVJJQUwsDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsDQoJCXBi bl9iMF9idF8yXzExNTIwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9MQVZBLCBQ Q0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0EsDQoJCVBDSV9BTllfSUQsIFBD SV9BTllfSUQsIDAsIDAsDQoJCXBibl9iMF9idF8yXzExNTIwMCB9LA0KCXsJ UENJX1ZFTkRPUl9JRF9MQVZBLCBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJP X0IsDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsDQoJCXBibl9i MF9idF8yXzExNTIwMCB9LA0KCXsJUENJX1ZFTkRPUl9JRF9MQVZBLCBQQ0lf REVWSUNFX0lEX0xBVkFfT0NUT19BLA0KCQlQQ0lfQU5ZX0lELCBQQ0lfQU5Z X0lELCAwLCAwLA0KCQlwYm5fYjBfYnRfNF80NjA4MDAgfSwNCgl7CVBDSV9W RU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQiwNCgkJ UENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX2IwX2J0XzRf NDYwODAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX0xBVkEsIFBDSV9ERVZJQ0Vf SURfTEFWQV9QT1JUX1BMVVMsDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQs IDAsIDAsDQoJCXBibl9iMF9idF8yXzQ2MDgwMCB9LA0KCXsJUENJX1ZFTkRP Ul9JRF9MQVZBLCBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBRF9BLA0KCQlQQ0lf QU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjBfYnRfMl80NjA4 MDAgfSwNCgl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9M QVZBX1FVQURfQiwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwN CgkJcGJuX2IwX2J0XzJfNDYwODAwIH0sDQoJewlQQ0lfVkVORE9SX0lEX0xB VkEsIFBDSV9ERVZJQ0VfSURfTEFWQV9TU0VSSUFMLA0KCQlQQ0lfQU5ZX0lE LCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjBfYnRfMV8xMTUyMDAgfSwN Cgl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1BP UlRfNjUwLA0KCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlw Ym5fYjBfYnRfMV80NjA4MDAgfSwNCg0KCS8qDQoJICogRGVsbCBSZW1vdGUg QWNjZXNzIENhcmQgNCAtIFRpbV9UX011cnBoeUBEZWxsLmNvbQ0KCSAqLw0K CXsJUENJX1ZFTkRPUl9JRF9ERUxMLCBQQ0lfREVWSUNFX0lEX0RFTExfUkFD NCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX2Ix XzFfMTM4MjQwMCB9LA0KDQoJLyoNCgkgKiBEZWxsIFJlbW90ZSBBY2Nlc3Mg Q2FyZCBJSUkgLSBUaW1fVF9NdXJwaHlARGVsbC5jb20NCgkgKi8NCgl7CVBD SV9WRU5ET1JfSURfREVMTCwgUENJX0RFVklDRV9JRF9ERUxMX1JBQ0lJSSwN CgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwNCgkJcGJuX2IxXzFf MTM4MjQwMCB9LA0KDQoJLyoNCgkgKiBSQVN0ZWwgMiBwb3J0IG1vZGVtLCBn ZXJnQG1vcmV0b24uY29tLmF1DQoJICovDQoJewlQQ0lfVkVORE9SX0lEX01P UkVUT04sIFBDSV9ERVZJQ0VfSURfUkFTVEVMXzJQT1JULA0KCQlQQ0lfQU5Z X0lELCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjJfYnRfMl8xMTUyMDAg fSwNCg0KCS8qDQoJICogRUtGIGFkZGl0aW9uIGZvciBpOTYwIEJvYXJkcyBm b3JtIEVLRiB3aXRoIHNlcmlhbCBwb3J0DQoJICovDQoJewlQQ0lfVkVORE9S X0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgwOTYwX1JQLA0KCQkw eEU0QkYsIFBDSV9BTllfSUQsIDAsIDAsDQoJCXBibl9pbnRlbF9pOTYwIH0s DQoNCgkvKg0KCSAqIFhpcmNvbSBDYXJkYnVzL0V0aGVybmV0IGNvbWJvcw0K CSAqLw0KCXsJUENJX1ZFTkRPUl9JRF9YSVJDT00sIFBDSV9ERVZJQ0VfSURf WElSQ09NX1gzMjAxX01ETSwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwg MCwgMCwNCgkJcGJuX2IwXzFfMTE1MjAwIH0sDQoJLyoNCgkgKiBYaXJjb20g UkJNNTZHIGNhcmRidXMgbW9kZW0gLSBEaXJrIEFybm9sZCAodGVtcCBlbnRy eSkNCgkgKi8NCgl7CVBDSV9WRU5ET1JfSURfWElSQ09NLCBQQ0lfREVWSUNF X0lEX1hJUkNPTV9SQk01NkcsDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQs IDAsIDAsDQoJCXBibl9iMF8xXzExNTIwMCB9LA0KDQoJLyoNCgkgKiBVbnRl c3RlZCBQQ0kgbW9kZW1zLCBzZW50IGluIGZyb20gdmFyaW91cyBmb2xrcy4u Lg0KCSAqLw0KDQoJLyoNCgkgKiBFbHNhIE1vZGVsIDU2SyBQQ0kgTW9kZW0s IGZyb20gQW5kcmVhcyBSYXRoIDxhcmhAMDEwMTlmcmVlbmV0LmRlPg0KCSAq Lw0KCXsJUENJX1ZFTkRPUl9JRF9ST0NLV0VMTCwgMHgxMDA0LA0KCQkweDEw NDgsIDB4MTUwMCwgMCwgMCwNCgkJcGJuX2IxXzFfMTE1MjAwIH0sDQoNCgl7 CVBDSV9WRU5ET1JfSURfU0dJLCBQQ0lfREVWSUNFX0lEX1NHSV9JT0MzLA0K CQkweEZGMDAsIDAsIDAsIDAsDQoJCXBibl9zZ2lfaW9jMyB9LA0KDQoJLyoN CgkgKiBIUCBEaXZhIGNhcmQNCgkgKi8NCgl7CVBDSV9WRU5ET1JfSURfSFAs IFBDSV9ERVZJQ0VfSURfSFBfRElWQSwNCgkJUENJX0FOWV9JRCwgUENJX0FO WV9JRCwgMCwgMCwNCgkJcGJuX2IwXzVfMTE1MjAwIH0sDQoJewlQQ0lfVkVO RE9SX0lEX0hQLCBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfQVVYLA0KCQlQQ0lf QU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjJfMV8xMTUyMDAg fSwNCg0KCS8qDQoJICogTkVDIFZyYy01MDc0IChOaWxlIDQpIGJ1aWx0aW4g VUFSVC4NCgkgKi8NCgl7CVBDSV9WRU5ET1JfSURfTkVDLCBQQ0lfREVWSUNF X0lEX05FQ19OSUxFNCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwg MCwNCgkJcGJuX25lY19uaWxlNCB9LA0KDQoJewlQQ0lfVkVORE9SX0lEX0RD SSwgUENJX0RFVklDRV9JRF9EQ0lfUENDT000LA0KCQlQQ0lfQU5ZX0lELCBQ Q0lfQU5ZX0lELCAwLCAwLA0KCQlwYm5fYjNfNF8xMTUyMDAgfSwNCgl7CVBD SV9WRU5ET1JfSURfRENJLCBQQ0lfREVWSUNFX0lEX0RDSV9QQ0NPTTgsDQoJ CVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsDQoJCXBibl9iM184XzEx NTIwMCB9LA0KDQoJLyoNCgkgKiBFeGFyIENvcnAuIFhSMTdDMTVbMjQ4XSBE dWFsL1F1YWQvT2N0YWwgVUFSVA0KCSAqLw0KCXsJUENJX1ZFTkRPUl9JRF9F WEFSLCBQQ0lfREVWSUNFX0lEX0VYQVJfWFIxN0MxNTIsDQoJCVBDSV9BTllf SUQsIFBDSV9BTllfSUQsDQoJCTAsDQoJCTAsIHBibl9leGFyX1hSMTdDMTUy IH0sDQoJewlQQ0lfVkVORE9SX0lEX0VYQVIsIFBDSV9ERVZJQ0VfSURfRVhB Ul9YUjE3QzE1NCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwNCgkJMCwN CgkJMCwgcGJuX2V4YXJfWFIxN0MxNTQgfSwNCgl7CVBDSV9WRU5ET1JfSURf RVhBUiwgUENJX0RFVklDRV9JRF9FWEFSX1hSMTdDMTU4LA0KCQlQQ0lfQU5Z X0lELCBQQ0lfQU5ZX0lELA0KCQkwLA0KCQkwLCBwYm5fZXhhcl9YUjE3QzE1 OCB9LA0KDQoJLyoNCgkgKiBUaGVzZSBlbnRyaWVzIG1hdGNoIGRldmljZXMg d2l0aCBjbGFzcyBDT01NVU5JQ0FUSU9OX1NFUklBTCwNCgkgKiBDT01NVU5J Q0FUSU9OX01PREVNIG9yIENPTU1VTklDQVRJT05fTVVMVElTRVJJQUwNCgkg Ki8NCgl7CVBDSV9BTllfSUQsIFBDSV9BTllfSUQsDQoJCVBDSV9BTllfSUQs IFBDSV9BTllfSUQsDQoJCVBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX1NFUklB TCA8PCA4LA0KCQkweGZmZmYwMCwgcGJuX2RlZmF1bHQgfSwNCgl7CVBDSV9B TllfSUQsIFBDSV9BTllfSUQsDQoJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQs DQoJCVBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX01PREVNIDw8IDgsDQoJCTB4 ZmZmZjAwLCBwYm5fZGVmYXVsdCB9LA0KCXsJUENJX0FOWV9JRCwgUENJX0FO WV9JRCwNCgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwNCgkJUENJX0NMQVNT X0NPTU1VTklDQVRJT05fTVVMVElTRVJJQUwgPDwgOCwNCgkJMHhmZmZmMDAs IHBibl9kZWZhdWx0IH0sDQoJeyAwLCB9DQp9Ow0KDQpzdGF0aWMgc3RydWN0 IHBjaV9kcml2ZXIgc2VyaWFsX3BjaV9kcml2ZXIgPSB7DQoJLm5hbWUJCT0g InNlcmlhbCIsDQoJLnByb2JlCQk9IHBjaXNlcmlhbF9pbml0X29uZSwNCgku cmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHBjaXNlcmlhbF9yZW1vdmVfb25lKSwN Cgkuc3VzcGVuZAk9IHBjaXNlcmlhbF9zdXNwZW5kX29uZSwNCgkucmVzdW1l CQk9IHBjaXNlcmlhbF9yZXN1bWVfb25lLA0KCS5pZF90YWJsZQk9IHNlcmlh bF9wY2lfdGJsLA0KfTsNCg0Kc3RhdGljIGludCBfX2luaXQgc2VyaWFsODI1 MF9wY2lfaW5pdCh2b2lkKQ0Kew0KCXJldHVybiBwY2lfbW9kdWxlX2luaXQo JnNlcmlhbF9wY2lfZHJpdmVyKTsNCn0NCg0Kc3RhdGljIHZvaWQgX19leGl0 IHNlcmlhbDgyNTBfcGNpX2V4aXQodm9pZCkNCnsNCglwY2lfdW5yZWdpc3Rl cl9kcml2ZXIoJnNlcmlhbF9wY2lfZHJpdmVyKTsNCn0NCg0KbW9kdWxlX2lu aXQoc2VyaWFsODI1MF9wY2lfaW5pdCk7DQptb2R1bGVfZXhpdChzZXJpYWw4 MjUwX3BjaV9leGl0KTsNCg0KTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KTU9E VUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIDgyNTAvMTZ4NTAgUENJIHNlcmlh bCBwcm9iZSBtb2R1bGUiKTsNCk1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBz ZXJpYWxfcGNpX3RibCk7DQo= --8323328-1181590737-1111257194=:11358-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/