From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756002Ab0KSRnY (ORCPT ); Fri, 19 Nov 2010 12:43:24 -0500 Received: from na3sys009aog106.obsmtp.com ([74.125.149.77]:36204 "EHLO na3sys009aog106.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755658Ab0KSRnX (ORCPT ); Fri, 19 Nov 2010 12:43:23 -0500 From: "Yang, Bo" To: "Yang, Bo" , "'James.Bottomley@HansenPartnership.com'" , "'James.Bottomley@suse.de'" CC: "'linux-scsi@vger.kernel.org'" , "'akpm@osdl.org'" , "'linux-kernel@vger.kernel.org'" , Tomas Henzl Date: Fri, 19 Nov 2010 10:43:32 -0700 Subject: [PATCH 8/9] scsi: megaraid_sas - Driver take some workloads from FW Thread-Topic: [PATCH 8/9] scsi: megaraid_sas - Driver take some workloads from FW Thread-Index: AcsIRXwfwbieNXNUR6GBvdSy0cxVCQskSL/AFMvf1xAAAOfyYAAAMuKQAABVOuAAAICF8AAALm3AAAA2ZVAAAD1+QA== Message-ID: <4B6A08C587958942AA3002690DD4F8C30106A96223@cosmail02.lsi.com> References: <4B6A08C587958942AA3002690DD4F8C3D0804533@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C3DBD67F68@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A961BD@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A961D6@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A961E4@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A961F2@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A96213@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A96218@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A9621E@cosmail02.lsi.com> In-Reply-To: <4B6A08C587958942AA3002690DD4F8C30106A9621E@cosmail02.lsi.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: multipart/mixed; boundary="_002_4B6A08C587958942AA3002690DD4F8C30106A96223cosmail02lsic_" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --_002_4B6A08C587958942AA3002690DD4F8C30106A96223cosmail02lsic_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Driver added the new feature to take some of the workloads from FW to incre= ase performance of the iMR controller. FW assigns the read cmds back to driver which will increase the performance for megaraid sas iMR controller. Signed-off-by Bo Yang --- drivers/scsi/megaraid/megaraid_sas.c | 1299 +++++++++++++++++++++++++++++++= ++++ drivers/scsi/megaraid/megaraid_sas.h | 185 ++++ 2 files changed, 1484 insertions(+) --_002_4B6A08C587958942AA3002690DD4F8C30106A96223cosmail02lsic_ Content-Type: application/octet-stream; name="megasas-p8-cpx.patch" Content-Description: megasas-p8-cpx.patch Content-Disposition: attachment; filename="megasas-p8-cpx.patch"; size=39597; creation-date="Thu, 18 Nov 2010 20:37:02 GMT"; modification-date="Wed, 17 Nov 2010 13:09:12 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtcnVwTiBvbGQvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jIG5ldy9k cml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKLS0tIG9sZC9kcml2ZXJzL3Njc2kv bWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMJMjAxMC0xMS0xNyAxNDowODoxMy4wMDAwMDAwMDAgLTA1 MDAKKysrIG5ldy9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMJMjAxMC0xMS0x NyAxNDowODo0Ni4wMDAwMDAwMDAgLTA1MDAKQEAgLTc1LDYgKzc1LDEyIEBAIHN0YXRpYyBpbnQg bWVnYXNhc19nZXRfcGRfbGlzdChzdHJ1Y3QgbWUKIHN0YXRpYyBpbnQgbWVnYXNhc19pc3N1ZV9p bml0X21maShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOwogc3RhdGljIGludCBt ZWdhc2FzX3JlZ2lzdGVyX2FlbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCiAJ CQkJdTMyIHNlcV9udW0sIHUzMiBjbGFzc19sb2NhbGVfd29yZCk7CisKK3N0YXRpYyBpbnQgbWVn YXNhc19jaGVja19jcHhfc3VwcG9ydCggc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNl KTsKK3N0YXRpYyB1MzIgbWVnYXNhc19yZW1vdmVfY3B4KCBzdHJ1Y3QgbWVnYXNhc19pbnN0YW5j ZSAqaW5zdGFuY2UpOworc3RhdGljIGludCBtZWdhc2FzX3NlbmRfY3B4X3F1ZXVlX2RhdGEoIHN0 cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSApOworc3RhdGljIGludCBtZWdhc2FzX2hh bmRsZV9jcHhfcmVxdWVzdHMoIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSk7CisK IC8qCiAgKiBQQ0kgSUQgdGFibGUgZm9yIGFsbCBzdXBwb3J0ZWQgY29udHJvbGxlcnMKICAqLwpA QCAtNzkzLDYgKzc5OSwxMCBAQCBtZWdhc2FzX2lzc3VlX3BvbGxlZChzdHJ1Y3QgbWVnYXNhc19p bnN0CiAJICovCiAJZm9yIChpID0gMDsgKGkgPCBtc2VjcykgJiYgKGZyYW1lX2hkci0+Y21kX3N0 YXR1cyA9PSAweGZmKTsgaSsrKSB7CiAJCXJtYigpOworCisJCS8qIEZXIHVzaW5nIHhvci9jb3B5 IGFzIHNvb24gYXMgd2UgZW5hYmxlIGNweCAqLworCQlpZiAoKGluc3RhbmNlLT51bmxvYWQgPT0g MSkgJiYgaW5zdGFuY2UtPmNweF9zdXBwb3J0ZWQgKQorCQkJbWVnYXNhc19oYW5kbGVfY3B4X3Jl cXVlc3RzKCBpbnN0YW5jZSk7CiAJCW1zbGVlcCgxKTsKIAl9CiAKQEAgLTE1MjIsNiArMTUzMiwx MDkyIEBAIHN0YXRpYyB2b2lkIG1lZ2FyYWlkX3Nhc19raWxsX2hiYShzdHJ1Y3QKIAl9CiB9CiAK Kwordm9pZCB4b3JfZ2VuXzE1eDEodTMyICpidWZmX3B0cnNbMTZdLCB1MzIgYnl0ZXMpCit7CisJ dTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgIAkqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUs ICpzNiwgKnM3LCAqczgsICpzOTsKKwl1MzIJKnMxMCwgKnMxMSwgKnMxMiwgKnMxMywgKnMxNCwg KnMxNTsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIg ID0gYnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNb NF07CisJczUgID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZfcHRyc1s2XTsKKwlzNyAgPSBi dWZmX3B0cnNbN107CisJczggID0gYnVmZl9wdHJzWzhdOworCXM5ICA9IGJ1ZmZfcHRyc1s5XTsK KwlzMTAgPSBidWZmX3B0cnNbMTBdOworCXMxMSA9IGJ1ZmZfcHRyc1sxMV07CisJczEyID0gYnVm Zl9wdHJzWzEyXTsKKwlzMTMgPSBidWZmX3B0cnNbMTNdOworCXMxNCA9IGJ1ZmZfcHRyc1sxNF07 CisJczE1ID0gYnVmZl9wdHJzWzE1XTsKKworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAw OyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKQorCWRbb2ZmXSA9IHMxW29mZl1eczJbb2ZmXV5z M1tvZmZdXnM0W29mZl1eczVbb2ZmXV5zNltvZmZdXnM3W29mZl1eXAorCXM4W29mZl1eczlbb2Zm XV5zMTBbb2ZmXV5zMTFbb2ZmXV5zMTJbb2ZmXV5zMTNbb2ZmXV5zMTRbb2ZmXV5zMTVbb2ZmXTsK K30KKworCit2b2lkIHhvcl9nZW5fMTR4MSh1MzIgKmJ1ZmZfcHRyc1sxNV0sIHUzMiBieXRlcykK K3sKKwl1MzIgICAgb2ZmLCB3b3JkczsKKwl1MzIgICAgCSpkLCAqczEsICpzMiwgKnMzLCAqczQs ICpzNSwgKnM2LCAqczcsICpzODsKKwl1MzIJKnM5LCAqczEwLCAqczExLCAqczEyLCAqczEzLCAq czE0OworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsKKwlzMiAg PSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9IGJ1ZmZfcHRyc1s0 XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZdOworCXM3ICA9IGJ1 ZmZfcHRyc1s3XTsKKwlzOCAgPSBidWZmX3B0cnNbOF07CisJczkgID0gYnVmZl9wdHJzWzldOwor CXMxMCA9IGJ1ZmZfcHRyc1sxMF07CisJczExID0gYnVmZl9wdHJzWzExXTsKKwlzMTIgPSBidWZm X3B0cnNbMTJdOworCXMxMyA9IGJ1ZmZfcHRyc1sxM107CisJczE0ID0gYnVmZl9wdHJzWzE0XTsK KworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9m ZisrKQorCWRbb2ZmXSA9IHMxW29mZl1eczJbb2ZmXV5zM1tvZmZdXnM0W29mZl1eczVbb2ZmXV5z NltvZmZdXnM3W29mZl1eXAorCXM4W29mZl1eczlbb2ZmXV5zMTBbb2ZmXV5zMTFbb2ZmXV5zMTJb b2ZmXV5zMTNbb2ZmXV5zMTRbb2ZmXTsKK30KKworCit2b2lkIHhvcl9nZW5fMTN4MSh1MzIgKmJ1 ZmZfcHRyc1sxNF0sIHUzMiBieXRlcykKK3sKKwl1MzIgICAgCW9mZiwgd29yZHM7CisJdTMyICAg IAkqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNiwgKnM3OworCXUzMgkqczgsICpzOSwg KnMxMCwgKnMxMSwgKnMxMiwgKnMxMzsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBi dWZmX3B0cnNbMV07CisJczIgID0gYnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsK KwlzNCAgPSBidWZmX3B0cnNbNF07CisJczUgID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZf cHRyc1s2XTsKKwlzNyAgPSBidWZmX3B0cnNbN107CisJczggID0gYnVmZl9wdHJzWzhdOworCXM5 ICA9IGJ1ZmZfcHRyc1s5XTsKKwlzMTAgPSBidWZmX3B0cnNbMTBdOworCXMxMSA9IGJ1ZmZfcHRy c1sxMV07CisJczEyID0gYnVmZl9wdHJzWzEyXTsKKwlzMTMgPSBidWZmX3B0cnNbMTNdOworCisJ Zm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKysp CisJZFtvZmZdID0gczFbb2ZmXV5zMltvZmZdXnMzW29mZl1eczRbb2ZmXV5zNVtvZmZdXnM2W29m Zl1eczdbb2ZmXV5cCisJczhbb2ZmXV5zOVtvZmZdXnMxMFtvZmZdXnMxMVtvZmZdXnMxMltvZmZd XnMxM1tvZmZdOworCit9CisKKwordm9pZCB4b3JfZ2VuXzEyeDEodTMyICpidWZmX3B0cnNbMTNd LCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIAlvZmYsIHdvcmRzOworCXUzMiAgICAJKmQsICpzMSwg KnMyLCAqczMsICpzNCwgKnM1LCAqczYsICpzNzsKKwl1MzIJKnM4LCAqczksICpzMTAsICpzMTEs ICpzMTI7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFdOworCXMy ICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVmZl9wdHJz WzRdOworCXM1ICA9IGJ1ZmZfcHRyc1s1XTsKKwlzNiAgPSBidWZmX3B0cnNbNl07CisJczcgID0g YnVmZl9wdHJzWzddOworCXM4ICA9IGJ1ZmZfcHRyc1s4XTsKKwlzOSAgPSBidWZmX3B0cnNbOV07 CisJczEwID0gYnVmZl9wdHJzWzEwXTsKKwlzMTEgPSBidWZmX3B0cnNbMTFdOworCXMxMiA9IGJ1 ZmZfcHRyc1sxMl07CisKKwlmb3IgKHdvcmRzID0gYnl0ZXMvNCwgb2ZmID0gMDsgd29yZHMgPiAw OyB3b3Jkcy0tLCBvZmYrKykKKwkgICAgZFtvZmZdID0gczFbb2ZmXV5zMltvZmZdXnMzW29mZl1e czRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eczdbb2ZmXV5cCisJCXM4W29mZl1eczlbb2ZmXV5zMTBb b2ZmXV5zMTFbb2ZmXV5zMTJbb2ZmXTsKK30KKworCit2b2lkIHhvcl9nZW5fMTF4MSh1MzIgKmJ1 ZmZfcHRyc1sxMl0sIHUzMiBieXRlcykKK3sKKworCXUzMiAgICBvZmYsIHdvcmRzOworCXUzMiAg ICAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNiwgKnM3LCAqczgsICpzOSwgKnMxMCwg KnMxMTsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIg ID0gYnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNb NF07CisJczUgID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZfcHRyc1s2XTsKKwlzNyAgPSBi dWZmX3B0cnNbN107CisJczggID0gYnVmZl9wdHJzWzhdOworCXM5ICA9IGJ1ZmZfcHRyc1s5XTsK KwlzMTAgPSBidWZmX3B0cnNbMTBdOworCXMxMSA9IGJ1ZmZfcHRyc1sxMV07CisKKwlmb3IgKHdv cmRzID0gYnl0ZXMvNCwgb2ZmID0gMDsgd29yZHMgPiAwOyB3b3Jkcy0tLCBvZmYrKykKKwlkW29m Zl0gPSBzMVtvZmZdXnMyW29mZl1eczNbb2ZmXV5zNFtvZmZdXnM1W29mZl1eczZbb2ZmXV5zN1tv ZmZdXlwKKwkJczhbb2ZmXSBeIHM5W29mZl0gXiBzMTBbb2ZmXSBeIHMxMVtvZmZdOworfQorCisK K3ZvaWQgeG9yX2dlbl8xMHgxKHUzMiAqYnVmZl9wdHJzWzExXSwgdTMyIGJ5dGVzKQoreworCXUz MiAgICBvZmYsIHdvcmRzOworCXUzMiAgICAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpz NiwgKnM3LCAqczgsICpzOSwgKnMxMDsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBi dWZmX3B0cnNbMV07CisJczIgID0gYnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsK KwlzNCAgPSBidWZmX3B0cnNbNF07CisJczUgID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZf cHRyc1s2XTsKKwlzNyAgPSBidWZmX3B0cnNbN107CisJczggID0gYnVmZl9wdHJzWzhdOworCXM5 ICA9IGJ1ZmZfcHRyc1s5XTsKKwlzMTAgPSBidWZmX3B0cnNbMTBdOworCisJZm9yICh3b3JkcyA9 IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspCisJZFtvZmZdID0g czFbb2ZmXV5zMltvZmZdXnMzW29mZl1eczRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eczdbb2ZmXV5c CisJCXM4W29mZl0gXiBzOVtvZmZdIF4gczEwW29mZl07CisKK30KKworCit2b2lkIHhvcl9nZW5f OXgxKHUzMiAqYnVmZl9wdHJzWzEwXSwgdTMyIGJ5dGVzKQoreworCXUzMiAgICBvZmYsIHdvcmRz OworCXUzMiAgICAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNiwgKnM3LCAqczgsICpz OTsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIgID0g YnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNbNF07 CisJczUgID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZfcHRyc1s2XTsKKwlzNyAgPSBidWZm X3B0cnNbN107CisJczggID0gYnVmZl9wdHJzWzhdOworCXM5ICA9IGJ1ZmZfcHRyc1s5XTsKKwor CWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisr KQorCWRbb2ZmXSA9IHMxW29mZl1eczJbb2ZmXV5zM1tvZmZdXnM0W29mZl1eczVbb2ZmXV5zNltv ZmZdXnM3W29mZl1eXAorCQlzOFtvZmZdIF4gczlbb2ZmXTsKK30KKworCit2b2lkIHhvcl9nZW5f OHgxKHUzMiAqYnVmZl9wdHJzWzldLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7 CisJdTMyICAgICpkLCAqczEsICpzMiwgKnMzLCAqczQsICpzNSwgKnM2LCAqczcsICpzODsKKwor CWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIgID0gYnVmZl9w dHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNbNF07CisJczUg ID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZfcHRyc1s2XTsKKwlzNyAgPSBidWZmX3B0cnNb N107CisJczggID0gYnVmZl9wdHJzWzhdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9 IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspCisJZFtvZmZdID0gczFbb2ZmXV5zMltvZmZd XnMzW29mZl1eczRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eXAorCQlzN1tvZmZdXnM4W29mZl07Cit9 CisKKwordm9pZCB4b3JfZ2VuXzd4MSh1MzIgKmJ1ZmZfcHRyc1s4XSwgdTMyIGJ5dGVzKQorewor CXUzMiAgICBvZmYsIHdvcmRzOworCXUzMiAgICAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUs ICpzNiwgKnM3OworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsK KwlzMiAgPSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9IGJ1ZmZf cHRyc1s0XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZdOworCXM3 ICA9IGJ1ZmZfcHRyc1s3XTsKKworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3Jk cyA+IDA7IHdvcmRzLS0sIG9mZisrKQorCQlkW29mZl0gPSBzMVtvZmZdXnMyW29mZl1eczNbb2Zm XV5zNFtvZmZdXlwKKwkJCXM1W29mZl1eczZbb2ZmXV5zN1tvZmZdOworCit9CisKKwordm9pZCB4 b3JfZ2VuXzZ4MSh1MzIgKmJ1ZmZfcHRyc1s3XSwgdTMyIGJ5dGVzKQoreworCXUzMiAgICBvZmYs IHdvcmRzOworCXUzMiAgICAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNjsKKworCWQg ICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIgID0gYnVmZl9wdHJz WzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNbNF07CisJczUgID0g YnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZfcHRyc1s2XTsKKworCWZvciAod29yZHMgPSBieXRl cy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKQorCQlkW29mZl0gPSBzMVtv ZmZdXnMyW29mZl1eczNbb2ZmXV5cCisJCQlzNFtvZmZdXnM1W29mZl1eczZbb2ZmXTsKK30KKwor Cit2b2lkIHhvcl9nZW5fNXgxKHUzMiAqYnVmZl9wdHJzWzZdLCB1MzIgYnl0ZXMpCit7CisJdTMy ICAgIG9mZiwgd29yZHM7CisJdTMyICAgICpkLCAqczEsICpzMiwgKnMzLCAqczQsICpzNTsKKwor CWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIgID0gYnVmZl9w dHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNbNF07CisJczUg ID0gYnVmZl9wdHJzWzVdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRz ID4gMDsgd29yZHMtLSwgb2ZmKyspCisJCWRbb2ZmXSA9IHMxW29mZl0gXiBzMltvZmZdIF4gczNb b2ZmXV5cCisJCQlzNFtvZmZdIF4gczVbb2ZmXTsKK30KKworCit2b2lkIHhvcl9nZW5fNHgxKHUz MiAqYnVmZl9wdHJzWzVdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMy ICAgICpkLCAqczEsICpzMiwgKnMzLCAqczQ7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEg ID0gYnVmZl9wdHJzWzFdOworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNb M107CisJczQgID0gYnVmZl9wdHJzWzRdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9 IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspCisJCWRbb2ZmXSA9IHMxW29mZl0gXiBzMltv ZmZdIF4gczNbb2ZmXSBeIHM0W29mZl07Cit9CisKKwordm9pZCB4b3JfZ2VuXzN4MSh1MzIgKmJ1 ZmZfcHRyc1s0XSwgdTMyIGJ5dGVzKQoreworCXUzMiAgICBvZmYsIHdvcmRzOworCXUzMiAgICAq ZCwgKnMxLCAqczIsICpzMzsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0 cnNbMV07CisJczIgID0gYnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKworCWZv ciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKQor CQlkW29mZl0gPSBzMVtvZmZdIF4gczJbb2ZmXSBeIHMzW29mZl07Cit9CisKKwordm9pZCB4b3Jf Z2VuXzJ4MSh1MzIgKmJ1ZmZfcHRyc1szXSwgdTMyIGJ5dGVzKQoreworCXUzMiAgICBvZmYsIHdv cmRzOworCXUzMiAgICAqZCwgKnMxLCAqczI7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEg ID0gYnVmZl9wdHJzWzFdOworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKworCWZvciAod29yZHMgPSBi eXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKQorCQlkW29mZl0gPSBz MVtvZmZdIF4gczJbb2ZmXTsKK30KKworCit2b2lkIHhvcl9nZW5fMXgxKHUzMiAqYnVmZl9wdHJz WzJdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgICpkLCAqczE7 CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFdOworCisJZm9yICh3 b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspCisJCWRb b2ZmXSA9IHMxW29mZl07CisKK30KKworCit1OCB4b3JfY2hrXzE1eDEodTMyICpidWZmX3B0cnNb MTZdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgIHIsICpkLCAq czEsICpzMiwgKnMzLCAqczQsICpzNSwgKnM2LCAqczcsICpzODsKKwl1MzIJKnM5LCAqczEwLCAq czExLCAqczEyLCAqczEzLCAqczE0LCAqczE1OworCXU4ICAgICB4b3JfcmVzdWx0ID0gTVJfQ1BY X1NUQVRVU19TVUNDRVNTOworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRy c1sxXTsKKwlzMiAgPSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9 IGJ1ZmZfcHRyc1s0XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZd OworCXM3ICA9IGJ1ZmZfcHRyc1s3XTsKKwlzOCAgPSBidWZmX3B0cnNbOF07CisJczkgID0gYnVm Zl9wdHJzWzldOworCXMxMCA9IGJ1ZmZfcHRyc1sxMF07CisJczExID0gYnVmZl9wdHJzWzExXTsK KwlzMTIgPSBidWZmX3B0cnNbMTJdOworCXMxMyA9IGJ1ZmZfcHRyc1sxM107CisJczE0ID0gYnVm Zl9wdHJzWzE0XTsKKwlzMTUgPSBidWZmX3B0cnNbMTVdOworCisJZm9yICh3b3JkcyA9IGJ5dGVz LzQsIG9mZiA9IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspIHsKKwkJciA9IAlkW29mZl1e czFbb2ZmXV5zMltvZmZdXnMzW29mZl1eXAorCQkJczRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eczdb b2ZmXV5cCisJCQlzOFtvZmZdXnM5W29mZl1eczEwW29mZl1eczExW29mZl1eCisJCQlzMTJbb2Zm XV5zMTNbb2ZmXV5zMTRbb2ZmXV5zMTVbb2ZmXTsKKwkJaWYgKHIpIHsKKwkJCXhvcl9yZXN1bHQg PSBNUl9DUFhfU1RBVFVTX0lOQ09OU0lTVEVOVDsKKwkJCWRbb2ZmXSBePSByOworCQl9CisJfQor CXJldHVybiB4b3JfcmVzdWx0OworfQorCisKK3U4IHhvcl9jaGtfMTR4MSh1MzIgKmJ1ZmZfcHRy c1sxNV0sIHUzMiBieXRlcykKK3sKKwl1MzIgICAgCW9mZiwgd29yZHM7CisJdTMyICAgIAlyLCAq ZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNjsKKwl1MzIJKnM3LCAqczgsICpzOSwgKnMx MCwgKnMxMSwgKnMxMiwgKnMxMywgKnMxNDsKKwl1OCAgIAl4b3JfcmVzdWx0ID0gTVJfQ1BYX1NU QVRVU19TVUNDRVNTOworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sx XTsKKwlzMiAgPSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9IGJ1 ZmZfcHRyc1s0XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZdOwor CXM3ICA9IGJ1ZmZfcHRyc1s3XTsKKwlzOCAgPSBidWZmX3B0cnNbOF07CisJczkgID0gYnVmZl9w dHJzWzldOworCXMxMCA9IGJ1ZmZfcHRyc1sxMF07CisJczExID0gYnVmZl9wdHJzWzExXTsKKwlz MTIgPSBidWZmX3B0cnNbMTJdOworCXMxMyA9IGJ1ZmZfcHRyc1sxM107CisJczE0ID0gYnVmZl9w dHJzWzE0XTsKKworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdv cmRzLS0sIG9mZisrKSB7CisJciA9IGRbb2ZmXSBeIHMxW29mZl0gXiBzMltvZmZdIF4gczNbb2Zm XV5cCisJCXM0W29mZl0gXiBzNVtvZmZdIF4gczZbb2ZmXSBeIHM3W29mZl1eXAorCQlzOFtvZmZd IF4gczlbb2ZmXSBeIHMxMFtvZmZdIF4gczExW29mZl1eXAorCQlzMTJbb2ZmXSBeIHMxM1tvZmZd IF4gczE0W29mZl07CisJaWYgKHIpIHsKKwkJeG9yX3Jlc3VsdCA9IE1SX0NQWF9TVEFUVVNfSU5D T05TSVNURU5UOworCQlkW29mZl0gXj0gcjsKKwl9CisJfQorCXJldHVybiB4b3JfcmVzdWx0Owor fQorCisKK3U4IHhvcl9jaGtfMTN4MSh1MzIgKmJ1ZmZfcHRyc1sxNF0sIHUzMiBieXRlcykKK3sK Kwl1MzIgICAgIG9mZiwgd29yZHM7CisJdTMyICAgICByLCAqZCwgKnMxLCAqczIsICpzMywgKnM0 LCAqczUsICpzNiwgKnM3OworCXUzMgkqczgsICpzOSwgKnMxMCwgKnMxMSwgKnMxMiwgKnMxMzsK Kwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVTX1NVQ0NFU1M7CisKKwlkICAgPSBidWZm X3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFdOworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlz MyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVmZl9wdHJzWzRdOworCXM1ICA9IGJ1ZmZfcHRy c1s1XTsKKwlzNiAgPSBidWZmX3B0cnNbNl07CisJczcgID0gYnVmZl9wdHJzWzddOworCXM4ICA9 IGJ1ZmZfcHRyc1s4XTsKKwlzOSAgPSBidWZmX3B0cnNbOV07CisJczEwID0gYnVmZl9wdHJzWzEw XTsKKwlzMTEgPSBidWZmX3B0cnNbMTFdOworCXMxMiA9IGJ1ZmZfcHRyc1sxMl07CisJczEzID0g YnVmZl9wdHJzWzEzXTsKKworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+ IDA7IHdvcmRzLS0sIG9mZisrKSB7CisJCXIgPSBkW29mZl1eczFbb2ZmXV5zMltvZmZdXnMzW29m Zl1eczRbb2ZmXV5cCisJCXM1W29mZl1eczZbb2ZmXV5zN1tvZmZdXlwKKwkJczhbb2ZmXV5zOVtv ZmZdXnMxMFtvZmZdXnMxMVtvZmZdXnMxMltvZmZdXnMxM1tvZmZdOworCQlpZiAocikgeworCQkJ eG9yX3Jlc3VsdCA9IE1SX0NQWF9TVEFUVVNfSU5DT05TSVNURU5UOworCQkJZFtvZmZdIF49IHI7 CisJCX0KKwl9CisJcmV0dXJuIHhvcl9yZXN1bHQ7CisKK30KKworCit1OCB4b3JfY2hrXzEyeDEo dTMyICpidWZmX3B0cnNbMTNdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJ dTMyICAgIAlyLCAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNjsKKwl1MzIJKnM3LCAq czgsICpzOSwgKnMxMCwgKnMxMSwgKnMxMjsKKwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9DUFhfU1RB VFVTX1NVQ0NFU1M7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFd OworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVm Zl9wdHJzWzRdOworCXM1ICA9IGJ1ZmZfcHRyc1s1XTsKKwlzNiAgPSBidWZmX3B0cnNbNl07CisJ czcgID0gYnVmZl9wdHJzWzddOworCXM4ICA9IGJ1ZmZfcHRyc1s4XTsKKwlzOSAgPSBidWZmX3B0 cnNbOV07CisJczEwID0gYnVmZl9wdHJzWzEwXTsKKwlzMTEgPSBidWZmX3B0cnNbMTFdOworCXMx MiA9IGJ1ZmZfcHRyc1sxMl07CisKKwlmb3IgKHdvcmRzID0gYnl0ZXMvNCwgb2ZmID0gMDsgd29y ZHMgPiAwOyB3b3Jkcy0tLCBvZmYrKykgeworCQlyID0gZFtvZmZdXnMxW29mZl1eczJbb2ZmXV5z M1tvZmZdXlwKKwkJczRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eczdbb2ZmXV5cCisJCXM4W29mZl1e czlbb2ZmXV5zMTBbb2ZmXV5zMTFbb2ZmXV5zMTJbb2ZmXTsKKwkJaWYgKHIpIHsKKwkJCXhvcl9y ZXN1bHQgPSBNUl9DUFhfU1RBVFVTX0lOQ09OU0lTVEVOVDsKKwkJCWRbb2ZmXSBePSByOworCQl9 CisJfQorCXJldHVybiB4b3JfcmVzdWx0OworfQorCisKK3U4IHhvcl9jaGtfMTF4MSh1MzIgKmJ1 ZmZfcHRyc1sxMl0sIHUzMiBieXRlcykKK3sKKwl1MzIgICAgCW9mZiwgd29yZHM7CisJdTMyICAg IAlyLCAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczU7CisJdTMyCSpzNiwgKnM3LCAqczgsICpz OSwgKnMxMCwgKnMxMTsKKwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVTX1NVQ0NFU1M7 CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFdOworCXMyICA9IGJ1 ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVmZl9wdHJzWzRdOwor CXM1ICA9IGJ1ZmZfcHRyc1s1XTsKKwlzNiAgPSBidWZmX3B0cnNbNl07CisJczcgID0gYnVmZl9w dHJzWzddOworCXM4ICA9IGJ1ZmZfcHRyc1s4XTsKKwlzOSAgPSBidWZmX3B0cnNbOV07CisJczEw ID0gYnVmZl9wdHJzWzEwXTsKKwlzMTEgPSBidWZmX3B0cnNbMTFdOworCisJZm9yICh3b3JkcyA9 IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspIHsKKwkJciA9IGRb b2ZmXV5zMVtvZmZdXnMyW29mZl1eczNbb2ZmXV5cCisJCXM0W29mZl1eczVbb2ZmXV5zNltvZmZd XnM3W29mZl1eXAorCQlzOFtvZmZdXnM5W29mZl1eczEwW29mZl1eczExW29mZl07CisJCWlmIChy KSB7CisJCQl4b3JfcmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19JTkNPTlNJU1RFTlQ7CisJCQlkW29m Zl0gXj0gcjsKKwkJfQorCX0KKwlyZXR1cm4geG9yX3Jlc3VsdDsKK30KKworCit1OCB4b3JfY2hr XzEweDEodTMyICpidWZmX3B0cnNbMTFdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIAlvZmYsIHdv cmRzOworCXUzMiAgICAJciwgKmQsICpzMSwgKnMyLCAqczMsICpzNCwgKnM1OworCXUzMgkqczYs ICpzNywgKnM4LCAqczksICpzMTA7CisJdTggICB4b3JfcmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19T VUNDRVNTOworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsKKwlz MiAgPSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9IGJ1ZmZfcHRy c1s0XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZdOworCXM3ICA9 IGJ1ZmZfcHRyc1s3XTsKKwlzOCAgPSBidWZmX3B0cnNbOF07CisJczkgID0gYnVmZl9wdHJzWzld OworCXMxMCA9IGJ1ZmZfcHRyc1sxMF07CisKKwlmb3IgKHdvcmRzID0gYnl0ZXMvNCwgb2ZmID0g MDsgd29yZHMgPiAwOyB3b3Jkcy0tLCBvZmYrKykgeworCXIgPSBkW29mZl1eczFbb2ZmXV5zMltv ZmZdXnMzW29mZl1eczRbb2ZmXV5cCisJCXM1W29mZl1eczZbb2ZmXV5zN1tvZmZdXlwKKwkJczhb b2ZmXV5zOVtvZmZdXnMxMFtvZmZdOworCQlpZiAocikgeworCQkJeG9yX3Jlc3VsdCA9IE1SX0NQ WF9TVEFUVVNfSU5DT05TSVNURU5UOworCQkJZFtvZmZdIF49IHI7CisJCX0KKwl9CisJcmV0dXJu IHhvcl9yZXN1bHQ7Cit9CisKKwordTggeG9yX2Noa185eDEodTMyICpidWZmX3B0cnNbMTBdLCB1 MzIgYnl0ZXMpCit7CisJdTMyICAgIAlvZmYsIHdvcmRzOworCXUzMiAgICAJciwgKmQsICpzMSwg KnMyLCAqczMsICpzNDsKKwl1MzIJKnM1LCAqczYsICpzNywgKnM4LCAqczk7CisJdTggICB4b3Jf cmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19TVUNDRVNTOworCisJZCAgID0gYnVmZl9wdHJzWzBdOwor CXMxICA9IGJ1ZmZfcHRyc1sxXTsKKwlzMiAgPSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9w dHJzWzNdOworCXM0ICA9IGJ1ZmZfcHRyc1s0XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYg ID0gYnVmZl9wdHJzWzZdOworCXM3ICA9IGJ1ZmZfcHRyc1s3XTsKKwlzOCAgPSBidWZmX3B0cnNb OF07CisJczkgID0gYnVmZl9wdHJzWzldOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9 IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspIHsKKwlyID0gZFtvZmZdXnMxW29mZl1eczJb b2ZmXV5zM1tvZmZdXlwKKwkJczRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eczdbb2ZmXV5cCisJCXM4 W29mZl1eczlbb2ZmXTsKKwkJaWYgKHIpIHsKKwkJCXhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVT X0lOQ09OU0lTVEVOVDsKKwkJCWRbb2ZmXSBePSByOworCQl9CisJfQorCXJldHVybiB4b3JfcmVz dWx0OworfQorCisKK3U4IHhvcl9jaGtfOHgxKHUzMiAqYnVmZl9wdHJzWzldLCB1MzIgYnl0ZXMp Cit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgIHIsICpkLCAqczEsICpzMiwgKnMzLCAq czQsICpzNSwgKnM2LCAqczcsICpzODsKKwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVT X1NVQ0NFU1M7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFdOwor CXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVmZl9w dHJzWzRdOworCXM1ICA9IGJ1ZmZfcHRyc1s1XTsKKwlzNiAgPSBidWZmX3B0cnNbNl07CisJczcg ID0gYnVmZl9wdHJzWzddOworCXM4ICA9IGJ1ZmZfcHRyc1s4XTsKKworCWZvciAod29yZHMgPSBi eXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKSB7CisJciA9CWRbb2Zm XV5zMVtvZmZdXnMyW29mZl1eczNbb2ZmXV5cCisJCXM0W29mZl1eczVbb2ZmXV5zNltvZmZdXnM3 W29mZl1eczhbb2ZmXTsKKworCWlmIChyKSB7CisJCXhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVT X0lOQ09OU0lTVEVOVDsKKwkJZFtvZmZdIF49IHI7CisJCX0KKwl9CisJcmV0dXJuIHhvcl9yZXN1 bHQ7Cit9CisKKwordTggeG9yX2Noa183eDEodTMyICpidWZmX3B0cnNbOF0sIHUzMiBieXRlcykK K3sKKwl1MzIgICAgb2ZmLCB3b3JkczsKKwl1MzIgICAgciwgKmQsICpzMSwgKnMyLCAqczMsICpz NCwgKnM1LCAqczYsICpzNzsKKwl1OCAgICB4b3JfcmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19TVUND RVNTOworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsKKwlzMiAg PSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9IGJ1ZmZfcHRyc1s0 XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZdOworCXM3ICA9IGJ1 ZmZfcHRyc1s3XTsKKworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7 IHdvcmRzLS0sIG9mZisrKSB7CisJciA9IGRbb2ZmXV5zMVtvZmZdXnMyW29mZl1eczNbb2ZmXV5c CisJCXM0W29mZl1eczVbb2ZmXV5zNltvZmZdXnM3W29mZl07CisJaWYgKHIpIHsKKwkJeG9yX3Jl c3VsdCA9IE1SX0NQWF9TVEFUVVNfSU5DT05TSVNURU5UOworCQlkW29mZl0gXj0gcjsKKwkJfQor CX0KKwlyZXR1cm4geG9yX3Jlc3VsdDsKK30KKworCit1OCB4b3JfY2hrXzZ4MSh1MzIgKmJ1ZmZf cHRyc1s3XSwgdTMyIGJ5dGVzKQoreworCXUzMiAgICBvZmYsIHdvcmRzOworCXUzMiAgICByLCAq ZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNjsKKwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9D UFhfU1RBVFVTX1NVQ0NFU1M7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9w dHJzWzFdOworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQg ID0gYnVmZl9wdHJzWzRdOworCXM1ICA9IGJ1ZmZfcHRyc1s1XTsKKwlzNiAgPSBidWZmX3B0cnNb Nl07CisKKwlmb3IgKHdvcmRzID0gYnl0ZXMvNCwgb2ZmID0gMDsgd29yZHMgPiAwOyB3b3Jkcy0t LCBvZmYrKykgeworCQlyID0gZFtvZmZdXnMxW29mZl1eczJbb2ZmXV5zM1tvZmZdXlwKKwkJczRb b2ZmXV5zNVtvZmZdXnM2W29mZl07CisJCWlmIChyKSB7CisJCQl4b3JfcmVzdWx0ID0gTVJfQ1BY X1NUQVRVU19JTkNPTlNJU1RFTlQ7CisJCQlkW29mZl0gXj0gcjsKKwkJfQorCX0KKwlyZXR1cm4g eG9yX3Jlc3VsdDsKK30KKwordTggeG9yX2Noa181eDEodTMyICpidWZmX3B0cnNbNl0sIHUzMiBi eXRlcykKK3sKKwl1MzIgICAgb2ZmLCB3b3JkczsKKwl1MzIgICAgciwgKmQsICpzMSwgKnMyLCAq czMsICpzNCwgKnM1OworCXU4ICAgeG9yX3Jlc3VsdCA9IE1SX0NQWF9TVEFUVVNfU1VDQ0VTUzsK KworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIgID0gYnVm Zl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNbNF07CisJ czUgID0gYnVmZl9wdHJzWzVdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdv cmRzID4gMDsgd29yZHMtLSwgb2ZmKyspIHsKKwkJciA9IGRbb2ZmXSBeIHMxW29mZl0gXiBzMltv ZmZdXlwKKwkJczNbb2ZmXSBeIHM0W29mZl0gXiBzNVtvZmZdOworCQlpZiAocikgeworCQkJeG9y X3Jlc3VsdCA9IE1SX0NQWF9TVEFUVVNfSU5DT05TSVNURU5UOworCQkJZFtvZmZdIF49IHI7CisJ CX0KKwl9CisJcmV0dXJuIHhvcl9yZXN1bHQ7Cit9CisKKwordTggeG9yX2Noa180eDEodTMyICpi dWZmX3B0cnNbNV0sIHUzMiBieXRlcykKK3sKKwl1MzIgICAgb2ZmLCB3b3JkczsKKwl1MzIgICAg ciwgKmQsICpzMSwgKnMyLCAqczMsICpzNDsKKwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9DUFhfU1RB VFVTX1NVQ0NFU1M7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFd OworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVm Zl9wdHJzWzRdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRzID4gMDsg d29yZHMtLSwgb2ZmKyspIHsKKwkJciA9IGRbb2ZmXSBeIHMxW29mZl0gXiBzMltvZmZdIF4gczNb b2ZmXSBeIHM0W29mZl07CisJCWlmIChyKSB7CisJCXhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVT X0lOQ09OU0lTVEVOVDsKKwkJZFtvZmZdIF49IHI7CisJCX0KKwl9CisJcmV0dXJuIHhvcl9yZXN1 bHQ7Cit9CisKKwordTggeG9yX2Noa18zeDEodTMyICpidWZmX3B0cnNbNF0sIHUzMiBieXRlcykK K3sKKwl1MzIgICAgb2ZmLCB3b3JkczsKKwl1MzIgICAgciwgKmQsICpzMSwgKnMyLCAqczM7CisJ dTggICB4b3JfcmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19TVUNDRVNTOworCisJZCAgID0gYnVmZl9w dHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsKKwlzMiAgPSBidWZmX3B0cnNbMl07CisJczMg ID0gYnVmZl9wdHJzWzNdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRz ID4gMDsgd29yZHMtLSwgb2ZmKyspIHsKKwkJciA9IGRbb2ZmXSBeIHMxW29mZl0gXiBzMltvZmZd IF4gczNbb2ZmXTsKKwkJaWYgKHIpIHsKKwkJCXhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVTX0lO Q09OU0lTVEVOVDsKKwkJCWRbb2ZmXSBePSByOworCQl9CisJfQorCXJldHVybiB4b3JfcmVzdWx0 OworfQorCisKK3U4IHhvcl9jaGtfMngxKHUzMiAqYnVmZl9wdHJzWzNdLCB1MzIgYnl0ZXMpCit7 CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgIHIsICpkLCAqczEsICpzMjsKKwl1OCAgIHhv cl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVTX1NVQ0NFU1M7CisKKwlkICAgPSBidWZmX3B0cnNbMF07 CisJczEgID0gYnVmZl9wdHJzWzFdOworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKworCWZvciAod29y ZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKSB7CisJCXIg PSBkW29mZl0gXiBzMVtvZmZdIF4gczJbb2ZmXTsKKwkJaWYgKHIpIHsKKwkJCXhvcl9yZXN1bHQg PSBNUl9DUFhfU1RBVFVTX0lOQ09OU0lTVEVOVDsKKwkJCWRbb2ZmXSBePSByOworCQl9CisJfQor CisJcmV0dXJuIHhvcl9yZXN1bHQ7Cit9CisKK3U4IHhvcl9jaGtfMXgxKHUzMiAqYnVmZl9wdHJz WzJdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgICpkLCAqczE7 CisJdTggICB4b3JfcmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19TVUNDRVNTOworCisJZCAgID0gYnVm Zl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsKKworCWZvciAod29yZHMgPSBieXRlcy80 LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKSB7CisJCWlmIChkW29mZl0gIT0g czFbb2ZmXSkgeworCQkJeG9yX3Jlc3VsdCA9IE1SX0NQWF9TVEFUVVNfSU5DT05TSVNURU5UOwor CQkJZFtvZmZdID0gczFbb2ZmXTsKKwkJfQorCX0KKworCXJldHVybiB4b3JfcmVzdWx0OworfQor Cit2b2lkICAoKnhvcl9nZW5fZnVuY3NbTUFYX01SX1JPV19TSVpFXSkodTMyICoqLCB1MzIpID0g eworCXhvcl9nZW5fMXgxLAorCXhvcl9nZW5fMngxLAorCXhvcl9nZW5fM3gxLAorCXhvcl9nZW5f NHgxLAorCXhvcl9nZW5fNXgxLAorCXhvcl9nZW5fNngxLAorCXhvcl9nZW5fN3gxLAorCXhvcl9n ZW5fOHgxLAorCXhvcl9nZW5fOXgxLAorCXhvcl9nZW5fMTB4MSwKKwl4b3JfZ2VuXzExeDEsCisJ eG9yX2dlbl8xMngxLAorCXhvcl9nZW5fMTN4MSwKKwl4b3JfZ2VuXzE0eDEsCisJeG9yX2dlbl8x NXgxLAorfTsKKwordTggICgqeG9yX2NoZWNrX2Z1bmNzW01BWF9NUl9ST1dfU0laRV0pKHUzMiAq KiwgdTMyKSA9IHsKKwl4b3JfY2hrXzF4MSwKKwl4b3JfY2hrXzJ4MSwKKwl4b3JfY2hrXzN4MSwK Kwl4b3JfY2hrXzR4MSwKKwl4b3JfY2hrXzV4MSwKKwl4b3JfY2hrXzZ4MSwKKwl4b3JfY2hrXzd4 MSwKKwl4b3JfY2hrXzh4MSwKKwl4b3JfY2hrXzl4MSwKKwl4b3JfY2hrXzEweDEsCisJeG9yX2No a18xMXgxLAorCXhvcl9jaGtfMTJ4MSwKKwl4b3JfY2hrXzEzeDEsCisJeG9yX2Noa18xNHgxLAor CXhvcl9jaGtfMTV4MSwKK307CisKK3N0YXRpYyBpbmxpbmUgdTggbWVnYXNhc19zY2FuX3NldF9i aXQodTMyIGJpdG1hcCkKK3sKKwl1OCAgYml0ID0gMDsKKwl3aGlsZSAoYml0bWFwKSB7CisJCWlm IChiaXRtYXAgJiAxKQorCQkJcmV0dXJuIGJpdDsKKworCQliaXRtYXAgPj49IDE7CisJCWJpdCsr OworCX0KKwlyZXR1cm4gfjA7Cit9CisKKy8qKgorKiBtZWdhc2FzX2RvX2NweF94b3IgLSBjb21w bGV0ZXMgdGhlIHhvciBvcGVyYXRpb24KKyogQHhvcl9kZXMJCTogc29ydWNlIGFuZCBkZXN0IGJ1 ZmZlcnMgZGV0YWlscy4KKyogQGhvc3RfbWVtCQk6IHByZXZpb3VzbHkgbWFwcGVkIG1lbW9yeSBm b3IgZncKKyogQGhvc3RfbWVtX2xlbgk6IG1hcHBlZCBtZW1vcnkgbGVuZ3RoIGluIGJ5dGVzLgor KgorKiBAcmV0dXJuIDAgb24gc3VjY2VzcyAhPSAwIG9uIGZhaWx1cmUKKyoKKyoqLworc3RhdGlj IHU4IG1lZ2FzYXNfZG9fY3B4X3hvciggc3RydWN0IG1yX2NweF94b3JfZGVzY3JpcHRvciAqeG9y X2RlcywKKwkJCWNvbnN0IHU4ICpob3N0X21lbSwgY29uc3QgIHUzMiBob3N0X21lbV9sZW4pCit7 CisKKwl1MzIgYnVmZl92YWxpZF9iaXRfbWFwID0geG9yX2Rlcy0+YnVmZl92YWxpZF9iaXRtYXA7 CisJdTMyICpidWZfcHRyX2xpc3RbTUFYX01SX1JPV19TSVpFXTsKKwl1MzIgdHhfY291bnQgPSB4 b3JfZGVzLT5zaXplOworCXU4IGRlc3RfaWR4LCBidWZfaWR4LCBiaXQ7CisJdTggICAgICAgICAg aXNfb3BfZ2VuOworCXU4ICBzdGF0dXMgPSBNUl9DUFhfU1RBVFVTX1NVQ0NFU1M7CisKKwkvKiBt YWtlIHRoZSBmaXJzdCBidWZmZXIgcHRyIGFzIHRoZSBkZXN0aW5hdGlvbi4qLworCWlmICggeG9y X2Rlcy0+b3AgPT0gIE1SX0NQWF9YT1JfT1BfR0VOX1AgfHwKKwkJeG9yX2Rlcy0+b3AgPT0gTVJf Q1BYX1hPUl9PUF9DSEVDS19QICkKKwkJZGVzdF9pZHggPSB4b3JfZGVzLT5wX2lkeDsKKwllbHNl CisJCWRlc3RfaWR4ID0geG9yX2Rlcy0+cV9pZHg7CisKKwlidWZfcHRyX2xpc3RbMF0gPSAodTMy ICopKGhvc3RfbWVtICsgeG9yX2Rlcy0+YnVmZl9saXN0W2Rlc3RfaWR4XSk7CisKKwlpc19vcF9n ZW4gPSBNUl9DUFhfWE9SX09QX0lTX0dFTih4b3JfZGVzLT5vcCk7CisKKwlpZiAoIHhvcl9kZXMt PmJ1ZmZfbGlzdFtkZXN0X2lkeF0rdHhfY291bnQgPiBob3N0X21lbV9sZW4pIHsKKwkJcHJpbnRr KEtFUk5fRVJSICIxc3QgaG9zdCBtZW1vcnkgb3ZlciBmbG93IGRldGVjdGVkLlxuIik7CisJCXJl dHVybiBNUl9DUFhfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJLyoKKwkqIEZvciBYT1JfT1BfQ0hF Q0tfUCwgb3VyIGNoZWNrIHJvdXRpbmUgZXhwZWN0cworCSogYnVmUHRyc1swXSB0byBiZSBib3Ro IHBhcml0eQorCSogc291cmNlIGFuZCBwYXJpdHkgZGVzdGluYXRpb247IGNsZWFyCisJKiBvdXQg dGhlIFAtaW5kZXggZnJvbSBvdXIgd29ya2luZyBiaXRtYXAKKwkqIHNvIHRoYXQgdGhlIHNvdXJj ZS1idWZmZXIgc2NhbiBsb29wIGJlbG93CisJKiBkb2Vzbid0IGluY2x1ZGUgUCBhcyBvbmUgb2Yg dGhlCisJKiBleHBsaWNpdCBzb3VyY2UgYnVmZmVycyBpbiBidWZQdHJzW10uCisJICovCisJaWYg KCAhaXNfb3BfZ2VuKQorCQlidWZmX3ZhbGlkX2JpdF9tYXAgJj0gfigxPDx4b3JfZGVzLT5wX2lk eCk7CisKKwkvKiBwb3B1bGF0ZSBidWZfcHRyX2xpc3Qgd2l0aCB2YWxpZCBidWZmZXIgcG9pbnRl cnMuKi8KKwlmb3IgKCBidWZfaWR4ID0gMSA7IGJ1ZmZfdmFsaWRfYml0X21hcCAhPSAwIDsgYnVm X2lkeCsrICkgeworCQliaXQgPSBtZWdhc2FzX3NjYW5fc2V0X2JpdCggYnVmZl92YWxpZF9iaXRf bWFwKTsKKwkJYnVmX3B0cl9saXN0W2J1Zl9pZHhdID0KKwkJCSh1MzIgKikoaG9zdF9tZW0gKyAo dTMyKXhvcl9kZXMtPmJ1ZmZfbGlzdFtiaXRdKTsKKwkJaWYgKCB4b3JfZGVzLT5idWZmX2xpc3Rb Yml0XSt0eF9jb3VudCA+IGhvc3RfbWVtX2xlbikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJob3N0 IG1lbW9yeSBvdmVyIGZsb3cgZGV0ZWN0ZWQuXG4iKTsKKwkJCXJldHVybiBNUl9DUFhfU1RBVFVT X0ZBSUxVUkU7CisJCX0KKwkJYnVmZl92YWxpZF9iaXRfbWFwICY9IH4oMSA8PCBiaXQpOworCX0K KwkvKiBjYWxsIHRoZSB4b3IgZ2VuIGZ1Y3Rpb25zLiovCisJaWYgKCBpc19vcF9nZW4gKQorCQko Knhvcl9nZW5fZnVuY3NbYnVmX2lkeC0yXSkoYnVmX3B0cl9saXN0LCB0eF9jb3VudCk7CisJZWxz ZQorCQlzdGF0dXMgPQorCQkoKnhvcl9jaGVja19mdW5jc1tidWZfaWR4LTJdKShidWZfcHRyX2xp c3QsIHR4X2NvdW50KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB1OCBtZWdhc2Fz X2NvcHkoIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgcGFnZV9vZmZzZXQsCisJCQl1MzIgc2dlX29m ZnNldCwgdTggKmhvc3RfcHRyLCB1MzIgbGVuLCB1OCBkaXIpCit7CisJdTggKnBhZ2VfYWRkcjsK Kwl1MzIgb2ZmOworCXUzMiBieXRlc19jb3BpZWQ7CisJdTMyIHJlbWFpbmluZzsKKworCXJlbWFp bmluZyA9IGxlbjsKKwlvZmYgPSBwYWdlX29mZnNldCtzZ2Vfb2Zmc2V0OworCisJLyoga21hcF9h dG9taWMgbWFwcyBzaW5nbGUgcGFnZSBzaXplIGJ1dCBvcyBzZyBlbGVtZW50IGNhbiBoYXZlIHNp emUKKwkgbW9yZSB0aGFuIHBhZ2Ugc2l6ZSwgaGFuZGxlIGl0LioqLworCisJd2hpbGUgKHJlbWFp bmluZyA+IDAgKSB7CisKKwkJYnl0ZXNfY29waWVkID0KKwkJCW1pbigoc2l6ZV90KXJlbWFpbmlu ZywKKwkJCShzaXplX3QpKFBBR0VfU0laRSAtIChvZmYgJiB+UEFHRV9NQVNLKSkpOworCisJCXBh Z2VfYWRkciA9CisJCQlrbWFwX2F0b21pYyhwYWdlICsgKG9mZiA+PiBQQUdFX1NISUZUKSwgS01f U09GVElSUTApOworCQlpZiAoIHBhZ2VfYWRkciA9PSBOVUxMICkgeworCQkJcHJpbnRrKEtFUk5f Tk9USUNFICJrbWFwX2F0b21pYyBpcyBmYWlsZWQuXG4iKTsKKwkJCXJldHVybiBNUl9DUFhfU1RB VFVTX0ZBSUxVUkU7CisJCX0KKwkJaWYgKCBkaXIgPT0gTVJfQ1BYX0RJUl9XUklURSApCisJCQlt ZW1jcHkoIGhvc3RfcHRyLAorCQkJCXBhZ2VfYWRkcisob2ZmICYgflBBR0VfTUFTSyksCisJCQkJ Ynl0ZXNfY29waWVkICk7CisJCWVsc2UKKwkJCW1lbWNweSggcGFnZV9hZGRyKyhvZmYgJiB+UEFH RV9NQVNLKSwKKwkJCQlob3N0X3B0ciwKKwkJCQlieXRlc19jb3BpZWQgKTsKKworCQlrdW5tYXBf YXRvbWljICggcGFnZV9hZGRyLCBLTV9TT0ZUSVJRMCApOworCisJCWhvc3RfcHRyICs9IGJ5dGVz X2NvcGllZDsKKwkJcmVtYWluaW5nIC09IGJ5dGVzX2NvcGllZDsKKwkJb2ZmICs9IGJ5dGVzX2Nv cGllZDsKKwl9CisKKwlyZXR1cm4gTVJfQ1BYX1NUQVRVU19TVUNDRVNTOworfQorCisvKioKKyog bWVnYXNhc19kb19jcHhfY29weSAtIENvbXBsZXRlcyB0aGUgY29weSBvcHJlYXRpb24KKyogQGlu c3RhbmNlCQk6IERyaXZlciBzb2Z0IHN0YXRlLgorKiBAY3B5X2RlcwkJOiBpbnB1dCBmb3IgY29w eWluZyB0aGUgZGF0YS4KKyoKKyogQHJldHVybiAwIG9uIHN1Y2Nlc3MgIT0gMCBvbiBmYWlsdXJl CisqCisqLworCitzdGF0aWMgdTggbWVnYXNhc19kb19jcHhfY29weSggc3RydWN0IG1lZ2FzYXNf aW5zdGFuY2UgKmluc3RhbmNlLAorCQkJCXN0cnVjdCBtcl9jcHhfY29weV9kZXNjcmlwdG9yICpj cHlfZGVzKQoreworCXU4CQkJc3RhdHVzID0gTVJfQ1BYX1NUQVRVU19TVUNDRVNTIDsKKwl1MzIJ CQl0b3RhbF9yZW1haW5pbmdfbGVuID0gY3B5X2Rlcy0+dG90YWxfYnl0ZV9jb3VudDsKKwl1MzIJ CQlyb3dfcmVtYWluaW5nX2xlbmd0aDsKKwl1MzIJb3Nfc2dlX3N6ID0gMCwgb3Nfc2dlX29mZnNl dCA9IDAsIG9zX3NnZV9pZHggPSAwLCBvc19zZ2VfbGVuOworCXU4CXNnZV9jbnQsIHJvd19pZHgs ICpmd19wdHIgPSBOVUxMLCBob3N0X3NraXBfY291bnRfaGFuZGxlZDsKKwlzdHJ1Y3Qgc2NzaV9j bW5kCSpvc19jbWQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0CSpvc19zZ2w7CisJc3RydWN0IG1lZ2Fz YXNfY21kCSptZWdhX2NtZDsKKwlzdHJ1Y3QgbWVnYXNhc19pb19mcmFtZSAqbGRpbzsKKworCWlm ICggY3B5X2Rlcy0+bWZpX2NtZF9jeHQgID49IGluc3RhbmNlLT5tYXhfZndfY21kcyApIHsKKwkJ cHJpbnRrKEtFUk5fTk9USUNFICJpbnZhbGlkIGNvbnRleHQgLSAweCV4IHNob3VsIGJlIDwgMHgl eCBcbiIsCisJCQkJY3B5X2Rlcy0+bWZpX2NtZF9jeHQsIGluc3RhbmNlLT5tYXhfZndfY21kcyAp OworCQlyZXR1cm4gTVJfQ1BYX1NUQVRVU19GQUlMVVJFOworCX0KKworCW1lZ2FfY21kID0KKwkJ KHN0cnVjdCBtZWdhc2FzX2NtZCAqKWluc3RhbmNlLT5jbWRfbGlzdFtjcHlfZGVzLT5tZmlfY21k X2N4dF07CisJb3NfY21kID0gbWVnYV9jbWQtPnNjbWQ7CisJbGRpbyA9IChzdHJ1Y3QgbWVnYXNh c19pb19mcmFtZSAqKW1lZ2FfY21kLT5mcmFtZTsKKwlzZ2VfY250ID0gbGRpby0+c2dlX2NvdW50 OworCisJaG9zdF9za2lwX2NvdW50X2hhbmRsZWQgPSAwOworCXJvd19pZHggPSAwOworCXJvd19y ZW1haW5pbmdfbGVuZ3RoID0gMDsKKworCXNjc2lfZm9yX2VhY2hfc2cob3NfY21kLCBvc19zZ2ws IHNnZV9jbnQsIG9zX3NnZV9pZHgpIHsKKworCQlvc19zZ2VfbGVuID0gc2dfZG1hX2xlbihvc19z Z2wpOworCisJCWlmICggIWhvc3Rfc2tpcF9jb3VudF9oYW5kbGVkICAmJgorCQkJY3B5X2Rlcy0+ aG9zdF9za2lwX2NvdW50IDwgKG9zX3NnZV9zeiArPSBvc19zZ2VfbGVuKSkgeworCisJCQlvc19z Z2Vfb2Zmc2V0ID0KKwkJCWNweV9kZXMtPmhvc3Rfc2tpcF9jb3VudCAtICggb3Nfc2dlX3N6IC1v c19zZ2VfbGVuICk7CisJCQlvc19zZ2VfbGVuIC09IG9zX3NnZV9vZmZzZXQ7CisJCQlob3N0X3Nr aXBfY291bnRfaGFuZGxlZCA9IDE7CisJCX0gZWxzZSBpZiAoIWhvc3Rfc2tpcF9jb3VudF9oYW5k bGVkICYmCisJCQljcHlfZGVzLT5ob3N0X3NraXBfY291bnQgPT0gb3Nfc2dlX3N6ICkgeworCQkJ b3Nfc2dlX29mZnNldCA9IDA7CisJCQlob3N0X3NraXBfY291bnRfaGFuZGxlZCA9IDE7CisJCQlj b250aW51ZTsKKwkJfQorCisJCWlmICggIWhvc3Rfc2tpcF9jb3VudF9oYW5kbGVkICkKKwkJCWNv bnRpbnVlOworCisJCWZvciAoIDsgdG90YWxfcmVtYWluaW5nX2xlbiAmJiAgcm93X2lkeCA8IE1B WF9NUl9ST1dfU0laRTsKKwkJCXJvd19pZHgrKyApIHsKKworCQkJaWYgKCAhcm93X3JlbWFpbmlu Z19sZW5ndGggKSB7CisJCWZ3X3B0ciA9CisJCSh1OCAqKShpbnN0YW5jZS0+aG9zdF9tZW1fdmly dCtjcHlfZGVzLT5jb3B5X2J1Zltyb3dfaWR4XS5idWYpOworCQkJcm93X3JlbWFpbmluZ19sZW5n dGggPSBjcHlfZGVzLT5jb3B5X2J1Zltyb3dfaWR4XS5zaXplOworCQl9CisKKwkJCXN0YXR1cyA9 IG1lZ2FzYXNfY29weSggCXNnX3BhZ2Uob3Nfc2dsKSwKKwkJCQkJCW9zX3NnbC0+b2Zmc2V0LAor CQkJCQkJb3Nfc2dlX29mZnNldCwKKwkJCQkJCWZ3X3B0ciwKKwkJCQkJTUlOKG9zX3NnZV9sZW4s IHJvd19yZW1haW5pbmdfbGVuZ3RoKSwKKwkJCQkJY3B5X2Rlcy0+ZGlyKTsKKwkJCWlmIChzdGF0 dXMpCisJCQkgICAgIGJyZWFrOworCisJCQl0b3RhbF9yZW1haW5pbmdfbGVuIC09CisJCQkJCU1J Tihvc19zZ2VfbGVuLCByb3dfcmVtYWluaW5nX2xlbmd0aCk7CisKKwkJCWlmICggb3Nfc2dlX2xl biA8PSByb3dfcmVtYWluaW5nX2xlbmd0aCApIHsKKwkJCQlmd19wdHIgKz0gb3Nfc2dlX2xlbjsK KwkJCQlyb3dfcmVtYWluaW5nX2xlbmd0aCAtPSBvc19zZ2VfbGVuOworCQkJCWlmICghKHJvd19y ZW1haW5pbmdfbGVuZ3RoKSkKKwkJCQkJcm93X2lkeCsrOworCQkJCW9zX3NnZV9vZmZzZXQgPSAw OworCQkJCWJyZWFrOworCQkJfWVsc2V7CisJCQkJb3Nfc2dlX2xlbiAtPSByb3dfcmVtYWluaW5n X2xlbmd0aDsKKwkJCQlvc19zZ2Vfb2Zmc2V0ICs9IHJvd19yZW1haW5pbmdfbGVuZ3RoOworCQkJ CXJvd19yZW1haW5pbmdfbGVuZ3RoID0gMDsKKwkJCX0KKworCQl9CisJCWlmICggcm93X2lkeCA+ PSBNQVhfTVJfUk9XX1NJWkUgJiYgdG90YWxfcmVtYWluaW5nX2xlbiApCisJCQlwcmludGsoS0VS Tl9OT1RJQ0UgInJvd19pZHg9MHgleCxyZW1haW5pbmdfbGVuPSAweCV4XG4iLAorCQkJICAgICAg IHJvd19pZHgsIHRvdGFsX3JlbWFpbmluZ19sZW4pOworCisJCWlmICh0b3RhbF9yZW1haW5pbmdf bGVuID09IDAgfHwKKwkJCXN0YXR1cyA9PSBNUl9DUFhfU1RBVFVTX0ZBSUxVUkUgKQorCQkJYnJl YWs7CisJfQorCisJaWYgKCBvc19zZ2VfaWR4ID49IHNnZV9jbnQgJiYgdG90YWxfcmVtYWluaW5n X2xlbiApCisJCXByaW50ayhLRVJOX05PVElDRSAic2dlX2lkeCA9IDB4JXgsIHJlbWFpbmluZ19s ZW4gPSAweCV4IFxuIiwKKwkJCSAgICAgICBvc19zZ2VfaWR4LCB0b3RhbF9yZW1haW5pbmdfbGVu KTsKKworCXJldHVybiBzdGF0dXM7CisKK30KKy8qKgorKiBtZWdhc2FzX2hhbmRsZV9jcHhfcmVx dWVzdHMgLSBNYW5hZ2VzIHRoZSBmdyBxdWV1ZXMKKyogQGluc3RhbmNlCQk6IERyaXZlciBzb2Z0 IHN0YXRlLgorKgorKiBAcmV0dXJuIDAgb24gc3VjY2VzcyAhPSAwIG9uIGZhaWx1cmUKKyoKKyov CitzdGF0aWMgaW50IG1lZ2FzYXNfaGFuZGxlX2NweF9yZXF1ZXN0cyggc3RydWN0IG1lZ2FzYXNf aW5zdGFuY2UgKmluc3RhbmNlKQoreworCXN0cnVjdCBtcl9jcHhfcmVxdWVzdF9xdWV1ZSAqcmVx X3EgPSBpbnN0YW5jZS0+Y3B4X3JlcXVlc3RfcXVldWU7CisJdTMyIHByb2R1Y2VyX2lkeCwgY29u c3VtZXJfaWR4OworCXU4IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBy b2R1Y2VyX2lkeCA9IHJlcV9xLT5wcm9kdWNlcl9pZHg7CisJY29uc3VtZXJfaWR4ID0gcmVxX3Et PmNvbnN1bWVyX2lkeDsKKworCXdoaWxlICgocHJvZHVjZXJfaWR4ICE9IGNvbnN1bWVyX2lkeCkg JiYKKwkJKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9PSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkp IHsKKwkJdW5pb24gIG1yX2NweF9kZXNjcmlwdG9yICpjcHhfZGVzID0KKwkJCSZpbnN0YW5jZS0+ Y3B4X2RzY3JwdHJbY29uc3VtZXJfaWR4XTsKKwkJdW5pb24gIG1yX2NweF9yZXNwb25zZV9kYXRh IHJzcF9kYXRhOworCisJCWlmICggY3B4X2Rlcy0+Y3B4X2NvcHlfZGVzYy5oZHIudHlwZSA9PQor CQkJCU1SX0NQWF9ERVNDUklQVE9SX1RZUEVfQ09QWSApCisJCQlyZXR2YWwgPSBtZWdhc2FzX2Rv X2NweF9jb3B5KGluc3RhbmNlLAorCQkJCShzdHJ1Y3QgbXJfY3B4X2NvcHlfZGVzY3JpcHRvciAq KWNweF9kZXMgKTsKKworCQllbHNlIGlmIChjcHhfZGVzLT5jcHhfY29weV9kZXNjLmhkci50eXBl ID09CisJCQkJCU1SX0NQWF9ERVNDUklQVE9SX1RZUEVfWE9SICkKKwkJCXJldHZhbCA9IG1lZ2Fz YXNfZG9fY3B4X3hvcigKKwkJCQkoc3RydWN0IG1yX2NweF94b3JfZGVzY3JpcHRvciAqKWNweF9k ZXMsCisJCQkJCSh1OCAqKWluc3RhbmNlLT5ob3N0X21lbV92aXJ0LAorCQkJCQlpbnN0YW5jZS0+ aG9zdF9tZW1fbGVuICk7CisJCWVsc2V7CisJCQlwcmludGsoS0VSTl9FUlIgIkdvdCBpbnZhbGlk IGRlc2NyaXB0b3IgdHlwZS4uLlxuIik7CisJCQlyZXR2YWwgPSBNUl9DUFhfU1RBVFVTX0ZBSUxV UkU7CisJCQlicmVhazsKKwkJfQorCisJCXJzcF9kYXRhLnIuc3RhdHVzID0gcmV0dmFsOworCQly c3BfZGF0YS5yLmNvbnRleHQgPSBjcHhfZGVzLT5jcHhfY29weV9kZXNjLmhkci5jb250ZXh0Owor CQlyc3BfZGF0YS5yLnR5cGUgPSBjcHhfZGVzLT5jcHhfY29weV9kZXNjLmhkci50eXBlOworCisJ CS8qIG5vdGlmeSBmdy4qLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2Nr LCBmbGFncyk7CisJCXdyaXRlbCggfjAsICZpbnN0YW5jZS0+cmVnX3NldC0+aW5ib3VuZF9oaWdo X3F1ZXVlX3BvcnQpOworCQl3cml0ZWwoIHJzcF9kYXRhLncsICZpbnN0YW5jZS0+cmVnX3NldC0+ aW5ib3VuZF9sb3dfcXVldWVfcG9ydCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3Rh bmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCisJCWNvbnN1bWVyX2lkeCsrOworCQlpZiAoIGNvbnN1 bWVyX2lkeCA9PSBpbnN0YW5jZS0+Y3B4X2RzY3JwdHJfY250ICkKKwkJCWNvbnN1bWVyX2lkeCA9 IDA7CisKKwl9CisJcmVxX3EtPmNvbnN1bWVyX2lkeCA9IHByb2R1Y2VyX2lkeDsKKworCXJldHVy biAwOworfQorCiAvKioKICAqIG1lZ2FzYXNfY29tcGxldGVfY21kX2RwYwkgLQlSZXR1cm5zIEZX J3MgY29udHJvbGxlciBzdHJ1Y3R1cmUKICAqIEBpbnN0YW5jZV9hZGRyOgkJCUFkZHJlc3Mgb2Yg YWRhcHRlciBzb2Z0IHN0YXRlCkBAIC0xNTY5LDYgKzI2NjUsOSBAQCBzdGF0aWMgdm9pZCBtZWdh c2FzX2NvbXBsZXRlX2NtZF9kcGModW5zCiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0 YW5jZS0+Y29tcGxldGlvbl9sb2NrLCBmbGFncyk7CiAKKwlpZiAoIGluc3RhbmNlLT5jcHhfc3Vw cG9ydGVkICkKKwkJbWVnYXNhc19oYW5kbGVfY3B4X3JlcXVlc3RzKCBpbnN0YW5jZSk7CisKIAkv KgogCSAqIENoZWNrIGlmIHdlIGNhbiByZXN0b3JlIGNhbl9xdWV1ZQogCSAqLwpAQCAtMjM1OSw2 ICszNDU4LDE3IEBAIHByb2Nlc3NfZndfc3RhdGVfY2hhbmdlX3dxKHN0cnVjdCB3b3JrX3MKIAkJ CSppbnN0YW5jZS0+Y29uc3VtZXIgPSAwOwogCQkJKmluc3RhbmNlLT5wcm9kdWNlciA9IDA7CiAJ CX0KKwkJaWYgKGluc3RhbmNlLT5jcHhfc3VwcG9ydGVkKXsKKwkJCWluc3RhbmNlLT5jcHhfcmVx dWVzdF9xdWV1ZS0+Y29uc3VtZXJfaWR4ID0KKwkJCQlpbnN0YW5jZS0+Y3B4X3JlcXVlc3RfcXVl dWUtPnByb2R1Y2VyX2lkeCA9IDA7CisKKwkJCWlmICggbWVnYXNhc19jaGVja19jcHhfc3VwcG9y dCggaW5zdGFuY2UgKSA9PSAwICApeworCQkJCWlmICggbWVnYXNhc19zZW5kX2NweF9xdWV1ZV9k YXRhKCBpbnN0YW5jZSApICl7CisJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJTZW5kIGNweCBmYWls ZWQuXG4iKTsKKwkJCQkJbWVnYXNhc19yZW1vdmVfY3B4KGluc3RhbmNlKTsKKwkJCQl9CisJCQl9 CisJCX0KIAogCQltZWdhc2FzX2lzc3VlX2luaXRfbWZpKGluc3RhbmNlKTsKIApAQCAtMzExMSw2 ICs0MjIxLDE4MCBAQCBtZWdhc2FzX2dldF9jdHJsX2luZm8oc3RydWN0IG1lZ2FzYXNfaW5zCiAJ cmV0dXJuIHJldDsKIH0KIAorCisvKioKKyAqIG1lZ2FzYXNfY2hlY2tfY3B4X3N1cHBvcnQgOiBU cmllcyB0byBnZXQgdGhlIGhvc3QgbWVtb3J5IGFkZHJlc3MgaWYgZmFpbHMgdGhlbiBjcHgKKwkJ CQlub3Qgc3VwcG9ydGVkIGVsc2UgY3B4IHN1cHBvcnRlZC4KKyAqIEBpbnN0YW5jZToJCUFkYXB0 ZXIgc29mdCBzdGF0ZQorICoKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzIG5vbi16ZXJvIG9uIGZh aWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgbWVnYXNhc19jaGVja19jcHhfc3VwcG9ydCggc3RydWN0 IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21k OworCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgKmRjbWQ7CisJc3RydWN0IG1yX2NweF9pbml0 X2RhdGEgKmNweF9pbml0X2RhdGE7CisJZG1hX2FkZHJfdCBjcHhfaW5pdF9kYXRhX2g7CisJaW50 IHJldHZhbCA9IDA7CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCWlmICgh Y21kKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gZ2V0IGNtZFxuIik7CisJCXJl dHVybiAtRU5PTUVNOworCX0KKworCWNweF9pbml0X2RhdGEgPSBwY2lfYWxsb2NfY29uc2lzdGVu dChpbnN0YW5jZS0+cGRldiwKKwkJCXNpemVvZiggc3RydWN0IG1yX2NweF9pbml0X2RhdGEpLCAm Y3B4X2luaXRfZGF0YV9oKTsKKworCWlmIChjcHhfaW5pdF9kYXRhID09IE5VTEwpIHsKKwkJcHJp bnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBhbGxvYyBtZW0gZm9yIGNweF9pbml0X2RhdGEuIFxu Iik7CisJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwkJcmV0dXJuIC1FTk9N RU07CisJfQorCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCWRjbWQtPmZsYWdzID0gMDsK KwlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfTUlTQ19DUFhfSU5JVF9EQVRBX0dFVDsKKwlk Y21kLT5kYXRhX3hmZXJfbGVuICA9IHNpemVvZihzdHJ1Y3QgbXJfY3B4X2luaXRfZGF0YSApOwor CWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzICA9IDB4ZmY7CisJ ZGNtZC0+c2dlX2NvdW50ID0gMTsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gY3B4 X2luaXRfZGF0YV9oOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0 IG1yX2NweF9pbml0X2RhdGEpOworCisJcmV0dmFsID0gbWVnYXNhc19pc3N1ZV9wb2xsZWQgKCBp bnN0YW5jZSwgY21kICk7CisKKwlpZiAocmV0dmFsID09IDAgJiYgY21kLT5mcmFtZS0+aGRyLmNt ZF9zdGF0dXMgPT0gMCkgeworCQlpbnN0YW5jZS0+aG9zdF9tZW1fcGh5cyA9IGNweF9pbml0X2Rh dGEtPnBoeXNfYWRkcl9jYWNoZV9idWY7CisJCWluc3RhbmNlLT5ob3N0X21lbV9sZW4gID0gY3B4 X2luaXRfZGF0YS0+c2l6ZTsKKwkJaW5zdGFuY2UtPmNweF9kc2NycHRyX2NudCA9IGNweF9pbml0 X2RhdGEtPmNweF9kZXNjX2NvdW50OworCisJCWlmICggaW5zdGFuY2UtPmhvc3RfbWVtX2xlbiA9 PSAwIHx8CisJCQlpbnN0YW5jZS0+aG9zdF9tZW1fcGh5cyA9PSAwIHx8CisJCQkhaW5zdGFuY2Ut PmNweF9kc2NycHRyX2NudCApeworCisJCXByaW50ayhLRVJOX0VSUiAiTm8gaG9zdF9tZW1fcGh5 cy9jcHhfZGVzY3JpcHRvclxuIik7CisJCQlyZXR2YWwgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJ cHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiBjcHggaXMgbm90IHN1cHBvcnRlZC5cbiIpOwor CQlyZXR2YWwgPSAxOworCX0KKworCWluc3RhbmNlLT5jcHhfc3VwcG9ydGVkID0gKHJldHZhbCA/ IDA6MSk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAorCQkJc2l6ZW9m KHN0cnVjdCBtcl9jcHhfaW5pdF9kYXRhKSwKKwkJCWNweF9pbml0X2RhdGEsIGNweF9pbml0X2Rh dGFfaCk7CisKKwltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwlyZXR1cm4g cmV0dmFsOworfQorCisvKioKKyAqIG1lZ2FzYXNfc2VuZF9jcHhfcXVldWVfZGF0YSA6IFNlbmRz IHRoZSBxdWV1ZSBzZXR1cCBpbmZvIHRvIGZ3LgorICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0 IHN0YXRlCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3Mgbm9uLXplcm8gb24gZmFpbHVyZS4K KyAqLworCitzdGF0aWMgaW50IG1lZ2FzYXNfc2VuZF9jcHhfcXVldWVfZGF0YSggc3RydWN0IG1l Z2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlICkKK3sKKworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21k OworCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgKmRjbWQ7CisJaW50IHJldHZhbCA9IDA7CisK KwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCWlmICghY21kKSB7CisJCXByaW50 ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gZ2V0IGNtZFxuIik7CisJCXJldHVybiAtRU5PTUVNOwor CX0KKworCWRjbWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKwlkY21kLT5mbGFncyA9IDA7CisJZGNt ZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX01JU0NfQ1BYX1FVRVVFX0RBVEE7CisJZGNtZC0+ZGF0 YV94ZmVyX2xlbiAgPSBzaXplb2YoIHN0cnVjdCBtcl9jcHhfcXVldWVfZGF0YSApOworCWRjbWQt PmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzICA9IDB4ZmY7CisJZGNtZC0+ c2dlX2NvdW50ID0gMTsKKwlkY21kLT5tYm94LndbMF0gPSBpbnN0YW5jZS0+Y3B4X3JlcXVlc3Rf cXVldWVfaDsKKwlkY21kLT5tYm94LndbMV0gPSAwOworCWRjbWQtPm1ib3gud1syXSA9IGluc3Rh bmNlLT5jcHhfZHNjcnB0cl9jbnQ7CisKKwlyZXR2YWwgPSBtZWdhc2FzX2lzc3VlX3BvbGxlZCAo IGluc3RhbmNlLCBjbWQgKTsKKworCW1lZ2FzYXNfcmV0dXJuX2NtZCggaW5zdGFuY2UsIGNtZCk7 CisKKwlpZiAoIHJldHZhbCA9PSAwICkgeworCQlpbnN0YW5jZS0+Y3B4X3JlcXVlc3RfcXVldWUt PmNvbnN1bWVyX2lkeCA9CisJCQlpbnN0YW5jZS0+Y3B4X3JlcXVlc3RfcXVldWUtPnByb2R1Y2Vy X2lkeCA9IDA7CisJCWluc3RhbmNlLT5jcHhfc3VwcG9ydGVkID0gMTsKKwl9CisKKwlyZXR1cm4g cmV0dmFsOworfQorCitzdGF0aWMgdTMyIG1lZ2FzYXNfZ2V0X2NweF9tZW1fbGVuKCB1MTYgbWF4 X2Z3X2NtZHMgKQoreworCXJldHVybiAoc2l6ZW9mKCBzdHJ1Y3QgbXJfY3B4X3JlcXVlc3RfcXVl dWUgKSArCisJCXNpemVvZiggdW5pb24gbXJfY3B4X2Rlc2NyaXB0b3IgKSAqICggbWF4X2Z3X2Nt ZHMpICk7Cit9CisKK3N0YXRpYyB1MzIgbWVnYXNhc19yZW1vdmVfY3B4KCBzdHJ1Y3QgbWVnYXNh c19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJCWlmICggaW5zdGFuY2UtPmhvc3RfbWVtX3ZpcnQg KQorCQkJaW91bm1hcChpbnN0YW5jZS0+aG9zdF9tZW1fdmlydCk7CisKKwkJaWYgKCBpbnN0YW5j ZS0+Y3B4X3JlcXVlc3RfcXVldWUgKQorCQkJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+ cGRldiwKKwkJCW1lZ2FzYXNfZ2V0X2NweF9tZW1fbGVuKCBpbnN0YW5jZS0+Y3B4X2RzY3JwdHJf Y250KSwKKwkJCWluc3RhbmNlLT5jcHhfcmVxdWVzdF9xdWV1ZSwKKwkJCWluc3RhbmNlLT5jcHhf cmVxdWVzdF9xdWV1ZV9oICk7CisKKwkJaW5zdGFuY2UtPmNweF9zdXBwb3J0ZWQgPSAwOworCisJ cmV0dXJuIDA7Cit9CisKKy8qIHNob3VsZCBoYXZlIGhvc3RfbWVtX3BoeXMgaW50aWFsaXplZCBi ZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiovCitzdGF0aWMgaW50IG1lZ2FzYXNfaW5pdF9j cHgoIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnN0YW5jZS0+aG9z dF9tZW1fdmlydCA9IGlvcmVtYXAoaW5zdGFuY2UtPmhvc3RfbWVtX3BoeXMsCisJCQkJCWluc3Rh bmNlLT5ob3N0X21lbV9sZW4pOworCWlmICggaW5zdGFuY2UtPmhvc3RfbWVtX3ZpcnQgPT0gTlVM TCApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBGYWlsZWQgdG8gaW9yZW1hcCBob3N0 IG1lbW9yeS5cbiIpOworCQlnb3RvIGVycm9yX3VubG9hZDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBt ZW1vcnkgZm9yIGluZGljZXMgYW5kIGRlc2NyaXB0b3JzIHJlc3BvbnNlIGFycmF5J3MgKi8KKwlp bnN0YW5jZS0+Y3B4X3JlcXVlc3RfcXVldWUgPQorCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoIGlu c3RhbmNlLT5wZGV2LAorCQkJbWVnYXNhc19nZXRfY3B4X21lbV9sZW4gKGluc3RhbmNlLT5jcHhf ZHNjcnB0cl9jbnQpLAorCQkJJmluc3RhbmNlLT5jcHhfcmVxdWVzdF9xdWV1ZV9oICk7CisKKwlp ZiAoIGluc3RhbmNlLT5jcHhfcmVxdWVzdF9xdWV1ZSA9PSBOVUxMICkgeworCQlwcmludGsoS0VS Tl9FUlIgIk91dCBvZiBETUEgbWVtb3J5IGZvciBjcHggb3BlcmF0aW9ucy5cbiIpOworCQlnb3Rv IGVycm9yX3VubG9hZDsKKwl9CisKKwkvKmluaXRpYWxpemUgcXVldWVzKi8KKwlpbnN0YW5jZS0+ Y3B4X2RzY3JwdHIgPQorCQkodW5pb24gbXJfY3B4X2Rlc2NyaXB0b3IgKikoKHU4ICopaW5zdGFu Y2UtPmNweF9yZXF1ZXN0X3F1ZXVlICsKKwkJCShzaXplb2YoaW5zdGFuY2UtPmNweF9yZXF1ZXN0 X3F1ZXVlLT5jb25zdW1lcl9pZHgpKjIgKSk7CisKKwlpZiAoIG1lZ2FzYXNfc2VuZF9jcHhfcXVl dWVfZGF0YSggaW5zdGFuY2UgKSApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIgU2VuZGluZyBjcHgg cXVldWUgZGF0YSB0byBGVyBmYWlsZWQuXG4iKTsKKwkJZ290byBlcnJvcl91bmxvYWQ7CisJfQor CXJldHVybiAwOworCitlcnJvcl91bmxvYWQ6CisJbWVnYXNhc19yZW1vdmVfY3B4KCBpbnN0YW5j ZSApOworCXJldHVybiAtMTsKK30KKwogLyoqCiAgKiBtZWdhc2FzX2lzc3VlX2luaXRfbWZpIC0J SW5pdGlhbGl6ZXMgdGhlIEZXCiAgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKQEAg LTMzNTMsNiArNDYzNywxMCBAQCBzdGF0aWMgaW50IG1lZ2FzYXNfaW5pdF9tZmkoc3RydWN0IG1l Z2FzCiAJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBDYW4ndCBhbGxvY2F0ZSB2ZXJzaW9u IGJ1ZmZlclxuIik7CiAJfQogCisJaWYgKCBtZWdhc2FzX2NoZWNrX2NweF9zdXBwb3J0KCBpbnN0 YW5jZSApID09IDAgICkKKwkJaWYgKCBtZWdhc2FzX2luaXRfY3B4KCBpbnN0YW5jZSApICkKKwkJ CXByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gaW5pdGlsaXppbmcgY3B4LlxuIik7CisKIAlpZiAo bWVnYXNhc19pc3N1ZV9pbml0X21maShpbnN0YW5jZSkpCiAJCWdvdG8gZmFpbF9md19pbml0Owog CkBAIC0zNDU1LDYgKzQ3NDMsOCBAQCBzdGF0aWMgdm9pZCBtZWdhc2FzX3JlbGVhc2VfbWZpKHN0 cnVjdCBtCiAKIAlpb3VubWFwKGluc3RhbmNlLT5yZWdfc2V0KTsKIAorCW1lZ2FzYXNfcmVtb3Zl X2NweCggaW5zdGFuY2UgKTsKKwogCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoaW5zdGFu Y2UtPnBkZXYsCiAJCXBjaV9zZWxlY3RfYmFycyhpbnN0YW5jZS0+cGRldiwgSU9SRVNPVVJDRV9N RU0pKTsKIH0KQEAgLTQxNDEsNiArNTQzMSwxNSBAQCBtZWdhc2FzX3Jlc3VtZShzdHJ1Y3QgcGNp X2RldiAqcGRldikKIAlpZiAobWVnYXNhc190cmFuc2l0aW9uX3RvX3JlYWR5KGluc3RhbmNlKSkK IAkJZ290byBmYWlsX3JlYWR5X3N0YXRlOwogCisJaWYgKCBtZWdhc2FzX2NoZWNrX2NweF9zdXBw b3J0KCBpbnN0YW5jZSApID09IDAgICkgeworCQlpZiAoIG1lZ2FzYXNfc2VuZF9jcHhfcXVldWVf ZGF0YSggaW5zdGFuY2UgKSApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiU2VuZCBjcHggcXVldWUg dG8gRlcgZmFpbGVkLlxuIik7CisJCQltZWdhc2FzX3JlbW92ZV9jcHgoaW5zdGFuY2UpOworCQl9 ZWxzZQorCQkJaW5zdGFuY2UtPmNweF9yZXF1ZXN0X3F1ZXVlLT5jb25zdW1lcl9pZHggPQorCQkJ CWluc3RhbmNlLT5jcHhfcmVxdWVzdF9xdWV1ZS0+cHJvZHVjZXJfaWR4ID0gMDsKKwl9CisKIAlp ZiAobWVnYXNhc19pc3N1ZV9pbml0X21maShpbnN0YW5jZSkpCiAJCWdvdG8gZmFpbF9pbml0X21m aTsKIApkaWZmIC1ydXBOIG9sZC9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgg bmV3L2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAotLS0gb2xkL2RyaXZlcnMv c2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAkyMDEwLTExLTE1IDA0OjQ1OjM0LjAwMDAwMDAw MCAtMDUwMAorKysgbmV3L2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAkyMDEw LTExLTE3IDAyOjE4OjUzLjAwMDAwMDAwMCAtMDUwMApAQCAtMTQ0LDYgKzE0NCwxNCBAQAogI2Rl ZmluZSBNUl9EQ01EX0NMVVNURVJfUkVTRVRfTEQJCTB4MDgwMTAyMDAKICNkZWZpbmUgTVJfRENN RF9QRF9MSVNUX1FVRVJZICAgICAgICAgICAgICAgICAgIDB4MDIwMTAxMDAKIAorI2RlZmluZSBN Ul9EQ01EX0NUUkxfTUlTQ19DUFgJCQkweDAxMDBlMjAwCisjZGVmaW5lIE1SX0RDTURfQ1RSTF9N SVNDX0NQWF9JTklUX0RBVEFfR0VUCTB4MDEwMGUyMDEKKyNkZWZpbmUgTVJfRENNRF9DVFJMX01J U0NfQ1BYX1FVRVVFX0RBVEEJMHgwMTAwZTIwMgorI2RlZmluZSBNUl9EQ01EX0NUUkxfTUlTQ19D UFhfVU5SRUdJU1RFUgkweDAxMDBlMjAzCisjZGVmaW5lIE1BWF9NUl9ST1dfU0laRQkJCQkzMgor I2RlZmluZSBNUl9DUFhfRElSX1dSSVRFCQkJMQorI2RlZmluZSBNUl9DUFhfRElSX1JFQUQJCQkJ MAorI2RlZmluZSBNUl9DUFhfVkVSU0lPTgkJCQkxCiAvKgogICogTUZJIGNvbW1hbmQgY29tcGxl dGlvbiBjb2RlcwogICovCkBAIC0xMjU2LDYgKzEyNjQsMTc0IEBAIHN0cnVjdCBtZWdhc2FzX2V2 dF9kZXRhaWwgewogCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBNSU4o YSwgYikgKChhKSA8IChiKSA/IChhKTooYikpCisKKworLyoKKyogZW51bWVyYXRlcyB0eXBlIG9m IGRlc2NyaXB0b3IKKyovCisKK2VudW0gTVJfQ1BYX0RFU0NSSVBUT1JfVFlQRSB7CisJTVJfQ1BY X0RFU0NSSVBUT1JfVFlQRV9DT1BZICAgPSAxLAorCU1SX0NQWF9ERVNDUklQVE9SX1RZUEVfWE9S ICAgID0gMgorfTsKKworLyoKKyogc3RhdHVzIGluZm9ybWF0aW9uIG9mIGNvcHkgb3IgeG9yIG9w ZXJhdGlvbgorKi8KK2VudW0gTVJfQ1BYX1NUQVRVUyB7CisJTVJfQ1BYX1NUQVRVU19TVUNDRVNT ICAgICAgPSAwLAorCU1SX0NQWF9TVEFUVVNfSU5DT05TSVNURU5UID0gMSwKKwlNUl9DUFhfU1RB VFVTX0ZBSUxVUkUgICAgICA9IDIsCit9OworCisvKgorKiBkZWZpbmUgdGhlIFhPUiBvcGNvZGVz CisqLworZW51bSBNUl9DUFhfWE9SX09QIHsKKwlNUl9DUFhfWE9SX09QX0dFTl9QICAgID0gMHgw MSwKKwlNUl9DUFhfWE9SX09QX0dFTl9RICAgID0gMHgwMiwgLyogZ2VuZXJhdGUgUSBidWZmZXIg Ki8KKwlNUl9DUFhfWE9SX09QX0dFTl9QUSAgID0gMHgwMywgLyogZ2VuZXJhdGUgUCtRIGJ1ZmZl cnMgKi8KKwlNUl9DUFhfWE9SX09QX0NIRUNLX1AgID0gMHgxMSwgLyogY2hlY2sgUCBidWZmZXIg Ki8KKwlNUl9DUFhfWE9SX09QX0NIRUNLX1EgID0gMHgxMiwgLyogY2hlY2sgUSBidWZmZXIgKi8K KwlNUl9DUFhfWE9SX09QX0NIRUNLX1BRID0gMHgxMywgLyogY2hlY2sgUCtRIGJ1ZmZlcnMgKi8K K307CisKKyNkZWZpbmUgTVJfQ1BYX1hPUl9PUF9JU19DSEVDSyh4b3JPcCkgICgoeG9yT3AgJiAw eDEwKSAhPSAwKQorI2RlZmluZSBNUl9DUFhfWE9SX09QX0lTX0dFTih4b3JPcCkgICAgKCFNUl9D UFhfWE9SX09QX0lTX0NIRUNLKHhvck9wKSkKKyNkZWZpbmUgTVJfQ1BYX1hPUl9PUF9JU19QKHhv ck9wKSAgICAgICgoeG9yT3AgJiAweDAxKSAhPSAwKQorI2RlZmluZSBNUl9DUFhfWE9SX09QX0lT X1EoeG9yT3ApICAgICAgKCh4b3JPcCAmIDB4MDIpICE9IDApCisjZGVmaW5lIE1SX0NQWF9YT1Jf T1BfSVNfUFEoeG9yT3ApICAgICAoKHhvck9wICYgMHgwMykgPT0gMykKKworLyoKKyogdGhpcyBk YXRhIGlzIHBhc3NlZCB0byBkcml2ZXIgZHVyaW5nIGRyaXZlciBpbml0LgorKi8KK3N0cnVjdCBt cl9jcHhfaW5pdF9kYXRhIHsKKwl1MzIJY3B4X2Rlc2NfY291bnQ7CisJdTMyICAgICBzaXplOwor CXU2NCAgICAgcGh5c19hZGRyX2NhY2hlX2J1ZjsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2Vk KSk7CisKKy8qCisqIGhlYWRlciBwYXNzZWQgd2l0aCBlYWNoIGRlc2NyaXB0b3IKKyovCitzdHJ1 Y3QgbXJfY3B4X2hlYWRlciB7CisJdTMyICAgICAgICBjb250ZXh0ICAgOiAyNDsKKwl1MzIgICAg ICAgIHR5cGUgICAgIDogIDQ7CisJdTMyICAgICAgICByZXN2ZCAgICA6ICA0OworfSBfX2F0dHJp YnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisqIHhvciBkZXNjcmlwdG9yIGRhdGEKKyovCitzdHJ1 Y3QgbXJfY3B4X3hvcl9kZXNjcmlwdG9yIHsKKwlzdHJ1Y3QgbXJfY3B4X2hlYWRlciAgICAgIGhk cjsKKwllbnVtIE1SX0NQWF9YT1JfT1AgICAgICBvcDsKKwl1MzIgICAgICAgICAgICAgc2l6ZTsK Kwl1MzIgICAgICAgICAgICAgYnVmZl92YWxpZF9iaXRtYXA7CisJdTggICAgICAgICAgICAgIHBf aWR4OworCXU4ICAgICAgICAgICAgICBxX2lkeDsKKwl1OCAgICAgICAgICAgICAgcGFkWzJdOwor CXUzMiAgICAgICAgICAgICBidWZmX2xpc3RbTUFYX01SX1JPV19TSVpFXTsKKwl1MzIgICAgICAg ICAgICAgbXVsdF9saXN0W01BWF9NUl9ST1dfU0laRV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNr ZWQpKTsKKworCisvKgorKiBjb3B5IGJ1ZmZlciBmb3IgZWFjaCB0cmFuc2Zlci4gZWFjaCBzdWNo IHRyYW5mZXIgYmV0d2VlbgorKiB1c2VyIHNwYXJlIGhvc3QgYWRkcmVzcyBhbmQgZmlybXdhcmUg YWxsb2NhdGVkIGNhY2hlIGRhdGEuCisqLworc3RydWN0IG1yX2NweF9jb3B5X21yX2J1ZmZlciB7 CisJdTMyICAgICBidWY7CisJdTMyICAgICBzaXplOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2Vk KSk7CisKKy8qCisqIGNvcHkgZGVzY3JpcHRvciBkYXRhCisqLworc3RydWN0IG1yX2NweF9jb3B5 X2Rlc2NyaXB0b3IgeworCXN0cnVjdCBtcl9jcHhfaGVhZGVyICAgICAgICAgICAgICBoZHI7CisJ dTMyICAgICAgICAgICAgICAgICAgICAgbWZpX2NtZF9jeHQ7CisJdTMyICAgICAgICAgICAgICAg ICAgICAgdG90YWxfYnl0ZV9jb3VudDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBob3N0X3Nr aXBfY291bnQ7CisJdTggICAgICAgICAgICAgICAgICAgICAgZGlyOworCXU4ICAgICAgICAgICAg ICAgICAgICAgIHBhZFszXTsKKwlzdHJ1Y3QgbXJfY3B4X2NvcHlfbXJfYnVmZmVyICAgICAgY29w eV9idWZbTUFYX01SX1JPV19TSVpFXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIDsKKwor LyoKKyogdXNlcnMgb2YgdGhpcyBpbnRlcmZhY2UgbXVzdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRo ZSBzaXplIG9mCisqIHRoaXMgc3RydWN0dXJlIHdoaWxlIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBk ZXNjcmlwdG9ycworKi8KK3VuaW9uIG1yX2NweF9kZXNjcmlwdG9yIHsKKwlzdHJ1Y3QgbXJfY3B4 X3hvcl9kZXNjcmlwdG9yICAgICAgIGNweF94b3JfZGVzYzsKKwlzdHJ1Y3QgbXJfY3B4X2NvcHlf ZGVzY3JpcHRvciAgICAgY3B4X2NvcHlfZGVzYzsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBw YWRbNTEyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qCisqIHJlcXVlc3Qg cXVldWUuCisqIGZpcm13YXJlIG1hbmFnZXMgcHJvZHVjZXJpbmRleCwgZHJpdmVyIG1hbmFnZXMg Y29uc3VtZXJpbmRleC4KKyogbnVtYmVyIG9mIGRlY3JpcHRvcnMgaXMga2VwdCBhcyB2YXJpYWJs ZS4gZHJpdmVyIG11c3QgdXNlCisqIG1heCBob3N0IGNvbW1hbmRzIHN1cHBvcnRlZCBmb3IgYWxs b2NhdGlvbi4KKyovCitzdHJ1Y3QgbXJfY3B4X3JlcXVlc3RfcXVldWUgeworCXUzMiAgICAgICAg ICAgICBjb25zdW1lcl9pZHg7CisJdTMyICAgICAgICAgICAgIHByb2R1Y2VyX2lkeDsKKwl1bmlv biBtcl9jcHhfZGVzY3JpcHRvciAgIGNweGRlc2NyaXB0b3JbMV07Cit9IF9fYXR0cmlidXRlX18g KChwYWNrZWQpKTsKKworCisvKgorKiByZXNwb25zZSBkYXRhLiB0aGlzIGRhdGEgd2lsbCBiZSBw b3N0ZWQgYnkgZHJpdmVyIGFmdGVyIGNvcHkveG9yCisqIG9wZXJhdGlvbiBpcyBjb21wZXRlLgor Ki8KK3VuaW9uIG1yX2NweF9yZXNwb25zZV9kYXRhIHsKKwlzdHJ1Y3QgeworCQl1MzIgICAgICAg ICBjb250ZXh0ICAgICA6IDI0OworCQl1MzIgICAgICAgICBzdGF0dXMgICAgICA6ICA0OworCQl1 MzIgICAgICAgICB0eXBlICAgICAgICA6ICA0OworCX0gcjsKKwl1MzIgICAgICAgICB3OworfSBf X2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyoKKyogcmVzcG9uc2UgcXVldWUuCisqIGRy aXZlciBtYW5hZ2VzIHByb2R1Y2VyaW5kZXgsIGZpcm13YXJlIG1hbmFnZXMgY29uc3VtZXJpbmRl eC4KKyogbnVtYmVyIG9mIGRlY3JpcHRvcnMgaXMga2VwdCBhcyB2YXJpYWJsZS4gZHJpdmVyIG11 c3QgdXNlCisqIG1heCBob3N0IGNvbW1hbmRzIHN1cHBvcnRlZCBmb3IgYWxsb2NhdGlvbi4KKyov CitzdHJ1Y3QgIG1yX2NweF9yZXNwb25zZV9xdWV1ZSB7CisJdTMyICAgICAgICAgICAgICAgICBj b25zdW1lcl9pZHg7CisJdTMyICAgICAgICAgICAgICAgICBwcm9kdWNlcl9pZHg7CisJdW5pb24g bXJfY3B4X3Jlc3BvbnNlX2RhdGEgICBjcHhfcmVzcF9kYXRhWzFdOworfSBfX2F0dHJpYnV0ZV9f ICgocGFja2VkKSk7CisKKworLyoKKyogdGhlIHNpemUgb2YgZWFjaCBvZiB0aGUgc3RydWN0dXJl IHdpdGhpbiB0aGlzIGlzIGRldGVybWluZWQgYXQgcnVuIHRpbWUuCisqIHRoaXMgc3RydWN0dXJl IGlzIGZvciBkb2N1bWVudCBwdXJwb3NlIGFuZCBzaG93cyB0aGF0IHRoZSBzdHJ1Y3R1cmVzCisq IGxheSBhcyBzaG93biBiZWxvdyBpbiBtZW1vcnkKKyovCitzdHJ1Y3QgIG1yX2NweF9xdWV1ZXMg eworCXN0cnVjdCBtcl9jcHhfcmVxdWVzdF9xdWV1ZSAgICAgcmVxdWVzdHF1ZXVlOworCXN0cnVj dCBtcl9jcHhfcmVzcG9uc2VfcXVldWUgICAgcmVzcG9uc2VxdWV1ZTsKK30gX19hdHRyaWJ1dGVf XyAoKHBhY2tlZCkpOworCisvKgorKiBkcml2ZXIgc2VuZHMgdGhpcyBxdWV1ZSBkYXRhIGR1cmlu ZyBtZmkgaW5pdC4gZmlybXdhcmUKKyogd2lsbCBub3QgdXNlIHRoZSBpbnRlcmZhY2UgaWYgdGhl IHZlcnNpb25zIGRvIG5vdCBtYXRjaC4KKyovCitzdHJ1Y3QgbXJfY3B4X3F1ZXVlX2RhdGEgewor CXUzMiAgICAgICAgIHZlcnNpb247CisJdTMyICAgICAgICAgY291bnRfcXVldWVfZW50cmllczsK Kwl1NjQgICAgICAgICBwaHlzX2FkZHJfY3B4X3F1ZXVlczsKK30gX19hdHRyaWJ1dGVfXyAoKHBh Y2tlZCkpOworCisKIHN0cnVjdCBtZWdhc2FzX2Flbl9ldmVudCB7CiAJc3RydWN0IHdvcmtfc3Ry dWN0IGhvdHBsdWdfd29yazsKIAlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7CkBA IC0xMzMwLDYgKzE1MDYsMTUgQEAgc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgewogCiAJc3RydWN0 IHRpbWVyX2xpc3QgaW9fY29tcGxldGlvbl90aW1lcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGludGVy bmFsX3Jlc2V0X3BlbmRpbmdfcTsKKworCXUzMiBjcHhfc3VwcG9ydGVkOworCXN0cnVjdCBtcl9j cHhfcmVxdWVzdF9xdWV1ZSAqY3B4X3JlcXVlc3RfcXVldWU7CisJZG1hX2FkZHJfdCBjcHhfcmVx dWVzdF9xdWV1ZV9oOworCXVuaW9uIG1yX2NweF9kZXNjcmlwdG9yICpjcHhfZHNjcnB0cjsKKwl1 MzIgY3B4X2RzY3JwdHJfY250OworCXU2NCBob3N0X21lbV9waHlzOworCXUzMiBob3N0X21lbV9s ZW47CisJdTggKmhvc3RfbWVtX3ZpcnQ7CiB9OwogCiBlbnVtIHsK --_002_4B6A08C587958942AA3002690DD4F8C30106A96223cosmail02lsic_-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Bo" Subject: [PATCH 8/9] scsi: megaraid_sas - Driver take some workloads from FW Date: Fri, 19 Nov 2010 10:43:32 -0700 Message-ID: <4B6A08C587958942AA3002690DD4F8C30106A96223@cosmail02.lsi.com> References: <4B6A08C587958942AA3002690DD4F8C3D0804533@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C3DBD67F68@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A961BD@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A961D6@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A961E4@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A961F2@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A96213@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A96218@cosmail02.lsi.com> <4B6A08C587958942AA3002690DD4F8C30106A9621E@cosmail02.lsi.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="_002_4B6A08C587958942AA3002690DD4F8C30106A96223cosmail02lsic_" Return-path: Received: from na3sys009aog106.obsmtp.com ([74.125.149.77]:36204 "EHLO na3sys009aog106.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755658Ab0KSRnX (ORCPT ); Fri, 19 Nov 2010 12:43:23 -0500 In-Reply-To: <4B6A08C587958942AA3002690DD4F8C30106A9621E@cosmail02.lsi.com> Content-Language: en-US Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: "Yang, Bo" , "'James.Bottomley@HansenPartnership.com'" , "'James.Bottomley@suse.de'" Cc: "'linux-scsi@vger.kernel.org'" , "'akpm@osdl.org'" , "'linux-kernel@vger.kernel.org'" , Tomas Henzl --_002_4B6A08C587958942AA3002690DD4F8C30106A96223cosmail02lsic_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Driver added the new feature to take some of the workloads from FW to incre= ase performance of the iMR controller. FW assigns the read cmds back to driver which will increase the performance for megaraid sas iMR controller. Signed-off-by Bo Yang --- drivers/scsi/megaraid/megaraid_sas.c | 1299 +++++++++++++++++++++++++++++++= ++++ drivers/scsi/megaraid/megaraid_sas.h | 185 ++++ 2 files changed, 1484 insertions(+) --_002_4B6A08C587958942AA3002690DD4F8C30106A96223cosmail02lsic_ Content-Type: application/octet-stream; name="megasas-p8-cpx.patch" Content-Description: megasas-p8-cpx.patch Content-Disposition: attachment; filename="megasas-p8-cpx.patch"; size=39597; creation-date="Thu, 18 Nov 2010 20:37:02 GMT"; modification-date="Wed, 17 Nov 2010 13:09:12 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtcnVwTiBvbGQvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jIG5ldy9k cml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKLS0tIG9sZC9kcml2ZXJzL3Njc2kv bWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMJMjAxMC0xMS0xNyAxNDowODoxMy4wMDAwMDAwMDAgLTA1 MDAKKysrIG5ldy9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMJMjAxMC0xMS0x NyAxNDowODo0Ni4wMDAwMDAwMDAgLTA1MDAKQEAgLTc1LDYgKzc1LDEyIEBAIHN0YXRpYyBpbnQg bWVnYXNhc19nZXRfcGRfbGlzdChzdHJ1Y3QgbWUKIHN0YXRpYyBpbnQgbWVnYXNhc19pc3N1ZV9p bml0X21maShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOwogc3RhdGljIGludCBt ZWdhc2FzX3JlZ2lzdGVyX2FlbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCiAJ CQkJdTMyIHNlcV9udW0sIHUzMiBjbGFzc19sb2NhbGVfd29yZCk7CisKK3N0YXRpYyBpbnQgbWVn YXNhc19jaGVja19jcHhfc3VwcG9ydCggc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNl KTsKK3N0YXRpYyB1MzIgbWVnYXNhc19yZW1vdmVfY3B4KCBzdHJ1Y3QgbWVnYXNhc19pbnN0YW5j ZSAqaW5zdGFuY2UpOworc3RhdGljIGludCBtZWdhc2FzX3NlbmRfY3B4X3F1ZXVlX2RhdGEoIHN0 cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSApOworc3RhdGljIGludCBtZWdhc2FzX2hh bmRsZV9jcHhfcmVxdWVzdHMoIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSk7CisK IC8qCiAgKiBQQ0kgSUQgdGFibGUgZm9yIGFsbCBzdXBwb3J0ZWQgY29udHJvbGxlcnMKICAqLwpA QCAtNzkzLDYgKzc5OSwxMCBAQCBtZWdhc2FzX2lzc3VlX3BvbGxlZChzdHJ1Y3QgbWVnYXNhc19p bnN0CiAJICovCiAJZm9yIChpID0gMDsgKGkgPCBtc2VjcykgJiYgKGZyYW1lX2hkci0+Y21kX3N0 YXR1cyA9PSAweGZmKTsgaSsrKSB7CiAJCXJtYigpOworCisJCS8qIEZXIHVzaW5nIHhvci9jb3B5 IGFzIHNvb24gYXMgd2UgZW5hYmxlIGNweCAqLworCQlpZiAoKGluc3RhbmNlLT51bmxvYWQgPT0g MSkgJiYgaW5zdGFuY2UtPmNweF9zdXBwb3J0ZWQgKQorCQkJbWVnYXNhc19oYW5kbGVfY3B4X3Jl cXVlc3RzKCBpbnN0YW5jZSk7CiAJCW1zbGVlcCgxKTsKIAl9CiAKQEAgLTE1MjIsNiArMTUzMiwx MDkyIEBAIHN0YXRpYyB2b2lkIG1lZ2FyYWlkX3Nhc19raWxsX2hiYShzdHJ1Y3QKIAl9CiB9CiAK Kwordm9pZCB4b3JfZ2VuXzE1eDEodTMyICpidWZmX3B0cnNbMTZdLCB1MzIgYnl0ZXMpCit7CisJ dTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgIAkqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUs ICpzNiwgKnM3LCAqczgsICpzOTsKKwl1MzIJKnMxMCwgKnMxMSwgKnMxMiwgKnMxMywgKnMxNCwg KnMxNTsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIg ID0gYnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNb NF07CisJczUgID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZfcHRyc1s2XTsKKwlzNyAgPSBi dWZmX3B0cnNbN107CisJczggID0gYnVmZl9wdHJzWzhdOworCXM5ICA9IGJ1ZmZfcHRyc1s5XTsK KwlzMTAgPSBidWZmX3B0cnNbMTBdOworCXMxMSA9IGJ1ZmZfcHRyc1sxMV07CisJczEyID0gYnVm Zl9wdHJzWzEyXTsKKwlzMTMgPSBidWZmX3B0cnNbMTNdOworCXMxNCA9IGJ1ZmZfcHRyc1sxNF07 CisJczE1ID0gYnVmZl9wdHJzWzE1XTsKKworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAw OyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKQorCWRbb2ZmXSA9IHMxW29mZl1eczJbb2ZmXV5z M1tvZmZdXnM0W29mZl1eczVbb2ZmXV5zNltvZmZdXnM3W29mZl1eXAorCXM4W29mZl1eczlbb2Zm XV5zMTBbb2ZmXV5zMTFbb2ZmXV5zMTJbb2ZmXV5zMTNbb2ZmXV5zMTRbb2ZmXV5zMTVbb2ZmXTsK K30KKworCit2b2lkIHhvcl9nZW5fMTR4MSh1MzIgKmJ1ZmZfcHRyc1sxNV0sIHUzMiBieXRlcykK K3sKKwl1MzIgICAgb2ZmLCB3b3JkczsKKwl1MzIgICAgCSpkLCAqczEsICpzMiwgKnMzLCAqczQs ICpzNSwgKnM2LCAqczcsICpzODsKKwl1MzIJKnM5LCAqczEwLCAqczExLCAqczEyLCAqczEzLCAq czE0OworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsKKwlzMiAg PSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9IGJ1ZmZfcHRyc1s0 XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZdOworCXM3ICA9IGJ1 ZmZfcHRyc1s3XTsKKwlzOCAgPSBidWZmX3B0cnNbOF07CisJczkgID0gYnVmZl9wdHJzWzldOwor CXMxMCA9IGJ1ZmZfcHRyc1sxMF07CisJczExID0gYnVmZl9wdHJzWzExXTsKKwlzMTIgPSBidWZm X3B0cnNbMTJdOworCXMxMyA9IGJ1ZmZfcHRyc1sxM107CisJczE0ID0gYnVmZl9wdHJzWzE0XTsK KworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9m ZisrKQorCWRbb2ZmXSA9IHMxW29mZl1eczJbb2ZmXV5zM1tvZmZdXnM0W29mZl1eczVbb2ZmXV5z NltvZmZdXnM3W29mZl1eXAorCXM4W29mZl1eczlbb2ZmXV5zMTBbb2ZmXV5zMTFbb2ZmXV5zMTJb b2ZmXV5zMTNbb2ZmXV5zMTRbb2ZmXTsKK30KKworCit2b2lkIHhvcl9nZW5fMTN4MSh1MzIgKmJ1 ZmZfcHRyc1sxNF0sIHUzMiBieXRlcykKK3sKKwl1MzIgICAgCW9mZiwgd29yZHM7CisJdTMyICAg IAkqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNiwgKnM3OworCXUzMgkqczgsICpzOSwg KnMxMCwgKnMxMSwgKnMxMiwgKnMxMzsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBi dWZmX3B0cnNbMV07CisJczIgID0gYnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsK KwlzNCAgPSBidWZmX3B0cnNbNF07CisJczUgID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZf cHRyc1s2XTsKKwlzNyAgPSBidWZmX3B0cnNbN107CisJczggID0gYnVmZl9wdHJzWzhdOworCXM5 ICA9IGJ1ZmZfcHRyc1s5XTsKKwlzMTAgPSBidWZmX3B0cnNbMTBdOworCXMxMSA9IGJ1ZmZfcHRy c1sxMV07CisJczEyID0gYnVmZl9wdHJzWzEyXTsKKwlzMTMgPSBidWZmX3B0cnNbMTNdOworCisJ Zm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKysp CisJZFtvZmZdID0gczFbb2ZmXV5zMltvZmZdXnMzW29mZl1eczRbb2ZmXV5zNVtvZmZdXnM2W29m Zl1eczdbb2ZmXV5cCisJczhbb2ZmXV5zOVtvZmZdXnMxMFtvZmZdXnMxMVtvZmZdXnMxMltvZmZd XnMxM1tvZmZdOworCit9CisKKwordm9pZCB4b3JfZ2VuXzEyeDEodTMyICpidWZmX3B0cnNbMTNd LCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIAlvZmYsIHdvcmRzOworCXUzMiAgICAJKmQsICpzMSwg KnMyLCAqczMsICpzNCwgKnM1LCAqczYsICpzNzsKKwl1MzIJKnM4LCAqczksICpzMTAsICpzMTEs ICpzMTI7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFdOworCXMy ICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVmZl9wdHJz WzRdOworCXM1ICA9IGJ1ZmZfcHRyc1s1XTsKKwlzNiAgPSBidWZmX3B0cnNbNl07CisJczcgID0g YnVmZl9wdHJzWzddOworCXM4ICA9IGJ1ZmZfcHRyc1s4XTsKKwlzOSAgPSBidWZmX3B0cnNbOV07 CisJczEwID0gYnVmZl9wdHJzWzEwXTsKKwlzMTEgPSBidWZmX3B0cnNbMTFdOworCXMxMiA9IGJ1 ZmZfcHRyc1sxMl07CisKKwlmb3IgKHdvcmRzID0gYnl0ZXMvNCwgb2ZmID0gMDsgd29yZHMgPiAw OyB3b3Jkcy0tLCBvZmYrKykKKwkgICAgZFtvZmZdID0gczFbb2ZmXV5zMltvZmZdXnMzW29mZl1e czRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eczdbb2ZmXV5cCisJCXM4W29mZl1eczlbb2ZmXV5zMTBb b2ZmXV5zMTFbb2ZmXV5zMTJbb2ZmXTsKK30KKworCit2b2lkIHhvcl9nZW5fMTF4MSh1MzIgKmJ1 ZmZfcHRyc1sxMl0sIHUzMiBieXRlcykKK3sKKworCXUzMiAgICBvZmYsIHdvcmRzOworCXUzMiAg ICAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNiwgKnM3LCAqczgsICpzOSwgKnMxMCwg KnMxMTsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIg ID0gYnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNb NF07CisJczUgID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZfcHRyc1s2XTsKKwlzNyAgPSBi dWZmX3B0cnNbN107CisJczggID0gYnVmZl9wdHJzWzhdOworCXM5ICA9IGJ1ZmZfcHRyc1s5XTsK KwlzMTAgPSBidWZmX3B0cnNbMTBdOworCXMxMSA9IGJ1ZmZfcHRyc1sxMV07CisKKwlmb3IgKHdv cmRzID0gYnl0ZXMvNCwgb2ZmID0gMDsgd29yZHMgPiAwOyB3b3Jkcy0tLCBvZmYrKykKKwlkW29m Zl0gPSBzMVtvZmZdXnMyW29mZl1eczNbb2ZmXV5zNFtvZmZdXnM1W29mZl1eczZbb2ZmXV5zN1tv ZmZdXlwKKwkJczhbb2ZmXSBeIHM5W29mZl0gXiBzMTBbb2ZmXSBeIHMxMVtvZmZdOworfQorCisK K3ZvaWQgeG9yX2dlbl8xMHgxKHUzMiAqYnVmZl9wdHJzWzExXSwgdTMyIGJ5dGVzKQoreworCXUz MiAgICBvZmYsIHdvcmRzOworCXUzMiAgICAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpz NiwgKnM3LCAqczgsICpzOSwgKnMxMDsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBi dWZmX3B0cnNbMV07CisJczIgID0gYnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsK KwlzNCAgPSBidWZmX3B0cnNbNF07CisJczUgID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZf cHRyc1s2XTsKKwlzNyAgPSBidWZmX3B0cnNbN107CisJczggID0gYnVmZl9wdHJzWzhdOworCXM5 ICA9IGJ1ZmZfcHRyc1s5XTsKKwlzMTAgPSBidWZmX3B0cnNbMTBdOworCisJZm9yICh3b3JkcyA9 IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspCisJZFtvZmZdID0g czFbb2ZmXV5zMltvZmZdXnMzW29mZl1eczRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eczdbb2ZmXV5c CisJCXM4W29mZl0gXiBzOVtvZmZdIF4gczEwW29mZl07CisKK30KKworCit2b2lkIHhvcl9nZW5f OXgxKHUzMiAqYnVmZl9wdHJzWzEwXSwgdTMyIGJ5dGVzKQoreworCXUzMiAgICBvZmYsIHdvcmRz OworCXUzMiAgICAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNiwgKnM3LCAqczgsICpz OTsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIgID0g YnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNbNF07 CisJczUgID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZfcHRyc1s2XTsKKwlzNyAgPSBidWZm X3B0cnNbN107CisJczggID0gYnVmZl9wdHJzWzhdOworCXM5ICA9IGJ1ZmZfcHRyc1s5XTsKKwor CWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisr KQorCWRbb2ZmXSA9IHMxW29mZl1eczJbb2ZmXV5zM1tvZmZdXnM0W29mZl1eczVbb2ZmXV5zNltv ZmZdXnM3W29mZl1eXAorCQlzOFtvZmZdIF4gczlbb2ZmXTsKK30KKworCit2b2lkIHhvcl9nZW5f OHgxKHUzMiAqYnVmZl9wdHJzWzldLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7 CisJdTMyICAgICpkLCAqczEsICpzMiwgKnMzLCAqczQsICpzNSwgKnM2LCAqczcsICpzODsKKwor CWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIgID0gYnVmZl9w dHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNbNF07CisJczUg ID0gYnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZfcHRyc1s2XTsKKwlzNyAgPSBidWZmX3B0cnNb N107CisJczggID0gYnVmZl9wdHJzWzhdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9 IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspCisJZFtvZmZdID0gczFbb2ZmXV5zMltvZmZd XnMzW29mZl1eczRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eXAorCQlzN1tvZmZdXnM4W29mZl07Cit9 CisKKwordm9pZCB4b3JfZ2VuXzd4MSh1MzIgKmJ1ZmZfcHRyc1s4XSwgdTMyIGJ5dGVzKQorewor CXUzMiAgICBvZmYsIHdvcmRzOworCXUzMiAgICAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUs ICpzNiwgKnM3OworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsK KwlzMiAgPSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9IGJ1ZmZf cHRyc1s0XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZdOworCXM3 ICA9IGJ1ZmZfcHRyc1s3XTsKKworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3Jk cyA+IDA7IHdvcmRzLS0sIG9mZisrKQorCQlkW29mZl0gPSBzMVtvZmZdXnMyW29mZl1eczNbb2Zm XV5zNFtvZmZdXlwKKwkJCXM1W29mZl1eczZbb2ZmXV5zN1tvZmZdOworCit9CisKKwordm9pZCB4 b3JfZ2VuXzZ4MSh1MzIgKmJ1ZmZfcHRyc1s3XSwgdTMyIGJ5dGVzKQoreworCXUzMiAgICBvZmYs IHdvcmRzOworCXUzMiAgICAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNjsKKworCWQg ICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIgID0gYnVmZl9wdHJz WzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNbNF07CisJczUgID0g YnVmZl9wdHJzWzVdOworCXM2ICA9IGJ1ZmZfcHRyc1s2XTsKKworCWZvciAod29yZHMgPSBieXRl cy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKQorCQlkW29mZl0gPSBzMVtv ZmZdXnMyW29mZl1eczNbb2ZmXV5cCisJCQlzNFtvZmZdXnM1W29mZl1eczZbb2ZmXTsKK30KKwor Cit2b2lkIHhvcl9nZW5fNXgxKHUzMiAqYnVmZl9wdHJzWzZdLCB1MzIgYnl0ZXMpCit7CisJdTMy ICAgIG9mZiwgd29yZHM7CisJdTMyICAgICpkLCAqczEsICpzMiwgKnMzLCAqczQsICpzNTsKKwor CWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIgID0gYnVmZl9w dHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNbNF07CisJczUg ID0gYnVmZl9wdHJzWzVdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRz ID4gMDsgd29yZHMtLSwgb2ZmKyspCisJCWRbb2ZmXSA9IHMxW29mZl0gXiBzMltvZmZdIF4gczNb b2ZmXV5cCisJCQlzNFtvZmZdIF4gczVbb2ZmXTsKK30KKworCit2b2lkIHhvcl9nZW5fNHgxKHUz MiAqYnVmZl9wdHJzWzVdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMy ICAgICpkLCAqczEsICpzMiwgKnMzLCAqczQ7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEg ID0gYnVmZl9wdHJzWzFdOworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNb M107CisJczQgID0gYnVmZl9wdHJzWzRdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9 IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspCisJCWRbb2ZmXSA9IHMxW29mZl0gXiBzMltv ZmZdIF4gczNbb2ZmXSBeIHM0W29mZl07Cit9CisKKwordm9pZCB4b3JfZ2VuXzN4MSh1MzIgKmJ1 ZmZfcHRyc1s0XSwgdTMyIGJ5dGVzKQoreworCXUzMiAgICBvZmYsIHdvcmRzOworCXUzMiAgICAq ZCwgKnMxLCAqczIsICpzMzsKKworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0 cnNbMV07CisJczIgID0gYnVmZl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKworCWZv ciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKQor CQlkW29mZl0gPSBzMVtvZmZdIF4gczJbb2ZmXSBeIHMzW29mZl07Cit9CisKKwordm9pZCB4b3Jf Z2VuXzJ4MSh1MzIgKmJ1ZmZfcHRyc1szXSwgdTMyIGJ5dGVzKQoreworCXUzMiAgICBvZmYsIHdv cmRzOworCXUzMiAgICAqZCwgKnMxLCAqczI7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEg ID0gYnVmZl9wdHJzWzFdOworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKworCWZvciAod29yZHMgPSBi eXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKQorCQlkW29mZl0gPSBz MVtvZmZdIF4gczJbb2ZmXTsKK30KKworCit2b2lkIHhvcl9nZW5fMXgxKHUzMiAqYnVmZl9wdHJz WzJdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgICpkLCAqczE7 CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFdOworCisJZm9yICh3 b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspCisJCWRb b2ZmXSA9IHMxW29mZl07CisKK30KKworCit1OCB4b3JfY2hrXzE1eDEodTMyICpidWZmX3B0cnNb MTZdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgIHIsICpkLCAq czEsICpzMiwgKnMzLCAqczQsICpzNSwgKnM2LCAqczcsICpzODsKKwl1MzIJKnM5LCAqczEwLCAq czExLCAqczEyLCAqczEzLCAqczE0LCAqczE1OworCXU4ICAgICB4b3JfcmVzdWx0ID0gTVJfQ1BY X1NUQVRVU19TVUNDRVNTOworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRy c1sxXTsKKwlzMiAgPSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9 IGJ1ZmZfcHRyc1s0XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZd OworCXM3ICA9IGJ1ZmZfcHRyc1s3XTsKKwlzOCAgPSBidWZmX3B0cnNbOF07CisJczkgID0gYnVm Zl9wdHJzWzldOworCXMxMCA9IGJ1ZmZfcHRyc1sxMF07CisJczExID0gYnVmZl9wdHJzWzExXTsK KwlzMTIgPSBidWZmX3B0cnNbMTJdOworCXMxMyA9IGJ1ZmZfcHRyc1sxM107CisJczE0ID0gYnVm Zl9wdHJzWzE0XTsKKwlzMTUgPSBidWZmX3B0cnNbMTVdOworCisJZm9yICh3b3JkcyA9IGJ5dGVz LzQsIG9mZiA9IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspIHsKKwkJciA9IAlkW29mZl1e czFbb2ZmXV5zMltvZmZdXnMzW29mZl1eXAorCQkJczRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eczdb b2ZmXV5cCisJCQlzOFtvZmZdXnM5W29mZl1eczEwW29mZl1eczExW29mZl1eCisJCQlzMTJbb2Zm XV5zMTNbb2ZmXV5zMTRbb2ZmXV5zMTVbb2ZmXTsKKwkJaWYgKHIpIHsKKwkJCXhvcl9yZXN1bHQg PSBNUl9DUFhfU1RBVFVTX0lOQ09OU0lTVEVOVDsKKwkJCWRbb2ZmXSBePSByOworCQl9CisJfQor CXJldHVybiB4b3JfcmVzdWx0OworfQorCisKK3U4IHhvcl9jaGtfMTR4MSh1MzIgKmJ1ZmZfcHRy c1sxNV0sIHUzMiBieXRlcykKK3sKKwl1MzIgICAgCW9mZiwgd29yZHM7CisJdTMyICAgIAlyLCAq ZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNjsKKwl1MzIJKnM3LCAqczgsICpzOSwgKnMx MCwgKnMxMSwgKnMxMiwgKnMxMywgKnMxNDsKKwl1OCAgIAl4b3JfcmVzdWx0ID0gTVJfQ1BYX1NU QVRVU19TVUNDRVNTOworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sx XTsKKwlzMiAgPSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9IGJ1 ZmZfcHRyc1s0XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZdOwor CXM3ICA9IGJ1ZmZfcHRyc1s3XTsKKwlzOCAgPSBidWZmX3B0cnNbOF07CisJczkgID0gYnVmZl9w dHJzWzldOworCXMxMCA9IGJ1ZmZfcHRyc1sxMF07CisJczExID0gYnVmZl9wdHJzWzExXTsKKwlz MTIgPSBidWZmX3B0cnNbMTJdOworCXMxMyA9IGJ1ZmZfcHRyc1sxM107CisJczE0ID0gYnVmZl9w dHJzWzE0XTsKKworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdv cmRzLS0sIG9mZisrKSB7CisJciA9IGRbb2ZmXSBeIHMxW29mZl0gXiBzMltvZmZdIF4gczNbb2Zm XV5cCisJCXM0W29mZl0gXiBzNVtvZmZdIF4gczZbb2ZmXSBeIHM3W29mZl1eXAorCQlzOFtvZmZd IF4gczlbb2ZmXSBeIHMxMFtvZmZdIF4gczExW29mZl1eXAorCQlzMTJbb2ZmXSBeIHMxM1tvZmZd IF4gczE0W29mZl07CisJaWYgKHIpIHsKKwkJeG9yX3Jlc3VsdCA9IE1SX0NQWF9TVEFUVVNfSU5D T05TSVNURU5UOworCQlkW29mZl0gXj0gcjsKKwl9CisJfQorCXJldHVybiB4b3JfcmVzdWx0Owor fQorCisKK3U4IHhvcl9jaGtfMTN4MSh1MzIgKmJ1ZmZfcHRyc1sxNF0sIHUzMiBieXRlcykKK3sK Kwl1MzIgICAgIG9mZiwgd29yZHM7CisJdTMyICAgICByLCAqZCwgKnMxLCAqczIsICpzMywgKnM0 LCAqczUsICpzNiwgKnM3OworCXUzMgkqczgsICpzOSwgKnMxMCwgKnMxMSwgKnMxMiwgKnMxMzsK Kwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVTX1NVQ0NFU1M7CisKKwlkICAgPSBidWZm X3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFdOworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlz MyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVmZl9wdHJzWzRdOworCXM1ICA9IGJ1ZmZfcHRy c1s1XTsKKwlzNiAgPSBidWZmX3B0cnNbNl07CisJczcgID0gYnVmZl9wdHJzWzddOworCXM4ICA9 IGJ1ZmZfcHRyc1s4XTsKKwlzOSAgPSBidWZmX3B0cnNbOV07CisJczEwID0gYnVmZl9wdHJzWzEw XTsKKwlzMTEgPSBidWZmX3B0cnNbMTFdOworCXMxMiA9IGJ1ZmZfcHRyc1sxMl07CisJczEzID0g YnVmZl9wdHJzWzEzXTsKKworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+ IDA7IHdvcmRzLS0sIG9mZisrKSB7CisJCXIgPSBkW29mZl1eczFbb2ZmXV5zMltvZmZdXnMzW29m Zl1eczRbb2ZmXV5cCisJCXM1W29mZl1eczZbb2ZmXV5zN1tvZmZdXlwKKwkJczhbb2ZmXV5zOVtv ZmZdXnMxMFtvZmZdXnMxMVtvZmZdXnMxMltvZmZdXnMxM1tvZmZdOworCQlpZiAocikgeworCQkJ eG9yX3Jlc3VsdCA9IE1SX0NQWF9TVEFUVVNfSU5DT05TSVNURU5UOworCQkJZFtvZmZdIF49IHI7 CisJCX0KKwl9CisJcmV0dXJuIHhvcl9yZXN1bHQ7CisKK30KKworCit1OCB4b3JfY2hrXzEyeDEo dTMyICpidWZmX3B0cnNbMTNdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJ dTMyICAgIAlyLCAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNjsKKwl1MzIJKnM3LCAq czgsICpzOSwgKnMxMCwgKnMxMSwgKnMxMjsKKwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9DUFhfU1RB VFVTX1NVQ0NFU1M7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFd OworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVm Zl9wdHJzWzRdOworCXM1ICA9IGJ1ZmZfcHRyc1s1XTsKKwlzNiAgPSBidWZmX3B0cnNbNl07CisJ czcgID0gYnVmZl9wdHJzWzddOworCXM4ICA9IGJ1ZmZfcHRyc1s4XTsKKwlzOSAgPSBidWZmX3B0 cnNbOV07CisJczEwID0gYnVmZl9wdHJzWzEwXTsKKwlzMTEgPSBidWZmX3B0cnNbMTFdOworCXMx MiA9IGJ1ZmZfcHRyc1sxMl07CisKKwlmb3IgKHdvcmRzID0gYnl0ZXMvNCwgb2ZmID0gMDsgd29y ZHMgPiAwOyB3b3Jkcy0tLCBvZmYrKykgeworCQlyID0gZFtvZmZdXnMxW29mZl1eczJbb2ZmXV5z M1tvZmZdXlwKKwkJczRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eczdbb2ZmXV5cCisJCXM4W29mZl1e czlbb2ZmXV5zMTBbb2ZmXV5zMTFbb2ZmXV5zMTJbb2ZmXTsKKwkJaWYgKHIpIHsKKwkJCXhvcl9y ZXN1bHQgPSBNUl9DUFhfU1RBVFVTX0lOQ09OU0lTVEVOVDsKKwkJCWRbb2ZmXSBePSByOworCQl9 CisJfQorCXJldHVybiB4b3JfcmVzdWx0OworfQorCisKK3U4IHhvcl9jaGtfMTF4MSh1MzIgKmJ1 ZmZfcHRyc1sxMl0sIHUzMiBieXRlcykKK3sKKwl1MzIgICAgCW9mZiwgd29yZHM7CisJdTMyICAg IAlyLCAqZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczU7CisJdTMyCSpzNiwgKnM3LCAqczgsICpz OSwgKnMxMCwgKnMxMTsKKwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVTX1NVQ0NFU1M7 CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFdOworCXMyICA9IGJ1 ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVmZl9wdHJzWzRdOwor CXM1ICA9IGJ1ZmZfcHRyc1s1XTsKKwlzNiAgPSBidWZmX3B0cnNbNl07CisJczcgID0gYnVmZl9w dHJzWzddOworCXM4ICA9IGJ1ZmZfcHRyc1s4XTsKKwlzOSAgPSBidWZmX3B0cnNbOV07CisJczEw ID0gYnVmZl9wdHJzWzEwXTsKKwlzMTEgPSBidWZmX3B0cnNbMTFdOworCisJZm9yICh3b3JkcyA9 IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspIHsKKwkJciA9IGRb b2ZmXV5zMVtvZmZdXnMyW29mZl1eczNbb2ZmXV5cCisJCXM0W29mZl1eczVbb2ZmXV5zNltvZmZd XnM3W29mZl1eXAorCQlzOFtvZmZdXnM5W29mZl1eczEwW29mZl1eczExW29mZl07CisJCWlmIChy KSB7CisJCQl4b3JfcmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19JTkNPTlNJU1RFTlQ7CisJCQlkW29m Zl0gXj0gcjsKKwkJfQorCX0KKwlyZXR1cm4geG9yX3Jlc3VsdDsKK30KKworCit1OCB4b3JfY2hr XzEweDEodTMyICpidWZmX3B0cnNbMTFdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIAlvZmYsIHdv cmRzOworCXUzMiAgICAJciwgKmQsICpzMSwgKnMyLCAqczMsICpzNCwgKnM1OworCXUzMgkqczYs ICpzNywgKnM4LCAqczksICpzMTA7CisJdTggICB4b3JfcmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19T VUNDRVNTOworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsKKwlz MiAgPSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9IGJ1ZmZfcHRy c1s0XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZdOworCXM3ICA9 IGJ1ZmZfcHRyc1s3XTsKKwlzOCAgPSBidWZmX3B0cnNbOF07CisJczkgID0gYnVmZl9wdHJzWzld OworCXMxMCA9IGJ1ZmZfcHRyc1sxMF07CisKKwlmb3IgKHdvcmRzID0gYnl0ZXMvNCwgb2ZmID0g MDsgd29yZHMgPiAwOyB3b3Jkcy0tLCBvZmYrKykgeworCXIgPSBkW29mZl1eczFbb2ZmXV5zMltv ZmZdXnMzW29mZl1eczRbb2ZmXV5cCisJCXM1W29mZl1eczZbb2ZmXV5zN1tvZmZdXlwKKwkJczhb b2ZmXV5zOVtvZmZdXnMxMFtvZmZdOworCQlpZiAocikgeworCQkJeG9yX3Jlc3VsdCA9IE1SX0NQ WF9TVEFUVVNfSU5DT05TSVNURU5UOworCQkJZFtvZmZdIF49IHI7CisJCX0KKwl9CisJcmV0dXJu IHhvcl9yZXN1bHQ7Cit9CisKKwordTggeG9yX2Noa185eDEodTMyICpidWZmX3B0cnNbMTBdLCB1 MzIgYnl0ZXMpCit7CisJdTMyICAgIAlvZmYsIHdvcmRzOworCXUzMiAgICAJciwgKmQsICpzMSwg KnMyLCAqczMsICpzNDsKKwl1MzIJKnM1LCAqczYsICpzNywgKnM4LCAqczk7CisJdTggICB4b3Jf cmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19TVUNDRVNTOworCisJZCAgID0gYnVmZl9wdHJzWzBdOwor CXMxICA9IGJ1ZmZfcHRyc1sxXTsKKwlzMiAgPSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9w dHJzWzNdOworCXM0ICA9IGJ1ZmZfcHRyc1s0XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYg ID0gYnVmZl9wdHJzWzZdOworCXM3ICA9IGJ1ZmZfcHRyc1s3XTsKKwlzOCAgPSBidWZmX3B0cnNb OF07CisJczkgID0gYnVmZl9wdHJzWzldOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9 IDA7IHdvcmRzID4gMDsgd29yZHMtLSwgb2ZmKyspIHsKKwlyID0gZFtvZmZdXnMxW29mZl1eczJb b2ZmXV5zM1tvZmZdXlwKKwkJczRbb2ZmXV5zNVtvZmZdXnM2W29mZl1eczdbb2ZmXV5cCisJCXM4 W29mZl1eczlbb2ZmXTsKKwkJaWYgKHIpIHsKKwkJCXhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVT X0lOQ09OU0lTVEVOVDsKKwkJCWRbb2ZmXSBePSByOworCQl9CisJfQorCXJldHVybiB4b3JfcmVz dWx0OworfQorCisKK3U4IHhvcl9jaGtfOHgxKHUzMiAqYnVmZl9wdHJzWzldLCB1MzIgYnl0ZXMp Cit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgIHIsICpkLCAqczEsICpzMiwgKnMzLCAq czQsICpzNSwgKnM2LCAqczcsICpzODsKKwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVT X1NVQ0NFU1M7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFdOwor CXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVmZl9w dHJzWzRdOworCXM1ICA9IGJ1ZmZfcHRyc1s1XTsKKwlzNiAgPSBidWZmX3B0cnNbNl07CisJczcg ID0gYnVmZl9wdHJzWzddOworCXM4ICA9IGJ1ZmZfcHRyc1s4XTsKKworCWZvciAod29yZHMgPSBi eXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKSB7CisJciA9CWRbb2Zm XV5zMVtvZmZdXnMyW29mZl1eczNbb2ZmXV5cCisJCXM0W29mZl1eczVbb2ZmXV5zNltvZmZdXnM3 W29mZl1eczhbb2ZmXTsKKworCWlmIChyKSB7CisJCXhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVT X0lOQ09OU0lTVEVOVDsKKwkJZFtvZmZdIF49IHI7CisJCX0KKwl9CisJcmV0dXJuIHhvcl9yZXN1 bHQ7Cit9CisKKwordTggeG9yX2Noa183eDEodTMyICpidWZmX3B0cnNbOF0sIHUzMiBieXRlcykK K3sKKwl1MzIgICAgb2ZmLCB3b3JkczsKKwl1MzIgICAgciwgKmQsICpzMSwgKnMyLCAqczMsICpz NCwgKnM1LCAqczYsICpzNzsKKwl1OCAgICB4b3JfcmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19TVUND RVNTOworCisJZCAgID0gYnVmZl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsKKwlzMiAg PSBidWZmX3B0cnNbMl07CisJczMgID0gYnVmZl9wdHJzWzNdOworCXM0ICA9IGJ1ZmZfcHRyc1s0 XTsKKwlzNSAgPSBidWZmX3B0cnNbNV07CisJczYgID0gYnVmZl9wdHJzWzZdOworCXM3ICA9IGJ1 ZmZfcHRyc1s3XTsKKworCWZvciAod29yZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7 IHdvcmRzLS0sIG9mZisrKSB7CisJciA9IGRbb2ZmXV5zMVtvZmZdXnMyW29mZl1eczNbb2ZmXV5c CisJCXM0W29mZl1eczVbb2ZmXV5zNltvZmZdXnM3W29mZl07CisJaWYgKHIpIHsKKwkJeG9yX3Jl c3VsdCA9IE1SX0NQWF9TVEFUVVNfSU5DT05TSVNURU5UOworCQlkW29mZl0gXj0gcjsKKwkJfQor CX0KKwlyZXR1cm4geG9yX3Jlc3VsdDsKK30KKworCit1OCB4b3JfY2hrXzZ4MSh1MzIgKmJ1ZmZf cHRyc1s3XSwgdTMyIGJ5dGVzKQoreworCXUzMiAgICBvZmYsIHdvcmRzOworCXUzMiAgICByLCAq ZCwgKnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNjsKKwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9D UFhfU1RBVFVTX1NVQ0NFU1M7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9w dHJzWzFdOworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQg ID0gYnVmZl9wdHJzWzRdOworCXM1ICA9IGJ1ZmZfcHRyc1s1XTsKKwlzNiAgPSBidWZmX3B0cnNb Nl07CisKKwlmb3IgKHdvcmRzID0gYnl0ZXMvNCwgb2ZmID0gMDsgd29yZHMgPiAwOyB3b3Jkcy0t LCBvZmYrKykgeworCQlyID0gZFtvZmZdXnMxW29mZl1eczJbb2ZmXV5zM1tvZmZdXlwKKwkJczRb b2ZmXV5zNVtvZmZdXnM2W29mZl07CisJCWlmIChyKSB7CisJCQl4b3JfcmVzdWx0ID0gTVJfQ1BY X1NUQVRVU19JTkNPTlNJU1RFTlQ7CisJCQlkW29mZl0gXj0gcjsKKwkJfQorCX0KKwlyZXR1cm4g eG9yX3Jlc3VsdDsKK30KKwordTggeG9yX2Noa181eDEodTMyICpidWZmX3B0cnNbNl0sIHUzMiBi eXRlcykKK3sKKwl1MzIgICAgb2ZmLCB3b3JkczsKKwl1MzIgICAgciwgKmQsICpzMSwgKnMyLCAq czMsICpzNCwgKnM1OworCXU4ICAgeG9yX3Jlc3VsdCA9IE1SX0NQWF9TVEFUVVNfU1VDQ0VTUzsK KworCWQgICA9IGJ1ZmZfcHRyc1swXTsKKwlzMSAgPSBidWZmX3B0cnNbMV07CisJczIgID0gYnVm Zl9wdHJzWzJdOworCXMzICA9IGJ1ZmZfcHRyc1szXTsKKwlzNCAgPSBidWZmX3B0cnNbNF07CisJ czUgID0gYnVmZl9wdHJzWzVdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdv cmRzID4gMDsgd29yZHMtLSwgb2ZmKyspIHsKKwkJciA9IGRbb2ZmXSBeIHMxW29mZl0gXiBzMltv ZmZdXlwKKwkJczNbb2ZmXSBeIHM0W29mZl0gXiBzNVtvZmZdOworCQlpZiAocikgeworCQkJeG9y X3Jlc3VsdCA9IE1SX0NQWF9TVEFUVVNfSU5DT05TSVNURU5UOworCQkJZFtvZmZdIF49IHI7CisJ CX0KKwl9CisJcmV0dXJuIHhvcl9yZXN1bHQ7Cit9CisKKwordTggeG9yX2Noa180eDEodTMyICpi dWZmX3B0cnNbNV0sIHUzMiBieXRlcykKK3sKKwl1MzIgICAgb2ZmLCB3b3JkczsKKwl1MzIgICAg ciwgKmQsICpzMSwgKnMyLCAqczMsICpzNDsKKwl1OCAgIHhvcl9yZXN1bHQgPSBNUl9DUFhfU1RB VFVTX1NVQ0NFU1M7CisKKwlkICAgPSBidWZmX3B0cnNbMF07CisJczEgID0gYnVmZl9wdHJzWzFd OworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKwlzMyAgPSBidWZmX3B0cnNbM107CisJczQgID0gYnVm Zl9wdHJzWzRdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRzID4gMDsg d29yZHMtLSwgb2ZmKyspIHsKKwkJciA9IGRbb2ZmXSBeIHMxW29mZl0gXiBzMltvZmZdIF4gczNb b2ZmXSBeIHM0W29mZl07CisJCWlmIChyKSB7CisJCXhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVT X0lOQ09OU0lTVEVOVDsKKwkJZFtvZmZdIF49IHI7CisJCX0KKwl9CisJcmV0dXJuIHhvcl9yZXN1 bHQ7Cit9CisKKwordTggeG9yX2Noa18zeDEodTMyICpidWZmX3B0cnNbNF0sIHUzMiBieXRlcykK K3sKKwl1MzIgICAgb2ZmLCB3b3JkczsKKwl1MzIgICAgciwgKmQsICpzMSwgKnMyLCAqczM7CisJ dTggICB4b3JfcmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19TVUNDRVNTOworCisJZCAgID0gYnVmZl9w dHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsKKwlzMiAgPSBidWZmX3B0cnNbMl07CisJczMg ID0gYnVmZl9wdHJzWzNdOworCisJZm9yICh3b3JkcyA9IGJ5dGVzLzQsIG9mZiA9IDA7IHdvcmRz ID4gMDsgd29yZHMtLSwgb2ZmKyspIHsKKwkJciA9IGRbb2ZmXSBeIHMxW29mZl0gXiBzMltvZmZd IF4gczNbb2ZmXTsKKwkJaWYgKHIpIHsKKwkJCXhvcl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVTX0lO Q09OU0lTVEVOVDsKKwkJCWRbb2ZmXSBePSByOworCQl9CisJfQorCXJldHVybiB4b3JfcmVzdWx0 OworfQorCisKK3U4IHhvcl9jaGtfMngxKHUzMiAqYnVmZl9wdHJzWzNdLCB1MzIgYnl0ZXMpCit7 CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgIHIsICpkLCAqczEsICpzMjsKKwl1OCAgIHhv cl9yZXN1bHQgPSBNUl9DUFhfU1RBVFVTX1NVQ0NFU1M7CisKKwlkICAgPSBidWZmX3B0cnNbMF07 CisJczEgID0gYnVmZl9wdHJzWzFdOworCXMyICA9IGJ1ZmZfcHRyc1syXTsKKworCWZvciAod29y ZHMgPSBieXRlcy80LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKSB7CisJCXIg PSBkW29mZl0gXiBzMVtvZmZdIF4gczJbb2ZmXTsKKwkJaWYgKHIpIHsKKwkJCXhvcl9yZXN1bHQg PSBNUl9DUFhfU1RBVFVTX0lOQ09OU0lTVEVOVDsKKwkJCWRbb2ZmXSBePSByOworCQl9CisJfQor CisJcmV0dXJuIHhvcl9yZXN1bHQ7Cit9CisKK3U4IHhvcl9jaGtfMXgxKHUzMiAqYnVmZl9wdHJz WzJdLCB1MzIgYnl0ZXMpCit7CisJdTMyICAgIG9mZiwgd29yZHM7CisJdTMyICAgICpkLCAqczE7 CisJdTggICB4b3JfcmVzdWx0ID0gTVJfQ1BYX1NUQVRVU19TVUNDRVNTOworCisJZCAgID0gYnVm Zl9wdHJzWzBdOworCXMxICA9IGJ1ZmZfcHRyc1sxXTsKKworCWZvciAod29yZHMgPSBieXRlcy80 LCBvZmYgPSAwOyB3b3JkcyA+IDA7IHdvcmRzLS0sIG9mZisrKSB7CisJCWlmIChkW29mZl0gIT0g czFbb2ZmXSkgeworCQkJeG9yX3Jlc3VsdCA9IE1SX0NQWF9TVEFUVVNfSU5DT05TSVNURU5UOwor CQkJZFtvZmZdID0gczFbb2ZmXTsKKwkJfQorCX0KKworCXJldHVybiB4b3JfcmVzdWx0OworfQor Cit2b2lkICAoKnhvcl9nZW5fZnVuY3NbTUFYX01SX1JPV19TSVpFXSkodTMyICoqLCB1MzIpID0g eworCXhvcl9nZW5fMXgxLAorCXhvcl9nZW5fMngxLAorCXhvcl9nZW5fM3gxLAorCXhvcl9nZW5f NHgxLAorCXhvcl9nZW5fNXgxLAorCXhvcl9nZW5fNngxLAorCXhvcl9nZW5fN3gxLAorCXhvcl9n ZW5fOHgxLAorCXhvcl9nZW5fOXgxLAorCXhvcl9nZW5fMTB4MSwKKwl4b3JfZ2VuXzExeDEsCisJ eG9yX2dlbl8xMngxLAorCXhvcl9nZW5fMTN4MSwKKwl4b3JfZ2VuXzE0eDEsCisJeG9yX2dlbl8x NXgxLAorfTsKKwordTggICgqeG9yX2NoZWNrX2Z1bmNzW01BWF9NUl9ST1dfU0laRV0pKHUzMiAq KiwgdTMyKSA9IHsKKwl4b3JfY2hrXzF4MSwKKwl4b3JfY2hrXzJ4MSwKKwl4b3JfY2hrXzN4MSwK Kwl4b3JfY2hrXzR4MSwKKwl4b3JfY2hrXzV4MSwKKwl4b3JfY2hrXzZ4MSwKKwl4b3JfY2hrXzd4 MSwKKwl4b3JfY2hrXzh4MSwKKwl4b3JfY2hrXzl4MSwKKwl4b3JfY2hrXzEweDEsCisJeG9yX2No a18xMXgxLAorCXhvcl9jaGtfMTJ4MSwKKwl4b3JfY2hrXzEzeDEsCisJeG9yX2Noa18xNHgxLAor CXhvcl9jaGtfMTV4MSwKK307CisKK3N0YXRpYyBpbmxpbmUgdTggbWVnYXNhc19zY2FuX3NldF9i aXQodTMyIGJpdG1hcCkKK3sKKwl1OCAgYml0ID0gMDsKKwl3aGlsZSAoYml0bWFwKSB7CisJCWlm IChiaXRtYXAgJiAxKQorCQkJcmV0dXJuIGJpdDsKKworCQliaXRtYXAgPj49IDE7CisJCWJpdCsr OworCX0KKwlyZXR1cm4gfjA7Cit9CisKKy8qKgorKiBtZWdhc2FzX2RvX2NweF94b3IgLSBjb21w bGV0ZXMgdGhlIHhvciBvcGVyYXRpb24KKyogQHhvcl9kZXMJCTogc29ydWNlIGFuZCBkZXN0IGJ1 ZmZlcnMgZGV0YWlscy4KKyogQGhvc3RfbWVtCQk6IHByZXZpb3VzbHkgbWFwcGVkIG1lbW9yeSBm b3IgZncKKyogQGhvc3RfbWVtX2xlbgk6IG1hcHBlZCBtZW1vcnkgbGVuZ3RoIGluIGJ5dGVzLgor KgorKiBAcmV0dXJuIDAgb24gc3VjY2VzcyAhPSAwIG9uIGZhaWx1cmUKKyoKKyoqLworc3RhdGlj IHU4IG1lZ2FzYXNfZG9fY3B4X3hvciggc3RydWN0IG1yX2NweF94b3JfZGVzY3JpcHRvciAqeG9y X2RlcywKKwkJCWNvbnN0IHU4ICpob3N0X21lbSwgY29uc3QgIHUzMiBob3N0X21lbV9sZW4pCit7 CisKKwl1MzIgYnVmZl92YWxpZF9iaXRfbWFwID0geG9yX2Rlcy0+YnVmZl92YWxpZF9iaXRtYXA7 CisJdTMyICpidWZfcHRyX2xpc3RbTUFYX01SX1JPV19TSVpFXTsKKwl1MzIgdHhfY291bnQgPSB4 b3JfZGVzLT5zaXplOworCXU4IGRlc3RfaWR4LCBidWZfaWR4LCBiaXQ7CisJdTggICAgICAgICAg aXNfb3BfZ2VuOworCXU4ICBzdGF0dXMgPSBNUl9DUFhfU1RBVFVTX1NVQ0NFU1M7CisKKwkvKiBt YWtlIHRoZSBmaXJzdCBidWZmZXIgcHRyIGFzIHRoZSBkZXN0aW5hdGlvbi4qLworCWlmICggeG9y X2Rlcy0+b3AgPT0gIE1SX0NQWF9YT1JfT1BfR0VOX1AgfHwKKwkJeG9yX2Rlcy0+b3AgPT0gTVJf Q1BYX1hPUl9PUF9DSEVDS19QICkKKwkJZGVzdF9pZHggPSB4b3JfZGVzLT5wX2lkeDsKKwllbHNl CisJCWRlc3RfaWR4ID0geG9yX2Rlcy0+cV9pZHg7CisKKwlidWZfcHRyX2xpc3RbMF0gPSAodTMy ICopKGhvc3RfbWVtICsgeG9yX2Rlcy0+YnVmZl9saXN0W2Rlc3RfaWR4XSk7CisKKwlpc19vcF9n ZW4gPSBNUl9DUFhfWE9SX09QX0lTX0dFTih4b3JfZGVzLT5vcCk7CisKKwlpZiAoIHhvcl9kZXMt PmJ1ZmZfbGlzdFtkZXN0X2lkeF0rdHhfY291bnQgPiBob3N0X21lbV9sZW4pIHsKKwkJcHJpbnRr KEtFUk5fRVJSICIxc3QgaG9zdCBtZW1vcnkgb3ZlciBmbG93IGRldGVjdGVkLlxuIik7CisJCXJl dHVybiBNUl9DUFhfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJLyoKKwkqIEZvciBYT1JfT1BfQ0hF Q0tfUCwgb3VyIGNoZWNrIHJvdXRpbmUgZXhwZWN0cworCSogYnVmUHRyc1swXSB0byBiZSBib3Ro IHBhcml0eQorCSogc291cmNlIGFuZCBwYXJpdHkgZGVzdGluYXRpb247IGNsZWFyCisJKiBvdXQg dGhlIFAtaW5kZXggZnJvbSBvdXIgd29ya2luZyBiaXRtYXAKKwkqIHNvIHRoYXQgdGhlIHNvdXJj ZS1idWZmZXIgc2NhbiBsb29wIGJlbG93CisJKiBkb2Vzbid0IGluY2x1ZGUgUCBhcyBvbmUgb2Yg dGhlCisJKiBleHBsaWNpdCBzb3VyY2UgYnVmZmVycyBpbiBidWZQdHJzW10uCisJICovCisJaWYg KCAhaXNfb3BfZ2VuKQorCQlidWZmX3ZhbGlkX2JpdF9tYXAgJj0gfigxPDx4b3JfZGVzLT5wX2lk eCk7CisKKwkvKiBwb3B1bGF0ZSBidWZfcHRyX2xpc3Qgd2l0aCB2YWxpZCBidWZmZXIgcG9pbnRl cnMuKi8KKwlmb3IgKCBidWZfaWR4ID0gMSA7IGJ1ZmZfdmFsaWRfYml0X21hcCAhPSAwIDsgYnVm X2lkeCsrICkgeworCQliaXQgPSBtZWdhc2FzX3NjYW5fc2V0X2JpdCggYnVmZl92YWxpZF9iaXRf bWFwKTsKKwkJYnVmX3B0cl9saXN0W2J1Zl9pZHhdID0KKwkJCSh1MzIgKikoaG9zdF9tZW0gKyAo dTMyKXhvcl9kZXMtPmJ1ZmZfbGlzdFtiaXRdKTsKKwkJaWYgKCB4b3JfZGVzLT5idWZmX2xpc3Rb Yml0XSt0eF9jb3VudCA+IGhvc3RfbWVtX2xlbikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJob3N0 IG1lbW9yeSBvdmVyIGZsb3cgZGV0ZWN0ZWQuXG4iKTsKKwkJCXJldHVybiBNUl9DUFhfU1RBVFVT X0ZBSUxVUkU7CisJCX0KKwkJYnVmZl92YWxpZF9iaXRfbWFwICY9IH4oMSA8PCBiaXQpOworCX0K KwkvKiBjYWxsIHRoZSB4b3IgZ2VuIGZ1Y3Rpb25zLiovCisJaWYgKCBpc19vcF9nZW4gKQorCQko Knhvcl9nZW5fZnVuY3NbYnVmX2lkeC0yXSkoYnVmX3B0cl9saXN0LCB0eF9jb3VudCk7CisJZWxz ZQorCQlzdGF0dXMgPQorCQkoKnhvcl9jaGVja19mdW5jc1tidWZfaWR4LTJdKShidWZfcHRyX2xp c3QsIHR4X2NvdW50KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB1OCBtZWdhc2Fz X2NvcHkoIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgcGFnZV9vZmZzZXQsCisJCQl1MzIgc2dlX29m ZnNldCwgdTggKmhvc3RfcHRyLCB1MzIgbGVuLCB1OCBkaXIpCit7CisJdTggKnBhZ2VfYWRkcjsK Kwl1MzIgb2ZmOworCXUzMiBieXRlc19jb3BpZWQ7CisJdTMyIHJlbWFpbmluZzsKKworCXJlbWFp bmluZyA9IGxlbjsKKwlvZmYgPSBwYWdlX29mZnNldCtzZ2Vfb2Zmc2V0OworCisJLyoga21hcF9h dG9taWMgbWFwcyBzaW5nbGUgcGFnZSBzaXplIGJ1dCBvcyBzZyBlbGVtZW50IGNhbiBoYXZlIHNp emUKKwkgbW9yZSB0aGFuIHBhZ2Ugc2l6ZSwgaGFuZGxlIGl0LioqLworCisJd2hpbGUgKHJlbWFp bmluZyA+IDAgKSB7CisKKwkJYnl0ZXNfY29waWVkID0KKwkJCW1pbigoc2l6ZV90KXJlbWFpbmlu ZywKKwkJCShzaXplX3QpKFBBR0VfU0laRSAtIChvZmYgJiB+UEFHRV9NQVNLKSkpOworCisJCXBh Z2VfYWRkciA9CisJCQlrbWFwX2F0b21pYyhwYWdlICsgKG9mZiA+PiBQQUdFX1NISUZUKSwgS01f U09GVElSUTApOworCQlpZiAoIHBhZ2VfYWRkciA9PSBOVUxMICkgeworCQkJcHJpbnRrKEtFUk5f Tk9USUNFICJrbWFwX2F0b21pYyBpcyBmYWlsZWQuXG4iKTsKKwkJCXJldHVybiBNUl9DUFhfU1RB VFVTX0ZBSUxVUkU7CisJCX0KKwkJaWYgKCBkaXIgPT0gTVJfQ1BYX0RJUl9XUklURSApCisJCQlt ZW1jcHkoIGhvc3RfcHRyLAorCQkJCXBhZ2VfYWRkcisob2ZmICYgflBBR0VfTUFTSyksCisJCQkJ Ynl0ZXNfY29waWVkICk7CisJCWVsc2UKKwkJCW1lbWNweSggcGFnZV9hZGRyKyhvZmYgJiB+UEFH RV9NQVNLKSwKKwkJCQlob3N0X3B0ciwKKwkJCQlieXRlc19jb3BpZWQgKTsKKworCQlrdW5tYXBf YXRvbWljICggcGFnZV9hZGRyLCBLTV9TT0ZUSVJRMCApOworCisJCWhvc3RfcHRyICs9IGJ5dGVz X2NvcGllZDsKKwkJcmVtYWluaW5nIC09IGJ5dGVzX2NvcGllZDsKKwkJb2ZmICs9IGJ5dGVzX2Nv cGllZDsKKwl9CisKKwlyZXR1cm4gTVJfQ1BYX1NUQVRVU19TVUNDRVNTOworfQorCisvKioKKyog bWVnYXNhc19kb19jcHhfY29weSAtIENvbXBsZXRlcyB0aGUgY29weSBvcHJlYXRpb24KKyogQGlu c3RhbmNlCQk6IERyaXZlciBzb2Z0IHN0YXRlLgorKiBAY3B5X2RlcwkJOiBpbnB1dCBmb3IgY29w eWluZyB0aGUgZGF0YS4KKyoKKyogQHJldHVybiAwIG9uIHN1Y2Nlc3MgIT0gMCBvbiBmYWlsdXJl CisqCisqLworCitzdGF0aWMgdTggbWVnYXNhc19kb19jcHhfY29weSggc3RydWN0IG1lZ2FzYXNf aW5zdGFuY2UgKmluc3RhbmNlLAorCQkJCXN0cnVjdCBtcl9jcHhfY29weV9kZXNjcmlwdG9yICpj cHlfZGVzKQoreworCXU4CQkJc3RhdHVzID0gTVJfQ1BYX1NUQVRVU19TVUNDRVNTIDsKKwl1MzIJ CQl0b3RhbF9yZW1haW5pbmdfbGVuID0gY3B5X2Rlcy0+dG90YWxfYnl0ZV9jb3VudDsKKwl1MzIJ CQlyb3dfcmVtYWluaW5nX2xlbmd0aDsKKwl1MzIJb3Nfc2dlX3N6ID0gMCwgb3Nfc2dlX29mZnNl dCA9IDAsIG9zX3NnZV9pZHggPSAwLCBvc19zZ2VfbGVuOworCXU4CXNnZV9jbnQsIHJvd19pZHgs ICpmd19wdHIgPSBOVUxMLCBob3N0X3NraXBfY291bnRfaGFuZGxlZDsKKwlzdHJ1Y3Qgc2NzaV9j bW5kCSpvc19jbWQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0CSpvc19zZ2w7CisJc3RydWN0IG1lZ2Fz YXNfY21kCSptZWdhX2NtZDsKKwlzdHJ1Y3QgbWVnYXNhc19pb19mcmFtZSAqbGRpbzsKKworCWlm ICggY3B5X2Rlcy0+bWZpX2NtZF9jeHQgID49IGluc3RhbmNlLT5tYXhfZndfY21kcyApIHsKKwkJ cHJpbnRrKEtFUk5fTk9USUNFICJpbnZhbGlkIGNvbnRleHQgLSAweCV4IHNob3VsIGJlIDwgMHgl eCBcbiIsCisJCQkJY3B5X2Rlcy0+bWZpX2NtZF9jeHQsIGluc3RhbmNlLT5tYXhfZndfY21kcyAp OworCQlyZXR1cm4gTVJfQ1BYX1NUQVRVU19GQUlMVVJFOworCX0KKworCW1lZ2FfY21kID0KKwkJ KHN0cnVjdCBtZWdhc2FzX2NtZCAqKWluc3RhbmNlLT5jbWRfbGlzdFtjcHlfZGVzLT5tZmlfY21k X2N4dF07CisJb3NfY21kID0gbWVnYV9jbWQtPnNjbWQ7CisJbGRpbyA9IChzdHJ1Y3QgbWVnYXNh c19pb19mcmFtZSAqKW1lZ2FfY21kLT5mcmFtZTsKKwlzZ2VfY250ID0gbGRpby0+c2dlX2NvdW50 OworCisJaG9zdF9za2lwX2NvdW50X2hhbmRsZWQgPSAwOworCXJvd19pZHggPSAwOworCXJvd19y ZW1haW5pbmdfbGVuZ3RoID0gMDsKKworCXNjc2lfZm9yX2VhY2hfc2cob3NfY21kLCBvc19zZ2ws IHNnZV9jbnQsIG9zX3NnZV9pZHgpIHsKKworCQlvc19zZ2VfbGVuID0gc2dfZG1hX2xlbihvc19z Z2wpOworCisJCWlmICggIWhvc3Rfc2tpcF9jb3VudF9oYW5kbGVkICAmJgorCQkJY3B5X2Rlcy0+ aG9zdF9za2lwX2NvdW50IDwgKG9zX3NnZV9zeiArPSBvc19zZ2VfbGVuKSkgeworCisJCQlvc19z Z2Vfb2Zmc2V0ID0KKwkJCWNweV9kZXMtPmhvc3Rfc2tpcF9jb3VudCAtICggb3Nfc2dlX3N6IC1v c19zZ2VfbGVuICk7CisJCQlvc19zZ2VfbGVuIC09IG9zX3NnZV9vZmZzZXQ7CisJCQlob3N0X3Nr aXBfY291bnRfaGFuZGxlZCA9IDE7CisJCX0gZWxzZSBpZiAoIWhvc3Rfc2tpcF9jb3VudF9oYW5k bGVkICYmCisJCQljcHlfZGVzLT5ob3N0X3NraXBfY291bnQgPT0gb3Nfc2dlX3N6ICkgeworCQkJ b3Nfc2dlX29mZnNldCA9IDA7CisJCQlob3N0X3NraXBfY291bnRfaGFuZGxlZCA9IDE7CisJCQlj b250aW51ZTsKKwkJfQorCisJCWlmICggIWhvc3Rfc2tpcF9jb3VudF9oYW5kbGVkICkKKwkJCWNv bnRpbnVlOworCisJCWZvciAoIDsgdG90YWxfcmVtYWluaW5nX2xlbiAmJiAgcm93X2lkeCA8IE1B WF9NUl9ST1dfU0laRTsKKwkJCXJvd19pZHgrKyApIHsKKworCQkJaWYgKCAhcm93X3JlbWFpbmlu Z19sZW5ndGggKSB7CisJCWZ3X3B0ciA9CisJCSh1OCAqKShpbnN0YW5jZS0+aG9zdF9tZW1fdmly dCtjcHlfZGVzLT5jb3B5X2J1Zltyb3dfaWR4XS5idWYpOworCQkJcm93X3JlbWFpbmluZ19sZW5n dGggPSBjcHlfZGVzLT5jb3B5X2J1Zltyb3dfaWR4XS5zaXplOworCQl9CisKKwkJCXN0YXR1cyA9 IG1lZ2FzYXNfY29weSggCXNnX3BhZ2Uob3Nfc2dsKSwKKwkJCQkJCW9zX3NnbC0+b2Zmc2V0LAor CQkJCQkJb3Nfc2dlX29mZnNldCwKKwkJCQkJCWZ3X3B0ciwKKwkJCQkJTUlOKG9zX3NnZV9sZW4s IHJvd19yZW1haW5pbmdfbGVuZ3RoKSwKKwkJCQkJY3B5X2Rlcy0+ZGlyKTsKKwkJCWlmIChzdGF0 dXMpCisJCQkgICAgIGJyZWFrOworCisJCQl0b3RhbF9yZW1haW5pbmdfbGVuIC09CisJCQkJCU1J Tihvc19zZ2VfbGVuLCByb3dfcmVtYWluaW5nX2xlbmd0aCk7CisKKwkJCWlmICggb3Nfc2dlX2xl biA8PSByb3dfcmVtYWluaW5nX2xlbmd0aCApIHsKKwkJCQlmd19wdHIgKz0gb3Nfc2dlX2xlbjsK KwkJCQlyb3dfcmVtYWluaW5nX2xlbmd0aCAtPSBvc19zZ2VfbGVuOworCQkJCWlmICghKHJvd19y ZW1haW5pbmdfbGVuZ3RoKSkKKwkJCQkJcm93X2lkeCsrOworCQkJCW9zX3NnZV9vZmZzZXQgPSAw OworCQkJCWJyZWFrOworCQkJfWVsc2V7CisJCQkJb3Nfc2dlX2xlbiAtPSByb3dfcmVtYWluaW5n X2xlbmd0aDsKKwkJCQlvc19zZ2Vfb2Zmc2V0ICs9IHJvd19yZW1haW5pbmdfbGVuZ3RoOworCQkJ CXJvd19yZW1haW5pbmdfbGVuZ3RoID0gMDsKKwkJCX0KKworCQl9CisJCWlmICggcm93X2lkeCA+ PSBNQVhfTVJfUk9XX1NJWkUgJiYgdG90YWxfcmVtYWluaW5nX2xlbiApCisJCQlwcmludGsoS0VS Tl9OT1RJQ0UgInJvd19pZHg9MHgleCxyZW1haW5pbmdfbGVuPSAweCV4XG4iLAorCQkJICAgICAg IHJvd19pZHgsIHRvdGFsX3JlbWFpbmluZ19sZW4pOworCisJCWlmICh0b3RhbF9yZW1haW5pbmdf bGVuID09IDAgfHwKKwkJCXN0YXR1cyA9PSBNUl9DUFhfU1RBVFVTX0ZBSUxVUkUgKQorCQkJYnJl YWs7CisJfQorCisJaWYgKCBvc19zZ2VfaWR4ID49IHNnZV9jbnQgJiYgdG90YWxfcmVtYWluaW5n X2xlbiApCisJCXByaW50ayhLRVJOX05PVElDRSAic2dlX2lkeCA9IDB4JXgsIHJlbWFpbmluZ19s ZW4gPSAweCV4IFxuIiwKKwkJCSAgICAgICBvc19zZ2VfaWR4LCB0b3RhbF9yZW1haW5pbmdfbGVu KTsKKworCXJldHVybiBzdGF0dXM7CisKK30KKy8qKgorKiBtZWdhc2FzX2hhbmRsZV9jcHhfcmVx dWVzdHMgLSBNYW5hZ2VzIHRoZSBmdyBxdWV1ZXMKKyogQGluc3RhbmNlCQk6IERyaXZlciBzb2Z0 IHN0YXRlLgorKgorKiBAcmV0dXJuIDAgb24gc3VjY2VzcyAhPSAwIG9uIGZhaWx1cmUKKyoKKyov CitzdGF0aWMgaW50IG1lZ2FzYXNfaGFuZGxlX2NweF9yZXF1ZXN0cyggc3RydWN0IG1lZ2FzYXNf aW5zdGFuY2UgKmluc3RhbmNlKQoreworCXN0cnVjdCBtcl9jcHhfcmVxdWVzdF9xdWV1ZSAqcmVx X3EgPSBpbnN0YW5jZS0+Y3B4X3JlcXVlc3RfcXVldWU7CisJdTMyIHByb2R1Y2VyX2lkeCwgY29u c3VtZXJfaWR4OworCXU4IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBy b2R1Y2VyX2lkeCA9IHJlcV9xLT5wcm9kdWNlcl9pZHg7CisJY29uc3VtZXJfaWR4ID0gcmVxX3Et PmNvbnN1bWVyX2lkeDsKKworCXdoaWxlICgocHJvZHVjZXJfaWR4ICE9IGNvbnN1bWVyX2lkeCkg JiYKKwkJKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9PSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkp IHsKKwkJdW5pb24gIG1yX2NweF9kZXNjcmlwdG9yICpjcHhfZGVzID0KKwkJCSZpbnN0YW5jZS0+ Y3B4X2RzY3JwdHJbY29uc3VtZXJfaWR4XTsKKwkJdW5pb24gIG1yX2NweF9yZXNwb25zZV9kYXRh IHJzcF9kYXRhOworCisJCWlmICggY3B4X2Rlcy0+Y3B4X2NvcHlfZGVzYy5oZHIudHlwZSA9PQor CQkJCU1SX0NQWF9ERVNDUklQVE9SX1RZUEVfQ09QWSApCisJCQlyZXR2YWwgPSBtZWdhc2FzX2Rv X2NweF9jb3B5KGluc3RhbmNlLAorCQkJCShzdHJ1Y3QgbXJfY3B4X2NvcHlfZGVzY3JpcHRvciAq KWNweF9kZXMgKTsKKworCQllbHNlIGlmIChjcHhfZGVzLT5jcHhfY29weV9kZXNjLmhkci50eXBl ID09CisJCQkJCU1SX0NQWF9ERVNDUklQVE9SX1RZUEVfWE9SICkKKwkJCXJldHZhbCA9IG1lZ2Fz YXNfZG9fY3B4X3hvcigKKwkJCQkoc3RydWN0IG1yX2NweF94b3JfZGVzY3JpcHRvciAqKWNweF9k ZXMsCisJCQkJCSh1OCAqKWluc3RhbmNlLT5ob3N0X21lbV92aXJ0LAorCQkJCQlpbnN0YW5jZS0+ aG9zdF9tZW1fbGVuICk7CisJCWVsc2V7CisJCQlwcmludGsoS0VSTl9FUlIgIkdvdCBpbnZhbGlk IGRlc2NyaXB0b3IgdHlwZS4uLlxuIik7CisJCQlyZXR2YWwgPSBNUl9DUFhfU1RBVFVTX0ZBSUxV UkU7CisJCQlicmVhazsKKwkJfQorCisJCXJzcF9kYXRhLnIuc3RhdHVzID0gcmV0dmFsOworCQly c3BfZGF0YS5yLmNvbnRleHQgPSBjcHhfZGVzLT5jcHhfY29weV9kZXNjLmhkci5jb250ZXh0Owor CQlyc3BfZGF0YS5yLnR5cGUgPSBjcHhfZGVzLT5jcHhfY29weV9kZXNjLmhkci50eXBlOworCisJ CS8qIG5vdGlmeSBmdy4qLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2Nr LCBmbGFncyk7CisJCXdyaXRlbCggfjAsICZpbnN0YW5jZS0+cmVnX3NldC0+aW5ib3VuZF9oaWdo X3F1ZXVlX3BvcnQpOworCQl3cml0ZWwoIHJzcF9kYXRhLncsICZpbnN0YW5jZS0+cmVnX3NldC0+ aW5ib3VuZF9sb3dfcXVldWVfcG9ydCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3Rh bmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCisJCWNvbnN1bWVyX2lkeCsrOworCQlpZiAoIGNvbnN1 bWVyX2lkeCA9PSBpbnN0YW5jZS0+Y3B4X2RzY3JwdHJfY250ICkKKwkJCWNvbnN1bWVyX2lkeCA9 IDA7CisKKwl9CisJcmVxX3EtPmNvbnN1bWVyX2lkeCA9IHByb2R1Y2VyX2lkeDsKKworCXJldHVy biAwOworfQorCiAvKioKICAqIG1lZ2FzYXNfY29tcGxldGVfY21kX2RwYwkgLQlSZXR1cm5zIEZX J3MgY29udHJvbGxlciBzdHJ1Y3R1cmUKICAqIEBpbnN0YW5jZV9hZGRyOgkJCUFkZHJlc3Mgb2Yg YWRhcHRlciBzb2Z0IHN0YXRlCkBAIC0xNTY5LDYgKzI2NjUsOSBAQCBzdGF0aWMgdm9pZCBtZWdh c2FzX2NvbXBsZXRlX2NtZF9kcGModW5zCiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0 YW5jZS0+Y29tcGxldGlvbl9sb2NrLCBmbGFncyk7CiAKKwlpZiAoIGluc3RhbmNlLT5jcHhfc3Vw cG9ydGVkICkKKwkJbWVnYXNhc19oYW5kbGVfY3B4X3JlcXVlc3RzKCBpbnN0YW5jZSk7CisKIAkv KgogCSAqIENoZWNrIGlmIHdlIGNhbiByZXN0b3JlIGNhbl9xdWV1ZQogCSAqLwpAQCAtMjM1OSw2 ICszNDU4LDE3IEBAIHByb2Nlc3NfZndfc3RhdGVfY2hhbmdlX3dxKHN0cnVjdCB3b3JrX3MKIAkJ CSppbnN0YW5jZS0+Y29uc3VtZXIgPSAwOwogCQkJKmluc3RhbmNlLT5wcm9kdWNlciA9IDA7CiAJ CX0KKwkJaWYgKGluc3RhbmNlLT5jcHhfc3VwcG9ydGVkKXsKKwkJCWluc3RhbmNlLT5jcHhfcmVx dWVzdF9xdWV1ZS0+Y29uc3VtZXJfaWR4ID0KKwkJCQlpbnN0YW5jZS0+Y3B4X3JlcXVlc3RfcXVl dWUtPnByb2R1Y2VyX2lkeCA9IDA7CisKKwkJCWlmICggbWVnYXNhc19jaGVja19jcHhfc3VwcG9y dCggaW5zdGFuY2UgKSA9PSAwICApeworCQkJCWlmICggbWVnYXNhc19zZW5kX2NweF9xdWV1ZV9k YXRhKCBpbnN0YW5jZSApICl7CisJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJTZW5kIGNweCBmYWls ZWQuXG4iKTsKKwkJCQkJbWVnYXNhc19yZW1vdmVfY3B4KGluc3RhbmNlKTsKKwkJCQl9CisJCQl9 CisJCX0KIAogCQltZWdhc2FzX2lzc3VlX2luaXRfbWZpKGluc3RhbmNlKTsKIApAQCAtMzExMSw2 ICs0MjIxLDE4MCBAQCBtZWdhc2FzX2dldF9jdHJsX2luZm8oc3RydWN0IG1lZ2FzYXNfaW5zCiAJ cmV0dXJuIHJldDsKIH0KIAorCisvKioKKyAqIG1lZ2FzYXNfY2hlY2tfY3B4X3N1cHBvcnQgOiBU cmllcyB0byBnZXQgdGhlIGhvc3QgbWVtb3J5IGFkZHJlc3MgaWYgZmFpbHMgdGhlbiBjcHgKKwkJ CQlub3Qgc3VwcG9ydGVkIGVsc2UgY3B4IHN1cHBvcnRlZC4KKyAqIEBpbnN0YW5jZToJCUFkYXB0 ZXIgc29mdCBzdGF0ZQorICoKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzIG5vbi16ZXJvIG9uIGZh aWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgbWVnYXNhc19jaGVja19jcHhfc3VwcG9ydCggc3RydWN0 IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21k OworCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgKmRjbWQ7CisJc3RydWN0IG1yX2NweF9pbml0 X2RhdGEgKmNweF9pbml0X2RhdGE7CisJZG1hX2FkZHJfdCBjcHhfaW5pdF9kYXRhX2g7CisJaW50 IHJldHZhbCA9IDA7CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCWlmICgh Y21kKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gZ2V0IGNtZFxuIik7CisJCXJl dHVybiAtRU5PTUVNOworCX0KKworCWNweF9pbml0X2RhdGEgPSBwY2lfYWxsb2NfY29uc2lzdGVu dChpbnN0YW5jZS0+cGRldiwKKwkJCXNpemVvZiggc3RydWN0IG1yX2NweF9pbml0X2RhdGEpLCAm Y3B4X2luaXRfZGF0YV9oKTsKKworCWlmIChjcHhfaW5pdF9kYXRhID09IE5VTEwpIHsKKwkJcHJp bnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBhbGxvYyBtZW0gZm9yIGNweF9pbml0X2RhdGEuIFxu Iik7CisJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwkJcmV0dXJuIC1FTk9N RU07CisJfQorCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCWRjbWQtPmZsYWdzID0gMDsK KwlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfTUlTQ19DUFhfSU5JVF9EQVRBX0dFVDsKKwlk Y21kLT5kYXRhX3hmZXJfbGVuICA9IHNpemVvZihzdHJ1Y3QgbXJfY3B4X2luaXRfZGF0YSApOwor CWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzICA9IDB4ZmY7CisJ ZGNtZC0+c2dlX2NvdW50ID0gMTsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gY3B4 X2luaXRfZGF0YV9oOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0 IG1yX2NweF9pbml0X2RhdGEpOworCisJcmV0dmFsID0gbWVnYXNhc19pc3N1ZV9wb2xsZWQgKCBp bnN0YW5jZSwgY21kICk7CisKKwlpZiAocmV0dmFsID09IDAgJiYgY21kLT5mcmFtZS0+aGRyLmNt ZF9zdGF0dXMgPT0gMCkgeworCQlpbnN0YW5jZS0+aG9zdF9tZW1fcGh5cyA9IGNweF9pbml0X2Rh dGEtPnBoeXNfYWRkcl9jYWNoZV9idWY7CisJCWluc3RhbmNlLT5ob3N0X21lbV9sZW4gID0gY3B4 X2luaXRfZGF0YS0+c2l6ZTsKKwkJaW5zdGFuY2UtPmNweF9kc2NycHRyX2NudCA9IGNweF9pbml0 X2RhdGEtPmNweF9kZXNjX2NvdW50OworCisJCWlmICggaW5zdGFuY2UtPmhvc3RfbWVtX2xlbiA9 PSAwIHx8CisJCQlpbnN0YW5jZS0+aG9zdF9tZW1fcGh5cyA9PSAwIHx8CisJCQkhaW5zdGFuY2Ut PmNweF9kc2NycHRyX2NudCApeworCisJCXByaW50ayhLRVJOX0VSUiAiTm8gaG9zdF9tZW1fcGh5 cy9jcHhfZGVzY3JpcHRvclxuIik7CisJCQlyZXR2YWwgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJ cHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiBjcHggaXMgbm90IHN1cHBvcnRlZC5cbiIpOwor CQlyZXR2YWwgPSAxOworCX0KKworCWluc3RhbmNlLT5jcHhfc3VwcG9ydGVkID0gKHJldHZhbCA/ IDA6MSk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAorCQkJc2l6ZW9m KHN0cnVjdCBtcl9jcHhfaW5pdF9kYXRhKSwKKwkJCWNweF9pbml0X2RhdGEsIGNweF9pbml0X2Rh dGFfaCk7CisKKwltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwlyZXR1cm4g cmV0dmFsOworfQorCisvKioKKyAqIG1lZ2FzYXNfc2VuZF9jcHhfcXVldWVfZGF0YSA6IFNlbmRz IHRoZSBxdWV1ZSBzZXR1cCBpbmZvIHRvIGZ3LgorICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0 IHN0YXRlCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3Mgbm9uLXplcm8gb24gZmFpbHVyZS4K KyAqLworCitzdGF0aWMgaW50IG1lZ2FzYXNfc2VuZF9jcHhfcXVldWVfZGF0YSggc3RydWN0IG1l Z2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlICkKK3sKKworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21k OworCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgKmRjbWQ7CisJaW50IHJldHZhbCA9IDA7CisK KwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCWlmICghY21kKSB7CisJCXByaW50 ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gZ2V0IGNtZFxuIik7CisJCXJldHVybiAtRU5PTUVNOwor CX0KKworCWRjbWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKwlkY21kLT5mbGFncyA9IDA7CisJZGNt ZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX01JU0NfQ1BYX1FVRVVFX0RBVEE7CisJZGNtZC0+ZGF0 YV94ZmVyX2xlbiAgPSBzaXplb2YoIHN0cnVjdCBtcl9jcHhfcXVldWVfZGF0YSApOworCWRjbWQt PmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzICA9IDB4ZmY7CisJZGNtZC0+ c2dlX2NvdW50ID0gMTsKKwlkY21kLT5tYm94LndbMF0gPSBpbnN0YW5jZS0+Y3B4X3JlcXVlc3Rf cXVldWVfaDsKKwlkY21kLT5tYm94LndbMV0gPSAwOworCWRjbWQtPm1ib3gud1syXSA9IGluc3Rh bmNlLT5jcHhfZHNjcnB0cl9jbnQ7CisKKwlyZXR2YWwgPSBtZWdhc2FzX2lzc3VlX3BvbGxlZCAo IGluc3RhbmNlLCBjbWQgKTsKKworCW1lZ2FzYXNfcmV0dXJuX2NtZCggaW5zdGFuY2UsIGNtZCk7 CisKKwlpZiAoIHJldHZhbCA9PSAwICkgeworCQlpbnN0YW5jZS0+Y3B4X3JlcXVlc3RfcXVldWUt PmNvbnN1bWVyX2lkeCA9CisJCQlpbnN0YW5jZS0+Y3B4X3JlcXVlc3RfcXVldWUtPnByb2R1Y2Vy X2lkeCA9IDA7CisJCWluc3RhbmNlLT5jcHhfc3VwcG9ydGVkID0gMTsKKwl9CisKKwlyZXR1cm4g cmV0dmFsOworfQorCitzdGF0aWMgdTMyIG1lZ2FzYXNfZ2V0X2NweF9tZW1fbGVuKCB1MTYgbWF4 X2Z3X2NtZHMgKQoreworCXJldHVybiAoc2l6ZW9mKCBzdHJ1Y3QgbXJfY3B4X3JlcXVlc3RfcXVl dWUgKSArCisJCXNpemVvZiggdW5pb24gbXJfY3B4X2Rlc2NyaXB0b3IgKSAqICggbWF4X2Z3X2Nt ZHMpICk7Cit9CisKK3N0YXRpYyB1MzIgbWVnYXNhc19yZW1vdmVfY3B4KCBzdHJ1Y3QgbWVnYXNh c19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJCWlmICggaW5zdGFuY2UtPmhvc3RfbWVtX3ZpcnQg KQorCQkJaW91bm1hcChpbnN0YW5jZS0+aG9zdF9tZW1fdmlydCk7CisKKwkJaWYgKCBpbnN0YW5j ZS0+Y3B4X3JlcXVlc3RfcXVldWUgKQorCQkJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+ cGRldiwKKwkJCW1lZ2FzYXNfZ2V0X2NweF9tZW1fbGVuKCBpbnN0YW5jZS0+Y3B4X2RzY3JwdHJf Y250KSwKKwkJCWluc3RhbmNlLT5jcHhfcmVxdWVzdF9xdWV1ZSwKKwkJCWluc3RhbmNlLT5jcHhf cmVxdWVzdF9xdWV1ZV9oICk7CisKKwkJaW5zdGFuY2UtPmNweF9zdXBwb3J0ZWQgPSAwOworCisJ cmV0dXJuIDA7Cit9CisKKy8qIHNob3VsZCBoYXZlIGhvc3RfbWVtX3BoeXMgaW50aWFsaXplZCBi ZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiovCitzdGF0aWMgaW50IG1lZ2FzYXNfaW5pdF9j cHgoIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnN0YW5jZS0+aG9z dF9tZW1fdmlydCA9IGlvcmVtYXAoaW5zdGFuY2UtPmhvc3RfbWVtX3BoeXMsCisJCQkJCWluc3Rh bmNlLT5ob3N0X21lbV9sZW4pOworCWlmICggaW5zdGFuY2UtPmhvc3RfbWVtX3ZpcnQgPT0gTlVM TCApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBGYWlsZWQgdG8gaW9yZW1hcCBob3N0 IG1lbW9yeS5cbiIpOworCQlnb3RvIGVycm9yX3VubG9hZDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBt ZW1vcnkgZm9yIGluZGljZXMgYW5kIGRlc2NyaXB0b3JzIHJlc3BvbnNlIGFycmF5J3MgKi8KKwlp bnN0YW5jZS0+Y3B4X3JlcXVlc3RfcXVldWUgPQorCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoIGlu c3RhbmNlLT5wZGV2LAorCQkJbWVnYXNhc19nZXRfY3B4X21lbV9sZW4gKGluc3RhbmNlLT5jcHhf ZHNjcnB0cl9jbnQpLAorCQkJJmluc3RhbmNlLT5jcHhfcmVxdWVzdF9xdWV1ZV9oICk7CisKKwlp ZiAoIGluc3RhbmNlLT5jcHhfcmVxdWVzdF9xdWV1ZSA9PSBOVUxMICkgeworCQlwcmludGsoS0VS Tl9FUlIgIk91dCBvZiBETUEgbWVtb3J5IGZvciBjcHggb3BlcmF0aW9ucy5cbiIpOworCQlnb3Rv IGVycm9yX3VubG9hZDsKKwl9CisKKwkvKmluaXRpYWxpemUgcXVldWVzKi8KKwlpbnN0YW5jZS0+ Y3B4X2RzY3JwdHIgPQorCQkodW5pb24gbXJfY3B4X2Rlc2NyaXB0b3IgKikoKHU4ICopaW5zdGFu Y2UtPmNweF9yZXF1ZXN0X3F1ZXVlICsKKwkJCShzaXplb2YoaW5zdGFuY2UtPmNweF9yZXF1ZXN0 X3F1ZXVlLT5jb25zdW1lcl9pZHgpKjIgKSk7CisKKwlpZiAoIG1lZ2FzYXNfc2VuZF9jcHhfcXVl dWVfZGF0YSggaW5zdGFuY2UgKSApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIgU2VuZGluZyBjcHgg cXVldWUgZGF0YSB0byBGVyBmYWlsZWQuXG4iKTsKKwkJZ290byBlcnJvcl91bmxvYWQ7CisJfQor CXJldHVybiAwOworCitlcnJvcl91bmxvYWQ6CisJbWVnYXNhc19yZW1vdmVfY3B4KCBpbnN0YW5j ZSApOworCXJldHVybiAtMTsKK30KKwogLyoqCiAgKiBtZWdhc2FzX2lzc3VlX2luaXRfbWZpIC0J SW5pdGlhbGl6ZXMgdGhlIEZXCiAgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKQEAg LTMzNTMsNiArNDYzNywxMCBAQCBzdGF0aWMgaW50IG1lZ2FzYXNfaW5pdF9tZmkoc3RydWN0IG1l Z2FzCiAJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBDYW4ndCBhbGxvY2F0ZSB2ZXJzaW9u IGJ1ZmZlclxuIik7CiAJfQogCisJaWYgKCBtZWdhc2FzX2NoZWNrX2NweF9zdXBwb3J0KCBpbnN0 YW5jZSApID09IDAgICkKKwkJaWYgKCBtZWdhc2FzX2luaXRfY3B4KCBpbnN0YW5jZSApICkKKwkJ CXByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gaW5pdGlsaXppbmcgY3B4LlxuIik7CisKIAlpZiAo bWVnYXNhc19pc3N1ZV9pbml0X21maShpbnN0YW5jZSkpCiAJCWdvdG8gZmFpbF9md19pbml0Owog CkBAIC0zNDU1LDYgKzQ3NDMsOCBAQCBzdGF0aWMgdm9pZCBtZWdhc2FzX3JlbGVhc2VfbWZpKHN0 cnVjdCBtCiAKIAlpb3VubWFwKGluc3RhbmNlLT5yZWdfc2V0KTsKIAorCW1lZ2FzYXNfcmVtb3Zl X2NweCggaW5zdGFuY2UgKTsKKwogCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoaW5zdGFu Y2UtPnBkZXYsCiAJCXBjaV9zZWxlY3RfYmFycyhpbnN0YW5jZS0+cGRldiwgSU9SRVNPVVJDRV9N RU0pKTsKIH0KQEAgLTQxNDEsNiArNTQzMSwxNSBAQCBtZWdhc2FzX3Jlc3VtZShzdHJ1Y3QgcGNp X2RldiAqcGRldikKIAlpZiAobWVnYXNhc190cmFuc2l0aW9uX3RvX3JlYWR5KGluc3RhbmNlKSkK IAkJZ290byBmYWlsX3JlYWR5X3N0YXRlOwogCisJaWYgKCBtZWdhc2FzX2NoZWNrX2NweF9zdXBw b3J0KCBpbnN0YW5jZSApID09IDAgICkgeworCQlpZiAoIG1lZ2FzYXNfc2VuZF9jcHhfcXVldWVf ZGF0YSggaW5zdGFuY2UgKSApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiU2VuZCBjcHggcXVldWUg dG8gRlcgZmFpbGVkLlxuIik7CisJCQltZWdhc2FzX3JlbW92ZV9jcHgoaW5zdGFuY2UpOworCQl9 ZWxzZQorCQkJaW5zdGFuY2UtPmNweF9yZXF1ZXN0X3F1ZXVlLT5jb25zdW1lcl9pZHggPQorCQkJ CWluc3RhbmNlLT5jcHhfcmVxdWVzdF9xdWV1ZS0+cHJvZHVjZXJfaWR4ID0gMDsKKwl9CisKIAlp ZiAobWVnYXNhc19pc3N1ZV9pbml0X21maShpbnN0YW5jZSkpCiAJCWdvdG8gZmFpbF9pbml0X21m aTsKIApkaWZmIC1ydXBOIG9sZC9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgg bmV3L2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAotLS0gb2xkL2RyaXZlcnMv c2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAkyMDEwLTExLTE1IDA0OjQ1OjM0LjAwMDAwMDAw MCAtMDUwMAorKysgbmV3L2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAkyMDEw LTExLTE3IDAyOjE4OjUzLjAwMDAwMDAwMCAtMDUwMApAQCAtMTQ0LDYgKzE0NCwxNCBAQAogI2Rl ZmluZSBNUl9EQ01EX0NMVVNURVJfUkVTRVRfTEQJCTB4MDgwMTAyMDAKICNkZWZpbmUgTVJfRENN RF9QRF9MSVNUX1FVRVJZICAgICAgICAgICAgICAgICAgIDB4MDIwMTAxMDAKIAorI2RlZmluZSBN Ul9EQ01EX0NUUkxfTUlTQ19DUFgJCQkweDAxMDBlMjAwCisjZGVmaW5lIE1SX0RDTURfQ1RSTF9N SVNDX0NQWF9JTklUX0RBVEFfR0VUCTB4MDEwMGUyMDEKKyNkZWZpbmUgTVJfRENNRF9DVFJMX01J U0NfQ1BYX1FVRVVFX0RBVEEJMHgwMTAwZTIwMgorI2RlZmluZSBNUl9EQ01EX0NUUkxfTUlTQ19D UFhfVU5SRUdJU1RFUgkweDAxMDBlMjAzCisjZGVmaW5lIE1BWF9NUl9ST1dfU0laRQkJCQkzMgor I2RlZmluZSBNUl9DUFhfRElSX1dSSVRFCQkJMQorI2RlZmluZSBNUl9DUFhfRElSX1JFQUQJCQkJ MAorI2RlZmluZSBNUl9DUFhfVkVSU0lPTgkJCQkxCiAvKgogICogTUZJIGNvbW1hbmQgY29tcGxl dGlvbiBjb2RlcwogICovCkBAIC0xMjU2LDYgKzEyNjQsMTc0IEBAIHN0cnVjdCBtZWdhc2FzX2V2 dF9kZXRhaWwgewogCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBNSU4o YSwgYikgKChhKSA8IChiKSA/IChhKTooYikpCisKKworLyoKKyogZW51bWVyYXRlcyB0eXBlIG9m IGRlc2NyaXB0b3IKKyovCisKK2VudW0gTVJfQ1BYX0RFU0NSSVBUT1JfVFlQRSB7CisJTVJfQ1BY X0RFU0NSSVBUT1JfVFlQRV9DT1BZICAgPSAxLAorCU1SX0NQWF9ERVNDUklQVE9SX1RZUEVfWE9S ICAgID0gMgorfTsKKworLyoKKyogc3RhdHVzIGluZm9ybWF0aW9uIG9mIGNvcHkgb3IgeG9yIG9w ZXJhdGlvbgorKi8KK2VudW0gTVJfQ1BYX1NUQVRVUyB7CisJTVJfQ1BYX1NUQVRVU19TVUNDRVNT ICAgICAgPSAwLAorCU1SX0NQWF9TVEFUVVNfSU5DT05TSVNURU5UID0gMSwKKwlNUl9DUFhfU1RB VFVTX0ZBSUxVUkUgICAgICA9IDIsCit9OworCisvKgorKiBkZWZpbmUgdGhlIFhPUiBvcGNvZGVz CisqLworZW51bSBNUl9DUFhfWE9SX09QIHsKKwlNUl9DUFhfWE9SX09QX0dFTl9QICAgID0gMHgw MSwKKwlNUl9DUFhfWE9SX09QX0dFTl9RICAgID0gMHgwMiwgLyogZ2VuZXJhdGUgUSBidWZmZXIg Ki8KKwlNUl9DUFhfWE9SX09QX0dFTl9QUSAgID0gMHgwMywgLyogZ2VuZXJhdGUgUCtRIGJ1ZmZl cnMgKi8KKwlNUl9DUFhfWE9SX09QX0NIRUNLX1AgID0gMHgxMSwgLyogY2hlY2sgUCBidWZmZXIg Ki8KKwlNUl9DUFhfWE9SX09QX0NIRUNLX1EgID0gMHgxMiwgLyogY2hlY2sgUSBidWZmZXIgKi8K KwlNUl9DUFhfWE9SX09QX0NIRUNLX1BRID0gMHgxMywgLyogY2hlY2sgUCtRIGJ1ZmZlcnMgKi8K K307CisKKyNkZWZpbmUgTVJfQ1BYX1hPUl9PUF9JU19DSEVDSyh4b3JPcCkgICgoeG9yT3AgJiAw eDEwKSAhPSAwKQorI2RlZmluZSBNUl9DUFhfWE9SX09QX0lTX0dFTih4b3JPcCkgICAgKCFNUl9D UFhfWE9SX09QX0lTX0NIRUNLKHhvck9wKSkKKyNkZWZpbmUgTVJfQ1BYX1hPUl9PUF9JU19QKHhv ck9wKSAgICAgICgoeG9yT3AgJiAweDAxKSAhPSAwKQorI2RlZmluZSBNUl9DUFhfWE9SX09QX0lT X1EoeG9yT3ApICAgICAgKCh4b3JPcCAmIDB4MDIpICE9IDApCisjZGVmaW5lIE1SX0NQWF9YT1Jf T1BfSVNfUFEoeG9yT3ApICAgICAoKHhvck9wICYgMHgwMykgPT0gMykKKworLyoKKyogdGhpcyBk YXRhIGlzIHBhc3NlZCB0byBkcml2ZXIgZHVyaW5nIGRyaXZlciBpbml0LgorKi8KK3N0cnVjdCBt cl9jcHhfaW5pdF9kYXRhIHsKKwl1MzIJY3B4X2Rlc2NfY291bnQ7CisJdTMyICAgICBzaXplOwor CXU2NCAgICAgcGh5c19hZGRyX2NhY2hlX2J1ZjsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2Vk KSk7CisKKy8qCisqIGhlYWRlciBwYXNzZWQgd2l0aCBlYWNoIGRlc2NyaXB0b3IKKyovCitzdHJ1 Y3QgbXJfY3B4X2hlYWRlciB7CisJdTMyICAgICAgICBjb250ZXh0ICAgOiAyNDsKKwl1MzIgICAg ICAgIHR5cGUgICAgIDogIDQ7CisJdTMyICAgICAgICByZXN2ZCAgICA6ICA0OworfSBfX2F0dHJp YnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisqIHhvciBkZXNjcmlwdG9yIGRhdGEKKyovCitzdHJ1 Y3QgbXJfY3B4X3hvcl9kZXNjcmlwdG9yIHsKKwlzdHJ1Y3QgbXJfY3B4X2hlYWRlciAgICAgIGhk cjsKKwllbnVtIE1SX0NQWF9YT1JfT1AgICAgICBvcDsKKwl1MzIgICAgICAgICAgICAgc2l6ZTsK Kwl1MzIgICAgICAgICAgICAgYnVmZl92YWxpZF9iaXRtYXA7CisJdTggICAgICAgICAgICAgIHBf aWR4OworCXU4ICAgICAgICAgICAgICBxX2lkeDsKKwl1OCAgICAgICAgICAgICAgcGFkWzJdOwor CXUzMiAgICAgICAgICAgICBidWZmX2xpc3RbTUFYX01SX1JPV19TSVpFXTsKKwl1MzIgICAgICAg ICAgICAgbXVsdF9saXN0W01BWF9NUl9ST1dfU0laRV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNr ZWQpKTsKKworCisvKgorKiBjb3B5IGJ1ZmZlciBmb3IgZWFjaCB0cmFuc2Zlci4gZWFjaCBzdWNo IHRyYW5mZXIgYmV0d2VlbgorKiB1c2VyIHNwYXJlIGhvc3QgYWRkcmVzcyBhbmQgZmlybXdhcmUg YWxsb2NhdGVkIGNhY2hlIGRhdGEuCisqLworc3RydWN0IG1yX2NweF9jb3B5X21yX2J1ZmZlciB7 CisJdTMyICAgICBidWY7CisJdTMyICAgICBzaXplOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2Vk KSk7CisKKy8qCisqIGNvcHkgZGVzY3JpcHRvciBkYXRhCisqLworc3RydWN0IG1yX2NweF9jb3B5 X2Rlc2NyaXB0b3IgeworCXN0cnVjdCBtcl9jcHhfaGVhZGVyICAgICAgICAgICAgICBoZHI7CisJ dTMyICAgICAgICAgICAgICAgICAgICAgbWZpX2NtZF9jeHQ7CisJdTMyICAgICAgICAgICAgICAg ICAgICAgdG90YWxfYnl0ZV9jb3VudDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBob3N0X3Nr aXBfY291bnQ7CisJdTggICAgICAgICAgICAgICAgICAgICAgZGlyOworCXU4ICAgICAgICAgICAg ICAgICAgICAgIHBhZFszXTsKKwlzdHJ1Y3QgbXJfY3B4X2NvcHlfbXJfYnVmZmVyICAgICAgY29w eV9idWZbTUFYX01SX1JPV19TSVpFXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIDsKKwor LyoKKyogdXNlcnMgb2YgdGhpcyBpbnRlcmZhY2UgbXVzdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRo ZSBzaXplIG9mCisqIHRoaXMgc3RydWN0dXJlIHdoaWxlIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBk ZXNjcmlwdG9ycworKi8KK3VuaW9uIG1yX2NweF9kZXNjcmlwdG9yIHsKKwlzdHJ1Y3QgbXJfY3B4 X3hvcl9kZXNjcmlwdG9yICAgICAgIGNweF94b3JfZGVzYzsKKwlzdHJ1Y3QgbXJfY3B4X2NvcHlf ZGVzY3JpcHRvciAgICAgY3B4X2NvcHlfZGVzYzsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBw YWRbNTEyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qCisqIHJlcXVlc3Qg cXVldWUuCisqIGZpcm13YXJlIG1hbmFnZXMgcHJvZHVjZXJpbmRleCwgZHJpdmVyIG1hbmFnZXMg Y29uc3VtZXJpbmRleC4KKyogbnVtYmVyIG9mIGRlY3JpcHRvcnMgaXMga2VwdCBhcyB2YXJpYWJs ZS4gZHJpdmVyIG11c3QgdXNlCisqIG1heCBob3N0IGNvbW1hbmRzIHN1cHBvcnRlZCBmb3IgYWxs b2NhdGlvbi4KKyovCitzdHJ1Y3QgbXJfY3B4X3JlcXVlc3RfcXVldWUgeworCXUzMiAgICAgICAg ICAgICBjb25zdW1lcl9pZHg7CisJdTMyICAgICAgICAgICAgIHByb2R1Y2VyX2lkeDsKKwl1bmlv biBtcl9jcHhfZGVzY3JpcHRvciAgIGNweGRlc2NyaXB0b3JbMV07Cit9IF9fYXR0cmlidXRlX18g KChwYWNrZWQpKTsKKworCisvKgorKiByZXNwb25zZSBkYXRhLiB0aGlzIGRhdGEgd2lsbCBiZSBw b3N0ZWQgYnkgZHJpdmVyIGFmdGVyIGNvcHkveG9yCisqIG9wZXJhdGlvbiBpcyBjb21wZXRlLgor Ki8KK3VuaW9uIG1yX2NweF9yZXNwb25zZV9kYXRhIHsKKwlzdHJ1Y3QgeworCQl1MzIgICAgICAg ICBjb250ZXh0ICAgICA6IDI0OworCQl1MzIgICAgICAgICBzdGF0dXMgICAgICA6ICA0OworCQl1 MzIgICAgICAgICB0eXBlICAgICAgICA6ICA0OworCX0gcjsKKwl1MzIgICAgICAgICB3OworfSBf X2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyoKKyogcmVzcG9uc2UgcXVldWUuCisqIGRy aXZlciBtYW5hZ2VzIHByb2R1Y2VyaW5kZXgsIGZpcm13YXJlIG1hbmFnZXMgY29uc3VtZXJpbmRl eC4KKyogbnVtYmVyIG9mIGRlY3JpcHRvcnMgaXMga2VwdCBhcyB2YXJpYWJsZS4gZHJpdmVyIG11 c3QgdXNlCisqIG1heCBob3N0IGNvbW1hbmRzIHN1cHBvcnRlZCBmb3IgYWxsb2NhdGlvbi4KKyov CitzdHJ1Y3QgIG1yX2NweF9yZXNwb25zZV9xdWV1ZSB7CisJdTMyICAgICAgICAgICAgICAgICBj b25zdW1lcl9pZHg7CisJdTMyICAgICAgICAgICAgICAgICBwcm9kdWNlcl9pZHg7CisJdW5pb24g bXJfY3B4X3Jlc3BvbnNlX2RhdGEgICBjcHhfcmVzcF9kYXRhWzFdOworfSBfX2F0dHJpYnV0ZV9f ICgocGFja2VkKSk7CisKKworLyoKKyogdGhlIHNpemUgb2YgZWFjaCBvZiB0aGUgc3RydWN0dXJl IHdpdGhpbiB0aGlzIGlzIGRldGVybWluZWQgYXQgcnVuIHRpbWUuCisqIHRoaXMgc3RydWN0dXJl IGlzIGZvciBkb2N1bWVudCBwdXJwb3NlIGFuZCBzaG93cyB0aGF0IHRoZSBzdHJ1Y3R1cmVzCisq IGxheSBhcyBzaG93biBiZWxvdyBpbiBtZW1vcnkKKyovCitzdHJ1Y3QgIG1yX2NweF9xdWV1ZXMg eworCXN0cnVjdCBtcl9jcHhfcmVxdWVzdF9xdWV1ZSAgICAgcmVxdWVzdHF1ZXVlOworCXN0cnVj dCBtcl9jcHhfcmVzcG9uc2VfcXVldWUgICAgcmVzcG9uc2VxdWV1ZTsKK30gX19hdHRyaWJ1dGVf XyAoKHBhY2tlZCkpOworCisvKgorKiBkcml2ZXIgc2VuZHMgdGhpcyBxdWV1ZSBkYXRhIGR1cmlu ZyBtZmkgaW5pdC4gZmlybXdhcmUKKyogd2lsbCBub3QgdXNlIHRoZSBpbnRlcmZhY2UgaWYgdGhl IHZlcnNpb25zIGRvIG5vdCBtYXRjaC4KKyovCitzdHJ1Y3QgbXJfY3B4X3F1ZXVlX2RhdGEgewor CXUzMiAgICAgICAgIHZlcnNpb247CisJdTMyICAgICAgICAgY291bnRfcXVldWVfZW50cmllczsK Kwl1NjQgICAgICAgICBwaHlzX2FkZHJfY3B4X3F1ZXVlczsKK30gX19hdHRyaWJ1dGVfXyAoKHBh Y2tlZCkpOworCisKIHN0cnVjdCBtZWdhc2FzX2Flbl9ldmVudCB7CiAJc3RydWN0IHdvcmtfc3Ry dWN0IGhvdHBsdWdfd29yazsKIAlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7CkBA IC0xMzMwLDYgKzE1MDYsMTUgQEAgc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgewogCiAJc3RydWN0 IHRpbWVyX2xpc3QgaW9fY29tcGxldGlvbl90aW1lcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGludGVy bmFsX3Jlc2V0X3BlbmRpbmdfcTsKKworCXUzMiBjcHhfc3VwcG9ydGVkOworCXN0cnVjdCBtcl9j cHhfcmVxdWVzdF9xdWV1ZSAqY3B4X3JlcXVlc3RfcXVldWU7CisJZG1hX2FkZHJfdCBjcHhfcmVx dWVzdF9xdWV1ZV9oOworCXVuaW9uIG1yX2NweF9kZXNjcmlwdG9yICpjcHhfZHNjcnB0cjsKKwl1 MzIgY3B4X2RzY3JwdHJfY250OworCXU2NCBob3N0X21lbV9waHlzOworCXUzMiBob3N0X21lbV9s ZW47CisJdTggKmhvc3RfbWVtX3ZpcnQ7CiB9OwogCiBlbnVtIHsK --_002_4B6A08C587958942AA3002690DD4F8C30106A96223cosmail02lsic_--