From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephane Viau Subject: [PATCH v2 2/4] drm/msm/mdp5: Enhance operation mode for pipeline configuration Date: Thu, 5 Mar 2015 09:59:41 -0500 Message-ID: <1425567583-30100-3-git-send-email-sviau@codeaurora.org> References: <1425407775-7704-1-git-send-email-sviau@codeaurora.org> <1425567583-30100-1-git-send-email-sviau@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1425567583-30100-1-git-send-email-sviau@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: linux-arm-msm@vger.kernel.org RFNJIGFuZCBXQiBpbnRlcmZhY2VzIG5lZWQgYSBtb3JlIGNvbXBsZXggcGlwZWxpbmUgY29uZmln dXJhdGlvbgp0aGFuIHRoZSBjdXJyZW50IG1kcDVfY3RsX3NldF9pbnRmKCkuCgpGb3IgZXhhbXBs ZSwgbWVtb3J5IG91dHB1dCBjb25uZWN0aW9ucyBuZWVkIHRvIGJlIHNlbGVjdGVkIGZvcgpXQi4g SW50ZXJmYWNlIG1vZGUgKFZpZGVvIHZzLiBDb21tYW5kIG1vZGVzKSBhbHNvIG5lZWQgdG8gYmUK Y29uZmlndXJlZCBmb3IgRFNJLgoKVGhpcyBjaGFuZ2UgdGFrZXMgY2FyZSBvZiBjb25maWd1cmlu ZyB0aGUgd2hvbGUgcGlwZWxpbmUgYXMgZmFyCmFzIG9wZXJhdGlvbiBtb2RlIGdvZXMuIERTSSBh bmQgV0IgaW50ZXJmYWNlcyB3aWxsIGJlIGFkZGVkCmxhdGVyLgoKdjI6IHJlbmFtZSBtYWNybyB0 byBtZHA1X2NmZ19pbnRmX2lzX3ZpcnR1YWwoKSBbcG9pbnRlZCBieSBBcmNoaXRdCgpTaWduZWQt b2ZmLWJ5OiBTdGVwaGFuZSBWaWF1IDxzdmlhdUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJz L2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY2ZnLmggICAgIHwgIDQgKysKIGRyaXZlcnMvZ3B1 L2RybS9tc20vbWRwL21kcDUvbWRwNV9jcnRjLmMgICAgfCAzOSArKy0tLS0tLS0tLS0tCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3RsLmMgICAgIHwgOTEgKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jdGwu aCAgICAgfCAgMyArLQogZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2VuY29kZXIu YyB8IDI5ICsrKysrLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2ttcy5j ICAgICB8IDE2ICsrKystCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfa21zLmgg ICAgIHwgNDggKysrKysrKysrKysrLS0tCiA3IGZpbGVzIGNoYW5nZWQsIDE1OSBpbnNlcnRpb25z KCspLCA3MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21k cC9tZHA1L21kcDVfY2ZnLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY2Zn LmgKaW5kZXggZGJhNGQ1Mi4uNGU5MDc0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9tZHAvbWRwNS9tZHA1X2NmZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUv bWRwNV9jZmcuaApAQCAtODQsNiArODQsMTAgQEAgY29uc3Qgc3RydWN0IG1kcDVfY2ZnX2h3ICpt ZHA1X2NmZ19nZXRfaHdfY29uZmlnKHN0cnVjdCBtZHA1X2NmZ19oYW5kbGVyICpjZmdfaG4KIHN0 cnVjdCBtZHA1X2NmZyAqbWRwNV9jZmdfZ2V0X2NvbmZpZyhzdHJ1Y3QgbWRwNV9jZmdfaGFuZGxl ciAqY2ZnX2huZCk7CiBpbnQgbWRwNV9jZmdfZ2V0X2h3X3JldihzdHJ1Y3QgbWRwNV9jZmdfaGFu ZGxlciAqY2ZnX2huZCk7CiAKKyNkZWZpbmUgbWRwNV9jZmdfaW50Zl9pc192aXJ0dWFsKGludGZf dHlwZSkgKHsJXAorCXR5cGVvZihpbnRmX3R5cGUpIF9fdmFsID0gKGludGZfdHlwZSk7CVwKKwko X192YWwpID49IElOVEZfVklSVFVBTCA/IHRydWUgOiBmYWxzZTsgfSkKKwogc3RydWN0IG1kcDVf Y2ZnX2hhbmRsZXIgKm1kcDVfY2ZnX2luaXQoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcywKIAkJ dWludDMyX3QgbWFqb3IsIHVpbnQzMl90IG1pbm9yKTsKIHZvaWQgbWRwNV9jZmdfZGVzdHJveShz dHJ1Y3QgbWRwNV9jZmdfaGFuZGxlciAqY2ZnX2huZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAv bWRwNS9tZHA1X2NydGMuYwppbmRleCBiZmJhMjM2Li4xNTEzNmYxIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vbWRwL21kcDUvbWRwNV9jcnRjLmMKQEAgLTYxMSw0OCArNjExLDE3IEBAIHZvaWQgbWRw NV9jcnRjX2NhbmNlbF9wZW5kaW5nX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUpCiB9CiAKIC8qIHNldCBpbnRlcmZhY2UgZm9yIHJvdXRpbmcgY3J0Yy0+ ZW5jb2RlcjogKi8KLXZvaWQgbWRwNV9jcnRjX3NldF9pbnRmKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywgaW50IGludGYsCi0JCWVudW0gbWRwNV9pbnRmIGludGZfaWQpCit2b2lkIG1kcDVfY3J0Y19z ZXRfaW50ZihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBtZHA1X2ludGVyZmFjZSAqaW50 ZikKIHsKIAlzdHJ1Y3QgbWRwNV9jcnRjICptZHA1X2NydGMgPSB0b19tZHA1X2NydGMoY3J0Yyk7 CiAJc3RydWN0IG1kcDVfa21zICptZHA1X2ttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JdWludDMyX3Qg aW50Zl9zZWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbG0gPSBtZHA1X2NydGNfZ2V0 X2xtKGNydGMpOwogCiAJLyogbm93IHRoYXQgd2Uga25vdyB3aGF0IGlycSdzIHdlIHdhbnQ6ICov Ci0JbWRwNV9jcnRjLT5lcnIuaXJxbWFzayA9IGludGYyZXJyKGludGYpOwotCW1kcDVfY3J0Yy0+ dmJsYW5rLmlycW1hc2sgPSBpbnRmMnZibGFuayhpbnRmKTsKKwltZHA1X2NydGMtPmVyci5pcnFt YXNrID0gaW50ZjJlcnIoaW50Zi0+bnVtKTsKKwltZHA1X2NydGMtPnZibGFuay5pcnFtYXNrID0g aW50ZjJ2YmxhbmsobG0sIGludGYpOwogCW1kcF9pcnFfdXBkYXRlKCZtZHA1X2ttcy0+YmFzZSk7 CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWRwNV9rbXMtPnJlc291cmNlX2xvY2ssIGZsYWdzKTsK LQlpbnRmX3NlbCA9IG1kcDVfcmVhZChtZHA1X2ttcywgUkVHX01EUDVfRElTUF9JTlRGX1NFTCk7 Ci0KLQlzd2l0Y2ggKGludGYpIHsKLQljYXNlIDA6Ci0JCWludGZfc2VsICY9IH5NRFA1X0RJU1Bf SU5URl9TRUxfSU5URjBfX01BU0s7Ci0JCWludGZfc2VsIHw9IE1EUDVfRElTUF9JTlRGX1NFTF9J TlRGMChpbnRmX2lkKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlpbnRmX3NlbCAmPSB+TURQNV9E SVNQX0lOVEZfU0VMX0lOVEYxX19NQVNLOwotCQlpbnRmX3NlbCB8PSBNRFA1X0RJU1BfSU5URl9T RUxfSU5URjEoaW50Zl9pZCk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJaW50Zl9zZWwgJj0gfk1E UDVfRElTUF9JTlRGX1NFTF9JTlRGMl9fTUFTSzsKLQkJaW50Zl9zZWwgfD0gTURQNV9ESVNQX0lO VEZfU0VMX0lOVEYyKGludGZfaWQpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWludGZfc2VsICY9 IH5NRFA1X0RJU1BfSU5URl9TRUxfSU5URjNfX01BU0s7Ci0JCWludGZfc2VsIHw9IE1EUDVfRElT UF9JTlRGX1NFTF9JTlRGMyhpbnRmX2lkKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7 Ci0JCWJyZWFrOwotCX0KLQotCW1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X0RJU1BfSU5U Rl9TRUwsIGludGZfc2VsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZHA1X2ttcy0+cmVz b3VyY2VfbG9jaywgZmxhZ3MpOwotCi0JREJHKCIlczogaW50Zl9zZWw9JTA4eCIsIG1kcDVfY3J0 Yy0+bmFtZSwgaW50Zl9zZWwpOwogCW1kcDVfY3RsX3NldF9pbnRmKG1kcDVfY3J0Yy0+Y3RsLCBp bnRmKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1 X2N0bC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2N0bC5jCmluZGV4IDE1 MTEyOTAuLmE1NDgxMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUv bWRwNV9jdGwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3RsLmMK QEAgLTMzLDYgKzMzLDE2IEBACiAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCAoaW4gbWRwNV9j cnRjX21vZGVfc2V0KCkpLgogICovCiAKK3N0cnVjdCBvcF9tb2RlIHsKKwlzdHJ1Y3QgbWRwNV9p bnRlcmZhY2UgaW50ZjsKKwkvKgorCSAqIFRPRE86IGFkZCBhIHN0YXRlIHZhcmlhYmxlIHRvIGNv bnRyb2wgdGhlIHBpcGVsaW5lCisJICoKKwkgKiBlZzogV0IgaW50ZXJmYWNlIG5lZWRzIGJvdGgg YnVmZmVyIGFkZHJlc3NlcyB0byBiZSBjb21taXR0ZWQgKworCSAqIG91dHB1dCBidWZmZXJzIHJl YWR5IHRvIGJlIHdyaXR0ZW4gaW50bywgYmVmb3JlIHdlIGNhbiBTVEFSVC4KKwkgKi8KK307CisK IHN0cnVjdCBtZHA1X2N0bCB7CiAJc3RydWN0IG1kcDVfY3RsX21hbmFnZXIgKmN0bG07CiAKQEAg LTQxLDggKzUxLDggQEAgc3RydWN0IG1kcDVfY3RsIHsKIAkvKiB3aGV0aGVyIHRoaXMgQ1RMIGhh cyBiZWVuIGFsbG9jYXRlZCBvciBub3Q6ICovCiAJYm9vbCBidXN5OwogCi0JLyogbWVtb3J5IG91 dHB1dCBjb25uZWN0aW9uIChAc2VlIG1kcDVfY3RsX21vZGUpOiAqLwotCXUzMiBtb2RlOworCS8q IE9wZXJhdGlvbiBNb2RlIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBQaXBlbGluZSAqLworCXN0cnVj dCBvcF9tb2RlIHBpcGVsaW5lOwogCiAJLyogUkVHX01EUDVfQ1RMXyooPGlkPikgcmVnaXN0ZXJz IGFjY2VzcyBpbmZvICsgbG9jazogKi8KIAlzcGlubG9ja190IGh3X2xvY2s7CkBAIC05NCwxOSAr MTA0LDgxIEBAIHUzMiBjdGxfcmVhZChzdHJ1Y3QgbWRwNV9jdGwgKmN0bCwgdTMyIHJlZykKIAly ZXR1cm4gbWRwNV9yZWFkKG1kcDVfa21zLCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBzZXRfZGlz cGxheV9pbnRmKHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMsCisJCXN0cnVjdCBtZHA1X2ludGVy ZmFjZSAqaW50ZikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBpbnRmX3NlbDsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZtZHA1X2ttcy0+cmVzb3VyY2VfbG9jaywgZmxhZ3MpOworCWlu dGZfc2VsID0gbWRwNV9yZWFkKG1kcDVfa21zLCBSRUdfTURQNV9ESVNQX0lOVEZfU0VMKTsKKwor CXN3aXRjaCAoaW50Zi0+bnVtKSB7CisJY2FzZSAwOgorCQlpbnRmX3NlbCAmPSB+TURQNV9ESVNQ X0lOVEZfU0VMX0lOVEYwX19NQVNLOworCQlpbnRmX3NlbCB8PSBNRFA1X0RJU1BfSU5URl9TRUxf SU5URjAoaW50Zi0+dHlwZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaW50Zl9zZWwgJj0gfk1E UDVfRElTUF9JTlRGX1NFTF9JTlRGMV9fTUFTSzsKKwkJaW50Zl9zZWwgfD0gTURQNV9ESVNQX0lO VEZfU0VMX0lOVEYxKGludGYtPnR5cGUpOworCQlicmVhazsKKwljYXNlIDI6CisJCWludGZfc2Vs ICY9IH5NRFA1X0RJU1BfSU5URl9TRUxfSU5URjJfX01BU0s7CisJCWludGZfc2VsIHw9IE1EUDVf RElTUF9JTlRGX1NFTF9JTlRGMihpbnRmLT50eXBlKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlp bnRmX3NlbCAmPSB+TURQNV9ESVNQX0lOVEZfU0VMX0lOVEYzX19NQVNLOworCQlpbnRmX3NlbCB8 PSBNRFA1X0RJU1BfSU5URl9TRUxfSU5URjMoaW50Zi0+dHlwZSk7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisKKwltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdf TURQNV9ESVNQX0lOVEZfU0VMLCBpbnRmX3NlbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm bWRwNV9rbXMtPnJlc291cmNlX2xvY2ssIGZsYWdzKTsKK30KIAotaW50IG1kcDVfY3RsX3NldF9p bnRmKHN0cnVjdCBtZHA1X2N0bCAqY3RsLCBpbnQgaW50ZikKK3N0YXRpYyB2b2lkIHNldF9jdGxf b3Aoc3RydWN0IG1kcDVfY3RsICpjdGwsIHN0cnVjdCBtZHA1X2ludGVyZmFjZSAqaW50ZikKIHsK IAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0YXRpYyBjb25zdCBlbnVtIG1kcDVfaW50Zm51bSBp bnRmbnVtW10gPSB7Ci0JCQlJTlRGMCwgSU5URjEsIElOVEYyLCBJTlRGMywKLQl9OworCXUzMiBj dGxfb3AgPSAwOworCisJaWYgKCFtZHA1X2NmZ19pbnRmX2lzX3ZpcnR1YWwoaW50Zi0+dHlwZSkp CisJCWN0bF9vcCB8PSBNRFA1X0NUTF9PUF9JTlRGX05VTShJTlRGMCArIGludGYtPm51bSk7CisK Kwlzd2l0Y2ggKGludGYtPnR5cGUpIHsKKwljYXNlIElOVEZfRFNJOgorCQlpZiAoaW50Zi0+bW9k ZSA9PSBNRFA1X0lOVEZfRFNJX01PREVfQ09NTUFORCkKKwkJCWN0bF9vcCB8PSBNRFA1X0NUTF9P UF9DTURfTU9ERTsKKwkJYnJlYWs7CisKKwljYXNlIElOVEZfV0I6CisJCWlmIChpbnRmLT5tb2Rl ID09IE1EUDVfSU5URl9XQl9NT0RFX0xJTkUpCisJCQljdGxfb3AgfD0gTURQNV9DVExfT1BfTU9E RShNT0RFX1dCXzJfTElORSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQog CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bC0+aHdfbG9jaywgZmxhZ3MpOwotCWN0bF93cml0ZShj dGwsIFJFR19NRFA1X0NUTF9PUChjdGwtPmlkKSwKLQkJCU1EUDVfQ1RMX09QX01PREUoY3RsLT5t b2RlKSB8Ci0JCQlNRFA1X0NUTF9PUF9JTlRGX05VTShpbnRmbnVtW2ludGZdKSk7CisJY3RsX3dy aXRlKGN0bCwgUkVHX01EUDVfQ1RMX09QKGN0bC0+aWQpLCBjdGxfb3ApOwogCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmN0bC0+aHdfbG9jaywgZmxhZ3MpOworfQorCitpbnQgbWRwNV9jdGxfc2V0 X2ludGYoc3RydWN0IG1kcDVfY3RsICpjdGwsIHN0cnVjdCBtZHA1X2ludGVyZmFjZSAqaW50ZikK K3sKKwlzdHJ1Y3QgbWRwNV9jdGxfbWFuYWdlciAqY3RsX21nciA9IGN0bC0+Y3RsbTsKKwlzdHJ1 Y3QgbWRwNV9rbXMgKm1kcDVfa21zID0gZ2V0X2ttcyhjdGxfbWdyKTsKKworCW1lbWNweSgmY3Rs LT5waXBlbGluZS5pbnRmLCBpbnRmLCBzaXplb2YoKmludGYpKTsKKworCS8qIFZpcnR1YWwgaW50 ZXJmYWNlcyBuZWVkIG5vdCBzZXQgYSBkaXNwbGF5IGludGYgKGUuZy46IFdyaXRlYmFjaykgKi8K KwlpZiAoIW1kcDVfY2ZnX2ludGZfaXNfdmlydHVhbChpbnRmLT50eXBlKSkKKwkJc2V0X2Rpc3Bs YXlfaW50ZihtZHA1X2ttcywgaW50Zik7CisKKwlzZXRfY3RsX29wKGN0bCwgaW50Zik7CiAKIAly ZXR1cm4gMDsKIH0KQEAgLTMwMyw3ICszNzUsNiBAQCBzdHJ1Y3QgbWRwNV9jdGxfbWFuYWdlciAq bWRwNV9jdGxtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJfQogCQljdGwtPmN0bG0g PSBjdGxfbWdyOwogCQljdGwtPmlkID0gYzsKLQkJY3RsLT5tb2RlID0gTU9ERV9OT05FOwogCQlj dGwtPnJlZ19vZmZzZXQgPSBjdGxfY2ZnLT5iYXNlW2NdOwogCQljdGwtPmZsdXNoX21hc2sgPSBN RFA1X0NUTF9GTFVTSF9DVEw7CiAJCWN0bC0+YnVzeSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2N0bC5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9tZHAvbWRwNS9tZHA1X2N0bC5oCmluZGV4IGFkNDg3ODguLjI3MWQ1YWMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jdGwuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY3RsLmgKQEAgLTM0LDcgKzM0LDggQEAgdm9pZCBtZHA1 X2N0bG1fZGVzdHJveShzdHJ1Y3QgbWRwNV9jdGxfbWFuYWdlciAqY3RsbSk7CiAgKi8KIHN0cnVj dCBtZHA1X2N0bCAqbWRwNV9jdGxtX3JlcXVlc3Qoc3RydWN0IG1kcDVfY3RsX21hbmFnZXIgKmN0 bG0sIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiAKLWludCBtZHA1X2N0bF9zZXRfaW50ZihzdHJ1 Y3QgbWRwNV9jdGwgKmN0bCwgaW50IGludGYpOworc3RydWN0IG1kcDVfaW50ZXJmYWNlOworaW50 IG1kcDVfY3RsX3NldF9pbnRmKHN0cnVjdCBtZHA1X2N0bCAqY3RsLCBzdHJ1Y3QgbWRwNV9pbnRl cmZhY2UgKmludGYpOwogCiBpbnQgbWRwNV9jdGxfc2V0X2N1cnNvcihzdHJ1Y3QgbWRwNV9jdGwg KmN0bCwgYm9vbCBlbmFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21k cC9tZHA1L21kcDVfZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1 X2VuY29kZXIuYwppbmRleCBhMDlmYTU4Li5mM2I2ZmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL21kcC9tZHA1L21kcDVfZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vbWRwL21kcDUvbWRwNV9lbmNvZGVyLmMKQEAgLTIzLDggKzIzLDcgQEAKIAogc3RydWN0IG1k cDVfZW5jb2RlciB7CiAJc3RydWN0IGRybV9lbmNvZGVyIGJhc2U7Ci0JaW50IGludGY7Ci0JZW51 bSBtZHA1X2ludGYgaW50Zl9pZDsKKwlzdHJ1Y3QgbWRwNV9pbnRlcmZhY2UgaW50ZjsKIAlzcGlu bG9ja190IGludGZfbG9jazsJLyogcHJvdGVjdCBSRUdfTURQNV9JTlRGXyogcmVnaXN0ZXJzICov CiAJYm9vbCBlbmFibGVkOwogCXVpbnQzMl90IGJzYzsKQEAgLTEyNiw3ICsxMjUsNyBAQCBzdGF0 aWMgdm9pZCBtZHA1X2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy LAogCXN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMgPSBnZXRfa21zKGVuY29kZXIpOwogCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcjsKLQlpbnQgaW50ZiA9IG1kcDVfZW5jb2Rlci0+aW50ZjsKKwlpbnQgaW50ZiA9 IG1kcDVfZW5jb2Rlci0+aW50Zi5udW07CiAJdWludDMyX3QgZHR2X2hzeW5jX3NrZXcsIHZzeW5j X3BlcmlvZCwgdnN5bmNfbGVuLCBjdHJsX3BvbDsKIAl1aW50MzJfdCBkaXNwbGF5X3Zfc3RhcnQs IGRpc3BsYXlfdl9lbmQ7CiAJdWludDMyX3QgaHN5bmNfc3RhcnRfeCwgaHN5bmNfZW5kX3g7CkBA IC0xODgsNyArMTg3LDcgQEAgc3RhdGljIHZvaWQgbWRwNV9lbmNvZGVyX21vZGVfc2V0KHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkgKiBESVNQTEFZX1ZfU1RBUlQgPSAoVkJQICogSENZ Q0xFKSArIEhCUAogCSAqIERJU1BMQVlfVl9FTkQgPSAoVkJQICsgVkFDVElWRSkgKiBIQ1lDTEUg LSAxIC0gSEZQCiAJICovCi0JaWYgKG1kcDVfZW5jb2Rlci0+aW50Zl9pZCA9PSBJTlRGX2VEUCkg eworCWlmIChtZHA1X2VuY29kZXItPmludGYudHlwZSA9PSBJTlRGX2VEUCkgewogCQlkaXNwbGF5 X3Zfc3RhcnQgKz0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CiAJCWRpc3BsYXlf dl9lbmQgLT0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKIAl9CkBAIC0yMjQs MTQgKzIyMywxNiBAQCBzdGF0aWMgdm9pZCBtZHA1X2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIpCiB7CiAJc3RydWN0IG1kcDVfZW5jb2RlciAqbWRwNV9lbmNvZGVy ID0gdG9fbWRwNV9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMg PSBnZXRfa21zKGVuY29kZXIpOwotCWludCBpbnRmID0gbWRwNV9lbmNvZGVyLT5pbnRmOworCWlu dCBsbSA9IG1kcDVfY3J0Y19nZXRfbG0oZW5jb2Rlci0+Y3J0Yyk7CisJc3RydWN0IG1kcDVfaW50 ZXJmYWNlICppbnRmID0gJm1kcDVfZW5jb2Rlci0+aW50ZjsKKwlpbnQgaW50Zm4gPSBtZHA1X2Vu Y29kZXItPmludGYubnVtOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoV0FSTl9PTigh bWRwNV9lbmNvZGVyLT5lbmFibGVkKSkKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUo Jm1kcDVfZW5jb2Rlci0+aW50Zl9sb2NrLCBmbGFncyk7Ci0JbWRwNV93cml0ZShtZHA1X2ttcywg UkVHX01EUDVfSU5URl9USU1JTkdfRU5HSU5FX0VOKGludGYpLCAwKTsKKwltZHA1X3dyaXRlKG1k cDVfa21zLCBSRUdfTURQNV9JTlRGX1RJTUlOR19FTkdJTkVfRU4oaW50Zm4pLCAwKTsKIAlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZtZHA1X2VuY29kZXItPmludGZfbG9jaywgZmxhZ3MpOwogCiAJ LyoKQEAgLTI0Miw3ICsyNDMsNyBAQCBzdGF0aWMgdm9pZCBtZHA1X2VuY29kZXJfZGlzYWJsZShz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiAJICogdGhlIHNldHRpbmdzIGNoYW5nZXMgZm9y IHRoZSBuZXcgbW9kZXNldCAobGlrZSBuZXcKIAkgKiBzY2Fub3V0IGJ1ZmZlcikgZG9uJ3QgbGF0 Y2ggcHJvcGVybHkuLgogCSAqLwotCW1kcF9pcnFfd2FpdCgmbWRwNV9rbXMtPmJhc2UsIGludGYy dmJsYW5rKGludGYpKTsKKwltZHBfaXJxX3dhaXQoJm1kcDVfa21zLT5iYXNlLCBpbnRmMnZibGFu ayhsbSwgaW50ZikpOwogCiAJYnNfc2V0KG1kcDVfZW5jb2RlciwgMCk7CiAKQEAgLTI1MywxOCAr MjU0LDE3IEBAIHN0YXRpYyB2b2lkIG1kcDVfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyKQogewogCXN0cnVjdCBtZHA1X2VuY29kZXIgKm1kcDVfZW5jb2RlciA9IHRv X21kcDVfZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zID0gZ2V0 X2ttcyhlbmNvZGVyKTsKLQlpbnQgaW50ZiA9IG1kcDVfZW5jb2Rlci0+aW50ZjsKKwlpbnQgaW50 Zm4gPSBtZHA1X2VuY29kZXItPmludGYubnVtOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlp ZiAoV0FSTl9PTihtZHA1X2VuY29kZXItPmVuYWJsZWQpKQogCQlyZXR1cm47CiAKLQltZHA1X2Ny dGNfc2V0X2ludGYoZW5jb2Rlci0+Y3J0YywgbWRwNV9lbmNvZGVyLT5pbnRmLAotCQkJbWRwNV9l bmNvZGVyLT5pbnRmX2lkKTsKKwltZHA1X2NydGNfc2V0X2ludGYoZW5jb2Rlci0+Y3J0YywgJm1k cDVfZW5jb2Rlci0+aW50Zik7CiAKIAlic19zZXQobWRwNV9lbmNvZGVyLCAxKTsKIAlzcGluX2xv Y2tfaXJxc2F2ZSgmbWRwNV9lbmNvZGVyLT5pbnRmX2xvY2ssIGZsYWdzKTsKLQltZHA1X3dyaXRl KG1kcDVfa21zLCBSRUdfTURQNV9JTlRGX1RJTUlOR19FTkdJTkVfRU4oaW50ZiksIDEpOworCW1k cDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X0lOVEZfVElNSU5HX0VOR0lORV9FTihpbnRmbiks IDEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcDVfZW5jb2Rlci0+aW50Zl9sb2NrLCBm bGFncyk7CiAKIAltZHA1X2VuY29kZXItPmVuYWJsZWQgPSB0cnVlOwpAQCAtMjc4LDggKzI3OCw4 IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIG1kcDVfZW5j b2Rlcl9oZWxwZXJfZnVuY3MgPSB7CiB9OwogCiAvKiBpbml0aWFsaXplIGVuY29kZXIgKi8KLXN0 cnVjdCBkcm1fZW5jb2RlciAqbWRwNV9lbmNvZGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgaW50IGludGYsCi0JCWVudW0gbWRwNV9pbnRmIGludGZfaWQpCitzdHJ1Y3QgZHJtX2VuY29k ZXIgKm1kcDVfZW5jb2Rlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0 IG1kcDVfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9 IE5VTEw7CiAJc3RydWN0IG1kcDVfZW5jb2RlciAqbWRwNV9lbmNvZGVyOwpAQCAtMjkxLDggKzI5 MSw3IEBAIHN0cnVjdCBkcm1fZW5jb2RlciAqbWRwNV9lbmNvZGVyX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgaW50IGludGYsCiAJCWdvdG8gZmFpbDsKIAl9CiAKLQltZHA1X2VuY29kZXIt PmludGYgPSBpbnRmOwotCW1kcDVfZW5jb2Rlci0+aW50Zl9pZCA9IGludGZfaWQ7CisJbWVtY3B5 KCZtZHA1X2VuY29kZXItPmludGYsIGludGYsIHNpemVvZihtZHA1X2VuY29kZXItPmludGYpKTsK IAllbmNvZGVyID0gJm1kcDVfZW5jb2Rlci0+YmFzZTsKIAogCXNwaW5fbG9ja19pbml0KCZtZHA1 X2VuY29kZXItPmludGZfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21k cC9tZHA1L21kcDVfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfa21z LmMKaW5kZXggOTJiNjFkYi4uMzkwZDlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9tZHAvbWRwNS9tZHA1X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUv bWRwNV9rbXMuYwpAQCAtMjIzLDggKzIyMywxNCBAQCBzdGF0aWMgaW50IG1vZGVzZXRfaW5pdChz dHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zKQogCX0KIAogCWlmIChwcml2LT5oZG1pKSB7CisJCXN0 cnVjdCBtZHA1X2ludGVyZmFjZSBpbnRmID0geworCQkJCS5udW0JPSAzLAorCQkJCS50eXBlCT0g SU5URl9IRE1JLAorCQkJCS5tb2RlCT0gTURQNV9JTlRGX01PREVfTk9ORSwKKwkJfTsKKwogCQkv KiBDb25zdHJ1Y3QgZW5jb2RlciBmb3IgSERNSTogKi8KLQkJZW5jb2RlciA9IG1kcDVfZW5jb2Rl cl9pbml0KGRldiwgMywgSU5URl9IRE1JKTsKKwkJZW5jb2RlciA9IG1kcDVfZW5jb2Rlcl9pbml0 KGRldiwgJmludGYpOwogCQlpZiAoSVNfRVJSKGVuY29kZXIpKSB7CiAJCQlkZXZfZXJyKGRldi0+ ZGV2LCAiZmFpbGVkIHRvIGNvbnN0cnVjdCBlbmNvZGVyXG4iKTsKIAkJCXJldCA9IFBUUl9FUlIo ZW5jb2Rlcik7CkBAIC0yNDIsOCArMjQ4LDE0IEBAIHN0YXRpYyBpbnQgbW9kZXNldF9pbml0KHN0 cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMpCiAJfQogCiAJaWYgKHByaXYtPmVkcCkgeworCQlzdHJ1 Y3QgbWRwNV9pbnRlcmZhY2UgaW50ZiA9IHsKKwkJCQkubnVtCT0gMCwKKwkJCQkudHlwZQk9IElO VEZfZURQLAorCQkJCS5tb2RlCT0gTURQNV9JTlRGX01PREVfTk9ORSwKKwkJfTsKKwogCQkvKiBD b25zdHJ1Y3QgZW5jb2RlciBmb3IgZURQOiAqLwotCQllbmNvZGVyID0gbWRwNV9lbmNvZGVyX2lu aXQoZGV2LCAwLCBJTlRGX2VEUCk7CisJCWVuY29kZXIgPSBtZHA1X2VuY29kZXJfaW5pdChkZXYs ICZpbnRmKTsKIAkJaWYgKElTX0VSUihlbmNvZGVyKSkgewogCQkJZGV2X2VycihkZXYtPmRldiwg ImZhaWxlZCB0byBjb25zdHJ1Y3QgZURQIGVuY29kZXJcbiIpOwogCQkJcmV0ID0gUFRSX0VSUihl bmNvZGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9r bXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuaAppbmRleCA0OWQw MTFlLi4xYTZhYTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21k cDVfa21zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2ttcy5oCkBA IC05NCw2ICs5NCwyNCBAQCBzdHJ1Y3QgbWRwNV9wbGFuZV9zdGF0ZSB7CiAjZGVmaW5lIHRvX21k cDVfcGxhbmVfc3RhdGUoeCkgXAogCQljb250YWluZXJfb2YoeCwgc3RydWN0IG1kcDVfcGxhbmVf c3RhdGUsIGJhc2UpCiAKK2VudW0gbWRwNV9pbnRmX21vZGUgeworCU1EUDVfSU5URl9NT0RFX05P TkUgPSAwLAorCisJLyogTW9kZXMgdXNlZCBmb3IgRFNJIGludGVyZmFjZSAoSU5URl9EU0kgdHlw ZSk6ICovCisJTURQNV9JTlRGX0RTSV9NT0RFX1ZJREVPLAorCU1EUDVfSU5URl9EU0lfTU9ERV9D T01NQU5ELAorCisJLyogTW9kZXMgdXNlZCBmb3IgV0IgaW50ZXJmYWNlIChJTlRGX1dCIHR5cGUp OiAgKi8KKwlNRFA1X0lOVEZfV0JfTU9ERV9CTE9DSywKKwlNRFA1X0lOVEZfV0JfTU9ERV9MSU5F LAorfTsKKworc3RydWN0IG1kcDVfaW50ZXJmYWNlIHsKKwlpbnQgbnVtOyAvKiBkaXNwbGF5IGlu dGVyZmFjZSBudW1iZXIgKi8KKwllbnVtIG1kcDVfaW50Zl90eXBlIHR5cGU7CisJZW51bSBtZHA1 X2ludGZfbW9kZSBtb2RlOworfTsKKwogc3RhdGljIGlubGluZSB2b2lkIG1kcDVfd3JpdGUoc3Ry dWN0IG1kcDVfa21zICptZHA1X2ttcywgdTMyIHJlZywgdTMyIGRhdGEpCiB7CiAJbXNtX3dyaXRl bChkYXRhLCBtZHA1X2ttcy0+bW1pbyArIHJlZyk7CkBAIC0xMzAsOSArMTQ4LDkgQEAgc3RhdGlj IGlubGluZSBpbnQgcGlwZTJuY2xpZW50cyhlbnVtIG1kcDVfcGlwZSBwaXBlKQogCX0KIH0KIAot c3RhdGljIGlubGluZSB1aW50MzJfdCBpbnRmMmVycihpbnQgaW50ZikKK3N0YXRpYyBpbmxpbmUg dWludDMyX3QgaW50ZjJlcnIoaW50IGludGZfbnVtKQogewotCXN3aXRjaCAoaW50ZikgeworCXN3 aXRjaCAoaW50Zl9udW0pIHsKIAljYXNlIDA6ICByZXR1cm4gTURQNV9JUlFfSU5URjBfVU5ERVJf UlVOOwogCWNhc2UgMTogIHJldHVybiBNRFA1X0lSUV9JTlRGMV9VTkRFUl9SVU47CiAJY2FzZSAy OiAgcmV0dXJuIE1EUDVfSVJRX0lOVEYyX1VOREVSX1JVTjsKQEAgLTE0MSw5ICsxNTksMjQgQEAg c3RhdGljIGlubGluZSB1aW50MzJfdCBpbnRmMmVycihpbnQgaW50ZikKIAl9CiB9CiAKLXN0YXRp YyBpbmxpbmUgdWludDMyX3QgaW50ZjJ2YmxhbmsoaW50IGludGYpCitzdGF0aWMgaW5saW5lIHVp bnQzMl90IGludGYydmJsYW5rKGludCBsbSwgc3RydWN0IG1kcDVfaW50ZXJmYWNlICppbnRmKQog ewotCXN3aXRjaCAoaW50ZikgeworI2RlZmluZSBHRVRfUElOR19QT05HX0lEKGxheWVyX21peGVy KQkoKGxheWVyX21peGVyID09IDUpID8gMyA6IGxheWVyX21peGVyKQorCisJLyoKKwkgKiBJbiBj YXNlIG9mIERTSSBDb21tYW5kIE1vZGUsIHRoZSBQaW5nIFBvbmcncyByZWFkIHBvaW50ZXIgSVJR CisJICogYWN0cyBhcyBhIFZibGFuayBzaWduYWwuIFRoZSBQaW5nIFBvbmcgYnVmZmVyIHVzZWQg aXMgYm91bmQgdG8KKwkgKiBsYXllciBtaXhlci4KKwkgKi8KKworCWlmICgoaW50Zi0+dHlwZSA9 PSBJTlRGX0RTSSkgJiYKKwkJCShpbnRmLT5tb2RlID09IE1EUDVfSU5URl9EU0lfTU9ERV9DT01N QU5EKSkKKwkJcmV0dXJuIE1EUDVfSVJRX1BJTkdfUE9OR18wX1JEX1BUUiA8PCBHRVRfUElOR19Q T05HX0lEKGxtKTsKKworCWlmIChpbnRmLT50eXBlID09IElOVEZfV0IpCisJCXJldHVybiBNRFA1 X0lSUV9XQl8yX0RPTkU7CisKKwlzd2l0Y2ggKGludGYtPm51bSkgewogCWNhc2UgMDogIHJldHVy biBNRFA1X0lSUV9JTlRGMF9WU1lOQzsKIAljYXNlIDE6ICByZXR1cm4gTURQNV9JUlFfSU5URjFf VlNZTkM7CiAJY2FzZSAyOiAgcmV0dXJuIE1EUDVfSVJRX0lOVEYyX1ZTWU5DOwpAQCAtMTk4LDEy ICsyMzEsMTEgQEAgdWludDMyX3QgbWRwNV9jcnRjX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpOwogCiBpbnQgbWRwNV9jcnRjX2dldF9sbShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogdm9p ZCBtZHA1X2NydGNfY2FuY2VsX3BlbmRpbmdfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSk7Ci12b2lkIG1kcDVfY3J0Y19zZXRfaW50ZihzdHJ1Y3QgZHJt X2NydGMgKmNydGMsIGludCBpbnRmLAotCQllbnVtIG1kcDVfaW50ZiBpbnRmX2lkKTsKK3ZvaWQg bWRwNV9jcnRjX3NldF9pbnRmKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IG1kcDVfaW50 ZXJmYWNlICppbnRmKTsKIHN0cnVjdCBkcm1fY3J0YyAqbWRwNV9jcnRjX2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKIAkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIGludCBpZCk7CiAKLXN0 cnVjdCBkcm1fZW5jb2RlciAqbWRwNV9lbmNvZGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgaW50IGludGYsCi0JCWVudW0gbWRwNV9pbnRmIGludGZfaWQpOworc3RydWN0IGRybV9lbmNv ZGVyICptZHA1X2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qg bWRwNV9pbnRlcmZhY2UgKmludGYpOwogCiAjZW5kaWYgLyogX19NRFA1X0tNU19IX18gKi8KLS0g ClF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuCgpUaGUgUXVhbGNvbW0gSW5ub3ZhdGlv biBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLCBhIExp bnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=