From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: [PATCH 16/49] drm/amd/display: Make init_hw and init_pipes generic for seamless boot Date: Fri, 9 Aug 2019 17:37:09 -0400 Message-ID: <20190809213742.30301-17-sunpeng.li@amd.com> References: <20190809213742.30301-1-sunpeng.li@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809213742.30301-1-sunpeng.li-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Leo Li , Jun Lei , Martin Leung RnJvbTogTWFydGluIExldW5nIDxtYXJ0aW4ubGV1bmdAYW1kLmNvbT4KCltXaHldCkZvciBzZWFt bGVzcyBib290IHRoZSBpbml0X2h3IHNlcXVlbmNlIG11c3QgYmUgc3BsaXQgaW50bwphY3R1YWwg aGFyZHdhcmUgdnMgcGlwZXMsIGluIG9yZGVyIHRvIGRlZmVyIHBpcGUgaW5pdGlhbGl6YXRpb24g dG8gc2V0IG1vZGUKYW5kIHNraXAgb2YgcGlwZS1kZXN0cnVjdGl2ZSBzZXF1ZW5jZXMKCltIb3dd Cm1hZGUgZGNuMTBfaW5pdF9odyBhbmQgZGNuMTBfaW5pdF9waXBlcyBnZW5lcmljIGZvciBmdXR1 cmUgZGNucyB0byBpbmhlcml0CmRlbGV0ZWQgZGNuMjAgc3BlY2lmaWMgdmVyc2lvbnMuIFRoaXMg aXMgcGFydCAxIG9mIGEgMiBwYXJ0aW1wbGVtZW50YXRpb24Kb2Ygc2VhbWxlc3MgYm9vdAoKU2ln bmVkLW9mZi1ieTogTWFydGluIExldW5nIDxtYXJ0aW4ubGV1bmdAYW1kLmNvbT4KUmV2aWV3ZWQt Ynk6IEp1biBMZWkgPEp1bi5MZWlAYW1kLmNvbT4KQWNrZWQtYnk6IExlbyBMaSA8c3VucGVuZy5s aUBhbWQuY29tPgotLS0KIC4uLi9kaXNwbGF5L2RjL2RjZTExMC9kY2UxMTBfaHdfc2VxdWVuY2Vy LmMgICB8ICAxMiArLQogLi4uL2Rpc3BsYXkvZGMvZGNlMTEwL2RjZTExMF9od19zZXF1ZW5jZXIu aCAgIHwgICA2ICstCiAuLi4vZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL2RjbjEwX2h1YmJ1Yi5j ICAgfCAgIDQgKy0KIC4uLi9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMTAvZGNuMTBfaHViYnViLmgg ICB8ICAgMiArLQogLi4uL2FtZC9kaXNwbGF5L2RjL2RjbjEwL2RjbjEwX2h3X3NlcXVlbmNlci5j IHwgMTgyICsrKysrKy0tLQogLi4uL2RybS9hbWQvZGlzcGxheS9kYy9kY24yMC9kY24yMF9odWJi dWIuYyAgIHwgICAyICstCiAuLi4vZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjIwL2RjbjIwX2h3c2Vx LmMgICAgfCAzODEgKysrKysrKy0tLS0tLS0tLS0tCiAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9pbmMvaHcvZGNodWJidWIuaCAgfCAgIDQgKwogLi4uL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMv aW5jL2h3X3NlcXVlbmNlci5oIHwgIDMyICsrCiA5IGZpbGVzIGNoYW5nZWQsIDMxMiBpbnNlcnRp b25zKCspLCAzMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9kaXNwbGF5L2RjL2RjZTExMC9kY2UxMTBfaHdfc2VxdWVuY2VyLmMgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2Rpc3BsYXkvZGMvZGNlMTEwL2RjZTExMF9od19zZXF1ZW5jZXIuYwppbmRleCA5MTk2 NDcxNjZiY2UuLjVhMDQ2ZTViYzc1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2RjL2RjZTExMC9kY2UxMTBfaHdfc2VxdWVuY2VyLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTExMC9kY2UxMTBfaHdfc2VxdWVuY2VyLmMKQEAgLTcyOCw3 ICs3MjgsNyBAQCBzdGF0aWMgZW51bSBicF9yZXN1bHQgbGlua190cmFuc21pdHRlcl9jb250cm9s KAogICogQGJyaWVmCiAgKiBlRFAgb25seS4KICAqLwotdm9pZCBod3NzX2VkcF93YWl0X2Zvcl9o cGRfcmVhZHkoCit2b2lkIGRjZTExMF9lZHBfd2FpdF9mb3JfaHBkX3JlYWR5KAogCQlzdHJ1Y3Qg ZGNfbGluayAqbGluaywKIAkJYm9vbCBwb3dlcl91cCkKIHsKQEAgLTc5Niw3ICs3OTYsNyBAQCB2 b2lkIGh3c3NfZWRwX3dhaXRfZm9yX2hwZF9yZWFkeSgKIAl9CiB9CiAKLXZvaWQgaHdzc19lZHBf cG93ZXJfY29udHJvbCgKK3ZvaWQgZGNlMTEwX2VkcF9wb3dlcl9jb250cm9sKAogCQlzdHJ1Y3Qg ZGNfbGluayAqbGluaywKIAkJYm9vbCBwb3dlcl91cCkKIHsKQEAgLTg3OCw3ICs4NzgsNyBAQCB2 b2lkIGh3c3NfZWRwX3Bvd2VyX2NvbnRyb2woCiAgKiBAYnJpZWYKICAqIGVEUCBvbmx5LiBDb250 cm9sIHRoZSBiYWNrbGlnaHQgb2YgdGhlIGVEUCBwYW5lbAogICovCi12b2lkIGh3c3NfZWRwX2Jh Y2tsaWdodF9jb250cm9sKAordm9pZCBkY2UxMTBfZWRwX2JhY2tsaWdodF9jb250cm9sKAogCQlz dHJ1Y3QgZGNfbGluayAqbGluaywKIAkJYm9vbCBlbmFibGUpCiB7CkBAIC0yNzU1LDkgKzI3NTUs OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3X3NlcXVlbmNlcl9mdW5jcyBkY2UxMTBfZnVuY3Mg PSB7CiAJLnNldHVwX3N0ZXJlbyA9IE5VTEwsCiAJLnNldF9hdm11dGUgPSBkY2UxMTBfc2V0X2F2 bXV0ZSwKIAkud2FpdF9mb3JfbXBjY19kaXNjb25uZWN0ID0gZGNlMTEwX3dhaXRfZm9yX21wY2Nf ZGlzY29ubmVjdCwKLQkuZWRwX2JhY2tsaWdodF9jb250cm9sID0gaHdzc19lZHBfYmFja2xpZ2h0 X2NvbnRyb2wsCi0JLmVkcF9wb3dlcl9jb250cm9sID0gaHdzc19lZHBfcG93ZXJfY29udHJvbCwK LQkuZWRwX3dhaXRfZm9yX2hwZF9yZWFkeSA9IGh3c3NfZWRwX3dhaXRfZm9yX2hwZF9yZWFkeSwK KwkuZWRwX2JhY2tsaWdodF9jb250cm9sID0gZGNlMTEwX2VkcF9iYWNrbGlnaHRfY29udHJvbCwK KwkuZWRwX3Bvd2VyX2NvbnRyb2wgPSBkY2UxMTBfZWRwX3Bvd2VyX2NvbnRyb2wsCisJLmVkcF93 YWl0X2Zvcl9ocGRfcmVhZHkgPSBkY2UxMTBfZWRwX3dhaXRfZm9yX2hwZF9yZWFkeSwKIAkuc2V0 X2N1cnNvcl9wb3NpdGlvbiA9IGRjZTExMF9zZXRfY3Vyc29yX3Bvc2l0aW9uLAogCS5zZXRfY3Vy c29yX2F0dHJpYnV0ZSA9IGRjZTExMF9zZXRfY3Vyc29yX2F0dHJpYnV0ZQogfTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UxMTAvZGNlMTEwX2h3X3NlcXVl bmNlci5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTExMC9kY2UxMTBfaHdf c2VxdWVuY2VyLmgKaW5kZXggY2QzZTM2ZDUyYTUyLi42NjhmZWIwZDE2OWQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UxMTAvZGNlMTEwX2h3X3NlcXVlbmNl ci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2UxMTAvZGNlMTEwX2h3 X3NlcXVlbmNlci5oCkBAIC03MywxNSArNzMsMTUgQEAgdm9pZCBkY2UxMTBfb3B0aW1pemVfYmFu ZHdpZHRoKAogCiB2b2lkIGRwX3JlY2VpdmVyX3Bvd2VyX2N0cmwoc3RydWN0IGRjX2xpbmsgKmxp bmssIGJvb2wgb24pOwogCi12b2lkIGh3c3NfZWRwX3Bvd2VyX2NvbnRyb2woCit2b2lkIGRjZTEx MF9lZHBfcG93ZXJfY29udHJvbCgKIAkJc3RydWN0IGRjX2xpbmsgKmxpbmssCiAJCWJvb2wgcG93 ZXJfdXApOwogCi12b2lkIGh3c3NfZWRwX2JhY2tsaWdodF9jb250cm9sKAordm9pZCBkY2UxMTBf ZWRwX2JhY2tsaWdodF9jb250cm9sKAogCXN0cnVjdCBkY19saW5rICpsaW5rLAogCWJvb2wgZW5h YmxlKTsKIAotdm9pZCBod3NzX2VkcF93YWl0X2Zvcl9ocGRfcmVhZHkoCit2b2lkIGRjZTExMF9l ZHBfd2FpdF9mb3JfaHBkX3JlYWR5KAogCQlzdHJ1Y3QgZGNfbGluayAqbGluaywKIAkJYm9vbCBw b3dlcl91cCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k Y24xMC9kY24xMF9odWJidWIuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24x MC9kY24xMF9odWJidWIuYwppbmRleCAwYWIzOTE0NDZkM2QuLjkwYzMwYTIxYmQwOSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL2RjbjEwX2h1YmJ1Yi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9kY24xMF9odWJidWIu YwpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgaHViYnViMV9hbGxvd19zZWxmX3JlZnJlc2hfY29u dHJvbChzdHJ1Y3QgaHViYnViICpodWJidWIsIGJvb2wgYWxsb3cpCiAJCQlEQ0hVQkJVQl9BUkJf QUxMT1dfU0VMRl9SRUZSRVNIX0ZPUkNFX0VOQUJMRSwgIWFsbG93KTsKIH0KIAotYm9vbCBodWJ1 YnUxX2lzX2FsbG93X3NlbGZfcmVmcmVzaF9lbmFibGVkKHN0cnVjdCBodWJidWIgKmh1YmJ1YikK K2Jvb2wgaHViYnViMV9pc19hbGxvd19zZWxmX3JlZnJlc2hfZW5hYmxlZChzdHJ1Y3QgaHViYnVi ICpodWJidWIpCiB7CiAJc3RydWN0IGRjbjEwX2h1YmJ1YiAqaHViYnViMSA9IFRPX0RDTjEwX0hV QkJVQihodWJidWIpOwogCXVpbnQzMl90IGVuYWJsZSA9IDA7CkBAIC05NDMsNiArOTQzLDggQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBodWJidWJfZnVuY3MgaHViYnViMV9mdW5jcyA9IHsKIAkuZ2V0 X2RjY19jb21wcmVzc2lvbl9jYXAgPSBodWJidWIxX2dldF9kY2NfY29tcHJlc3Npb25fY2FwLAog CS53bV9yZWFkX3N0YXRlID0gaHViYnViMV93bV9yZWFkX3N0YXRlLAogCS5wcm9ncmFtX3dhdGVy bWFya3MgPSBodWJidWIxX3Byb2dyYW1fd2F0ZXJtYXJrcywKKwkuaXNfYWxsb3dfc2VsZl9yZWZy ZXNoX2VuYWJsZWQgPSBodWJidWIxX2lzX2FsbG93X3NlbGZfcmVmcmVzaF9lbmFibGVkLAorCS5h bGxvd19zZWxmX3JlZnJlc2hfY29udHJvbCA9IGh1YmJ1YjFfYWxsb3dfc2VsZl9yZWZyZXNoX2Nv bnRyb2wsCiB9OwogCiB2b2lkIGh1YmJ1YjFfY29uc3RydWN0KHN0cnVjdCBodWJidWIgKmh1YmJ1 YiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9kY24x MF9odWJidWIuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9kY24xMF9o dWJidWIuaAppbmRleCA3YzI1NTljOWFlMjMuLjcwZTVkODRmYzY5YSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL2RjbjEwX2h1YmJ1Yi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9kY24xMF9odWJidWIuaApAQCAtMjQ3 LDcgKzI0Nyw3IEBAIHZvaWQgaHViYnViMV9wcm9ncmFtX3dhdGVybWFya3MoCiAKIHZvaWQgaHVi YnViMV9hbGxvd19zZWxmX3JlZnJlc2hfY29udHJvbChzdHJ1Y3QgaHViYnViICpodWJidWIsIGJv b2wgYWxsb3cpOwogCi1ib29sIGh1YnVidTFfaXNfYWxsb3dfc2VsZl9yZWZyZXNoX2VuYWJsZWQo c3RydWN0IGh1YmJ1YiAqaHVidWIpOworYm9vbCBodWJidWIxX2lzX2FsbG93X3NlbGZfcmVmcmVz aF9lbmFibGVkKHN0cnVjdCBodWJidWIgKmh1YnViKTsKIAogdm9pZCBodWJidWIxX3RvZ2dsZV93 YXRlcm1hcmtfY2hhbmdlX3JlcSgKIAkJc3RydWN0IGh1YmJ1YiAqaHViYnViKTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9kY24xMF9od19zZXF1ZW5j ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9kY24xMF9od19zZXF1 ZW5jZXIuYwppbmRleCAzNzQyNDA2NTk4N2YuLjFiZmM3NmNiZGRiOCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjEwL2RjbjEwX2h3X3NlcXVlbmNlci5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24xMC9kY24xMF9od19zZXF1ZW5j ZXIuYwpAQCAtNDM3LDcgKzQzNyw3IEBAIGJvb2wgZGNuMTBfZGlkX3VuZGVyZmxvd19vY2N1cihz dHJ1Y3QgZGMgKmRjLCBzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4KQogCXJldHVybiBmYWxzZTsK IH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX3Bvd2VyX2dhdGluZ19wbGFuZSgKK3N0YXRpYyB2b2lk IGRjbjEwX2VuYWJsZV9wb3dlcl9nYXRpbmdfcGxhbmUoCiAJc3RydWN0IGRjZV9od3NlcSAqaHdz LAogCWJvb2wgZW5hYmxlKQogewpAQCAtNDU5LDcgKzQ1OSw3IEBAIHN0YXRpYyB2b2lkIGVuYWJs ZV9wb3dlcl9nYXRpbmdfcGxhbmUoCiAJUkVHX1VQREFURShET01BSU43X1BHX0NPTkZJRywgRE9N QUlON19QT1dFUl9GT1JDRU9OLCBmb3JjZV9vbik7CiB9CiAKLXN0YXRpYyB2b2lkIGRpc2FibGVf dmdhKAorc3RhdGljIHZvaWQgZGNuMTBfZGlzYWJsZV92Z2EoCiAJc3RydWN0IGRjZV9od3NlcSAq aHdzKQogewogCXVuc2lnbmVkIGludCBpbl92Z2ExX21vZGUgPSAwOwpAQCAtNDkyLDcgKzQ5Miw3 IEBAIHN0YXRpYyB2b2lkIGRpc2FibGVfdmdhKAogCVJFR19VUERBVEUoVkdBX1RFU1RfQ09OVFJP TCwgVkdBX1RFU1RfUkVOREVSX1NUQVJULCAxKTsKIH0KIAotc3RhdGljIHZvaWQgZHBwX3BnX2Nv bnRyb2woCitzdGF0aWMgdm9pZCBkY24xMF9kcHBfcGdfY29udHJvbCgKIAkJc3RydWN0IGRjZV9o d3NlcSAqaHdzLAogCQl1bnNpZ25lZCBpbnQgZHBwX2luc3QsCiAJCWJvb2wgcG93ZXJfb24pCkBA IC01NDQsNyArNTQ0LDcgQEAgc3RhdGljIHZvaWQgZHBwX3BnX2NvbnRyb2woCiAJfQogfQogCi1z dGF0aWMgdm9pZCBodWJwX3BnX2NvbnRyb2woCitzdGF0aWMgdm9pZCBkY24xMF9odWJwX3BnX2Nv bnRyb2woCiAJCXN0cnVjdCBkY2VfaHdzZXEgKmh3cywKIAkJdW5zaWduZWQgaW50IGh1YnBfaW5z dCwKIAkJYm9vbCBwb3dlcl9vbikKQEAgLTYwNCw4ICs2MDQsOCBAQCBzdGF0aWMgdm9pZCBwb3dl cl9vbl9wbGFuZSgKIAlpZiAoUkVHKERDX0lQX1JFUVVFU1RfQ05UTCkpIHsKIAkJUkVHX1NFVChE Q19JUF9SRVFVRVNUX0NOVEwsIDAsCiAJCQkJSVBfUkVRVUVTVF9FTiwgMSk7Ci0JCWRwcF9wZ19j b250cm9sKGh3cywgcGxhbmVfaWQsIHRydWUpOwotCQlodWJwX3BnX2NvbnRyb2woaHdzLCBwbGFu ZV9pZCwgdHJ1ZSk7CisJCWh3cy0+Y3R4LT5kYy0+aHdzcy5kcHBfcGdfY29udHJvbChod3MsIHBs YW5lX2lkLCB0cnVlKTsKKwkJaHdzLT5jdHgtPmRjLT5od3NzLmh1YnBfcGdfY29udHJvbChod3Ms IHBsYW5lX2lkLCB0cnVlKTsKIAkJUkVHX1NFVChEQ19JUF9SRVFVRVNUX0NOVEwsIDAsCiAJCQkJ SVBfUkVRVUVTVF9FTiwgMCk7CiAJCURDX0xPR19ERUJVRygKQEAgLTYyNiw3ICs2MjYsNyBAQCBz dGF0aWMgdm9pZCB1bmRvX0RFR1ZJRENOMTBfMjUzX3dhKHN0cnVjdCBkYyAqZGMpCiAJUkVHX1NF VChEQ19JUF9SRVFVRVNUX0NOVEwsIDAsCiAJCQlJUF9SRVFVRVNUX0VOLCAxKTsKIAotCWh1YnBf cGdfY29udHJvbChod3MsIDAsIGZhbHNlKTsKKwlkYy0+aHdzcy5odWJwX3BnX2NvbnRyb2woaHdz LCAwLCBmYWxzZSk7CiAJUkVHX1NFVChEQ19JUF9SRVFVRVNUX0NOVEwsIDAsCiAJCQlJUF9SRVFV RVNUX0VOLCAwKTsKIApAQCAtNjU1LDcgKzY1NSw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5X0RFR1ZJ RENOMTBfMjUzX3dhKHN0cnVjdCBkYyAqZGMpCiAJUkVHX1NFVChEQ19JUF9SRVFVRVNUX0NOVEws IDAsCiAJCQlJUF9SRVFVRVNUX0VOLCAxKTsKIAotCWh1YnBfcGdfY29udHJvbChod3MsIDAsIHRy dWUpOworCWRjLT5od3NzLmh1YnBfcGdfY29udHJvbChod3MsIDAsIHRydWUpOwogCVJFR19TRVQo RENfSVBfUkVRVUVTVF9DTlRMLCAwLAogCQkJSVBfUkVRVUVTVF9FTiwgMCk7CiAKQEAgLTY2Mywx MCArNjYzLDIzIEBAIHN0YXRpYyB2b2lkIGFwcGx5X0RFR1ZJRENOMTBfMjUzX3dhKHN0cnVjdCBk YyAqZGMpCiAJaHdzLT53YV9zdGF0ZS5ERUdWSURDTjEwXzI1M19hcHBsaWVkID0gdHJ1ZTsKIH0K IAotc3RhdGljIHZvaWQgYmlvc19nb2xkZW5faW5pdChzdHJ1Y3QgZGMgKmRjKQorc3RhdGljIHZv aWQgZGNuMTBfYmlvc19nb2xkZW5faW5pdChzdHJ1Y3QgZGMgKmRjKQogewogCXN0cnVjdCBkY19i aW9zICpicCA9IGRjLT5jdHgtPmRjX2Jpb3M7CiAJaW50IGk7CisJYm9vbCBhbGxvd19zZWxmX2Zy ZXNoX2ZvcmNlX2VuYWJsZSA9IHRydWU7CisKKwlpZiAoZGMtPnJlc19wb29sLT5odWJidWItPmZ1 bmNzLT5pc19hbGxvd19zZWxmX3JlZnJlc2hfZW5hYmxlZCkKKwkJYWxsb3dfc2VsZl9mcmVzaF9m b3JjZV9lbmFibGUgPQorCQkJCWRjLT5yZXNfcG9vbC0+aHViYnViLT5mdW5jcy0+aXNfYWxsb3df c2VsZl9yZWZyZXNoX2VuYWJsZWQoZGMtPnJlc19wb29sLT5odWJidWIpOworCisKKwkvKiBXQSBm b3IgbWFraW5nIERGIHNsZWVwIHdoZW4gaWRsZSBhZnRlciByZXN1bWUgZnJvbSBTMGkzLgorCSAq IERDSFVCQlVCX0FSQl9BTExPV19TRUxGX1JFRlJFU0hfRk9SQ0VfRU5BQkxFIGlzIHNldCB0byAx IGJ5CisJICogY29tbWFuZCB0YWJsZSwgaWYgRENIVUJCVUJfQVJCX0FMTE9XX1NFTEZfUkVGUkVT SF9GT1JDRV9FTkFCTEUgPSAwCisJICogYmVmb3JlIGNhbGxpbmcgY29tbWFuZCB0YWJsZSBhbmQg aXQgY2hhbmdlZCB0byAxIGFmdGVyLAorCSAqIGl0IHNob3VsZCBiZSBzZXQgYmFjayB0byAwLgor CSAqLwogCiAJLyogaW5pdGlhbGl6ZSBkY24gZ2xvYmFsICovCiAJYnAtPmZ1bmNzLT5lbmFibGVf ZGlzcF9wb3dlcl9nYXRpbmcoYnAsCkBAIC02NzcsNiArNjkwLDEyIEBAIHN0YXRpYyB2b2lkIGJp b3NfZ29sZGVuX2luaXQoc3RydWN0IGRjICpkYykKIAkJYnAtPmZ1bmNzLT5lbmFibGVfZGlzcF9w b3dlcl9nYXRpbmcoYnAsCiAJCQkJQ09OVFJPTExFUl9JRF9EMCArIGksIEFTSUNfUElQRV9ESVNB QkxFKTsKIAl9CisKKwlpZiAoZGMtPnJlc19wb29sLT5odWJidWItPmZ1bmNzLT5hbGxvd19zZWxm X3JlZnJlc2hfY29udHJvbCkKKwkJaWYgKGFsbG93X3NlbGZfZnJlc2hfZm9yY2VfZW5hYmxlID09 IGZhbHNlICYmCisJCQkJZGMtPnJlc19wb29sLT5odWJidWItPmZ1bmNzLT5pc19hbGxvd19zZWxm X3JlZnJlc2hfZW5hYmxlZChkYy0+cmVzX3Bvb2wtPmh1YmJ1YikpCisJCQlkYy0+cmVzX3Bvb2wt Pmh1YmJ1Yi0+ZnVuY3MtPmFsbG93X3NlbGZfcmVmcmVzaF9jb250cm9sKGRjLT5yZXNfcG9vbC0+ aHViYnViLCB0cnVlKTsKKwogfQogCiBzdGF0aWMgdm9pZCBmYWxzZV9vcHRjX3VuZGVyZmxvd193 YSgKQEAgLTk3MCw3ICs5ODksNyBAQCB2b2lkIGh3c3MxX3BsYW5lX2F0b21pY19kaXNjb25uZWN0 KHN0cnVjdCBkYyAqZGMsIHN0cnVjdCBwaXBlX2N0eCAqcGlwZV9jdHgpCiAJCWRjbjEwX3Zlcmlm eV9hbGxvd19wc3RhdGVfY2hhbmdlX2hpZ2goZGMpOwogfQogCi1zdGF0aWMgdm9pZCBwbGFuZV9h dG9taWNfcG93ZXJfZG93bihzdHJ1Y3QgZGMgKmRjLAorc3RhdGljIHZvaWQgZGNuMTBfcGxhbmVf YXRvbWljX3Bvd2VyX2Rvd24oc3RydWN0IGRjICpkYywKIAkJc3RydWN0IGRwcCAqZHBwLAogCQlz dHJ1Y3QgaHVicCAqaHVicCkKIHsKQEAgLTk4MCw4ICs5OTksOCBAQCBzdGF0aWMgdm9pZCBwbGFu ZV9hdG9taWNfcG93ZXJfZG93bihzdHJ1Y3QgZGMgKmRjLAogCWlmIChSRUcoRENfSVBfUkVRVUVT VF9DTlRMKSkgewogCQlSRUdfU0VUKERDX0lQX1JFUVVFU1RfQ05UTCwgMCwKIAkJCQlJUF9SRVFV RVNUX0VOLCAxKTsKLQkJZHBwX3BnX2NvbnRyb2woaHdzLCBkcHAtPmluc3QsIGZhbHNlKTsKLQkJ aHVicF9wZ19jb250cm9sKGh3cywgaHVicC0+aW5zdCwgZmFsc2UpOworCQlkYy0+aHdzcy5kcHBf cGdfY29udHJvbChod3MsIGRwcC0+aW5zdCwgZmFsc2UpOworCQlkYy0+aHdzcy5odWJwX3BnX2Nv bnRyb2woaHdzLCBodWJwLT5pbnN0LCBmYWxzZSk7CiAJCWRwcC0+ZnVuY3MtPmRwcF9yZXNldChk cHApOwogCQlSRUdfU0VUKERDX0lQX1JFUVVFU1RfQ05UTCwgMCwKIAkJCQlJUF9SRVFVRVNUX0VO LCAwKTsKQEAgLTk5Myw3ICsxMDEyLDcgQEAgc3RhdGljIHZvaWQgcGxhbmVfYXRvbWljX3Bvd2Vy X2Rvd24oc3RydWN0IGRjICpkYywKIC8qIGRpc2FibGUgSFcgdXNlZCBieSBwbGFuZS4KICAqIG5v dGU6ICBjYW5ub3QgZGlzYWJsZSB1bnRpbCBkaXNjb25uZWN0IGlzIGNvbXBsZXRlCiAgKi8KLXN0 YXRpYyB2b2lkIHBsYW5lX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkYyAqZGMsIHN0cnVjdCBwaXBl X2N0eCAqcGlwZV9jdHgpCitzdGF0aWMgdm9pZCBkY24xMF9wbGFuZV9hdG9taWNfZGlzYWJsZShz dHJ1Y3QgZGMgKmRjLCBzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4KQogewogCXN0cnVjdCBodWJw ICpodWJwID0gcGlwZV9jdHgtPnBsYW5lX3Jlcy5odWJwOwogCXN0cnVjdCBkcHAgKmRwcCA9IHBp cGVfY3R4LT5wbGFuZV9yZXMuZHBwOwpAQCAtMTAxMyw3ICsxMDMyLDcgQEAgc3RhdGljIHZvaWQg cGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRjICpkYywgc3RydWN0IHBpcGVfY3R4ICpwaXBl X2N0eCkKIAlodWJwLT5wb3dlcl9nYXRlZCA9IHRydWU7CiAJZGMtPm9wdGltaXplZF9yZXF1aXJl ZCA9IGZhbHNlOyAvKiBXZSdyZSBwb3dlcmluZyBvZmYsIG5vIG5lZWQgdG8gb3B0aW1pemUgKi8K IAotCXBsYW5lX2F0b21pY19wb3dlcl9kb3duKGRjLAorCWRjLT5od3NzLnBsYW5lX2F0b21pY19w b3dlcl9kb3duKGRjLAogCQkJcGlwZV9jdHgtPnBsYW5lX3Jlcy5kcHAsCiAJCQlwaXBlX2N0eC0+ cGxhbmVfcmVzLmh1YnApOwogCkBAIC0xMDMyLDcgKzEwNTEsNyBAQCBzdGF0aWMgdm9pZCBkY24x MF9kaXNhYmxlX3BsYW5lKHN0cnVjdCBkYyAqZGMsIHN0cnVjdCBwaXBlX2N0eCAqcGlwZV9jdHgp CiAJaWYgKCFwaXBlX2N0eC0+cGxhbmVfcmVzLmh1YnAgfHwgcGlwZV9jdHgtPnBsYW5lX3Jlcy5o dWJwLT5wb3dlcl9nYXRlZCkKIAkJcmV0dXJuOwogCi0JcGxhbmVfYXRvbWljX2Rpc2FibGUoZGMs IHBpcGVfY3R4KTsKKwlkYy0+aHdzcy5wbGFuZV9hdG9taWNfZGlzYWJsZShkYywgcGlwZV9jdHgp OwogCiAJYXBwbHlfREVHVklEQ04xMF8yNTNfd2EoZGMpOwogCkBAIC0xMDY3LDkgKzEwODYsMTQg QEAgc3RhdGljIHZvaWQgZGNuMTBfaW5pdF9waXBlcyhzdHJ1Y3QgZGMgKmRjLCBzdHJ1Y3QgZGNf c3RhdGUgKmNvbnRleHQpCiAJCSAqIGNvbW1hbmQgdGFibGUuCiAJCSAqLwogCQlpZiAodGctPmZ1 bmNzLT5pc190Z19lbmFibGVkKHRnKSkgewotCQkJdGctPmZ1bmNzLT5sb2NrKHRnKTsKLQkJCXRn LT5mdW5jcy0+c2V0X2JsYW5rKHRnLCB0cnVlKTsKLQkJCWh3c3Nfd2FpdF9mb3JfYmxhbmtfY29t cGxldGUodGcpOworCQkJaWYgKGRjLT5od3NzLmluaXRfYmxhbmsgIT0gTlVMTCkgeworCQkJCWRj LT5od3NzLmluaXRfYmxhbmsoZGMsIHRnKTsKKwkJCQl0Zy0+ZnVuY3MtPmxvY2sodGcpOworCQkJ fSBlbHNlIHsKKwkJCQl0Zy0+ZnVuY3MtPmxvY2sodGcpOworCQkJCXRnLT5mdW5jcy0+c2V0X2Js YW5rKHRnLCB0cnVlKTsKKwkJCQlod3NzX3dhaXRfZm9yX2JsYW5rX2NvbXBsZXRlKHRnKTsKKwkJ CX0KIAkJfQogCX0KIApAQCAtMTExMywxMiArMTEzNywxMiBAQCBzdGF0aWMgdm9pZCBkY24xMF9p bml0X3BpcGVzKHN0cnVjdCBkYyAqZGMsIHN0cnVjdCBkY19zdGF0ZSAqY29udGV4dCkKIAkJZGMt PnJlc19wb29sLT5vcHBzW2ldLT5tcGNjX2Rpc2Nvbm5lY3RfcGVuZGluZ1twaXBlX2N0eC0+cGxh bmVfcmVzLm1wY2NfaW5zdF0gPSB0cnVlOwogCQlwaXBlX2N0eC0+c3RyZWFtX3Jlcy5vcHAgPSBk Yy0+cmVzX3Bvb2wtPm9wcHNbaV07CiAKLQkJaHdzczFfcGxhbmVfYXRvbWljX2Rpc2Nvbm5lY3Qo ZGMsIHBpcGVfY3R4KTsKKwkJZGMtPmh3c3MucGxhbmVfYXRvbWljX2Rpc2Nvbm5lY3QoZGMsIHBp cGVfY3R4KTsKIAogCQlpZiAodGctPmZ1bmNzLT5pc190Z19lbmFibGVkKHRnKSkKIAkJCXRnLT5m dW5jcy0+dW5sb2NrKHRnKTsKIAotCQlkY24xMF9kaXNhYmxlX3BsYW5lKGRjLCBwaXBlX2N0eCk7 CisJCWRjLT5od3NzLmRpc2FibGVfcGxhbmUoZGMsIHBpcGVfY3R4KTsKIAogCQlwaXBlX2N0eC0+ c3RyZWFtX3Jlcy50ZyA9IE5VTEw7CiAJCXBpcGVfY3R4LT5wbGFuZV9yZXMuaHVicCA9IE5VTEw7 CkBAIC0xMTM0LDggKzExNTgsMTcgQEAgc3RhdGljIHZvaWQgZGNuMTBfaW5pdF9odyhzdHJ1Y3Qg ZGMgKmRjKQogCXN0cnVjdCBkbWN1ICpkbWN1ID0gZGMtPnJlc19wb29sLT5kbWN1OwogCXN0cnVj dCBkY2VfaHdzZXEgKmh3cyA9IGRjLT5od3NlcTsKIAlzdHJ1Y3QgZGNfYmlvcyAqZGNiID0gZGMt PmN0eC0+ZGNfYmlvczsKKwlzdHJ1Y3QgcmVzb3VyY2VfcG9vbCAqcmVzX3Bvb2wgPSBkYy0+cmVz X3Bvb2w7CisKKwlpZiAoZGMtPmNsa19tZ3IgJiYgZGMtPmNsa19tZ3ItPmZ1bmNzLT5pbml0X2Ns b2NrcykKKwkJZGMtPmNsa19tZ3ItPmZ1bmNzLT5pbml0X2Nsb2NrcyhkYy0+Y2xrX21ncik7CisK KwkvLyBJbml0aWFsaXplIHRoZSBkY2NnCisJaWYgKGRjLT5yZXNfcG9vbC0+ZGNjZyAmJiBkYy0+ cmVzX3Bvb2wtPmRjY2ctPmZ1bmNzLT5kY2NnX2luaXQpCisJCWRjLT5yZXNfcG9vbC0+ZGNjZy0+ ZnVuY3MtPmRjY2dfaW5pdChyZXNfcG9vbC0+ZGNjZyk7CiAKIAlpZiAoSVNfRlBHQV9NQVhJTVVT X0RDKGRjLT5jdHgtPmRjZV9lbnZpcm9ubWVudCkpIHsKKwogCQlSRUdfV1JJVEUoUkVGQ0xLX0NO VEwsIDApOwogCQlSRUdfVVBEQVRFKERDSFVCQlVCX0dMT0JBTF9USU1FUl9DTlRMLCBEQ0hVQkJV Ql9HTE9CQUxfVElNRVJfRU5BQkxFLCAxKTsKIAkJUkVHX1dSSVRFKERJT19NRU1fUFdSX0NUUkws IDApOwpAQCAtMTE0OSwzMCArMTE4MiwzOSBAQCBzdGF0aWMgdm9pZCBkY24xMF9pbml0X2h3KHN0 cnVjdCBkYyAqZGMpCiAJCQlSRUdfVVBEQVRFKERDRkNMS19DTlRMLCBEQ0ZDTEtfR0FURV9ESVMs IDApOwogCQl9CiAKLQkJZW5hYmxlX3Bvd2VyX2dhdGluZ19wbGFuZShkYy0+aHdzZXEsIHRydWUp OworCQkvL0VuYWJsZSBhYmlsaXR5IHRvIHBvd2VyIGdhdGUgLyBkb24ndCBmb3JjZSBwb3dlciBv biBwZXJtYW5lbnRseQorCQlkYy0+aHdzcy5lbmFibGVfcG93ZXJfZ2F0aW5nX3BsYW5lKGh3cywg dHJ1ZSk7CiAKLQkJLyogZW5kIG9mIEZQR0EuIEJlbG93IGlmIHJlYWwgQVNJQyAqLwogCQlyZXR1 cm47CiAJfQogCiAJaWYgKCFkY2ItPmZ1bmNzLT5pc19hY2NlbGVyYXRlZF9tb2RlKGRjYikpIHsK LQkJYm9vbCBhbGxvd19zZWxmX2ZyZXNoX2ZvcmNlX2VuYWJsZSA9Ci0JCQlodWJ1YnUxX2lzX2Fs bG93X3NlbGZfcmVmcmVzaF9lbmFibGVkKAotCQkJCQkJZGMtPnJlc19wb29sLT5odWJidWIpOwot Ci0JCWJpb3NfZ29sZGVuX2luaXQoZGMpOwotCi0JCS8qIFdBIGZvciBtYWtpbmcgREYgc2xlZXAg d2hlbiBpZGxlIGFmdGVyIHJlc3VtZSBmcm9tIFMwaTMuCi0JCSAqIERDSFVCQlVCX0FSQl9BTExP V19TRUxGX1JFRlJFU0hfRk9SQ0VfRU5BQkxFIGlzIHNldCB0byAxIGJ5Ci0JCSAqIGNvbW1hbmQg dGFibGUsIGlmIERDSFVCQlVCX0FSQl9BTExPV19TRUxGX1JFRlJFU0hfRk9SQ0VfRU5BQkxFID0g MAotCQkgKiBiZWZvcmUgY2FsbGluZyBjb21tYW5kIHRhYmxlIGFuZCBpdCBjaGFuZ2VkIHRvIDEg YWZ0ZXIsCi0JCSAqIGl0IHNob3VsZCBiZSBzZXQgYmFjayB0byAwLgotCQkgKi8KLQkJaWYgKGFs bG93X3NlbGZfZnJlc2hfZm9yY2VfZW5hYmxlID09IGZhbHNlICYmCi0JCQkJaHVidWJ1MV9pc19h bGxvd19zZWxmX3JlZnJlc2hfZW5hYmxlZChkYy0+cmVzX3Bvb2wtPmh1YmJ1YikpCi0JCQlodWJi dWIxX2FsbG93X3NlbGZfcmVmcmVzaF9jb250cm9sKGRjLT5yZXNfcG9vbC0+aHViYnViLCB0cnVl KTsKLQotCQlkaXNhYmxlX3ZnYShkYy0+aHdzZXEpOworCQlkYy0+aHdzcy5iaW9zX2dvbGRlbl9p bml0KGRjKTsKKwkJaWYgKGRjLT5jdHgtPmRjX2Jpb3MtPmZ3X2luZm9fdmFsaWQpIHsKKwkJCXJl c19wb29sLT5yZWZfY2xvY2tzLnh0YWxpbl9jbG9ja19pbktoeiA9CisJCQkJCWRjLT5jdHgtPmRj X2Jpb3MtPmZ3X2luZm8ucGxsX2luZm8uY3J5c3RhbF9mcmVxdWVuY3k7CisKKwkJCWlmICghSVNf RlBHQV9NQVhJTVVTX0RDKGRjLT5jdHgtPmRjZV9lbnZpcm9ubWVudCkpIHsKKwkJCQlpZiAocmVz X3Bvb2wtPmRjY2cgJiYgcmVzX3Bvb2wtPmh1YmJ1YikgeworCisJCQkJCShyZXNfcG9vbC0+ZGNj Zy0+ZnVuY3MtPmdldF9kY2NnX3JlZl9mcmVxKShyZXNfcG9vbC0+ZGNjZywKKwkJCQkJCQlkYy0+ Y3R4LT5kY19iaW9zLT5md19pbmZvLnBsbF9pbmZvLmNyeXN0YWxfZnJlcXVlbmN5LAorCQkJCQkJ CSZyZXNfcG9vbC0+cmVmX2Nsb2Nrcy5kY2NnX3JlZl9jbG9ja19pbktoeik7CisKKwkJCQkJKHJl c19wb29sLT5odWJidWItPmZ1bmNzLT5nZXRfZGNodWJfcmVmX2ZyZXEpKHJlc19wb29sLT5odWJi dWIsCisJCQkJCQkJcmVzX3Bvb2wtPnJlZl9jbG9ja3MuZGNjZ19yZWZfY2xvY2tfaW5LaHosCisJ CQkJCQkJJnJlc19wb29sLT5yZWZfY2xvY2tzLmRjaHViX3JlZl9jbG9ja19pbktoeik7CisJCQkJ fSBlbHNlIHsKKwkJCQkJLy8gTm90IGFsbCBBU0lDcyBoYXZlIERDQ0cgc3cgY29tcG9uZW50CisJ CQkJCXJlc19wb29sLT5yZWZfY2xvY2tzLmRjY2dfcmVmX2Nsb2NrX2luS2h6ID0KKwkJCQkJCQly ZXNfcG9vbC0+cmVmX2Nsb2Nrcy54dGFsaW5fY2xvY2tfaW5LaHo7CisJCQkJCXJlc19wb29sLT5y ZWZfY2xvY2tzLmRjaHViX3JlZl9jbG9ja19pbktoeiA9CisJCQkJCQkJcmVzX3Bvb2wtPnJlZl9j bG9ja3MueHRhbGluX2Nsb2NrX2luS2h6OworCQkJCX0KKwkJCX0KKwkJfSBlbHNlCisJCQlBU1NF UlRfQ1JJVElDQUwoZmFsc2UpOworCQlkYy0+aHdzcy5kaXNhYmxlX3ZnYShkYy0+aHdzZXEpOwog CX0KIAogCWZvciAoaSA9IDA7IGkgPCBkYy0+bGlua19jb3VudDsgaSsrKSB7CkBAIC0xMTkwLDYg KzEyMzIsMTMgQEAgc3RhdGljIHZvaWQgZGNuMTBfaW5pdF9odyhzdHJ1Y3QgZGMgKmRjKQogCQkJ bGluay0+bGlua19zdGF0dXMubGlua19hY3RpdmUgPSB0cnVlOwogCX0KIAorCS8qIFBvd2VyIGdh dGUgRFNDcyAqLworI2lmZGVmIENPTkZJR19EUk1fQU1EX0RDX0RTQ19TVVBQT1JUCisJZm9yIChp ID0gMDsgaSA8IHJlc19wb29sLT5yZXNfY2FwLT5udW1fZHNjOyBpKyspCisJCWlmIChkYy0+aHdz cy5kc2NfcGdfY29udHJvbCAhPSBOVUxMKQorCQkJZGMtPmh3c3MuZHNjX3BnX2NvbnRyb2woaHdz LCByZXNfcG9vbC0+ZHNjc1tpXS0+aW5zdCwgZmFsc2UpOworI2VuZGlmCisKIAkvKiBJZiB0YWtp bmcgY29udHJvbCBvdmVyIGZyb20gVkJJT1MsIHdlIG1heSB3YW50IHRvIG9wdGltaXplIG91ciBm aXJzdAogCSAqIG1vZGUgc2V0LCBzbyB3ZSBuZWVkIHRvIHNraXAgcG93ZXJpbmcgZG93biBwaXBl cyB1bnRpbCB3ZSBrbm93IHdoaWNoCiAJICogcGlwZXMgd2Ugd2FudCB0byB1c2UuCkBAIC0xMTk4 LDEwICsxMjQ3LDIxIEBAIHN0YXRpYyB2b2lkIGRjbjEwX2luaXRfaHcoc3RydWN0IGRjICpkYykK IAkgKi8KIAlpZiAoZGNiLT5mdW5jcy0+aXNfYWNjZWxlcmF0ZWRfbW9kZShkY2IpIHx8IGRjLT5j b25maWcucG93ZXJfZG93bl9kaXNwbGF5X29uX2Jvb3QpIHsKIAkJZGMtPmh3c3MuaW5pdF9waXBl cyhkYywgZGMtPmN1cnJlbnRfc3RhdGUpOworCQlmb3IgKGkgPSAwOyBpIDwgcmVzX3Bvb2wtPnBp cGVfY291bnQ7IGkrKykgeworCQkJc3RydWN0IGh1YnAgKmh1YnAgPSByZXNfcG9vbC0+aHVicHNb aV07CisJCQlzdHJ1Y3QgZHBwICpkcHAgPSByZXNfcG9vbC0+ZHBwc1tpXTsKKworCQkJaHVicC0+ ZnVuY3MtPmh1YnBfaW5pdChodWJwKTsKKwkJCXJlc19wb29sLT5vcHBzW2ldLT5tcGNfdHJlZV9w YXJhbXMub3BwX2lkID0gcmVzX3Bvb2wtPm9wcHNbaV0tPmluc3Q7CisJCQlkYy0+aHdzcy5wbGFu ZV9hdG9taWNfcG93ZXJfZG93bihkYywgZHBwLCBodWJwKTsKKwkJfQorCisJCWFwcGx5X0RFR1ZJ RENOMTBfMjUzX3dhKGRjKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGMtPnJlc19wb29sLT5h dWRpb19jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBhdWRpbyAqYXVkaW8gPSBkYy0+cmVzX3Bvb2wt PmF1ZGlvc1tpXTsKKworCWZvciAoaSA9IDA7IGkgPCByZXNfcG9vbC0+YXVkaW9fY291bnQ7IGkr KykgeworCQlzdHJ1Y3QgYXVkaW8gKmF1ZGlvID0gcmVzX3Bvb2wtPmF1ZGlvc1tpXTsKIAogCQlh dWRpby0+ZnVuY3MtPmh3X2luaXQoYXVkaW8pOwogCX0KQEAgLTEyMjksNyArMTI4OSw3IEBAIHN0 YXRpYyB2b2lkIGRjbjEwX2luaXRfaHcoc3RydWN0IGRjICpkYykKIAkJUkVHX1VQREFURShEQ0ZD TEtfQ05UTCwgRENGQ0xLX0dBVEVfRElTLCAwKTsKIAl9CiAKLQllbmFibGVfcG93ZXJfZ2F0aW5n X3BsYW5lKGRjLT5od3NlcSwgdHJ1ZSk7CisJZGMtPmh3c3MuZW5hYmxlX3Bvd2VyX2dhdGluZ19w bGFuZShkYy0+aHdzZXEsIHRydWUpOwogCiAJbWVtc2V0KCZkYy0+Y2xrX21nci0+Y2xrcywgMCwg c2l6ZW9mKGRjLT5jbGtfbWdyLT5jbGtzKSk7CiB9CkBAIC0xNzg4LDcgKzE4NDgsNyBAQCBzdGF0 aWMgdm9pZCBkY24xMF9lbmFibGVfcGxhbmUoCiAJfQogfQogCi1zdGF0aWMgdm9pZCBwcm9ncmFt X2dhbXV0X3JlbWFwKHN0cnVjdCBwaXBlX2N0eCAqcGlwZV9jdHgpCitzdGF0aWMgdm9pZCBkY24x MF9wcm9ncmFtX2dhbXV0X3JlbWFwKHN0cnVjdCBwaXBlX2N0eCAqcGlwZV9jdHgpCiB7CiAJaW50 IGkgPSAwOwogCXN0cnVjdCBkcHBfZ3JwaF9jc2NfYWRqdXN0bWVudCBhZGp1c3Q7CkBAIC0yMjE5 LDcgKzIyNzksNyBAQCB2b2lkIHVwZGF0ZV9kY2h1YnBfZHBwKAogCiAJaWYgKHBsYW5lX3N0YXRl LT51cGRhdGVfZmxhZ3MuYml0cy5mdWxsX3VwZGF0ZSkgewogCQkvKmdhbXV0IHJlbWFwKi8KLQkJ cHJvZ3JhbV9nYW11dF9yZW1hcChwaXBlX2N0eCk7CisJCWRjLT5od3NzLnByb2dyYW1fZ2FtdXRf cmVtYXAocGlwZV9jdHgpOwogCiAJCWRjLT5od3NzLnByb2dyYW1fb3V0cHV0X2NzYyhkYywKIAkJ CQlwaXBlX2N0eCwKQEAgLTI0NTYsNyArMjUxNiw3IEBAIHN0YXRpYyB2b2lkIGRjbjEwX2FwcGx5 X2N0eF9mb3Jfc3VyZmFjZSgKIAkJCWlmIChvbGRfcGlwZV9jdHgtPnN0cmVhbV9yZXMudGcgPT0g dGcgJiYKIAkJCSAgICBvbGRfcGlwZV9jdHgtPnBsYW5lX3Jlcy5odWJwICYmCiAJCQkgICAgb2xk X3BpcGVfY3R4LT5wbGFuZV9yZXMuaHVicC0+b3BwX2lkICE9IE9QUF9JRF9JTlZBTElEKQotCQkJ CWRjbjEwX2Rpc2FibGVfcGxhbmUoZGMsIG9sZF9waXBlX2N0eCk7CisJCQkJZGMtPmh3c3MuZGlz YWJsZV9wbGFuZShkYywgb2xkX3BpcGVfY3R4KTsKIAkJfQogCiAJCWlmICgoIXBpcGVfY3R4LT5w bGFuZV9zdGF0ZSB8fApAQCAtMjUwNCw3ICsyNTY0LDcgQEAgc3RhdGljIHZvaWQgZGNuMTBfYXBw bHlfY3R4X2Zvcl9zdXJmYWNlKAogCiAJZm9yIChpID0gMDsgaSA8IGRjLT5yZXNfcG9vbC0+cGlw ZV9jb3VudDsgaSsrKQogCQlpZiAocmVtb3ZlZF9waXBlW2ldKQotCQkJZGNuMTBfZGlzYWJsZV9w bGFuZShkYywgJmRjLT5jdXJyZW50X3N0YXRlLT5yZXNfY3R4LnBpcGVfY3R4W2ldKTsKKwkJCWRj LT5od3NzLmRpc2FibGVfcGxhbmUoZGMsICZkYy0+Y3VycmVudF9zdGF0ZS0+cmVzX2N0eC5waXBl X2N0eFtpXSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGMtPnJlc19wb29sLT5waXBlX2NvdW50OyBp KyspCiAJCWlmIChyZW1vdmVkX3BpcGVbaV0pIHsKQEAgLTI1OTYsNyArMjY1Niw3IEBAIHN0YXRp YyB2b2lkIGRjbjEwX29wdGltaXplX2JhbmR3aWR0aCgKIAkJZGNuMTBfdmVyaWZ5X2FsbG93X3Bz dGF0ZV9jaGFuZ2VfaGlnaChkYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9kcnIoc3RydWN0IHBp cGVfY3R4ICoqcGlwZV9jdHgsCitzdGF0aWMgdm9pZCBkY24xMF9zZXRfZHJyKHN0cnVjdCBwaXBl X2N0eCAqKnBpcGVfY3R4LAogCQlpbnQgbnVtX3BpcGVzLCBpbnQgdm1pbiwgaW50IHZtYXgpCiB7 CiAJaW50IGkgPSAwOwpAQCAtMjYyMSw3ICsyNjgxLDcgQEAgc3RhdGljIHZvaWQgc2V0X2Rycihz dHJ1Y3QgcGlwZV9jdHggKipwaXBlX2N0eCwKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdldF9wb3Np dGlvbihzdHJ1Y3QgcGlwZV9jdHggKipwaXBlX2N0eCwKK3N0YXRpYyB2b2lkIGRjbjEwX2dldF9w b3NpdGlvbihzdHJ1Y3QgcGlwZV9jdHggKipwaXBlX2N0eCwKIAkJaW50IG51bV9waXBlcywKIAkJ c3RydWN0IGNydGNfcG9zaXRpb24gKnBvc2l0aW9uKQogewpAQCAtMjYzMyw3ICsyNjkzLDcgQEAg c3RhdGljIHZvaWQgZ2V0X3Bvc2l0aW9uKHN0cnVjdCBwaXBlX2N0eCAqKnBpcGVfY3R4LAogCQlw aXBlX2N0eFtpXS0+c3RyZWFtX3Jlcy50Zy0+ZnVuY3MtPmdldF9wb3NpdGlvbihwaXBlX2N0eFtp XS0+c3RyZWFtX3Jlcy50ZywgcG9zaXRpb24pOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc3RhdGlj X3NjcmVlbl9jb250cm9sKHN0cnVjdCBwaXBlX2N0eCAqKnBpcGVfY3R4LAorc3RhdGljIHZvaWQg ZGNuMTBfc2V0X3N0YXRpY19zY3JlZW5fY29udHJvbChzdHJ1Y3QgcGlwZV9jdHggKipwaXBlX2N0 eCwKIAkJaW50IG51bV9waXBlcywgY29uc3Qgc3RydWN0IGRjX3N0YXRpY19zY3JlZW5fZXZlbnRz ICpldmVudHMpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0zMTI0LDcgKzMxODQsNyBAQCBzdGF0 aWMgdm9pZCBkY24xMF9nZXRfY2xvY2soc3RydWN0IGRjICpkYywKIH0KIAogc3RhdGljIGNvbnN0 IHN0cnVjdCBod19zZXF1ZW5jZXJfZnVuY3MgZGNuMTBfZnVuY3MgPSB7Ci0JLnByb2dyYW1fZ2Ft dXRfcmVtYXAgPSBwcm9ncmFtX2dhbXV0X3JlbWFwLAorCS5wcm9ncmFtX2dhbXV0X3JlbWFwID0g ZGNuMTBfcHJvZ3JhbV9nYW11dF9yZW1hcCwKIAkuaW5pdF9odyA9IGRjbjEwX2luaXRfaHcsCiAJ LmluaXRfcGlwZXMgPSBkY24xMF9pbml0X3BpcGVzLAogCS5hcHBseV9jdHhfdG9faHcgPSBkY2Ux MTBfYXBwbHlfY3R4X3RvX2h3LApAQCAtMzE1NywxOCArMzIxNywxOCBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGh3X3NlcXVlbmNlcl9mdW5jcyBkY24xMF9mdW5jcyA9IHsKIAkub3B0aW1pemVfYmFu ZHdpZHRoID0gZGNuMTBfb3B0aW1pemVfYmFuZHdpZHRoLAogCS5yZXNldF9od19jdHhfd3JhcCA9 IGRjbjEwX3Jlc2V0X2h3X2N0eF93cmFwLAogCS5lbmFibGVfc3RyZWFtX3RpbWluZyA9IGRjbjEw X2VuYWJsZV9zdHJlYW1fdGltaW5nLAotCS5zZXRfZHJyID0gc2V0X2RyciwKLQkuZ2V0X3Bvc2l0 aW9uID0gZ2V0X3Bvc2l0aW9uLAotCS5zZXRfc3RhdGljX3NjcmVlbl9jb250cm9sID0gc2V0X3N0 YXRpY19zY3JlZW5fY29udHJvbCwKKwkuc2V0X2RyciA9IGRjbjEwX3NldF9kcnIsCisJLmdldF9w b3NpdGlvbiA9IGRjbjEwX2dldF9wb3NpdGlvbiwKKwkuc2V0X3N0YXRpY19zY3JlZW5fY29udHJv bCA9IGRjbjEwX3NldF9zdGF0aWNfc2NyZWVuX2NvbnRyb2wsCiAJLnNldHVwX3N0ZXJlbyA9IGRj bjEwX3NldHVwX3N0ZXJlbywKIAkuc2V0X2F2bXV0ZSA9IGRjZTExMF9zZXRfYXZtdXRlLAogCS5s b2dfaHdfc3RhdGUgPSBkY24xMF9sb2dfaHdfc3RhdGUsCiAJLmdldF9od19zdGF0ZSA9IGRjbjEw X2dldF9od19zdGF0ZSwKIAkuY2xlYXJfc3RhdHVzX2JpdHMgPSBkY24xMF9jbGVhcl9zdGF0dXNf Yml0cywKIAkud2FpdF9mb3JfbXBjY19kaXNjb25uZWN0ID0gZGNuMTBfd2FpdF9mb3JfbXBjY19k aXNjb25uZWN0LAotCS5lZHBfYmFja2xpZ2h0X2NvbnRyb2wgPSBod3NzX2VkcF9iYWNrbGlnaHRf Y29udHJvbCwKLQkuZWRwX3Bvd2VyX2NvbnRyb2wgPSBod3NzX2VkcF9wb3dlcl9jb250cm9sLAot CS5lZHBfd2FpdF9mb3JfaHBkX3JlYWR5ID0gaHdzc19lZHBfd2FpdF9mb3JfaHBkX3JlYWR5LAor CS5lZHBfYmFja2xpZ2h0X2NvbnRyb2wgPSBkY2UxMTBfZWRwX2JhY2tsaWdodF9jb250cm9sLAor CS5lZHBfcG93ZXJfY29udHJvbCA9IGRjZTExMF9lZHBfcG93ZXJfY29udHJvbCwKKwkuZWRwX3dh aXRfZm9yX2hwZF9yZWFkeSA9IGRjZTExMF9lZHBfd2FpdF9mb3JfaHBkX3JlYWR5LAogCS5zZXRf Y3Vyc29yX3Bvc2l0aW9uID0gZGNuMTBfc2V0X2N1cnNvcl9wb3NpdGlvbiwKIAkuc2V0X2N1cnNv cl9hdHRyaWJ1dGUgPSBkY24xMF9zZXRfY3Vyc29yX2F0dHJpYnV0ZSwKIAkuc2V0X2N1cnNvcl9z ZHJfd2hpdGVfbGV2ZWwgPSBkY24xMF9zZXRfY3Vyc29yX3Nkcl93aGl0ZV9sZXZlbCwKQEAgLTMx NzgsNiArMzIzOCwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3X3NlcXVlbmNlcl9mdW5jcyBk Y24xMF9mdW5jcyA9IHsKIAkuc2V0dXBfdnVwZGF0ZV9pbnRlcnJ1cHQgPSBkY24xMF9zZXR1cF92 dXBkYXRlX2ludGVycnVwdCwKIAkuc2V0X2Nsb2NrID0gZGNuMTBfc2V0X2Nsb2NrLAogCS5nZXRf Y2xvY2sgPSBkY24xMF9nZXRfY2xvY2ssCisJLmRpZF91bmRlcmZsb3dfb2NjdXIgPSBkY24xMF9k aWRfdW5kZXJmbG93X29jY3VyLAorCS5pbml0X2JsYW5rID0gTlVMTCwKKwkuZGlzYWJsZV92Z2Eg PSBkY24xMF9kaXNhYmxlX3ZnYSwKKwkuYmlvc19nb2xkZW5faW5pdCA9IGRjbjEwX2Jpb3NfZ29s ZGVuX2luaXQsCisJLnBsYW5lX2F0b21pY19kaXNhYmxlID0gZGNuMTBfcGxhbmVfYXRvbWljX2Rp c2FibGUsCisJLnBsYW5lX2F0b21pY19wb3dlcl9kb3duID0gZGNuMTBfcGxhbmVfYXRvbWljX3Bv d2VyX2Rvd24sCisJLmVuYWJsZV9wb3dlcl9nYXRpbmdfcGxhbmUgPSBkY24xMF9lbmFibGVfcG93 ZXJfZ2F0aW5nX3BsYW5lLAorCS5kcHBfcGdfY29udHJvbCA9IGRjbjEwX2RwcF9wZ19jb250cm9s LAorCS5odWJwX3BnX2NvbnRyb2wgPSBkY24xMF9odWJwX3BnX2NvbnRyb2wsCisJLmRzY19wZ19j b250cm9sID0gTlVMTCwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2RjL2RjbjIwL2RjbjIwX2h1YmJ1Yi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2RjL2RjbjIwL2RjbjIwX2h1YmJ1Yi5jCmluZGV4IDMxZDZlNzliYTJiOC4uY2QxMDFiYmQ4 MTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNuMjAvZGNu MjBfaHViYnViLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjIwL2Rj bjIwX2h1YmJ1Yi5jCkBAIC01ODIsNyArNTgyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBodWJi dWJfZnVuY3MgaHViYnViMl9mdW5jcyA9IHsKIAkuZ2V0X2RjY19jb21wcmVzc2lvbl9jYXAgPSBo dWJidWIyX2dldF9kY2NfY29tcHJlc3Npb25fY2FwLAogCS53bV9yZWFkX3N0YXRlID0gaHViYnVi Ml93bV9yZWFkX3N0YXRlLAogCS5nZXRfZGNodWJfcmVmX2ZyZXEgPSBodWJidWIyX2dldF9kY2h1 Yl9yZWZfZnJlcSwKLQkucHJvZ3JhbV93YXRlcm1hcmtzID0gaHViYnViMl9wcm9ncmFtX3dhdGVy bWFya3MsCisJLnByb2dyYW1fd2F0ZXJtYXJrcyA9IGh1YmJ1YjJfcHJvZ3JhbV93YXRlcm1hcmtz CiB9OwogCiB2b2lkIGh1YmJ1YjJfY29uc3RydWN0KHN0cnVjdCBkY24yMF9odWJidWIgKmh1YmJ1 YiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24yMC9kY24y MF9od3NlcS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjbjIwL2RjbjIwX2h3 c2VxLmMKaW5kZXggYzExZGU2ZjBmZTVjLi5jMzYzNWY1Y2Q5OTAgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24yMC9kY24yMF9od3NlcS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY24yMC9kY24yMF9od3NlcS5jCkBAIC02NCwyMyAr NjQsNyBAQAogI2RlZmluZSBGTihyZWdfbmFtZSwgZmllbGRfbmFtZSkgXAogCWh3cy0+c2hpZnRz LT5maWVsZF9uYW1lLCBod3MtPm1hc2tzLT5maWVsZF9uYW1lCiAKLXN0YXRpYyB2b2lkIGJpb3Nf Z29sZGVuX2luaXQoc3RydWN0IGRjICpkYykKLXsKLQlzdHJ1Y3QgZGNfYmlvcyAqYnAgPSBkYy0+ Y3R4LT5kY19iaW9zOwotCWludCBpOwotCi0JLyogaW5pdGlhbGl6ZSBkY24gZ2xvYmFsICovCi0J YnAtPmZ1bmNzLT5lbmFibGVfZGlzcF9wb3dlcl9nYXRpbmcoYnAsCi0JCQlDT05UUk9MTEVSX0lE X0QwLCBBU0lDX1BJUEVfSU5JVCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGMtPnJlc19wb29sLT5w aXBlX2NvdW50OyBpKyspIHsKLQkJLyogaW5pdGlhbGl6ZSBkY24gcGVyIHBpcGUgKi8KLQkJYnAt PmZ1bmNzLT5lbmFibGVfZGlzcF9wb3dlcl9nYXRpbmcoYnAsCi0JCQkJQ09OVFJPTExFUl9JRF9E MCArIGksIEFTSUNfUElQRV9ESVNBQkxFKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9w b3dlcl9nYXRpbmdfcGxhbmUoCitzdGF0aWMgdm9pZCBkY24yMF9lbmFibGVfcG93ZXJfZ2F0aW5n X3BsYW5lKAogCXN0cnVjdCBkY2VfaHdzZXEgKmh3cywKIAlib29sIGVuYWJsZSkKIHsKQEAgLTE4 NCw3ICsxNjgsNyBAQCB2b2lkIGRjbjIwX2Rpc3BsYXlfaW5pdChzdHJ1Y3QgZGMgKmRjKQogCVJF R19XUklURShBWkFMSUFfQ09OVFJPTExFUl9DTE9DS19HQVRJTkcsIDB4MSk7CiB9CiAKLXN0YXRp YyB2b2lkIGRpc2FibGVfdmdhKAordm9pZCBkY24yMF9kaXNhYmxlX3ZnYSgKIAlzdHJ1Y3QgZGNl X2h3c2VxICpod3MpCiB7CiAJUkVHX1dSSVRFKEQxVkdBX0NPTlRST0wsIDApOwpAQCAtNDg3LDI5 ICs0NzEsNiBAQCBzdGF0aWMgdm9pZCBkY24yMF9odWJwX3BnX2NvbnRyb2woCiB9CiAKIAotCi1z dGF0aWMgdm9pZCBkY24yMF9wbGFuZV9hdG9taWNfcG93ZXJfZG93bihzdHJ1Y3QgZGMgKmRjLCBz dHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4KQotewotCXN0cnVjdCBkY2VfaHdzZXEgKmh3cyA9IGRj LT5od3NlcTsKLQlzdHJ1Y3QgZHBwICpkcHAgPSBwaXBlX2N0eC0+cGxhbmVfcmVzLmRwcDsKLQot CURDX0xPR0dFUl9JTklUKGRjLT5jdHgtPmxvZ2dlcik7Ci0KLQlpZiAoUkVHKERDX0lQX1JFUVVF U1RfQ05UTCkpIHsKLQkJUkVHX1NFVChEQ19JUF9SRVFVRVNUX0NOVEwsIDAsCi0JCQkJSVBfUkVR VUVTVF9FTiwgMSk7Ci0JCWRjbjIwX2RwcF9wZ19jb250cm9sKGh3cywgZHBwLT5pbnN0LCBmYWxz ZSk7Ci0JCWRjbjIwX2h1YnBfcGdfY29udHJvbChod3MsIHBpcGVfY3R4LT5wbGFuZV9yZXMuaHVi cC0+aW5zdCwgZmFsc2UpOwotCQlkcHAtPmZ1bmNzLT5kcHBfcmVzZXQoZHBwKTsKLQkJUkVHX1NF VChEQ19JUF9SRVFVRVNUX0NOVEwsIDAsCi0JCQkJSVBfUkVRVUVTVF9FTiwgMCk7Ci0JCURDX0xP R19ERUJVRygKLQkJCQkiUG93ZXIgZ2F0ZWQgZnJvbnQgZW5kICVkXG4iLCBwaXBlX2N0eC0+cGlw ZV9pZHgpOwotCX0KLX0KLQotCi0KIC8qIGRpc2FibGUgSFcgdXNlZCBieSBwbGFuZS4KICAqIG5v dGU6ICBjYW5ub3QgZGlzYWJsZSB1bnRpbCBkaXNjb25uZWN0IGlzIGNvbXBsZXRlCiAgKi8KQEAg LTUzNSw3ICs0OTYsOSBAQCBzdGF0aWMgdm9pZCBkY24yMF9wbGFuZV9hdG9taWNfZGlzYWJsZShz dHJ1Y3QgZGMgKmRjLCBzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4KQogCWh1YnAtPnBvd2VyX2dh dGVkID0gdHJ1ZTsKIAlkYy0+b3B0aW1pemVkX3JlcXVpcmVkID0gZmFsc2U7IC8qIFdlJ3JlIHBv d2VyaW5nIG9mZiwgbm8gbmVlZCB0byBvcHRpbWl6ZSAqLwogCi0JZGNuMjBfcGxhbmVfYXRvbWlj X3Bvd2VyX2Rvd24oZGMsIHBpcGVfY3R4KTsKKwlkYy0+aHdzcy5wbGFuZV9hdG9taWNfcG93ZXJf ZG93bihkYywKKwkJCXBpcGVfY3R4LT5wbGFuZV9yZXMuZHBwLAorCQkJcGlwZV9jdHgtPnBsYW5l X3Jlcy5odWJwKTsKIAogCXBpcGVfY3R4LT5zdHJlYW0gPSBOVUxMOwogCW1lbXNldCgmcGlwZV9j dHgtPnN0cmVhbV9yZXMsIDAsIHNpemVvZihwaXBlX2N0eC0+c3RyZWFtX3JlcykpOwpAQCAtNTU5 LDIwNCArNTIyLDYgQEAgdm9pZCBkY24yMF9kaXNhYmxlX3BsYW5lKHN0cnVjdCBkYyAqZGMsIHN0 cnVjdCBwaXBlX2N0eCAqcGlwZV9jdHgpCiAJCQkJCXBpcGVfY3R4LT5waXBlX2lkeCk7CiB9CiAK LXN0YXRpYyB2b2lkIGRjbjIwX2luaXRfaHcoc3RydWN0IGRjICpkYykKLXsKLQlpbnQgaSwgajsK LQlzdHJ1Y3QgYWJtICphYm0gPSBkYy0+cmVzX3Bvb2wtPmFibTsKLQlzdHJ1Y3QgZG1jdSAqZG1j dSA9IGRjLT5yZXNfcG9vbC0+ZG1jdTsKLQlzdHJ1Y3QgZGNlX2h3c2VxICpod3MgPSBkYy0+aHdz ZXE7Ci0Jc3RydWN0IGRjX2Jpb3MgKmRjYiA9IGRjLT5jdHgtPmRjX2Jpb3M7Ci0Jc3RydWN0IHJl c291cmNlX3Bvb2wgKnJlc19wb29sID0gZGMtPnJlc19wb29sOwotCXN0cnVjdCBkY19zdGF0ZSAg KmNvbnRleHQgPSBkYy0+Y3VycmVudF9zdGF0ZTsKLQotCWlmIChkYy0+Y2xrX21nciAmJiBkYy0+ Y2xrX21nci0+ZnVuY3MtPmluaXRfY2xvY2tzKQotCQlkYy0+Y2xrX21nci0+ZnVuY3MtPmluaXRf Y2xvY2tzKGRjLT5jbGtfbWdyKTsKLQotCS8vIEluaXRpYWxpemUgdGhlIGRjY2cKLQlpZiAocmVz X3Bvb2wtPmRjY2ctPmZ1bmNzLT5kY2NnX2luaXQpCi0JCXJlc19wb29sLT5kY2NnLT5mdW5jcy0+ ZGNjZ19pbml0KHJlc19wb29sLT5kY2NnKTsKLQotCS8vRW5hYmxlIGFiaWxpdHkgdG8gcG93ZXIg Z2F0ZSAvIGRvbid0IGZvcmNlIHBvd2VyIG9uIHBlcm1hbmVudGx5Ci0JZW5hYmxlX3Bvd2VyX2dh dGluZ19wbGFuZShkYy0+aHdzZXEsIHRydWUpOwotCi0JaWYgKElTX0ZQR0FfTUFYSU1VU19EQyhk Yy0+Y3R4LT5kY2VfZW52aXJvbm1lbnQpKSB7Ci0JCVJFR19XUklURShSQkJNSUZfVElNRU9VVF9E SVMsIDB4RkZGRkZGRkYpOwotCQlSRUdfV1JJVEUoUkJCTUlGX1RJTUVPVVRfRElTXzIsIDB4RkZG RkZGRkYpOwotCi0JCWRjbjIwX2RjY2dfaW5pdChod3MpOwotCi0JCVJFR19VUERBVEUoRENIVUJC VUJfR0xPQkFMX1RJTUVSX0NOVEwsIERDSFVCQlVCX0dMT0JBTF9USU1FUl9SRUZESVYsIDIpOwot CQlSRUdfVVBEQVRFKERDSFVCQlVCX0dMT0JBTF9USU1FUl9DTlRMLCBEQ0hVQkJVQl9HTE9CQUxf VElNRVJfRU5BQkxFLCAxKTsKLQkJUkVHX1dSSVRFKFJFRkNMS19DTlRMLCAwKTsKLQl9IGVsc2Ug ewotCQlpZiAoIWRjYi0+ZnVuY3MtPmlzX2FjY2VsZXJhdGVkX21vZGUoZGNiKSkgewotCQkJYmlv c19nb2xkZW5faW5pdChkYyk7Ci0JCQlpZiAoZGMtPmN0eC0+ZGNfYmlvcy0+ZndfaW5mb192YWxp ZCkgewotCQkJCXJlc19wb29sLT5yZWZfY2xvY2tzLnh0YWxpbl9jbG9ja19pbktoeiA9Ci0JCQkJ CQlkYy0+Y3R4LT5kY19iaW9zLT5md19pbmZvLnBsbF9pbmZvLmNyeXN0YWxfZnJlcXVlbmN5Owot Ci0JCQkJaWYgKCFJU19GUEdBX01BWElNVVNfREMoZGMtPmN0eC0+ZGNlX2Vudmlyb25tZW50KSkg ewotCQkJCQlpZiAocmVzX3Bvb2wtPmRjY2cgJiYgcmVzX3Bvb2wtPmh1YmJ1YikgewotCi0JCQkJ CQkocmVzX3Bvb2wtPmRjY2ctPmZ1bmNzLT5nZXRfZGNjZ19yZWZfZnJlcSkocmVzX3Bvb2wtPmRj Y2csCi0JCQkJCQkJCWRjLT5jdHgtPmRjX2Jpb3MtPmZ3X2luZm8ucGxsX2luZm8uY3J5c3RhbF9m cmVxdWVuY3ksCi0JCQkJCQkJCSZyZXNfcG9vbC0+cmVmX2Nsb2Nrcy5kY2NnX3JlZl9jbG9ja19p bktoeik7Ci0KLQkJCQkJCShyZXNfcG9vbC0+aHViYnViLT5mdW5jcy0+Z2V0X2RjaHViX3JlZl9m cmVxKShyZXNfcG9vbC0+aHViYnViLAotCQkJCQkJCQlyZXNfcG9vbC0+cmVmX2Nsb2Nrcy5kY2Nn X3JlZl9jbG9ja19pbktoeiwKLQkJCQkJCQkJJnJlc19wb29sLT5yZWZfY2xvY2tzLmRjaHViX3Jl Zl9jbG9ja19pbktoeik7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvLyBOb3QgYWxsIEFTSUNzIGhh dmUgRENDRyBzdyBjb21wb25lbnQKLQkJCQkJCXJlc19wb29sLT5yZWZfY2xvY2tzLmRjY2dfcmVm X2Nsb2NrX2luS2h6ID0KLQkJCQkJCQkJcmVzX3Bvb2wtPnJlZl9jbG9ja3MueHRhbGluX2Nsb2Nr X2luS2h6OwotCQkJCQkJcmVzX3Bvb2wtPnJlZl9jbG9ja3MuZGNodWJfcmVmX2Nsb2NrX2luS2h6 ID0KLQkJCQkJCQkJcmVzX3Bvb2wtPnJlZl9jbG9ja3MueHRhbGluX2Nsb2NrX2luS2h6OwotCQkJ CQl9Ci0JCQkJfQotCQkJfSBlbHNlCi0JCQkJQVNTRVJUX0NSSVRJQ0FMKGZhbHNlKTsKLQkJCWRp c2FibGVfdmdhKGRjLT5od3NlcSk7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgZGMtPmxpbmtf Y291bnQ7IGkrKykgewotCQkJLyogUG93ZXIgdXAgQU5EIHVwZGF0ZSBpbXBsZW1lbnRhdGlvbiBh Y2NvcmRpbmcgdG8gdGhlCi0JCQkgKiByZXF1aXJlZCBzaWduYWwgKHdoaWNoIG1heSBiZSBkaWZm ZXJlbnQgZnJvbSB0aGUKLQkJCSAqIGRlZmF1bHQgc2lnbmFsIG9uIGNvbm5lY3RvcikuCi0JCQkg Ki8KLQkJCXN0cnVjdCBkY19saW5rICpsaW5rID0gZGMtPmxpbmtzW2ldOwotCi0JCQlsaW5rLT5s aW5rX2VuYy0+ZnVuY3MtPmh3X2luaXQobGluay0+bGlua19lbmMpOwotCQl9Ci0JfQotCi0jaWZk ZWYgQ09ORklHX0RSTV9BTURfRENfRFNDX1NVUFBPUlQKLQkvKiBQb3dlciBnYXRlIERTQ3MgKi8K LQlmb3IgKGkgPSAwOyBpIDwgcmVzX3Bvb2wtPnJlc19jYXAtPm51bV9kc2M7IGkrKykKLQkJZGNu MjBfZHNjX3BnX2NvbnRyb2woaHdzLCByZXNfcG9vbC0+ZHNjc1tpXS0+aW5zdCwgZmFsc2UpOwot I2VuZGlmCi0KLQkvKiBCbGFuayBwaXhlbCBkYXRhIHdpdGggT1BQIERQRyAqLwotCWZvciAoaSA9 IDA7IGkgPCBkYy0+cmVzX3Bvb2wtPnRpbWluZ19nZW5lcmF0b3JfY291bnQ7IGkrKykgewotCQlz dHJ1Y3QgdGltaW5nX2dlbmVyYXRvciAqdGcgPSBkYy0+cmVzX3Bvb2wtPnRpbWluZ19nZW5lcmF0 b3JzW2ldOwotCi0JCWlmICh0Zy0+ZnVuY3MtPmlzX3RnX2VuYWJsZWQodGcpKSB7Ci0JCQlkY24y MF9pbml0X2JsYW5rKGRjLCB0Zyk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmVzX3Bv b2wtPnRpbWluZ19nZW5lcmF0b3JfY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgdGltaW5nX2dlbmVy YXRvciAqdGcgPSBkYy0+cmVzX3Bvb2wtPnRpbWluZ19nZW5lcmF0b3JzW2ldOwotCi0JCWlmICh0 Zy0+ZnVuY3MtPmlzX3RnX2VuYWJsZWQodGcpKQotCQkJdGctPmZ1bmNzLT5sb2NrKHRnKTsKLQl9 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGMtPnJlc19wb29sLT5waXBlX2NvdW50OyBpKyspIHsKLQkJ c3RydWN0IGRwcCAqZHBwID0gcmVzX3Bvb2wtPmRwcHNbaV07Ci0KLQkJZHBwLT5mdW5jcy0+ZHBw X3Jlc2V0KGRwcCk7Ci0JfQotCi0JLyogUmVzZXQgYWxsIE1QQ0MgbXV4ZXMgKi8KLQlyZXNfcG9v bC0+bXBjLT5mdW5jcy0+bXBjX2luaXQocmVzX3Bvb2wtPm1wYyk7Ci0KLQkvKiBpbml0aWFsaXpl IE9QUCBtcGNfdHJlZSBwYXJhbWV0ZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGMtPnJlc19wb29s LT5yZXNfY2FwLT5udW1fb3BwOyBpKyspIHsKLQkJcmVzX3Bvb2wtPm9wcHNbaV0tPm1wY190cmVl X3BhcmFtcy5vcHBfaWQgPSByZXNfcG9vbC0+b3Bwc1tpXS0+aW5zdDsKLQkJcmVzX3Bvb2wtPm9w cHNbaV0tPm1wY190cmVlX3BhcmFtcy5vcHBfbGlzdCA9IE5VTEw7Ci0JCWZvciAoaiA9IDA7IGog PCBNQVhfUElQRVM7IGorKykKLQkJCXJlc19wb29sLT5vcHBzW2ldLT5tcGNjX2Rpc2Nvbm5lY3Rf cGVuZGluZ1tqXSA9IGZhbHNlOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkYy0+cmVzX3Bvb2wt PnBpcGVfY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgdGltaW5nX2dlbmVyYXRvciAqdGcgPSBkYy0+ cmVzX3Bvb2wtPnRpbWluZ19nZW5lcmF0b3JzW2ldOwotCQlzdHJ1Y3QgcGlwZV9jdHggKnBpcGVf Y3R4ID0gJmNvbnRleHQtPnJlc19jdHgucGlwZV9jdHhbaV07Ci0JCXN0cnVjdCBodWJwICpodWJw ID0gZGMtPnJlc19wb29sLT5odWJwc1tpXTsKLQkJc3RydWN0IGRwcCAqZHBwID0gZGMtPnJlc19w b29sLT5kcHBzW2ldOwotCi0JCXBpcGVfY3R4LT5zdHJlYW1fcmVzLnRnID0gdGc7Ci0JCXBpcGVf Y3R4LT5waXBlX2lkeCA9IGk7Ci0KLQkJcGlwZV9jdHgtPnBsYW5lX3Jlcy5odWJwID0gaHVicDsK LQkJcGlwZV9jdHgtPnBsYW5lX3Jlcy5kcHAgPSBkcHA7Ci0JCXBpcGVfY3R4LT5wbGFuZV9yZXMu bXBjY19pbnN0ID0gZHBwLT5pbnN0OwotCQlodWJwLT5tcGNjX2lkID0gZHBwLT5pbnN0OwotCQlo dWJwLT5vcHBfaWQgPSBPUFBfSURfSU5WQUxJRDsKLQkJaHVicC0+cG93ZXJfZ2F0ZWQgPSBmYWxz ZTsKLQkJcGlwZV9jdHgtPnN0cmVhbV9yZXMub3BwID0gTlVMTDsKLQotCQlodWJwLT5mdW5jcy0+ aHVicF9pbml0KGh1YnApOwotCi0JCS8vZGMtPnJlc19wb29sLT5vcHBzW2ldLT5tcGNfdHJlZV9w YXJhbXMub3BwX2lkID0gZGMtPnJlc19wb29sLT5vcHBzW2ldLT5pbnN0OwotCQkvL2RjLT5yZXNf cG9vbC0+b3Bwc1tpXS0+bXBjX3RyZWVfcGFyYW1zLm9wcF9saXN0ID0gTlVMTDsKLQkJZGMtPnJl c19wb29sLT5vcHBzW2ldLT5tcGNjX2Rpc2Nvbm5lY3RfcGVuZGluZ1twaXBlX2N0eC0+cGxhbmVf cmVzLm1wY2NfaW5zdF0gPSB0cnVlOwotCQlwaXBlX2N0eC0+c3RyZWFtX3Jlcy5vcHAgPSBkYy0+ cmVzX3Bvb2wtPm9wcHNbaV07Ci0JCS8qdG8gZG8qLwotCQlod3NzMV9wbGFuZV9hdG9taWNfZGlz Y29ubmVjdChkYywgcGlwZV9jdHgpOwotCX0KLQotCS8qIGluaXRpYWxpemUgRFdCIHBvaW50ZXIg dG8gTUNJRl9XQiAqLwotCWZvciAoaSA9IDA7IGkgPCByZXNfcG9vbC0+cmVzX2NhcC0+bnVtX2R3 YjsgaSsrKQotCQlyZXNfcG9vbC0+ZHdiY1tpXS0+bWNpZiA9IHJlc19wb29sLT5tY2lmX3diW2ld OwotCi0JZm9yIChpID0gMDsgaSA8IGRjLT5yZXNfcG9vbC0+dGltaW5nX2dlbmVyYXRvcl9jb3Vu dDsgaSsrKSB7Ci0JCXN0cnVjdCB0aW1pbmdfZ2VuZXJhdG9yICp0ZyA9IGRjLT5yZXNfcG9vbC0+ dGltaW5nX2dlbmVyYXRvcnNbaV07Ci0KLQkJaWYgKHRnLT5mdW5jcy0+aXNfdGdfZW5hYmxlZCh0 ZykpCi0JCQl0Zy0+ZnVuY3MtPnVubG9jayh0Zyk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRj LT5yZXNfcG9vbC0+cGlwZV9jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBwaXBlX2N0eCAqcGlwZV9j dHggPSAmY29udGV4dC0+cmVzX2N0eC5waXBlX2N0eFtpXTsKLQotCQlkYy0+aHdzcy5kaXNhYmxl X3BsYW5lKGRjLCBwaXBlX2N0eCk7Ci0KLQkJcGlwZV9jdHgtPnN0cmVhbV9yZXMudGcgPSBOVUxM OwotCQlwaXBlX2N0eC0+cGxhbmVfcmVzLmh1YnAgPSBOVUxMOwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBkYy0+cmVzX3Bvb2wtPnRpbWluZ19nZW5lcmF0b3JfY291bnQ7IGkrKykgewotCQlzdHJ1 Y3QgdGltaW5nX2dlbmVyYXRvciAqdGcgPSBkYy0+cmVzX3Bvb2wtPnRpbWluZ19nZW5lcmF0b3Jz W2ldOwotCi0JCXRnLT5mdW5jcy0+dGdfaW5pdCh0Zyk7Ci0JfQotCi0JLyogZW5kIG9mIEZQR0Eu IEJlbG93IGlmIHJlYWwgQVNJQyAqLwotCWlmIChJU19GUEdBX01BWElNVVNfREMoZGMtPmN0eC0+ ZGNlX2Vudmlyb25tZW50KSkKLQkJcmV0dXJuOwotCi0KLQlmb3IgKGkgPSAwOyBpIDwgcmVzX3Bv b2wtPmF1ZGlvX2NvdW50OyBpKyspIHsKLQkJc3RydWN0IGF1ZGlvICphdWRpbyA9IHJlc19wb29s LT5hdWRpb3NbaV07Ci0KLQkJYXVkaW8tPmZ1bmNzLT5od19pbml0KGF1ZGlvKTsKLQl9Ci0KLQlp ZiAoYWJtICE9IE5VTEwpIHsKLQkJYWJtLT5mdW5jcy0+aW5pdF9iYWNrbGlnaHQoYWJtKTsKLQkJ YWJtLT5mdW5jcy0+YWJtX2luaXQoYWJtKTsKLQl9Ci0KLQlpZiAoZG1jdSAhPSBOVUxMKQotCQlk bWN1LT5mdW5jcy0+ZG1jdV9pbml0KGRtY3UpOwotCi0JaWYgKGFibSAhPSBOVUxMICYmIGRtY3Ug IT0gTlVMTCkKLQkJYWJtLT5kbWN1X2lzX3J1bm5pbmcgPSBkbWN1LT5mdW5jcy0+aXNfZG1jdV9p bml0aWFsaXplZChkbWN1KTsKLQotCS8qIHBvd2VyIEFGTVQgSERNSSBtZW1vcnkgVE9ETzogbWF5 IG1vdmUgdG8gZGlzL2VuIG91dHB1dCBzYXZlIHBvd2VyKi8KLQlSRUdfV1JJVEUoRElPX01FTV9Q V1JfQ1RSTCwgMCk7Ci0KLQlpZiAoIWRjLT5kZWJ1Zy5kaXNhYmxlX2Nsb2NrX2dhdGUpIHsKLQkJ LyogZW5hYmxlIGFsbCBEQ04gY2xvY2sgZ2F0aW5nICovCi0JCVJFR19XUklURShEQ0NHX0dBVEVf RElTQUJMRV9DTlRMLCAwKTsKLQotCQlSRUdfV1JJVEUoRENDR19HQVRFX0RJU0FCTEVfQ05UTDIs IDApOwotCi0JCVJFR19VUERBVEUoRENGQ0xLX0NOVEwsIERDRkNMS19HQVRFX0RJUywgMCk7Ci0J fQotCi19Ci0KIGVudW0gZGNfc3RhdHVzIGRjbjIwX2VuYWJsZV9zdHJlYW1fdGltaW5nKAogCQlz dHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4LAogCQlzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQsCkBA IC0xNDA5LDcgKzExNzQsNyBAQCBzdGF0aWMgdm9pZCBkY24yMF9hcHBseV9jdHhfZm9yX3N1cmZh Y2UoCiAJCQlpZiAob2xkX3BpcGVfY3R4LT5zdHJlYW1fcmVzLnRnID09IHRnICYmCiAJCQkgICAg b2xkX3BpcGVfY3R4LT5wbGFuZV9yZXMuaHVicCAmJgogCQkJICAgIG9sZF9waXBlX2N0eC0+cGxh bmVfcmVzLmh1YnAtPm9wcF9pZCAhPSBPUFBfSURfSU5WQUxJRCkKLQkJCQlkY24yMF9kaXNhYmxl X3BsYW5lKGRjLCBvbGRfcGlwZV9jdHgpOworCQkJCWRjLT5od3NzLmRpc2FibGVfcGxhbmUoZGMs IG9sZF9waXBlX2N0eCk7CiAJCX0KIAogCQlpZiAoKCFwaXBlX2N0eC0+cGxhbmVfc3RhdGUgfHwK QEAgLTIxNjksMTQgKzE5MzQsMTI2IEBAIHN0YXRpYyB2b2lkIGRjbjIwX3Byb2dyYW1fZG1kYXRh X2VuZ2luZShzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4KQogCQkJCQkJaHVicC0+aW5zdCwgbW9k ZSk7CiB9CiAKK3N0YXRpYyB2b2lkIGRjbjIwX2ZwZ2FfaW5pdF9odyhzdHJ1Y3QgZGMgKmRjKQor eworCWludCBpLCBqOworCXN0cnVjdCBkY2VfaHdzZXEgKmh3cyA9IGRjLT5od3NlcTsKKwlzdHJ1 Y3QgcmVzb3VyY2VfcG9vbCAqcmVzX3Bvb2wgPSBkYy0+cmVzX3Bvb2w7CisJc3RydWN0IGRjX3N0 YXRlICAqY29udGV4dCA9IGRjLT5jdXJyZW50X3N0YXRlOworCisJaWYgKGRjLT5jbGtfbWdyICYm IGRjLT5jbGtfbWdyLT5mdW5jcy0+aW5pdF9jbG9ja3MpCisJCWRjLT5jbGtfbWdyLT5mdW5jcy0+ aW5pdF9jbG9ja3MoZGMtPmNsa19tZ3IpOworCisJLy8gSW5pdGlhbGl6ZSB0aGUgZGNjZworCWlm IChyZXNfcG9vbC0+ZGNjZy0+ZnVuY3MtPmRjY2dfaW5pdCkKKwkJcmVzX3Bvb2wtPmRjY2ctPmZ1 bmNzLT5kY2NnX2luaXQocmVzX3Bvb2wtPmRjY2cpOworCisJLy9FbmFibGUgYWJpbGl0eSB0byBw b3dlciBnYXRlIC8gZG9uJ3QgZm9yY2UgcG93ZXIgb24gcGVybWFuZW50bHkKKwlkYy0+aHdzcy5l bmFibGVfcG93ZXJfZ2F0aW5nX3BsYW5lKGh3cywgdHJ1ZSk7CisKKwkvLyBTcGVjaWZpYyB0byBG UEdBIGRjY2cgYW5kIHJlZ2lzdGVycworCVJFR19XUklURShSQkJNSUZfVElNRU9VVF9ESVMsIDB4 RkZGRkZGRkYpOworCVJFR19XUklURShSQkJNSUZfVElNRU9VVF9ESVNfMiwgMHhGRkZGRkZGRik7 CisKKwlkY24yMF9kY2NnX2luaXQoaHdzKTsKKworCVJFR19VUERBVEUoRENIVUJCVUJfR0xPQkFM X1RJTUVSX0NOVEwsIERDSFVCQlVCX0dMT0JBTF9USU1FUl9SRUZESVYsIDIpOworCVJFR19VUERB VEUoRENIVUJCVUJfR0xPQkFMX1RJTUVSX0NOVEwsIERDSFVCQlVCX0dMT0JBTF9USU1FUl9FTkFC TEUsIDEpOworCVJFR19XUklURShSRUZDTEtfQ05UTCwgMCk7CisJLy8KKworCisJLyogQmxhbmsg cGl4ZWwgZGF0YSB3aXRoIE9QUCBEUEcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGMtPnJlc19wb29s LT50aW1pbmdfZ2VuZXJhdG9yX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IHRpbWluZ19nZW5lcmF0 b3IgKnRnID0gZGMtPnJlc19wb29sLT50aW1pbmdfZ2VuZXJhdG9yc1tpXTsKKworCQlpZiAodGct PmZ1bmNzLT5pc190Z19lbmFibGVkKHRnKSkKKwkJCWRjbjIwX2luaXRfYmxhbmsoZGMsIHRnKTsK Kwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVzX3Bvb2wtPnRpbWluZ19nZW5lcmF0b3JfY291bnQ7 IGkrKykgeworCQlzdHJ1Y3QgdGltaW5nX2dlbmVyYXRvciAqdGcgPSBkYy0+cmVzX3Bvb2wtPnRp bWluZ19nZW5lcmF0b3JzW2ldOworCisJCWlmICh0Zy0+ZnVuY3MtPmlzX3RnX2VuYWJsZWQodGcp KQorCQkJdGctPmZ1bmNzLT5sb2NrKHRnKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGMtPnJl c19wb29sLT5waXBlX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRwcCAqZHBwID0gcmVzX3Bvb2wt PmRwcHNbaV07CisKKwkJZHBwLT5mdW5jcy0+ZHBwX3Jlc2V0KGRwcCk7CisJfQorCisJLyogUmVz ZXQgYWxsIE1QQ0MgbXV4ZXMgKi8KKwlyZXNfcG9vbC0+bXBjLT5mdW5jcy0+bXBjX2luaXQocmVz X3Bvb2wtPm1wYyk7CisKKwkvKiBpbml0aWFsaXplIE9QUCBtcGNfdHJlZSBwYXJhbWV0ZXIgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgZGMtPnJlc19wb29sLT5yZXNfY2FwLT5udW1fb3BwOyBpKyspIHsK KwkJcmVzX3Bvb2wtPm9wcHNbaV0tPm1wY190cmVlX3BhcmFtcy5vcHBfaWQgPSByZXNfcG9vbC0+ b3Bwc1tpXS0+aW5zdDsKKwkJcmVzX3Bvb2wtPm9wcHNbaV0tPm1wY190cmVlX3BhcmFtcy5vcHBf bGlzdCA9IE5VTEw7CisJCWZvciAoaiA9IDA7IGogPCBNQVhfUElQRVM7IGorKykKKwkJCXJlc19w b29sLT5vcHBzW2ldLT5tcGNjX2Rpc2Nvbm5lY3RfcGVuZGluZ1tqXSA9IGZhbHNlOworCX0KKwor CWZvciAoaSA9IDA7IGkgPCBkYy0+cmVzX3Bvb2wtPnBpcGVfY291bnQ7IGkrKykgeworCQlzdHJ1 Y3QgdGltaW5nX2dlbmVyYXRvciAqdGcgPSBkYy0+cmVzX3Bvb2wtPnRpbWluZ19nZW5lcmF0b3Jz W2ldOworCQlzdHJ1Y3QgcGlwZV9jdHggKnBpcGVfY3R4ID0gJmNvbnRleHQtPnJlc19jdHgucGlw ZV9jdHhbaV07CisJCXN0cnVjdCBodWJwICpodWJwID0gZGMtPnJlc19wb29sLT5odWJwc1tpXTsK KwkJc3RydWN0IGRwcCAqZHBwID0gZGMtPnJlc19wb29sLT5kcHBzW2ldOworCisJCXBpcGVfY3R4 LT5zdHJlYW1fcmVzLnRnID0gdGc7CisJCXBpcGVfY3R4LT5waXBlX2lkeCA9IGk7CisKKwkJcGlw ZV9jdHgtPnBsYW5lX3Jlcy5odWJwID0gaHVicDsKKwkJcGlwZV9jdHgtPnBsYW5lX3Jlcy5kcHAg PSBkcHA7CisJCXBpcGVfY3R4LT5wbGFuZV9yZXMubXBjY19pbnN0ID0gZHBwLT5pbnN0OworCQlo dWJwLT5tcGNjX2lkID0gZHBwLT5pbnN0OworCQlodWJwLT5vcHBfaWQgPSBPUFBfSURfSU5WQUxJ RDsKKwkJaHVicC0+cG93ZXJfZ2F0ZWQgPSBmYWxzZTsKKwkJcGlwZV9jdHgtPnN0cmVhbV9yZXMu b3BwID0gTlVMTDsKKworCQlodWJwLT5mdW5jcy0+aHVicF9pbml0KGh1YnApOworCisJCS8vZGMt PnJlc19wb29sLT5vcHBzW2ldLT5tcGNfdHJlZV9wYXJhbXMub3BwX2lkID0gZGMtPnJlc19wb29s LT5vcHBzW2ldLT5pbnN0OworCQkvL2RjLT5yZXNfcG9vbC0+b3Bwc1tpXS0+bXBjX3RyZWVfcGFy YW1zLm9wcF9saXN0ID0gTlVMTDsKKwkJZGMtPnJlc19wb29sLT5vcHBzW2ldLT5tcGNjX2Rpc2Nv bm5lY3RfcGVuZGluZ1twaXBlX2N0eC0+cGxhbmVfcmVzLm1wY2NfaW5zdF0gPSB0cnVlOworCQlw aXBlX2N0eC0+c3RyZWFtX3Jlcy5vcHAgPSBkYy0+cmVzX3Bvb2wtPm9wcHNbaV07CisJCS8qdG8g ZG8qLworCQlod3NzMV9wbGFuZV9hdG9taWNfZGlzY29ubmVjdChkYywgcGlwZV9jdHgpOworCX0K KworCS8qIGluaXRpYWxpemUgRFdCIHBvaW50ZXIgdG8gTUNJRl9XQiAqLworCWZvciAoaSA9IDA7 IGkgPCByZXNfcG9vbC0+cmVzX2NhcC0+bnVtX2R3YjsgaSsrKQorCQlyZXNfcG9vbC0+ZHdiY1tp XS0+bWNpZiA9IHJlc19wb29sLT5tY2lmX3diW2ldOworCisJZm9yIChpID0gMDsgaSA8IGRjLT5y ZXNfcG9vbC0+dGltaW5nX2dlbmVyYXRvcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB0aW1pbmdf Z2VuZXJhdG9yICp0ZyA9IGRjLT5yZXNfcG9vbC0+dGltaW5nX2dlbmVyYXRvcnNbaV07CisKKwkJ aWYgKHRnLT5mdW5jcy0+aXNfdGdfZW5hYmxlZCh0ZykpCisJCQl0Zy0+ZnVuY3MtPnVubG9jayh0 Zyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRjLT5yZXNfcG9vbC0+cGlwZV9jb3VudDsgaSsr KSB7CisJCXN0cnVjdCBwaXBlX2N0eCAqcGlwZV9jdHggPSAmY29udGV4dC0+cmVzX2N0eC5waXBl X2N0eFtpXTsKKworCQlkYy0+aHdzcy5kaXNhYmxlX3BsYW5lKGRjLCBwaXBlX2N0eCk7CisKKwkJ cGlwZV9jdHgtPnN0cmVhbV9yZXMudGcgPSBOVUxMOworCQlwaXBlX2N0eC0+cGxhbmVfcmVzLmh1 YnAgPSBOVUxMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkYy0+cmVzX3Bvb2wtPnRpbWluZ19n ZW5lcmF0b3JfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdGltaW5nX2dlbmVyYXRvciAqdGcgPSBk Yy0+cmVzX3Bvb2wtPnRpbWluZ19nZW5lcmF0b3JzW2ldOworCisJCXRnLT5mdW5jcy0+dGdfaW5p dCh0Zyk7CisJfQorfQorCiB2b2lkIGRjbjIwX2h3X3NlcXVlbmNlcl9jb25zdHJ1Y3Qoc3RydWN0 IGRjICpkYykKIHsKIAlkY24xMF9od19zZXF1ZW5jZXJfY29uc3RydWN0KGRjKTsKLQlkYy0+aHdz cy5pbml0X2h3ID0gZGNuMjBfaW5pdF9odzsKLQlkYy0+aHdzcy5pbml0X3BpcGVzID0gTlVMTDsK IAlkYy0+aHdzcy51bmJsYW5rX3N0cmVhbSA9IGRjbjIwX3VuYmxhbmtfc3RyZWFtOwogCWRjLT5o d3NzLnVwZGF0ZV9wbGFuZV9hZGRyID0gZGNuMjBfdXBkYXRlX3BsYW5lX2FkZHI7Ci0JZGMtPmh3 c3MuZGlzYWJsZV9wbGFuZSA9IGRjbjIwX2Rpc2FibGVfcGxhbmUsCiAJZGMtPmh3c3MuZW5hYmxl X3N0cmVhbV90aW1pbmcgPSBkY24yMF9lbmFibGVfc3RyZWFtX3RpbWluZzsKIAlkYy0+aHdzcy5w cm9ncmFtX3RyaXBsZWJ1ZmZlciA9IGRjbjIwX3Byb2dyYW1fdHJpcGxlQnVmZmVyOwogCWRjLT5o d3NzLnNldF9pbnB1dF90cmFuc2Zlcl9mdW5jID0gZGNuMjBfc2V0X2lucHV0X3RyYW5zZmVyX2Z1 bmM7CkBAIC0yMjA0LDUgKzIwODEsMTkgQEAgdm9pZCBkY24yMF9od19zZXF1ZW5jZXJfY29uc3Ry dWN0KHN0cnVjdCBkYyAqZGMpCiAJZGMtPmh3c3MucmVzZXRfaHdfY3R4X3dyYXAgPSBkY24yMF9y ZXNldF9od19jdHhfd3JhcDsKIAlkYy0+aHdzcy51cGRhdGVfbXBjYyA9IGRjbjIwX3VwZGF0ZV9t cGNjOwogCWRjLT5od3NzLnNldF9mbGlwX2NvbnRyb2xfZ3NsID0gZGNuMjBfc2V0X2ZsaXBfY29u dHJvbF9nc2w7Ci0JZGMtPmh3c3MuZGlkX3VuZGVyZmxvd19vY2N1ciA9IGRjbjEwX2RpZF91bmRl cmZsb3dfb2NjdXI7CisJZGMtPmh3c3MuaW5pdF9ibGFuayA9IGRjbjIwX2luaXRfYmxhbms7CisJ ZGMtPmh3c3MuZGlzYWJsZV9wbGFuZSA9IGRjbjIwX2Rpc2FibGVfcGxhbmU7CisJZGMtPmh3c3Mu cGxhbmVfYXRvbWljX2Rpc2FibGUgPSBkY24yMF9wbGFuZV9hdG9taWNfZGlzYWJsZTsKKwlkYy0+ aHdzcy5lbmFibGVfcG93ZXJfZ2F0aW5nX3BsYW5lID0gZGNuMjBfZW5hYmxlX3Bvd2VyX2dhdGlu Z19wbGFuZTsKKwlkYy0+aHdzcy5kcHBfcGdfY29udHJvbCA9IGRjbjIwX2RwcF9wZ19jb250cm9s OworCWRjLT5od3NzLmh1YnBfcGdfY29udHJvbCA9IGRjbjIwX2h1YnBfcGdfY29udHJvbDsKKwlk Yy0+aHdzcy5kc2NfcGdfY29udHJvbCA9IGRjbjIwX2RzY19wZ19jb250cm9sOworCWRjLT5od3Nz LmRpc2FibGVfdmdhID0gZGNuMjBfZGlzYWJsZV92Z2E7CisKKwlpZiAoSVNfRlBHQV9NQVhJTVVT X0RDKGRjLT5jdHgtPmRjZV9lbnZpcm9ubWVudCkpIHsKKwkJZGMtPmh3c3MuaW5pdF9odyA9IGRj bjIwX2ZwZ2FfaW5pdF9odzsKKwkJZGMtPmh3c3MuaW5pdF9waXBlcyA9IE5VTEw7CisJfQorCisK IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pbmMvaHcvZGNo dWJidWIuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pbmMvaHcvZGNodWJidWIu aAppbmRleCA5NTAyNDc4YzRhMWIuLmMxZjI5YjE2NTRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9kaXNwbGF5L2RjL2luYy9ody9kY2h1YmJ1Yi5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9kYy9pbmMvaHcvZGNodWJidWIuaApAQCAtMTQxLDYgKzE0MSwxMCBA QCBzdHJ1Y3QgaHViYnViX2Z1bmNzIHsKIAkJCXN0cnVjdCBkY25fd2F0ZXJtYXJrX3NldCAqd2F0 ZXJtYXJrcywKIAkJCXVuc2lnbmVkIGludCByZWZjbGtfbWh6LAogCQkJYm9vbCBzYWZlX3RvX2xv d2VyKTsKKworCWJvb2wgKCppc19hbGxvd19zZWxmX3JlZnJlc2hfZW5hYmxlZCkoc3RydWN0IGh1 YmJ1YiAqaHViYnViKTsKKwl2b2lkICgqYWxsb3dfc2VsZl9yZWZyZXNoX2NvbnRyb2wpKHN0cnVj dCBodWJidWIgKmh1YmJ1YiwgYm9vbCBhbGxvdyk7CisKIH07CiAKIHN0cnVjdCBodWJidWIgewpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2luYy9od19zZXF1ZW5j ZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pbmMvaHdfc2VxdWVuY2VyLmgK aW5kZXggMjg2NDVlMTBmODU0Li44MGRlMmZlYmQ3Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9kYy9pbmMvaHdfc2VxdWVuY2VyLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2luYy9od19zZXF1ZW5jZXIuaApAQCAtNzgsNiArNzgsOCBAQCBz dHJ1Y3Qgc3RyZWFtX3Jlc291cmNlOwogc3RydWN0IGRjX3BoeV9hZGRyX3NwYWNlX2NvbmZpZzsK IHN0cnVjdCBkY192aXJ0dWFsX2FkZHJfc3BhY2VfY29uZmlnOwogI2VuZGlmCitzdHJ1Y3QgaHVi cDsKK3N0cnVjdCBkcHA7CiAKIHN0cnVjdCBod19zZXF1ZW5jZXJfZnVuY3MgewogCkBAIC0yODAs NiArMjgyLDM2IEBAIHN0cnVjdCBod19zZXF1ZW5jZXJfZnVuY3MgewogCXZvaWQgKCpzZXR1cF92 dXBkYXRlX2ludGVycnVwdCkoc3RydWN0IHBpcGVfY3R4ICpwaXBlX2N0eCk7CiAJYm9vbCAoKmRp ZF91bmRlcmZsb3dfb2NjdXIpKHN0cnVjdCBkYyAqZGMsIHN0cnVjdCBwaXBlX2N0eCAqcGlwZV9j dHgpOwogCisJdm9pZCAoKmluaXRfYmxhbmspKHN0cnVjdCBkYyAqZGMsIHN0cnVjdCB0aW1pbmdf Z2VuZXJhdG9yICp0Zyk7CisJdm9pZCAoKmRpc2FibGVfdmdhKShzdHJ1Y3QgZGNlX2h3c2VxICpo d3MpOworCXZvaWQgKCpiaW9zX2dvbGRlbl9pbml0KShzdHJ1Y3QgZGMgKmRjKTsKKwl2b2lkICgq cGxhbmVfYXRvbWljX3Bvd2VyX2Rvd24pKHN0cnVjdCBkYyAqZGMsCisJCQlzdHJ1Y3QgZHBwICpk cHAsCisJCQlzdHJ1Y3QgaHVicCAqaHVicCk7CisKKwl2b2lkICgqcGxhbmVfYXRvbWljX2Rpc2Fi bGUpKAorCQkJc3RydWN0IGRjICpkYywgc3RydWN0IHBpcGVfY3R4ICpwaXBlX2N0eCk7CisKKwl2 b2lkICgqZW5hYmxlX3Bvd2VyX2dhdGluZ19wbGFuZSkoCisJCXN0cnVjdCBkY2VfaHdzZXEgKmh3 cywKKwkJYm9vbCBlbmFibGUpOworCisJdm9pZCAoKmRwcF9wZ19jb250cm9sKSgKKwkJCXN0cnVj dCBkY2VfaHdzZXEgKmh3cywKKwkJCXVuc2lnbmVkIGludCBkcHBfaW5zdCwKKwkJCWJvb2wgcG93 ZXJfb24pOworCisJdm9pZCAoKmh1YnBfcGdfY29udHJvbCkoCisJCQlzdHJ1Y3QgZGNlX2h3c2Vx ICpod3MsCisJCQl1bnNpZ25lZCBpbnQgaHVicF9pbnN0LAorCQkJYm9vbCBwb3dlcl9vbik7CisK Kwl2b2lkICgqZHNjX3BnX2NvbnRyb2wpKAorCQkJc3RydWN0IGRjZV9od3NlcSAqaHdzLAorCQkJ dW5zaWduZWQgaW50IGRzY19pbnN0LAorCQkJYm9vbCBwb3dlcl9vbik7CisKKwogI2lmIGRlZmlu ZWQoQ09ORklHX0RSTV9BTURfRENfRENOMl8wKQogCXZvaWQgKCp1cGRhdGVfb2RtKShzdHJ1Y3Qg ZGMgKmRjLCBzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQsIHN0cnVjdCBwaXBlX2N0eCAqcGlwZV9j dHgpOwogCXZvaWQgKCpwcm9ncmFtX2FsbF93cml0ZWJhY2tfcGlwZXNfaW5fdHJlZSkoCi0tIAoy LjIyLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFt ZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeA==