From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mauro Rossi Subject: [PATCH 05/10] drm/amd/display: dc/gpio: add support for DCE6 Date: Mon, 8 Oct 2018 04:23:39 +0200 Message-ID: <20181008022344.10247-6-issor.oruam@gmail.com> References: <20181008022344.10247-1-issor.oruam@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181008022344.10247-1-issor.oruam-Re5JQEeQqe8AvxtiuMwx3w@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: harry.wentland-5C7GfCeVMHo@public.gmane.org RENFNiB0YXJnZXRzIGFyZSBhZGRlZCByZXBsaWNhdGluZyBleGlzdGluZyBEQ0U4IGltcGxlbWVu dGF0aW9uLgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9ncGlvL01ha2VmaWxl ICB8ICAxMiArCiAuLi4vZGlzcGxheS9kYy9ncGlvL2RjZTYwL2h3X2ZhY3RvcnlfZGNlNjAuYyAg fCAxNzQgKysrKysrKysKIC4uLi9kaXNwbGF5L2RjL2dwaW8vZGNlNjAvaHdfZmFjdG9yeV9kY2U2 MC5oICB8ICAzMiArKwogLi4uL2RjL2dwaW8vZGNlNjAvaHdfdHJhbnNsYXRlX2RjZTYwLmMgICAg ICAgIHwgNDExICsrKysrKysrKysrKysrKysrKwogLi4uL2RjL2dwaW8vZGNlNjAvaHdfdHJhbnNs YXRlX2RjZTYwLmggICAgICAgIHwgIDMyICsrCiAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9n cGlvL2h3X2ZhY3RvcnkuYyAgfCAgMTAgKwogLi4uL2RybS9hbWQvZGlzcGxheS9kYy9ncGlvL2h3 X3RyYW5zbGF0ZS5jICAgIHwgIDEwICsKIDcgZmlsZXMgY2hhbmdlZCwgNjgxIGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZ3Bp by9kY2U2MC9od19mYWN0b3J5X2RjZTYwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYW1kL2Rpc3BsYXkvZGMvZ3Bpby9kY2U2MC9od19mYWN0b3J5X2RjZTYwLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZ3Bpby9kY2U2MC9o d190cmFuc2xhdGVfZGNlNjAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9ncGlvL2RjZTYwL2h3X3RyYW5zbGF0ZV9kY2U2MC5oCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2dwaW8vTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZ3Bpby9NYWtlZmlsZQppbmRleCA1NjJlZTE4OWQ3ODAu LjEyMmNhOTk5MTEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L2dwaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2dwaW8v TWFrZWZpbGUKQEAgLTMwLDYgKzMwLDE4IEBAIEFNRF9EQUxfR1BJTyA9ICQoYWRkcHJlZml4ICQo QU1EREFMUEFUSCkvZGMvZ3Bpby8sJChHUElPKSkKIAogQU1EX0RJU1BMQVlfRklMRVMgKz0gJChB TURfREFMX0dQSU8pCiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRENFIDZ4CisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIGFsbCBEQ0U2LnggYXJlIGRlcml2ZWQgZnJvbSBEQ0U2LjAKK2lm ZGVmIENPTkZJR19EUk1fQU1EX0RDX1NJCitHUElPX0RDRTYwID0gaHdfdHJhbnNsYXRlX2RjZTYw Lm8gaHdfZmFjdG9yeV9kY2U2MC5vCisKK0FNRF9EQUxfR1BJT19EQ0U2MCA9ICQoYWRkcHJlZml4 ICQoQU1EREFMUEFUSCkvZGMvZ3Bpby9kY2U2MC8sJChHUElPX0RDRTYwKSkKKworQU1EX0RJU1BM QVlfRklMRVMgKz0gJChBTURfREFMX0dQSU9fRENFNjApCitlbmRpZgorCiAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCiAjIERDRSA4eAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2dwaW8vZGNlNjAvaHdfZmFjdG9yeV9kY2U2 MC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2dwaW8vZGNlNjAvaHdfZmFjdG9y eV9kY2U2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjRhZmU5 YjQ4YzVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L2dwaW8vZGNlNjAvaHdfZmFjdG9yeV9kY2U2MC5jCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICog Q29weXJpZ2h0IDIwMTItMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJp Z2h0IDIwMTggTWF1cm8gUm9zc2kgPGlzc29yLm9ydWFtQGdtYWlsLmNvbT4KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9S IEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIg TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2luY2x1ZGUgImRtX3NlcnZpY2Vz LmgiCisjaW5jbHVkZSAiaW5jbHVkZS9ncGlvX3R5cGVzLmgiCisjaW5jbHVkZSAiLi4vaHdfZmFj dG9yeS5oIgorCisjaW5jbHVkZSAiaHdfZmFjdG9yeV9kY2U2MC5oIgorCisjaW5jbHVkZSAiLi4v aHdfZ3Bpby5oIgorI2luY2x1ZGUgIi4uL2h3X2RkYy5oIgorI2luY2x1ZGUgIi4uL2h3X2hwZC5o IgorCisjaW5jbHVkZSAiZGNlL2RjZV82XzBfZC5oIgorI2luY2x1ZGUgImRjZS9kY2VfNl8wX3No X21hc2suaCIKKworI2RlZmluZSBSRUcocmVnX25hbWUpXAorCQltbSAjIyByZWdfbmFtZQorCisj aW5jbHVkZSAicmVnX2hlbHBlci5oIgorI2luY2x1ZGUgIi4uL2hwZF9yZWdzLmgiCisKKyNkZWZp bmUgSFBEX1JFR19MSVNUX0RDRTYoaWQpIFwKKwlIUERfR1BJT19SRUdfTElTVChpZCksIFwKKwku aW50X3N0YXR1cyA9IG1tRENfSFBEICMjIGlkICMjIF9JTlRfU1RBVFVTLFwKKwkudG9nZ2xlX2Zp bHRfY250bCA9IG1tRENfSFBEICMjIGlkICMjIF9UT0dHTEVfRklMVF9DTlRMCisKKyNkZWZpbmUg SFBEX01BU0tfU0hfTElTVF9EQ0U2KG1hc2tfc2gpIFwKKwkJLkRDX0hQRF9TRU5TRV9ERUxBWUVE ID0gRENfSFBEMV9JTlRfU1RBVFVTX19EQ19IUEQxX1NFTlNFX0RFTEFZRUQgIyMgbWFza19zaCxc CisJCS5EQ19IUERfU0VOU0UgPSBEQ19IUEQxX0lOVF9TVEFUVVNfX0RDX0hQRDFfU0VOU0UgIyMg bWFza19zaCxcCisJCS5EQ19IUERfQ09OTkVDVF9JTlRfREVMQVkgPSBEQ19IUEQxX1RPR0dMRV9G SUxUX0NOVExfX0RDX0hQRDFfQ09OTkVDVF9JTlRfREVMQVkgIyMgbWFza19zaCxcCisJCS5EQ19I UERfRElTQ09OTkVDVF9JTlRfREVMQVkgPSBEQ19IUEQxX1RPR0dMRV9GSUxUX0NOVExfX0RDX0hQ RDFfRElTQ09OTkVDVF9JTlRfREVMQVkgIyMgbWFza19zaAorCisjZGVmaW5lIGhwZF9yZWdzKGlk KSBcCit7XAorCUhQRF9SRUdfTElTVF9EQ0U2KGlkKVwKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBocGRfcmVnaXN0ZXJzIGhwZF9yZWdzW10gPSB7CisJaHBkX3JlZ3MoMSksCisJaHBkX3JlZ3Mo MiksCisJaHBkX3JlZ3MoMyksCisJaHBkX3JlZ3MoNCksCisJaHBkX3JlZ3MoNSksCisJaHBkX3Jl Z3MoNikKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHBkX3NoX21hc2sgaHBkX3NoaWZ0ID0g eworCQlIUERfTUFTS19TSF9MSVNUX0RDRTYoX19TSElGVCkKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaHBkX3NoX21hc2sgaHBkX21hc2sgPSB7CisJCUhQRF9NQVNLX1NIX0xJU1RfRENFNihf TUFTSykKK307CisKKyNpbmNsdWRlICIuLi9kZGNfcmVncy5oIgorCisgLyogc2V0IGZpZWxkIG5h bWUgKi8KKyNkZWZpbmUgU0ZfRERDKHJlZ19uYW1lLCBmaWVsZF9uYW1lLCBwb3N0X2ZpeClcCisJ LmZpZWxkX25hbWUgPSByZWdfbmFtZSAjIyBfXyAjIyBmaWVsZF9uYW1lICMjIHBvc3RfZml4CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGRjX3JlZ2lzdGVycyBkZGNfZGF0YV9yZWdzW10gPSB7CisJ ZGRjX2RhdGFfcmVncygxKSwKKwlkZGNfZGF0YV9yZWdzKDIpLAorCWRkY19kYXRhX3JlZ3MoMyks CisJZGRjX2RhdGFfcmVncyg0KSwKKwlkZGNfZGF0YV9yZWdzKDUpLAorCWRkY19kYXRhX3JlZ3Mo NiksCisJZGRjX3ZnYV9kYXRhX3JlZ3MsCisJZGRjX2kyY19kYXRhX3JlZ3MKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZGRjX3JlZ2lzdGVycyBkZGNfY2xrX3JlZ3NbXSA9IHsKKwlkZGNfY2xr X3JlZ3MoMSksCisJZGRjX2Nsa19yZWdzKDIpLAorCWRkY19jbGtfcmVncygzKSwKKwlkZGNfY2xr X3JlZ3MoNCksCisJZGRjX2Nsa19yZWdzKDUpLAorCWRkY19jbGtfcmVncyg2KSwKKwlkZGNfdmdh X2Nsa19yZWdzLAorCWRkY19pMmNfY2xrX3JlZ3MKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZGRjX3NoX21hc2sgZGRjX3NoaWZ0ID0geworCQlERENfTUFTS19TSF9MSVNUKF9fU0hJRlQpCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRkY19zaF9tYXNrIGRkY19tYXNrID0geworCQlERENf TUFTS19TSF9MSVNUKF9NQVNLKQorfTsKKworc3RhdGljIHZvaWQgZGVmaW5lX2RkY19yZWdpc3Rl cnMoCisJCXN0cnVjdCBod19ncGlvX3BpbiAqcGluLAorCQl1aW50MzJfdCBlbikKK3sKKwlzdHJ1 Y3QgaHdfZGRjICpkZGMgPSBIV19ERENfRlJPTV9CQVNFKHBpbik7CisKKwlzd2l0Y2ggKHBpbi0+ aWQpIHsKKwljYXNlIEdQSU9fSURfRERDX0RBVEE6CisJCWRkYy0+cmVncyA9ICZkZGNfZGF0YV9y ZWdzW2VuXTsKKwkJZGRjLT5iYXNlLnJlZ3MgPSAmZGRjX2RhdGFfcmVnc1tlbl0uZ3BpbzsKKwkJ YnJlYWs7CisJY2FzZSBHUElPX0lEX0REQ19DTE9DSzoKKwkJZGRjLT5yZWdzID0gJmRkY19jbGtf cmVnc1tlbl07CisJCWRkYy0+YmFzZS5yZWdzID0gJmRkY19jbGtfcmVnc1tlbl0uZ3BpbzsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUX0NSSVRJQ0FMKGZhbHNlKTsKKwkJcmV0dXJuOwor CX0KKworCWRkYy0+c2hpZnRzID0gJmRkY19zaGlmdDsKKwlkZGMtPm1hc2tzID0gJmRkY19tYXNr OworCit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV9ocGRfcmVnaXN0ZXJzKHN0cnVjdCBod19ncGlv X3BpbiAqcGluLCB1aW50MzJfdCBlbikKK3sKKwlzdHJ1Y3QgaHdfaHBkICpocGQgPSBIV19IUERf RlJPTV9CQVNFKHBpbik7CisKKwlocGQtPnJlZ3MgPSAmaHBkX3JlZ3NbZW5dOworCWhwZC0+c2hp ZnRzID0gJmhwZF9zaGlmdDsKKwlocGQtPm1hc2tzID0gJmhwZF9tYXNrOworCWhwZC0+YmFzZS5y ZWdzID0gJmhwZF9yZWdzW2VuXS5ncGlvOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGh3X2Zh Y3RvcnlfZnVuY3MgZnVuY3MgPSB7CisJLmNyZWF0ZV9kZGNfZGF0YSA9IGRhbF9od19kZGNfY3Jl YXRlLAorCS5jcmVhdGVfZGRjX2Nsb2NrID0gZGFsX2h3X2RkY19jcmVhdGUsCisJLmNyZWF0ZV9n ZW5lcmljID0gTlVMTCwKKwkuY3JlYXRlX2hwZCA9IGRhbF9od19ocGRfY3JlYXRlLAorCS5jcmVh dGVfc3luYyA9IE5VTEwsCisJLmNyZWF0ZV9nc2wgPSBOVUxMLAorCS5kZWZpbmVfaHBkX3JlZ2lz dGVycyA9IGRlZmluZV9ocGRfcmVnaXN0ZXJzLAorCS5kZWZpbmVfZGRjX3JlZ2lzdGVycyA9IGRl ZmluZV9kZGNfcmVnaXN0ZXJzCit9OworCit2b2lkIGRhbF9od19mYWN0b3J5X2RjZTYwX2luaXQo CisJc3RydWN0IGh3X2ZhY3RvcnkgKmZhY3RvcnkpCit7CisJZmFjdG9yeS0+bnVtYmVyX29mX3Bp bnNbR1BJT19JRF9ERENfREFUQV0gPSA4OworCWZhY3RvcnktPm51bWJlcl9vZl9waW5zW0dQSU9f SURfRERDX0NMT0NLXSA9IDg7CisJZmFjdG9yeS0+bnVtYmVyX29mX3BpbnNbR1BJT19JRF9HRU5F UklDXSA9IDc7CisJZmFjdG9yeS0+bnVtYmVyX29mX3BpbnNbR1BJT19JRF9IUERdID0gNjsKKwlm YWN0b3J5LT5udW1iZXJfb2ZfcGluc1tHUElPX0lEX0dQSU9fUEFEXSA9IDMxOworCWZhY3Rvcnkt Pm51bWJlcl9vZl9waW5zW0dQSU9fSURfVklQX1BBRF0gPSAwOworCWZhY3RvcnktPm51bWJlcl9v Zl9waW5zW0dQSU9fSURfU1lOQ10gPSAyOworCWZhY3RvcnktPm51bWJlcl9vZl9waW5zW0dQSU9f SURfR1NMXSA9IDQ7CisKKwlmYWN0b3J5LT5mdW5jcyA9ICZmdW5jczsKK30KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9ncGlvL2RjZTYwL2h3X2ZhY3RvcnlfZGNl NjAuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9ncGlvL2RjZTYwL2h3X2ZhY3Rv cnlfZGNlNjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUyZmQ0 MzY1MzNlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9ncGlvL2RjZTYwL2h3X2ZhY3RvcnlfZGNlNjAuaApAQCAtMCwwICsxLDMyIEBACisvKgorICog Q29weXJpZ2h0IDIwMTItMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykg T1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhF UiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRX QVJFLgorICoKKyAqIEF1dGhvcnM6IEFNRAorICoKKyAqLworCisjaWZuZGVmIF9fREFMX0hXX0ZB Q1RPUllfRENFNjBfSF9fCisjZGVmaW5lIF9fREFMX0hXX0ZBQ1RPUllfRENFNjBfSF9fCisKK3Zv aWQgZGFsX2h3X2ZhY3RvcnlfZGNlNjBfaW5pdCgKKwlzdHJ1Y3QgaHdfZmFjdG9yeSAqZmFjdG9y eSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2Rj L2dwaW8vZGNlNjAvaHdfdHJhbnNsYXRlX2RjZTYwLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvZGMvZ3Bpby9kY2U2MC9od190cmFuc2xhdGVfZGNlNjAuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY4NmVlODU4N2YxYgotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9ncGlvL2RjZTYwL2h3X3RyYW5zbGF0ZV9k Y2U2MC5jCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogQ29weXJpZ2h0IDIwMTItMTUgQWR2YW5j ZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAq IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFN RAorICoKKyAqLworCisjaW5jbHVkZSAiZG1fc2VydmljZXMuaCIKKworLyoKKyAqIFByZS1yZXF1 aXNpdGVzOiBoZWFkZXJzIHJlcXVpcmVkIGJ5IGhlYWRlciBvZiB0aGlzIHVuaXQKKyAqLworI2lu Y2x1ZGUgImluY2x1ZGUvZ3Bpb190eXBlcy5oIgorI2luY2x1ZGUgIi4uL2h3X3RyYW5zbGF0ZS5o IgorCisjaW5jbHVkZSAiaHdfdHJhbnNsYXRlX2RjZTYwLmgiCisKKyNpbmNsdWRlICJkY2UvZGNl XzZfMF9kLmgiCisjaW5jbHVkZSAiZGNlL2RjZV82XzBfc2hfbWFzay5oIgorI2luY2x1ZGUgInNt dS9zbXVfNl8wX2QuaCIKKworLyoKKyAqIEBicmllZgorICogUmV0dXJucyBpbmRleCBvZiBmaXJz dCBiaXQgKHN0YXJ0aW5nIHdpdGggTFNCKSB3aGljaCBpcyBzZXQKKyAqLworc3RhdGljIHVpbnQz Ml90IGluZGV4X2Zyb21fdmVjdG9yKAorCXVpbnQzMl90IHZlY3RvcikKK3sKKwl1aW50MzJfdCBy ZXN1bHQgPSAwOworCXVpbnQzMl90IG1hc2sgPSAxOworCisJZG8geworCQlpZiAodmVjdG9yID09 IG1hc2spCisJCQlyZXR1cm4gcmVzdWx0OworCisJCSsrcmVzdWx0OworCQltYXNrIDw8PSAxOwor CX0gd2hpbGUgKG1hc2spOworCisJQlJFQUtfVE9fREVCVUdHRVIoKTsKKworCXJldHVybiBHUElP X0VOVU1fVU5LTk9XTjsKK30KKworc3RhdGljIGJvb2wgb2Zmc2V0X3RvX2lkKAorCXVpbnQzMl90 IG9mZnNldCwKKwl1aW50MzJfdCBtYXNrLAorCWVudW0gZ3Bpb19pZCAqaWQsCisJdWludDMyX3Qg KmVuKQoreworCXN3aXRjaCAob2Zmc2V0KSB7CisJLyogR0VORVJJQyAqLworCWNhc2UgbW1EQ19H UElPX0dFTkVSSUNfQToKKwkJKmlkID0gR1BJT19JRF9HRU5FUklDOworCQlzd2l0Y2ggKG1hc2sp IHsKKwkJY2FzZSBEQ19HUElPX0dFTkVSSUNfQV9fRENfR1BJT19HRU5FUklDQV9BX01BU0s6CisJ CQkqZW4gPSBHUElPX0dFTkVSSUNfQTsKKwkJCXJldHVybiB0cnVlOworCQljYXNlIERDX0dQSU9f R0VORVJJQ19BX19EQ19HUElPX0dFTkVSSUNCX0FfTUFTSzoKKwkJCSplbiA9IEdQSU9fR0VORVJJ Q19COworCQkJcmV0dXJuIHRydWU7CisJCWNhc2UgRENfR1BJT19HRU5FUklDX0FfX0RDX0dQSU9f R0VORVJJQ0NfQV9NQVNLOgorCQkJKmVuID0gR1BJT19HRU5FUklDX0M7CisJCQlyZXR1cm4gdHJ1 ZTsKKwkJY2FzZSBEQ19HUElPX0dFTkVSSUNfQV9fRENfR1BJT19HRU5FUklDRF9BX01BU0s6CisJ CQkqZW4gPSBHUElPX0dFTkVSSUNfRDsKKwkJCXJldHVybiB0cnVlOworCQljYXNlIERDX0dQSU9f R0VORVJJQ19BX19EQ19HUElPX0dFTkVSSUNFX0FfTUFTSzoKKwkJCSplbiA9IEdQSU9fR0VORVJJ Q19FOworCQkJcmV0dXJuIHRydWU7CisJCWNhc2UgRENfR1BJT19HRU5FUklDX0FfX0RDX0dQSU9f R0VORVJJQ0ZfQV9NQVNLOgorCQkJKmVuID0gR1BJT19HRU5FUklDX0Y7CisJCQlyZXR1cm4gdHJ1 ZTsKKwkJY2FzZSBEQ19HUElPX0dFTkVSSUNfQV9fRENfR1BJT19HRU5FUklDR19BX01BU0s6CisJ CQkqZW4gPSBHUElPX0dFTkVSSUNfRzsKKwkJCXJldHVybiB0cnVlOworCQlkZWZhdWx0OgorCQkJ QlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCWJyZWFrOworCS8q IEhQRCAqLworCWNhc2UgbW1EQ19HUElPX0hQRF9BOgorCQkqaWQgPSBHUElPX0lEX0hQRDsKKwkJ c3dpdGNoIChtYXNrKSB7CisJCWNhc2UgRENfR1BJT19IUERfQV9fRENfR1BJT19IUEQxX0FfTUFT SzoKKwkJCSplbiA9IEdQSU9fSFBEXzE7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJY2FzZSBEQ19HUElP X0hQRF9BX19EQ19HUElPX0hQRDJfQV9NQVNLOgorCQkJKmVuID0gR1BJT19IUERfMjsKKwkJCXJl dHVybiB0cnVlOworCQljYXNlIERDX0dQSU9fSFBEX0FfX0RDX0dQSU9fSFBEM19BX01BU0s6CisJ CQkqZW4gPSBHUElPX0hQRF8zOworCQkJcmV0dXJuIHRydWU7CisJCWNhc2UgRENfR1BJT19IUERf QV9fRENfR1BJT19IUEQ0X0FfTUFTSzoKKwkJCSplbiA9IEdQSU9fSFBEXzQ7CisJCQlyZXR1cm4g dHJ1ZTsKKwkJY2FzZSBEQ19HUElPX0hQRF9BX19EQ19HUElPX0hQRDVfQV9NQVNLOgorCQkJKmVu ID0gR1BJT19IUERfNTsKKwkJCXJldHVybiB0cnVlOworCQljYXNlIERDX0dQSU9fSFBEX0FfX0RD X0dQSU9fSFBENl9BX01BU0s6CisJCQkqZW4gPSBHUElPX0hQRF82OworCQkJcmV0dXJuIHRydWU7 CisJCWRlZmF1bHQ6CisJCQlCUkVBS19UT19ERUJVR0dFUigpOworCQkJcmV0dXJuIGZhbHNlOwor CQl9CisJYnJlYWs7CisJLyogU1lOQ0EgKi8KKwljYXNlIG1tRENfR1BJT19TWU5DQV9BOgorCQkq aWQgPSBHUElPX0lEX1NZTkM7CisJCXN3aXRjaCAobWFzaykgeworCQljYXNlIERDX0dQSU9fU1lO Q0FfQV9fRENfR1BJT19IU1lOQ0FfQV9NQVNLOgorCQkJKmVuID0gR1BJT19TWU5DX0hTWU5DX0E7 CisJCQlyZXR1cm4gdHJ1ZTsKKwkJY2FzZSBEQ19HUElPX1NZTkNBX0FfX0RDX0dQSU9fVlNZTkNB X0FfTUFTSzoKKwkJCSplbiA9IEdQSU9fU1lOQ19WU1lOQ19BOworCQkJcmV0dXJuIHRydWU7CisJ CWRlZmF1bHQ6CisJCQlCUkVBS19UT19ERUJVR0dFUigpOworCQkJcmV0dXJuIGZhbHNlOworCQl9 CisJYnJlYWs7CisJLyogbW1EQ19HUElPX0dFTkxLX01BU0sgKi8KKwljYXNlIG1tRENfR1BJT19H RU5MS19BOgorCQkqaWQgPSBHUElPX0lEX0dTTDsKKwkJc3dpdGNoIChtYXNrKSB7CisJCWNhc2Ug RENfR1BJT19HRU5MS19BX19EQ19HUElPX0dFTkxLX0NMS19BX01BU0s6CisJCQkqZW4gPSBHUElP X0dTTF9HRU5MT0NLX0NMT0NLOworCQkJcmV0dXJuIHRydWU7CisJCWNhc2UgRENfR1BJT19HRU5M S19BX19EQ19HUElPX0dFTkxLX1ZTWU5DX0FfTUFTSzoKKwkJCSplbiA9IEdQSU9fR1NMX0dFTkxP Q0tfVlNZTkM7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJY2FzZSBEQ19HUElPX0dFTkxLX0FfX0RDX0dQ SU9fU1dBUExPQ0tfQV9BX01BU0s6CisJCQkqZW4gPSBHUElPX0dTTF9TV0FQTE9DS19BOworCQkJ cmV0dXJuIHRydWU7CisJCWNhc2UgRENfR1BJT19HRU5MS19BX19EQ19HUElPX1NXQVBMT0NLX0Jf QV9NQVNLOgorCQkJKmVuID0gR1BJT19HU0xfU1dBUExPQ0tfQjsKKwkJCXJldHVybiB0cnVlOwor CQlkZWZhdWx0OgorCQkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJ fQorCWJyZWFrOworCS8qIEdQSU9QQUQgKi8KKwljYXNlIG1tR1BJT1BBRF9BOgorCQkqaWQgPSBH UElPX0lEX0dQSU9fUEFEOworCQkqZW4gPSBpbmRleF9mcm9tX3ZlY3RvcihtYXNrKTsKKwkJcmV0 dXJuICgqZW4gPD0gR1BJT19HUElPX1BBRF9NQVgpOworCS8qIEREQyAqLworCS8qIHdlIGRvbid0 IGNhcmUgYWJvdXQgdGhlIEdQSU9fSUQgZm9yIEREQworCSAqIGluIERkY0hhbmRsZSBpdCB3aWxs IHVzZSBHUElPX0lEX0REQ19EQVRBL0dQSU9fSURfRERDX0NMT0NLCisJICogZGlyZWN0bHkgaW4g dGhlIGNyZWF0ZSBtZXRob2QgKi8KKwljYXNlIG1tRENfR1BJT19EREMxX0E6CisJCSplbiA9IEdQ SU9fRERDX0xJTkVfRERDMTsKKwkJcmV0dXJuIHRydWU7CisJY2FzZSBtbURDX0dQSU9fRERDMl9B OgorCQkqZW4gPSBHUElPX0REQ19MSU5FX0REQzI7CisJCXJldHVybiB0cnVlOworCWNhc2UgbW1E Q19HUElPX0REQzNfQToKKwkJKmVuID0gR1BJT19ERENfTElORV9EREMzOworCQlyZXR1cm4gdHJ1 ZTsKKwljYXNlIG1tRENfR1BJT19EREM0X0E6CisJCSplbiA9IEdQSU9fRERDX0xJTkVfRERDNDsK KwkJcmV0dXJuIHRydWU7CisJY2FzZSBtbURDX0dQSU9fRERDNV9BOgorCQkqZW4gPSBHUElPX0RE Q19MSU5FX0REQzU7CisJCXJldHVybiB0cnVlOworCWNhc2UgbW1EQ19HUElPX0REQzZfQToKKwkJ KmVuID0gR1BJT19ERENfTElORV9EREM2OworCQlyZXR1cm4gdHJ1ZTsKKwljYXNlIG1tRENfR1BJ T19ERENWR0FfQToKKwkJKmVuID0gR1BJT19ERENfTElORV9ERENfVkdBOworCQlyZXR1cm4gdHJ1 ZTsKKwkvKiBHUElPX0kyQ1BBRCAqLworCWNhc2UgbW1EQ19HUElPX0kyQ1BBRF9BOgorCQkqZW4g PSBHUElPX0REQ19MSU5FX0kyQ19QQUQ7CisJCXJldHVybiB0cnVlOworCS8qIE5vdCBpbXBsZW1l bnRlZCAqLworCWNhc2UgbW1EQ19HUElPX1BXUlNFUV9BOgorCWNhc2UgbW1EQ19HUElPX1BBRF9T VFJFTkdUSF8xOgorCWNhc2UgbW1EQ19HUElPX1BBRF9TVFJFTkdUSF8yOgorCWNhc2UgbW1EQ19H UElPX0RFQlVHOgorCQlyZXR1cm4gZmFsc2U7CisJLyogVU5FWFBFQ1RFRCAqLworCWRlZmF1bHQ6 CisJCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRp YyBib29sIGlkX3RvX29mZnNldCgKKwllbnVtIGdwaW9faWQgaWQsCisJdWludDMyX3QgZW4sCisJ c3RydWN0IGdwaW9fcGluX2luZm8gKmluZm8pCit7CisJYm9vbCByZXN1bHQgPSB0cnVlOworCisJ c3dpdGNoIChpZCkgeworCWNhc2UgR1BJT19JRF9ERENfREFUQToKKwkJaW5mby0+bWFzayA9IERD X0dQSU9fRERDNl9BX19EQ19HUElPX0REQzZEQVRBX0FfTUFTSzsKKwkJc3dpdGNoIChlbikgewor CQljYXNlIEdQSU9fRERDX0xJTkVfRERDMToKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19E REMxX0E7CisJCWJyZWFrOworCQljYXNlIEdQSU9fRERDX0xJTkVfRERDMjoKKwkJCWluZm8tPm9m ZnNldCA9IG1tRENfR1BJT19EREMyX0E7CisJCWJyZWFrOworCQljYXNlIEdQSU9fRERDX0xJTkVf RERDMzoKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19EREMzX0E7CisJCWJyZWFrOworCQlj YXNlIEdQSU9fRERDX0xJTkVfRERDNDoKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19EREM0 X0E7CisJCWJyZWFrOworCQljYXNlIEdQSU9fRERDX0xJTkVfRERDNToKKwkJCWluZm8tPm9mZnNl dCA9IG1tRENfR1BJT19EREM1X0E7CisJCWJyZWFrOworCQljYXNlIEdQSU9fRERDX0xJTkVfRERD NjoKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19EREM2X0E7CisJCWJyZWFrOworCQljYXNl IEdQSU9fRERDX0xJTkVfRERDX1ZHQToKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19ERENW R0FfQTsKKwkJYnJlYWs7CisJCWNhc2UgR1BJT19ERENfTElORV9JMkNfUEFEOgorCQkJaW5mby0+ b2Zmc2V0ID0gbW1EQ19HUElPX0kyQ1BBRF9BOworCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJS RUFLX1RPX0RFQlVHR0VSKCk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCWJyZWFrOworCWNh c2UgR1BJT19JRF9ERENfQ0xPQ0s6CisJCWluZm8tPm1hc2sgPSBEQ19HUElPX0REQzZfQV9fRENf R1BJT19EREM2Q0xLX0FfTUFTSzsKKwkJc3dpdGNoIChlbikgeworCQljYXNlIEdQSU9fRERDX0xJ TkVfRERDMToKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19EREMxX0E7CisJCWJyZWFrOwor CQljYXNlIEdQSU9fRERDX0xJTkVfRERDMjoKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19E REMyX0E7CisJCWJyZWFrOworCQljYXNlIEdQSU9fRERDX0xJTkVfRERDMzoKKwkJCWluZm8tPm9m ZnNldCA9IG1tRENfR1BJT19EREMzX0E7CisJCWJyZWFrOworCQljYXNlIEdQSU9fRERDX0xJTkVf RERDNDoKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19EREM0X0E7CisJCWJyZWFrOworCQlj YXNlIEdQSU9fRERDX0xJTkVfRERDNToKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19EREM1 X0E7CisJCWJyZWFrOworCQljYXNlIEdQSU9fRERDX0xJTkVfRERDNjoKKwkJCWluZm8tPm9mZnNl dCA9IG1tRENfR1BJT19EREM2X0E7CisJCWJyZWFrOworCQljYXNlIEdQSU9fRERDX0xJTkVfRERD X1ZHQToKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19ERENWR0FfQTsKKwkJYnJlYWs7CisJ CWNhc2UgR1BJT19ERENfTElORV9JMkNfUEFEOgorCQkJaW5mby0+b2Zmc2V0ID0gbW1EQ19HUElP X0kyQ1BBRF9BOworCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJSRUFLX1RPX0RFQlVHR0VSKCk7 CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCWJyZWFrOworCWNhc2UgR1BJT19JRF9HRU5FUklD OgorCQlpbmZvLT5vZmZzZXQgPSBtbURDX0dQSU9fR0VORVJJQ19BOworCQlzd2l0Y2ggKGVuKSB7 CisJCWNhc2UgR1BJT19HRU5FUklDX0E6CisJCQlpbmZvLT5tYXNrID0gRENfR1BJT19HRU5FUklD X0FfX0RDX0dQSU9fR0VORVJJQ0FfQV9NQVNLOworCQlicmVhazsKKwkJY2FzZSBHUElPX0dFTkVS SUNfQjoKKwkJCWluZm8tPm1hc2sgPSBEQ19HUElPX0dFTkVSSUNfQV9fRENfR1BJT19HRU5FUklD Ql9BX01BU0s7CisJCWJyZWFrOworCQljYXNlIEdQSU9fR0VORVJJQ19DOgorCQkJaW5mby0+bWFz ayA9IERDX0dQSU9fR0VORVJJQ19BX19EQ19HUElPX0dFTkVSSUNDX0FfTUFTSzsKKwkJYnJlYWs7 CisJCWNhc2UgR1BJT19HRU5FUklDX0Q6CisJCQlpbmZvLT5tYXNrID0gRENfR1BJT19HRU5FUklD X0FfX0RDX0dQSU9fR0VORVJJQ0RfQV9NQVNLOworCQlicmVhazsKKwkJY2FzZSBHUElPX0dFTkVS SUNfRToKKwkJCWluZm8tPm1hc2sgPSBEQ19HUElPX0dFTkVSSUNfQV9fRENfR1BJT19HRU5FUklD RV9BX01BU0s7CisJCWJyZWFrOworCQljYXNlIEdQSU9fR0VORVJJQ19GOgorCQkJaW5mby0+bWFz ayA9IERDX0dQSU9fR0VORVJJQ19BX19EQ19HUElPX0dFTkVSSUNGX0FfTUFTSzsKKwkJYnJlYWs7 CisJCWNhc2UgR1BJT19HRU5FUklDX0c6CisJCQlpbmZvLT5tYXNrID0gRENfR1BJT19HRU5FUklD X0FfX0RDX0dQSU9fR0VORVJJQ0dfQV9NQVNLOworCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJS RUFLX1RPX0RFQlVHR0VSKCk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCWJyZWFrOworCWNh c2UgR1BJT19JRF9IUEQ6CisJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19IUERfQTsKKwkJc3dp dGNoIChlbikgeworCQljYXNlIEdQSU9fSFBEXzE6CisJCQlpbmZvLT5tYXNrID0gRENfR1BJT19I UERfQV9fRENfR1BJT19IUEQxX0FfTUFTSzsKKwkJYnJlYWs7CisJCWNhc2UgR1BJT19IUERfMjoK KwkJCWluZm8tPm1hc2sgPSBEQ19HUElPX0hQRF9BX19EQ19HUElPX0hQRDJfQV9NQVNLOworCQli cmVhazsKKwkJY2FzZSBHUElPX0hQRF8zOgorCQkJaW5mby0+bWFzayA9IERDX0dQSU9fSFBEX0Ff X0RDX0dQSU9fSFBEM19BX01BU0s7CisJCWJyZWFrOworCQljYXNlIEdQSU9fSFBEXzQ6CisJCQlp bmZvLT5tYXNrID0gRENfR1BJT19IUERfQV9fRENfR1BJT19IUEQ0X0FfTUFTSzsKKwkJYnJlYWs7 CisJCWNhc2UgR1BJT19IUERfNToKKwkJCWluZm8tPm1hc2sgPSBEQ19HUElPX0hQRF9BX19EQ19H UElPX0hQRDVfQV9NQVNLOworCQlicmVhazsKKwkJY2FzZSBHUElPX0hQRF82OgorCQkJaW5mby0+ bWFzayA9IERDX0dQSU9fSFBEX0FfX0RDX0dQSU9fSFBENl9BX01BU0s7CisJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQl9 CisJYnJlYWs7CisJY2FzZSBHUElPX0lEX1NZTkM6CisJCXN3aXRjaCAoZW4pIHsKKwkJY2FzZSBH UElPX1NZTkNfSFNZTkNfQToKKwkJCWluZm8tPm9mZnNldCA9IG1tRENfR1BJT19TWU5DQV9BOwor CQkJaW5mby0+bWFzayA9IERDX0dQSU9fU1lOQ0FfQV9fRENfR1BJT19IU1lOQ0FfQV9NQVNLOwor CQlicmVhazsKKwkJY2FzZSBHUElPX1NZTkNfVlNZTkNfQToKKwkJCWluZm8tPm9mZnNldCA9IG1t RENfR1BJT19TWU5DQV9BOworCQkJaW5mby0+bWFzayA9IERDX0dQSU9fU1lOQ0FfQV9fRENfR1BJ T19WU1lOQ0FfQV9NQVNLOworCQlicmVhazsKKwkJY2FzZSBHUElPX1NZTkNfSFNZTkNfQjoKKwkJ Y2FzZSBHUElPX1NZTkNfVlNZTkNfQjoKKwkJZGVmYXVsdDoKKwkJCUJSRUFLX1RPX0RFQlVHR0VS KCk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCWJyZWFrOworCWNhc2UgR1BJT19JRF9HU0w6 CisJCXN3aXRjaCAoZW4pIHsKKwkJY2FzZSBHUElPX0dTTF9HRU5MT0NLX0NMT0NLOgorCQkJaW5m by0+b2Zmc2V0ID0gbW1EQ19HUElPX0dFTkxLX0E7CisJCQlpbmZvLT5tYXNrID0gRENfR1BJT19H RU5MS19BX19EQ19HUElPX0dFTkxLX0NMS19BX01BU0s7CisJCWJyZWFrOworCQljYXNlIEdQSU9f R1NMX0dFTkxPQ0tfVlNZTkM6CisJCQlpbmZvLT5vZmZzZXQgPSBtbURDX0dQSU9fR0VOTEtfQTsK KwkJCWluZm8tPm1hc2sgPQorCQkJCURDX0dQSU9fR0VOTEtfQV9fRENfR1BJT19HRU5MS19WU1lO Q19BX01BU0s7CisJCWJyZWFrOworCQljYXNlIEdQSU9fR1NMX1NXQVBMT0NLX0E6CisJCQlpbmZv LT5vZmZzZXQgPSBtbURDX0dQSU9fR0VOTEtfQTsKKwkJCWluZm8tPm1hc2sgPSBEQ19HUElPX0dF TkxLX0FfX0RDX0dQSU9fU1dBUExPQ0tfQV9BX01BU0s7CisJCWJyZWFrOworCQljYXNlIEdQSU9f R1NMX1NXQVBMT0NLX0I6CisJCQlpbmZvLT5vZmZzZXQgPSBtbURDX0dQSU9fR0VOTEtfQTsKKwkJ CWluZm8tPm1hc2sgPSBEQ19HUElPX0dFTkxLX0FfX0RDX0dQSU9fU1dBUExPQ0tfQl9BX01BU0s7 CisJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCXJlc3Vs dCA9IGZhbHNlOworCQl9CisJYnJlYWs7CisJY2FzZSBHUElPX0lEX0dQSU9fUEFEOgorCQlpbmZv LT5vZmZzZXQgPSBtbUdQSU9QQURfQTsKKwkJaW5mby0+bWFzayA9ICgxIDw8IGVuKTsKKwkJcmVz dWx0ID0gKGluZm8tPm1hc2sgPD0gR1BJT19HUElPX1BBRF9NQVgpOworCWJyZWFrOworCWNhc2Ug R1BJT19JRF9WSVBfUEFEOgorCWRlZmF1bHQ6CisJCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCXJl c3VsdCA9IGZhbHNlOworCX0KKworCWlmIChyZXN1bHQpIHsKKwkJaW5mby0+b2Zmc2V0X3kgPSBp bmZvLT5vZmZzZXQgKyAyOworCQlpbmZvLT5vZmZzZXRfZW4gPSBpbmZvLT5vZmZzZXQgKyAxOwor CQlpbmZvLT5vZmZzZXRfbWFzayA9IGluZm8tPm9mZnNldCAtIDE7CisKKwkJaW5mby0+bWFza195 ID0gaW5mby0+bWFzazsKKwkJaW5mby0+bWFza19lbiA9IGluZm8tPm1hc2s7CisJCWluZm8tPm1h c2tfbWFzayA9IGluZm8tPm1hc2s7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBod190cmFuc2xhdGVfZnVuY3MgZnVuY3MgPSB7CisJCS5vZmZzZXRfdG9f aWQgPSBvZmZzZXRfdG9faWQsCisJCS5pZF90b19vZmZzZXQgPSBpZF90b19vZmZzZXQsCit9Owor Cit2b2lkIGRhbF9od190cmFuc2xhdGVfZGNlNjBfaW5pdCgKKwlzdHJ1Y3QgaHdfdHJhbnNsYXRl ICp0cmFuc2xhdGUpCit7CisJdHJhbnNsYXRlLT5mdW5jcyA9ICZmdW5jczsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9ncGlvL2RjZTYwL2h3X3RyYW5zbGF0 ZV9kY2U2MC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2dwaW8vZGNlNjAvaHdf dHJhbnNsYXRlX2RjZTYwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5jNjVhOWQ4MGM1M2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvZGMvZ3Bpby9kY2U2MC9od190cmFuc2xhdGVfZGNlNjAuaApAQCAtMCwwICsxLDMyIEBA CisvKgorICogQ29weXJpZ2h0IDIwMTItMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBI T0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S CisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFNRAorICoKKyAqLworCisjaWZuZGVmIF9f REFMX0hXX1RSQU5TTEFURV9EQ0U2MF9IX18KKyNkZWZpbmUgX19EQUxfSFdfVFJBTlNMQVRFX0RD RTYwX0hfXworCit2b2lkIGRhbF9od190cmFuc2xhdGVfZGNlNjBfaW5pdCgKKwlzdHJ1Y3QgaHdf dHJhbnNsYXRlICp0cik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9kaXNwbGF5L2RjL2dwaW8vaHdfZmFjdG9yeS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2RjL2dwaW8vaHdfZmFjdG9yeS5jCmluZGV4IDBjYWVlMzUyMzAxNy4uN2JiOTIyYjBmNTc5 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZ3Bpby9od19mYWN0 b3J5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2dwaW8vaHdfZmFjdG9y eS5jCkBAIC00MCw2ICs0MCw5IEBACiAgKiBQb3N0LXJlcXVpc2l0ZXM6IGhlYWRlcnMgcmVxdWly ZWQgYnkgdGhpcyB1bml0CiAgKi8KIAorI2lmIGRlZmluZWQoQ09ORklHX0RSTV9BTURfRENfU0kp CisjaW5jbHVkZSAiZGNlNjAvaHdfZmFjdG9yeV9kY2U2MC5oIgorI2VuZGlmCiAjaW5jbHVkZSAi ZGNlODAvaHdfZmFjdG9yeV9kY2U4MC5oIgogI2luY2x1ZGUgImRjZTExMC9od19mYWN0b3J5X2Rj ZTExMC5oIgogI2luY2x1ZGUgImRjZTEyMC9od19mYWN0b3J5X2RjZTEyMC5oIgpAQCAtNjQsNiAr NjcsMTMgQEAgYm9vbCBkYWxfaHdfZmFjdG9yeV9pbml0KAogCX0KIAogCXN3aXRjaCAoZGNlX3Zl cnNpb24pIHsKKyNpZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX1NJKQorCWNhc2UgRENFX1ZF UlNJT05fNl8wOgorCWNhc2UgRENFX1ZFUlNJT05fNl8xOgorCWNhc2UgRENFX1ZFUlNJT05fNl80 OgorCQlkYWxfaHdfZmFjdG9yeV9kY2U2MF9pbml0KGZhY3RvcnkpOworCQlyZXR1cm4gdHJ1ZTsK KyNlbmRpZgogCWNhc2UgRENFX1ZFUlNJT05fOF8wOgogCWNhc2UgRENFX1ZFUlNJT05fOF8xOgog CWNhc2UgRENFX1ZFUlNJT05fOF8zOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2RjL2dwaW8vaHdfdHJhbnNsYXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvZGMvZ3Bpby9od190cmFuc2xhdGUuYwppbmRleCA1NWM3MDc0ODg1NDEuLjY1MGFmMTdlZDEy YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2dwaW8vaHdfdHJh bnNsYXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2dwaW8vaHdfdHJh bnNsYXRlLmMKQEAgLTQwLDYgKzQwLDkgQEAKICAqIFBvc3QtcmVxdWlzaXRlczogaGVhZGVycyBy ZXF1aXJlZCBieSB0aGlzIHVuaXQKICAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfRFJNX0FNRF9E Q19TSSkKKyNpbmNsdWRlICJkY2U2MC9od190cmFuc2xhdGVfZGNlNjAuaCIKKyNlbmRpZgogI2lu Y2x1ZGUgImRjZTgwL2h3X3RyYW5zbGF0ZV9kY2U4MC5oIgogI2luY2x1ZGUgImRjZTExMC9od190 cmFuc2xhdGVfZGNlMTEwLmgiCiAjaW5jbHVkZSAiZGNlMTIwL2h3X3RyYW5zbGF0ZV9kY2UxMjAu aCIKQEAgLTY0LDYgKzY3LDEzIEBAIGJvb2wgZGFsX2h3X3RyYW5zbGF0ZV9pbml0KAogCX0KIAog CXN3aXRjaCAoZGNlX3ZlcnNpb24pIHsKKyNpZiBkZWZpbmVkKENPTkZJR19EUk1fQU1EX0RDX1NJ KQorCWNhc2UgRENFX1ZFUlNJT05fNl8wOgorCWNhc2UgRENFX1ZFUlNJT05fNl8xOgorCWNhc2Ug RENFX1ZFUlNJT05fNl80OgorCQlkYWxfaHdfdHJhbnNsYXRlX2RjZTYwX2luaXQodHJhbnNsYXRl KTsKKwkJcmV0dXJuIHRydWU7CisjZW5kaWYKIAljYXNlIERDRV9WRVJTSU9OXzhfMDoKIAljYXNl IERDRV9WRVJTSU9OXzhfMToKIAljYXNlIERDRV9WRVJTSU9OXzhfMzoKLS0gCjIuMTcuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWls aW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==