From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id oA88skH4089499 for ; Mon, 8 Nov 2010 02:54:46 -0600 Received: from mail.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9451B1398EDE for ; Mon, 8 Nov 2010 00:56:10 -0800 (PST) Received: from mail.internode.on.net (bld-mail12.adl6.internode.on.net [150.101.137.97]) by cuda.sgi.com with ESMTP id OBUHKITFnG6rGUjJ for ; Mon, 08 Nov 2010 00:56:10 -0800 (PST) Received: from dastard (unverified [121.44.100.105]) by mail.internode.on.net (SurgeMail 3.8f2) with ESMTP id 45731656-1927428 for ; Mon, 08 Nov 2010 19:26:08 +1030 (CDT) Received: from chute ([192.168.1.1] helo=disappointment) by dastard with esmtp (Exim 4.71) (envelope-from ) id 1PFNWI-0001CV-HD for xfs@oss.sgi.com; Mon, 08 Nov 2010 19:56:06 +1100 Received: from dave by disappointment with local (Exim 4.72) (envelope-from ) id 1PFNVa-0004nO-MG for xfs@oss.sgi.com; Mon, 08 Nov 2010 19:55:22 +1100 From: Dave Chinner Subject: [PATCH 03/16] [RFC] xfs: use generic per-cpu counter infrastructure Date: Mon, 8 Nov 2010 19:55:06 +1100 Message-Id: <1289206519-18377-4-git-send-email-david@fromorbit.com> In-Reply-To: <1289206519-18377-1-git-send-email-david@fromorbit.com> References: <1289206519-18377-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: xfs-bounces@oss.sgi.com Errors-To: xfs-bounces@oss.sgi.com To: xfs@oss.sgi.com RnJvbTogRGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgoKWEZTIGhhcyBhIHBlci1j cHUgY291bnRlciBpbXBsZW1lbnRhdGlvbiBmb3IgaW4tY29yZSBzdXBlcmJsb2NrCmNvdW50ZXJz IHRoYXQgcHJlLWRhdGVkIHRoZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLiBJdCBpcyBjb21wbGV4 CmFuZCBiYXJvcXVlIGFzIGl0IGlzIHRhaWxvcmVkIGRpcmVjdGx5IHRvIHRoZSBuZWVkcyBvZiBF Tk9TUEMKZGV0ZWN0aW9uLiBJbXBsZW1lbnQgdGhlIGNvbXBsZXggYWNjdXJhdGUtY29tcGFyZS1h bmQtYWRkCmNhbGN1bGF0aW9uIGluIHRoZSBnZW5lcmljIHBlci1jcHUgY291bnRlciBjb2RlIGFu ZCBjb252ZXJ0IHRoZQpYRlMgY291bnRlcnMgdG8gdXNlIHRoZSBtdWNoIHNpbXBsZXIgZ2VuZXJp YyBjb3VudGVyIGNvZGUuCgpQYXNzZXMgeGZzcWEgb24gU01QIHN5c3RlbS4KClN0aWxsIHRvIGRv OgoKCTEuIFVQIGJ1aWxkIGFuZCB0ZXN0LgoJMi4gc3BsaXQgaW50byBzZXBhcmF0ZSBwYXRjaGVz CgpGb3IgZGlzY3Vzc2lvbjoKCTEuIGtpbGwgdGhlIG5vLXBlci1jcHUtY291bnRlciBtb2RlPwoJ Mi4gZG9lcyB3ZSBuZWVkIGEgY3VzdG9tIGJhdGNoIHNpemU/CgkzLiBkbyB3ZSBuZWVkIHRvIGZh Y3RvciB4ZnNfbW9kX3NiX2luY29yZSgpPwoJNC4gc2hvdWxkIGFsbCB0aGUgcmVhZGVycyBqdXN0 IHN1bSB0aGUgY291bnRlcnMgdGhlbXNlbHZlcwoJICAgYW5kIGtpbGwgdGhlIHdyYXBwZXLRlT8K ClNpZ25lZC1vZmYtYnk6IERhdmUgQ2hpbm5lciA8ZGNoaW5uZXJAcmVkaGF0LmNvbT4KLS0tCiBm cy94ZnMvbGludXgtMi42L3hmc19saW51eC5oICAgfCAgICA5IC0KIGZzL3hmcy9saW51eC0yLjYv eGZzX3N1cGVyLmMgICB8ICAgIDQgKy0KIGZzL3hmcy94ZnNfZnNvcHMuYyAgICAgICAgICAgICB8 ICAgIDQgKy0KIGZzL3hmcy94ZnNfbW91bnQuYyAgICAgICAgICAgICB8ICA4MzQgKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZnMveGZzL3hmc19tb3VudC5oICAgICAg ICAgICAgIHwgICA4MCArLS0tCiBpbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmggfCAgIDE2 ICsKIGxpYi9wZXJjcHVfY291bnRlci5jICAgICAgICAgICB8ICAgNzkgKysrKwogNyBmaWxlcyBj aGFuZ2VkLCAzNDEgaW5zZXJ0aW9ucygrKSwgNjg1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51 eC5oCmluZGV4IDIxNGRkZDcuLjlmYTRmMmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYv eGZzX2xpbnV4LmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaApAQCAtODgsMTUg Kzg4LDYgQEAKICNpbmNsdWRlIDx4ZnNfc3VwZXIuaD4KICNpbmNsdWRlIDx4ZnNfYnVmLmg+CiAK LS8qCi0gKiBGZWF0dXJlIG1hY3JvcyAoZGlzYWJsZS9lbmFibGUpCi0gKi8KLSNpZmRlZiBDT05G SUdfU01QCi0jZGVmaW5lIEhBVkVfUEVSQ1BVX1NCCS8qIHBlciBjcHUgc3VwZXJibG9jayBjb3Vu dGVycyBhcmUgYSAyLjYgZmVhdHVyZSAqLwotI2Vsc2UKLSN1bmRlZiAgSEFWRV9QRVJDUFVfU0IJ LyogcGVyIGNwdSBzdXBlcmJsb2NrIGNvdW50ZXJzIGFyZSBhIDIuNiBmZWF0dXJlICovCi0jZW5k aWYKLQogI2RlZmluZSBpcml4X3NnaWRfaW5oZXJpdAl4ZnNfcGFyYW1zLnNnaWRfaW5oZXJpdC52 YWwKICNkZWZpbmUgaXJpeF9zeW1saW5rX21vZGUJeGZzX3BhcmFtcy5zeW1saW5rX21vZGUudmFs CiAjZGVmaW5lIHhmc19wYW5pY19tYXNrCQl4ZnNfcGFyYW1zLnBhbmljX21hc2sudmFsCmRpZmYg LS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94 ZnNfc3VwZXIuYwppbmRleCA1M2FiNDdmLi5mYTc4OWI3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlu dXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAg LTEyMzAsOSArMTIzMCw5IEBAIHhmc19mc19zdGF0ZnMoCiAJc3RhdHAtPmZfZnNpZC52YWxbMF0g PSAodTMyKWlkOwogCXN0YXRwLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCi0J eGZzX2ljc2Jfc3luY19jb3VudGVycyhtcCwgWEZTX0lDU0JfTEFaWV9DT1VOVCk7Ci0KIAlzcGlu X2xvY2soJm1wLT5tX3NiX2xvY2spOworCXhmc19pY3NiX3N5bmNfY291bnRlcnNfbG9ja2VkKG1w KTsKKwogCXN0YXRwLT5mX2JzaXplID0gc2JwLT5zYl9ibG9ja3NpemU7CiAJbHNpemUgPSBzYnAt PnNiX2xvZ3N0YXJ0ID8gc2JwLT5zYl9sb2dibG9ja3MgOiAwOwogCXN0YXRwLT5mX2Jsb2NrcyA9 IHNicC0+c2JfZGJsb2NrcyAtIGxzaXplOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc29wcy5j IGIvZnMveGZzL3hmc19mc29wcy5jCmluZGV4IGE3YzExNmUuLjQ0ZWNmMWIgMTAwNjQ0Ci0tLSBh L2ZzL3hmcy94ZnNfZnNvcHMuYworKysgYi9mcy94ZnMveGZzX2Zzb3BzLmMKQEAgLTQ3OCw3ICs0 NzgsNyBAQCB4ZnNfZnNfY291bnRzKAogCXhmc19tb3VudF90CQkqbXAsCiAJeGZzX2Zzb3BfY291 bnRzX3QJKmNudCkKIHsKLQl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzKG1wLCBYRlNfSUNTQl9MQVpZ X0NPVU5UKTsKKwl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzKG1wKTsKIAlzcGluX2xvY2soJm1wLT5t X3NiX2xvY2spOwogCWNudC0+ZnJlZWRhdGEgPSBtcC0+bV9zYi5zYl9mZGJsb2NrcyAtIFhGU19B TExPQ19TRVRfQVNJREUobXApOwogCWNudC0+ZnJlZXJ0eCA9IG1wLT5tX3NiLnNiX2ZyZXh0ZW50 czsKQEAgLTU0MCw3ICs1NDAsNyBAQCB4ZnNfcmVzZXJ2ZV9ibG9ja3MoCiAJICovCiByZXRyeToK IAlzcGluX2xvY2soJm1wLT5tX3NiX2xvY2spOwotCXhmc19pY3NiX3N5bmNfY291bnRlcnNfbG9j a2VkKG1wLCAwKTsKKwl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzX2xvY2tlZChtcCk7CiAKIAkvKgog CSAqIElmIG91ciBwcmV2aW91cyByZXNlcnZhdGlvbiB3YXMgbGFyZ2VyIHRoYW4gdGhlIGN1cnJl bnQgdmFsdWUsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmMgYi9mcy94ZnMveGZzX21v dW50LmMKaW5kZXggMTllOWRmYS4uMGQ5YTAzMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3Vu dC5jCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuYwpAQCAtNDYsMTkgKzQ2LDYgQEAKIAogU1RBVElD IHZvaWQJeGZzX3VubW91bnRmc193YWl0KHhmc19tb3VudF90ICopOwogCi0KLSNpZmRlZiBIQVZF X1BFUkNQVV9TQgotU1RBVElDIHZvaWQJeGZzX2ljc2JfYmFsYW5jZV9jb3VudGVyKHhmc19tb3Vu dF90ICosIHhmc19zYl9maWVsZF90LAotCQkJCQkJaW50KTsKLVNUQVRJQyB2b2lkCXhmc19pY3Ni X2JhbGFuY2VfY291bnRlcl9sb2NrZWQoeGZzX21vdW50X3QgKiwgeGZzX3NiX2ZpZWxkX3QsCi0J CQkJCQlpbnQpOwotU1RBVElDIHZvaWQJeGZzX2ljc2JfZGlzYWJsZV9jb3VudGVyKHhmc19tb3Vu dF90ICosIHhmc19zYl9maWVsZF90KTsKLSNlbHNlCi0KLSNkZWZpbmUgeGZzX2ljc2JfYmFsYW5j ZV9jb3VudGVyKG1wLCBhLCBiKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSB4ZnNfaWNzYl9i YWxhbmNlX2NvdW50ZXJfbG9ja2VkKG1wLCBhLCBiKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYK LQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJc2hvcnQgb2Zmc2V0OwogCXNob3J0IHR5cGU7CS8q IDAgPSBpbnRlZ2VyCkBAIC0yODAsNiArMjY3LDExMSBAQCB4ZnNfZnJlZV9wZXJhZygKIAl9CiB9 CiAKKworLyoKKyAqIFBlci1jcHUgaW5jb3JlIHN1cGVyYmxvY2sgY291bnRlcnMKKyAqCisgKiBT aW1wbGUgY29uY2VwdCwgZGlmZmljdWx0IGltcGxlbWVudGF0aW9uLCBub3cgc29tZXdoYXQgc2lt cGxpZmllZCBieSBnZW5lcmljCisgKiBwZXItY3B1IGNvdW50ZXIgc3VwcG9ydC4gIFRoaXMgcHJv dmlkZXMgZGlzdHJpYnV0ZWQgcGVyIGNwdSBjb3VudGVycyBmb3IKKyAqIGNvbnRlbmRlZCBmaWVs ZHMgKGUuZy4gIGZyZWUgYmxvY2sgY291bnQpLgorICoKKyAqIERpZmZpY3VsdGllcyBhcmlzZSBp biB0aGF0IHRoZSBpbmNvcmUgc2IgaXMgdXNlZCBmb3IgRU5PU1BDIGNoZWNraW5nLCBhbmQKKyAq IGhlbmNlIG5lZWRzIHRvIGJlIGFjY3VyYXRlbHkgcmVhZCB3aGVuIHdlIGFyZSBydW5uaW5nIGxv dyBvbiBzcGFjZS4gSGVuY2UgV2UKKyAqIG5lZWQgdG8gY2hlY2sgYWdhaW5zdCBjb3VudGVyIGVy cm9yIGJvdW5kcyBhbmQgZGV0ZXJtaW5lIGhvdyBhY2N1cmF0ZWx5IHRvCisgKiBzdW0gYmFzZWQg b24gdGhhdCBtZXRyaWMuIFRoZSBwZXJjcHUgY291bnRlcnMgdGFrZSBjYXJlIG9mIHRoaXMgZm9y IHVzLAorICogc28gd2Ugb25seSBuZWVkIHRvIG1vZGlmeSB0aGUgZmFzdCBwYXRoIHRvIGhhbmRs ZSBwZXItY3B1IGNvdW50ZXIgZXJyb3IKKyAqIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGlu dAoreGZzX2ljc2JfYWRkKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCWludAkJCWNvdW50ZXIs CisJaW50NjRfdAkJCWRlbHRhLAorCWludDY0X3QJCQl0aHJlc2hvbGQpCit7CisJaW50CQkJcmV0 OworCisJcmV0ID0gcGVyY3B1X2NvdW50ZXJfYWRkX3VubGVzc19sdCgmbXAtPm1faWNzYltjb3Vu dGVyXSwgZGVsdGEsCisJCQkJCQkJCXRocmVzaG9sZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVy biAtRU5PU1BDOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hmc19pY3Ni X3NldCgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwlpbnQJCQljb3VudGVyLAorCWludDY0X3QJ CQl2YWx1ZSkKK3sKKwlwZXJjcHVfY291bnRlcl9zZXQoJm1wLT5tX2ljc2JbY291bnRlcl0sIHZh bHVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQ2NF90Cit4ZnNfaWNzYl9zdW0oCisJc3RydWN0 IHhmc19tb3VudAkqbXAsCisJaW50CQkJY291bnRlcikKK3sKKwlyZXR1cm4gcGVyY3B1X2NvdW50 ZXJfc3VtX3Bvc2l0aXZlKCZtcC0+bV9pY3NiW2NvdW50ZXJdKTsKK30KKworc3RhdGljIGlubGlu ZSBpbnQ2NF90Cit4ZnNfaWNzYl9yZWFkKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCWludAkJ CWNvdW50ZXIpCit7CisJcmV0dXJuIHBlcmNwdV9jb3VudGVyX3JlYWRfcG9zaXRpdmUoJm1wLT5t X2ljc2JbY291bnRlcl0pOworfQorCit2b2lkCit4ZnNfaWNzYl9yZWluaXRfY291bnRlcnMoCisJ c3RydWN0IHhmc19tb3VudAkqbXApCit7CisJeGZzX2ljc2Jfc2V0KG1wLCBYRlNfSUNTQl9GREJM T0NLUywgbXAtPm1fc2Iuc2JfZmRibG9ja3MpOworCXhmc19pY3NiX3NldChtcCwgWEZTX0lDU0Jf SUZSRUUsIG1wLT5tX3NiLnNiX2lmcmVlKTsKKwl4ZnNfaWNzYl9zZXQobXAsIFhGU19JQ1NCX0lD T1VOVCwgbXAtPm1fc2Iuc2JfaWNvdW50KTsKK30KKworaW50Cit4ZnNfaWNzYl9pbml0X2NvdW50 ZXJzKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wKQoreworCWludAkJCWk7CisJaW50CQkJZXJyb3I7 CisKKwlmb3IgKGkgPSAwOyBpIDwgWEZTX0lDU0JfTUFYOyBpKyspIHsKKwkJZXJyb3IgPSBwZXJj cHVfY291bnRlcl9pbml0KCZtcC0+bV9pY3NiW2ldLCAwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290 byBvdXRfZXJyb3I7CisJfQorCXhmc19pY3NiX3JlaW5pdF9jb3VudGVycyhtcCk7CisJcmV0dXJu IDA7CisKK291dF9lcnJvcjoKKwlmb3IgKDsgaSA+PSAwOyBpLS0pCisJCXBlcmNwdV9jb3VudGVy X2Rlc3Ryb3koJm1wLT5tX2ljc2JbaV0pOworCXJldHVybiBlcnJvcjsKK30KKwordm9pZAoreGZz X2ljc2JfZGVzdHJveV9jb3VudGVycygKKwl4ZnNfbW91bnRfdAkqbXApCit7CisJaW50CQlpOwor CisJZm9yIChpID0gMDsgaSA8IFhGU19JQ1NCX01BWDsgaSsrKQorCQlwZXJjcHVfY291bnRlcl9k ZXN0cm95KCZtcC0+bV9pY3NiW2ldKTsKK30KKwordm9pZAoreGZzX2ljc2Jfc3luY19jb3VudGVy c19sb2NrZWQoCisJeGZzX21vdW50X3QJKm1wKQoreworCW1wLT5tX3NiLnNiX2ljb3VudCA9IHhm c19pY3NiX3N1bShtcCwgWEZTX0lDU0JfSUNPVU5UKTsKKwltcC0+bV9zYi5zYl9pZnJlZSA9IHhm c19pY3NiX3N1bShtcCwgWEZTX0lDU0JfSUZSRUUpOworCW1wLT5tX3NiLnNiX2ZkYmxvY2tzID0g eGZzX2ljc2Jfc3VtKG1wLCBYRlNfSUNTQl9GREJMT0NLUyk7Cit9CisKIC8qCiAgKiBDaGVjayBz aXplIG9mIGRldmljZSBiYXNlZCBvbiB0aGUgKGRhdGEvcmVhbHRpbWUpIGJsb2NrIGNvdW50Lgog ICogTm90ZTogdGhpcyBjaGVjayBpcyB1c2VkIGJ5IHRoZSBncm93ZnMgY29kZSBhcyB3ZWxsIGFz IG1vdW50LgpAQCAtMTU2Miw3ICsxNjU0LDcgQEAgeGZzX2xvZ19zYmNvdW50KAogCWlmICgheGZz X2ZzX3dyaXRhYmxlKG1wKSkKIAkJcmV0dXJuIDA7CiAKLQl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJz KG1wLCAwKTsKKwl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzKG1wKTsKIAogCS8qCiAJICogd2UgZG9u J3QgbmVlZCB0byBkbyB0aGlzIGlmIHdlIGFyZSB1cGRhdGluZyB0aGUgc3VwZXJibG9jawpAQCAt MTY3NCw5ICsxNzY2LDkgQEAgeGZzX21vZF9pbmNvcmVfc2JfdW5sb2NrZWQoCiAJaW50NjRfdAkJ ZGVsdGEsCiAJaW50CQlyc3ZkKQogewotCWludAkJc2NvdW50ZXI7CS8qIHNob3J0IGNvdW50ZXIg Zm9yIDMyIGJpdCBmaWVsZHMgKi8KLQlsb25nIGxvbmcJbGNvdW50ZXI7CS8qIGxvbmcgY291bnRl ciBmb3IgNjQgYml0IGZpZWxkcyAqLwotCWxvbmcgbG9uZwlyZXNfdXNlZCwgcmVtOworCWludAkJ c2NvdW50ZXIgPSAwOwkvKiBzaG9ydCBjb3VudGVyIGZvciAzMiBiaXQgZmllbGRzICovCisJbG9u ZyBsb25nCWxjb3VudGVyID0gMDsJLyogbG9uZyBjb3VudGVyIGZvciA2NCBiaXQgZmllbGRzICov CisJbG9uZyBsb25nCXJlc191c2VkOwogCiAJLyoKIAkgKiBXaXRoIHRoZSBpbi1jb3JlIHN1cGVy YmxvY2sgc3BpbiBsb2NrIGhlbGQsIHN3aXRjaApAQCAtMTcwOCw0MyArMTgwMCw0NSBAQCB4ZnNf bW9kX2luY29yZV9zYl91bmxvY2tlZCgKIAkJCW1wLT5tX3NiLnNiX2ZkYmxvY2tzIC0gWEZTX0FM TE9DX1NFVF9BU0lERShtcCk7CiAJCXJlc191c2VkID0gKGxvbmcgbG9uZykobXAtPm1fcmVzYmxr cyAtIG1wLT5tX3Jlc2Jsa3NfYXZhaWwpOwogCi0JCWlmIChkZWx0YSA+IDApIHsJCS8qIFB1dHRp bmcgYmxvY2tzIGJhY2sgKi8KKwkJLyoKKwkJICogaWYgd2UgYXJlIHB1dHRpbmcgYmxvY2tzIGJh Y2ssIHB1dCB0aGVtIGludG8gdGhlIHJlc2VydmUKKwkJICogYmxvY2sgcG9vbCBmaXJzdC4KKwkJ ICovCisJCWlmIChyZXNfdXNlZCAmJiBkZWx0YSA+IDApIHsKIAkJCWlmIChyZXNfdXNlZCA+IGRl bHRhKSB7CiAJCQkJbXAtPm1fcmVzYmxrc19hdmFpbCArPSBkZWx0YTsKKwkJCQlkZWx0YSA9IDA7 CiAJCQl9IGVsc2UgewotCQkJCXJlbSA9IGRlbHRhIC0gcmVzX3VzZWQ7CiAJCQkJbXAtPm1fcmVz Ymxrc19hdmFpbCA9IG1wLT5tX3Jlc2Jsa3M7Ci0JCQkJbGNvdW50ZXIgKz0gcmVtOworCQkJCWRl bHRhIC09IHJlc191c2VkOwogCQkJfQotCQl9IGVsc2UgewkJCQkvKiBUYWtpbmcgYmxvY2tzIGF3 YXkgKi8KLQkJCWxjb3VudGVyICs9IGRlbHRhOwotCQkJaWYgKGxjb3VudGVyID49IDApIHsKLQkJ CQltcC0+bV9zYi5zYl9mZGJsb2NrcyA9IGxjb3VudGVyICsKLQkJCQkJCQlYRlNfQUxMT0NfU0VU X0FTSURFKG1wKTsKKwkJCWlmICghZGVsdGEpCiAJCQkJcmV0dXJuIDA7Ci0JCQl9CisJCX0KIAot CQkJLyoKLQkJCSAqIFdlIGFyZSBvdXQgb2YgYmxvY2tzLCB1c2UgYW55IGF2YWlsYWJsZSByZXNl cnZlZAotCQkJICogYmxvY2tzIGlmIHdlcmUgYWxsb3dlZCB0by4KLQkJCSAqLwotCQkJaWYgKCFy c3ZkKQotCQkJCXJldHVybiBYRlNfRVJST1IoRU5PU1BDKTsKKwkJbGNvdW50ZXIgKz0gZGVsdGE7 CisJCWlmIChsaWtlbHkobGNvdW50ZXIgPj0gMCkpIHsKKwkJCW1wLT5tX3NiLnNiX2ZkYmxvY2tz ID0gbGNvdW50ZXIgKworCQkJCQkJWEZTX0FMTE9DX1NFVF9BU0lERShtcCk7CisJCQlyZXR1cm4g MDsKKwkJfQogCi0JCQlsY291bnRlciA9IChsb25nIGxvbmcpbXAtPm1fcmVzYmxrc19hdmFpbCAr IGRlbHRhOwotCQkJaWYgKGxjb3VudGVyID49IDApIHsKLQkJCQltcC0+bV9yZXNibGtzX2F2YWls ID0gbGNvdW50ZXI7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlwcmludGtfb25jZShLRVJOX1dB Uk5JTkcKLQkJCQkiRmlsZXN5c3RlbSBcIiVzXCI6IHJlc2VydmUgYmxvY2tzIGRlcGxldGVkISAi Ci0JCQkJIkNvbnNpZGVyIGluY3JlYXNpbmcgcmVzZXJ2ZSBwb29sIHNpemUuIiwKLQkJCQltcC0+ bV9mc25hbWUpOworCQkvKiBFTk9TUEMgKi8KKwkJQVNTRVJUKGRlbHRhIDwgMCk7CisJCWlmICgh cnN2ZCkKIAkJCXJldHVybiBYRlNfRVJST1IoRU5PU1BDKTsKKworCQlsY291bnRlciA9IChsb25n IGxvbmcpbXAtPm1fcmVzYmxrc19hdmFpbCArIGRlbHRhOworCQlpZiAobGNvdW50ZXIgPj0gMCkg eworCQkJbXAtPm1fcmVzYmxrc19hdmFpbCA9IGxjb3VudGVyOworCQkJcmV0dXJuIDA7CiAJCX0K KwkJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HCisJCQkiRmlsZXN5c3RlbSBcIiVzXCI6IHJlc2Vy dmUgYmxvY2tzIGRlcGxldGVkISAiCisJCQkiQ29uc2lkZXIgaW5jcmVhc2luZyByZXNlcnZlIHBv b2wgc2l6ZS4iLAorCQkJbXAtPm1fZnNuYW1lKTsKKwkJcmV0dXJuIFhGU19FUlJPUihFTk9TUEMp OwogCi0JCW1wLT5tX3NiLnNiX2ZkYmxvY2tzID0gbGNvdW50ZXIgKyBYRlNfQUxMT0NfU0VUX0FT SURFKG1wKTsKLQkJcmV0dXJuIDA7CiAJY2FzZSBYRlNfU0JTX0ZSRVhURU5UUzoKIAkJbGNvdW50 ZXIgPSAobG9uZyBsb25nKW1wLT5tX3NiLnNiX2ZyZXh0ZW50czsKIAkJbGNvdW50ZXIgKz0gZGVs dGE7CkBAIC0xODQ2LDkgKzE5NDAsNyBAQCB4ZnNfbW9kX2luY29yZV9zYigKIHsKIAlpbnQJCQlz dGF0dXM7CiAKLSNpZmRlZiBIQVZFX1BFUkNQVV9TQgogCUFTU0VSVChmaWVsZCA8IFhGU19TQlNf SUNPVU5UIHx8IGZpZWxkID4gWEZTX1NCU19GREJMT0NLUyk7Ci0jZW5kaWYKIAlzcGluX2xvY2so Jm1wLT5tX3NiX2xvY2spOwogCXN0YXR1cyA9IHhmc19tb2RfaW5jb3JlX3NiX3VubG9ja2VkKG1w LCBmaWVsZCwgZGVsdGEsIHJzdmQpOwogCXNwaW5fdW5sb2NrKCZtcC0+bV9zYl9sb2NrKTsKQEAg LTE5MDcsNiArMTk5OSw4OSBAQCB1bndpbmQ6CiAJcmV0dXJuIGVycm9yOwogfQogCitpbnQKK3hm c19pY3NiX21vZGlmeV9jb3VudGVycygKKwl4ZnNfbW91bnRfdAkqbXAsCisJeGZzX3NiX2ZpZWxk X3QJZmllbGQsCisJaW50NjRfdAkJZGVsdGEsCisJaW50CQlyc3ZkKQoreworCWludDY0X3QJCWxj b3VudGVyOworCWludDY0X3QJCXJlc191c2VkOworCWludAkJcmV0ID0gMDsKKworCisJc3dpdGNo IChmaWVsZCkgeworCWNhc2UgWEZTX1NCU19JQ09VTlQ6CisJCXJldCA9IHhmc19pY3NiX2FkZCht cCwgWEZTX0lDU0JfSUNPVU5ULCBkZWx0YSwgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlBU1NF UlQoMCk7CisJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CisJCX0KKwkJcmV0dXJuIDA7CisK KwljYXNlIFhGU19TQlNfSUZSRUU6CisJCXJldCA9IHhmc19pY3NiX2FkZChtcCwgWEZTX0lDU0Jf SUZSRUUsIGRlbHRhLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCUFTU0VSVCgwKTsKKwkJCXJl dHVybiBYRlNfRVJST1IoRUlOVkFMKTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgWEZTX1NC U19GREJMT0NLUzoKKwkJLyoKKwkJICogaWYgd2UgYXJlIHB1dHRpbmcgYmxvY2tzIGJhY2ssIHB1 dCB0aGVtIGludG8gdGhlIHJlc2VydmUKKwkJICogYmxvY2sgcG9vbCBmaXJzdC4KKwkJICovCisJ CWlmIChtcC0+bV9yZXNibGtzICE9IG1wLT5tX3Jlc2Jsa3NfYXZhaWwgJiYgZGVsdGEgPiAwKSB7 CisJCQlzcGluX2xvY2soJm1wLT5tX3NiX2xvY2spOworCQkJcmVzX3VzZWQgPSAoaW50NjRfdCko bXAtPm1fcmVzYmxrcyAtCisJCQkJCQltcC0+bV9yZXNibGtzX2F2YWlsKTsKKwkJCWlmIChyZXNf dXNlZCA+IGRlbHRhKSB7CisJCQkJbXAtPm1fcmVzYmxrc19hdmFpbCArPSBkZWx0YTsKKwkJCQlk ZWx0YSA9IDA7CisJCQl9IGVsc2UgeworCQkJCWRlbHRhIC09IHJlc191c2VkOworCQkJCW1wLT5t X3Jlc2Jsa3NfYXZhaWwgPSBtcC0+bV9yZXNibGtzOworCQkJfQorCQkJc3Bpbl91bmxvY2soJm1w LT5tX3NiX2xvY2spOworCQkJaWYgKCFkZWx0YSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8q IHRyeSB0aGUgY2hhbmdlICovCisJCXJldCA9IHhmc19pY3NiX2FkZChtcCwgWEZTX0lDU0JfRkRC TE9DS1MsIGRlbHRhLAorCQkJCQkJWEZTX0FMTE9DX1NFVF9BU0lERShtcCkpOworCQlpZiAobGlr ZWx5KHJldCA+PSAwKSkKKwkJCXJldHVybiAwOworCisJCS8qIEVOT1NQQyAqLworCQlBU1NFUlQo cmV0ID09IC1FTk9TUEMpOworCQlBU1NFUlQoZGVsdGEgPCAwKTsKKworCQlpZiAoIXJzdmQpCisJ CQlyZXR1cm4gWEZTX0VSUk9SKEVOT1NQQyk7CisKKwkJc3Bpbl9sb2NrKCZtcC0+bV9zYl9sb2Nr KTsKKwkJbGNvdW50ZXIgPSAoaW50NjRfdCltcC0+bV9yZXNibGtzX2F2YWlsICsgZGVsdGE7CisJ CWlmIChsY291bnRlciA+PSAwKSB7CisJCQltcC0+bV9yZXNibGtzX2F2YWlsID0gbGNvdW50ZXI7 CisJCQlzcGluX3VubG9jaygmbXAtPm1fc2JfbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlz cGluX3VubG9jaygmbXAtPm1fc2JfbG9jayk7CisJCXByaW50a19vbmNlKEtFUk5fV0FSTklORwor CQkJIkZpbGVzeXN0ZW0gXCIlc1wiOiByZXNlcnZlIGJsb2NrcyBkZXBsZXRlZCEgIgorCQkJIkNv bnNpZGVyIGluY3JlYXNpbmcgcmVzZXJ2ZSBwb29sIHNpemUuIiwKKwkJCW1wLT5tX2ZzbmFtZSk7 CisJCXJldHVybiBYRlNfRVJST1IoRU5PU1BDKTsKKwlkZWZhdWx0OgorCQlBU1NFUlQoMCk7CisJ CXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiB4 ZnNfZ2V0c2IoKSBpcyBjYWxsZWQgdG8gb2J0YWluIHRoZSBidWZmZXIgZm9yIHRoZSBzdXBlcmJs b2NrLgogICogVGhlIGJ1ZmZlciBpcyByZXR1cm5lZCBsb2NrZWQgYW5kIHJlYWQgaW4gZnJvbSBk aXNrLgpAQCAtMjAwMCw1NzIgKzIxNzUsMyBAQCB4ZnNfZGV2X2lzX3JlYWRfb25seSgKIAl9CiAJ cmV0dXJuIDA7CiB9Ci0KLSNpZmRlZiBIQVZFX1BFUkNQVV9TQgotLyoKLSAqIFBlci1jcHUgaW5j b3JlIHN1cGVyYmxvY2sgY291bnRlcnMKLSAqCi0gKiBTaW1wbGUgY29uY2VwdCwgZGlmZmljdWx0 IGltcGxlbWVudGF0aW9uCi0gKgotICogQmFzaWNhbGx5LCByZXBsYWNlIHRoZSBpbmNvcmUgc3Vw ZXJibG9jayBjb3VudGVycyB3aXRoIGEgZGlzdHJpYnV0ZWQgcGVyIGNwdQotICogY291bnRlciBm b3IgY29udGVuZGVkIGZpZWxkcyAoZS5nLiAgZnJlZSBibG9jayBjb3VudCkuCi0gKgotICogRGlm ZmljdWx0aWVzIGFyaXNlIGluIHRoYXQgdGhlIGluY29yZSBzYiBpcyB1c2VkIGZvciBFTk9TUEMg Y2hlY2tpbmcsIGFuZAotICogaGVuY2UgbmVlZHMgdG8gYmUgYWNjdXJhdGVseSByZWFkIHdoZW4g d2UgYXJlIHJ1bm5pbmcgbG93IG9uIHNwYWNlLiBIZW5jZQotICogdGhlcmUgaXMgYSBtZXRob2Qg dG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBwZXItY3B1IGNvdW50ZXJzIGJhc2VkIG9uIGhvdwot ICogbXVjaCAic3R1ZmYiIGlzIGF2YWlsYWJsZSBpbiB0aGVtLgotICoKLSAqIEJhc2ljYWxseSwg YSBjb3VudGVyIGlzIGVuYWJsZWQgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgcmVzb3VyY2UgdG8g anVzdGlmeQotICogcnVubmluZyBhIHBlci1jcHUgZmFzdC1wYXRoLiBJZiB0aGUgcGVyLWNwdSBj b3VudGVyIHJ1bnMgb3V0IChpLmUuIGEgbG9jYWwKLSAqIEVOT1NQQyksIHRoZW4gd2UgZGlzYWJs ZSB0aGUgY291bnRlcnMgdG8gc3luY2hyb25pc2UgYWxsIGNhbGxlcnMgYW5kCi0gKiByZS1kaXN0 cmlidXRlIHRoZSBhdmFpbGFibGUgcmVzb3VyY2VzLgotICoKLSAqIElmLCBvbmNlIHdlIHJlZGlz dHJpYnV0ZWQgdGhlIGF2YWlsYWJsZSByZXNvdXJjZXMsIHdlIHN0aWxsIGdldCBhIGZhaWx1cmUs Ci0gKiB3ZSBkaXNhYmxlIHRoZSBwZXItY3B1IGNvdW50ZXIgYW5kIGdvIHRocm91Z2ggdGhlIHNs b3cgcGF0aC4KLSAqCi0gKiBUaGUgc2xvdyBwYXRoIGlzIHRoZSBjdXJyZW50IHhmc19tb2RfaW5j b3JlX3NiKCkgZnVuY3Rpb24uICBUaGlzIG1lYW5zIHRoYXQKLSAqIHdoZW4gd2UgZGlzYWJsZSBh IHBlci1jcHUgY291bnRlciwgd2UgbmVlZCB0byBkcmFpbiBpdHMgcmVzb3VyY2VzIGJhY2sgdG8K LSAqIHRoZSBnbG9iYWwgc3VwZXJibG9jay4gV2UgZG8gdGhpcyBhZnRlciBkaXNhYmxpbmcgdGhl IGNvdW50ZXIgdG8gcHJldmVudAotICogbW9yZSB0aHJlYWRzIGZyb20gcXVldWVpbmcgdXAgb24g dGhlIGNvdW50ZXIuCi0gKgotICogRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgdGhhdCB3ZSBzdGls bCBuZWVkIGEgbG9jayBpbiB0aGUgZmFzdCBwYXRoIHRvIGVuYWJsZQotICogc3luY2hyb25pc2F0 aW9uIGJldHdlZW4gdGhlIGdsb2JhbCBjb3VudGVycyBhbmQgdGhlIHBlci1jcHUgY291bnRlcnMu IFRoaXMKLSAqIGlzIG5vdCBhIHByb2JsZW0gYmVjYXVzZSB0aGUgbG9jayB3aWxsIGJlIGxvY2Fs IHRvIGEgQ1BVIGFsbW9zdCBhbGwgdGhlIHRpbWUKLSAqIGFuZCBoYXZlIGxpdHRsZSBjb250ZW50 aW9uIGV4Y2VwdCB3aGVuIHdlIGdldCB0byBFTk9TUEMgY29uZGl0aW9ucy4KLSAqCi0gKiBCYXNp Y2FsbHksIHRoaXMgbG9jayBiZWNvbWVzIGEgYmFycmllciB0aGF0IGVuYWJsZXMgdXMgdG8gbG9j ayBvdXQgdGhlIGZhc3QKLSAqIHBhdGggd2hpbGUgd2UgZG8gdGhpbmdzIGxpa2UgZW5hYmxpbmcg YW5kIGRpc2FibGluZyBjb3VudGVycyBhbmQKLSAqIHN5bmNocm9uaXNpbmcgdGhlIGNvdW50ZXJz LgotICoKLSAqIExvY2tpbmcgcnVsZXM6Ci0gKgotICogCTEuIG1fc2JfbG9jayBiZWZvcmUgcGlj a2luZyB1cCBwZXItY3B1IGxvY2tzCi0gKiAJMi4gcGVyLWNwdSBsb2NrcyBhbHdheXMgcGlja2Vk IHVwIHZpYSBmb3JfZWFjaF9vbmxpbmVfY3B1KCkgb3JkZXIKLSAqIAkzLiBhY2N1cmF0ZSBjb3Vu dGVyIHN5bmMgcmVxdWlyZXMgbV9zYl9sb2NrICsgcGVyIGNwdSBsb2NrcwotICogCTQuIG1vZGlm eWluZyBwZXItY3B1IGNvdW50ZXJzIHJlcXVpcmVzIGhvbGRpbmcgcGVyLWNwdSBsb2NrCi0gKiAJ NS4gbW9kaWZ5aW5nIGdsb2JhbCBjb3VudGVycyByZXF1aXJlcyBob2xkaW5nIG1fc2JfbG9jawot ICoJNi4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEgY291bnRlciByZXF1aXJlcyBob2xkaW5nIHRo ZSBtX3NiX2xvY2sgCi0gKgkgICBhbmQgX25vbmVfIG9mIHRoZSBwZXItY3B1IGxvY2tzLgotICoK LSAqIERpc2FibGVkIGNvdW50ZXJzIGFyZSBvbmx5IGV2ZXIgcmUtZW5hYmxlZCBieSBhIGJhbGFu Y2Ugb3BlcmF0aW9uCi0gKiB0aGF0IHJlc3VsdHMgaW4gbW9yZSBmcmVlIHJlc291cmNlcyBwZXIg Q1BVIHRoYW4gYSBnaXZlbiB0aHJlc2hvbGQuCi0gKiBUbyBlbnN1cmUgY291bnRlcnMgZG9uJ3Qg cmVtYWluIGRpc2FibGVkLCB0aGV5IGFyZSByZWJhbGFuY2VkIHdoZW4KLSAqIHRoZSBnbG9iYWwg cmVzb3VyY2UgZ29lcyBhYm92ZSBhIGhpZ2hlciB0aHJlc2hvbGQgKGkuZS4gc29tZSBoeXN0ZXJl c2lzCi0gKiBpcyBwcmVzZW50IHRvIHByZXZlbnQgdGhyYXNoaW5nKS4KLSAqLwotCi0jaWZkZWYg Q09ORklHX0hPVFBMVUdfQ1BVCi0vKgotICogaG90LXBsdWcgQ1BVIG5vdGlmaWVyIHN1cHBvcnQu Ci0gKgotICogV2UgbmVlZCBhIG5vdGlmaWVyIHBlciBmaWxlc3lzdGVtIGFzIHdlIG5lZWQgdG8g YmUgYWJsZSB0byBpZGVudGlmeQotICogdGhlIGZpbGVzeXN0ZW0gdG8gYmFsYW5jZSB0aGUgY291 bnRlcnMgb3V0LiBUaGlzIGlzIGFjaGlldmVkIGJ5Ci0gKiBoYXZpbmcgYSBub3RpZmllciBibG9j ayBlbWJlZGRlZCBpbiB0aGUgeGZzX21vdW50X3QgYW5kIGRvaW5nIHBvaW50ZXIKLSAqIG1hZ2lj IHRvIGdldCB0aGUgbW91bnQgcG9pbnRlciBmcm9tIHRoZSBub3RpZmllciBibG9jayBhZGRyZXNz LgotICovCi1TVEFUSUMgaW50Ci14ZnNfaWNzYl9jcHVfbm90aWZ5KAotCXN0cnVjdCBub3RpZmll cl9ibG9jayAqbmZiLAotCXVuc2lnbmVkIGxvbmcgYWN0aW9uLAotCXZvaWQgKmhjcHUpCi17Ci0J eGZzX2ljc2JfY250c190ICpjbnRwOwotCXhmc19tb3VudF90CSptcDsKLQotCW1wID0gKHhmc19t b3VudF90ICopY29udGFpbmVyX29mKG5mYiwgeGZzX21vdW50X3QsIG1faWNzYl9ub3RpZmllcik7 Ci0JY250cCA9ICh4ZnNfaWNzYl9jbnRzX3QgKikKLQkJCXBlcl9jcHVfcHRyKG1wLT5tX3NiX2Nu dHMsICh1bnNpZ25lZCBsb25nKWhjcHUpOwotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVf VVBfUFJFUEFSRToKLQljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKLQkJLyogRWFzeSBDYXNl IC0gaW5pdGlhbGl6ZSB0aGUgYXJlYSBhbmQgbG9ja3MsIGFuZAotCQkgKiB0aGVuIHJlYmFsYW5j ZSB3aGVuIG9ubGluZSBkb2VzIGV2ZXJ5dGhpbmcgZWxzZSBmb3IgdXMuICovCi0JCW1lbXNldChj bnRwLCAwLCBzaXplb2YoeGZzX2ljc2JfY250c190KSk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX09O TElORToKLQljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgotCQl4ZnNfaWNzYl9sb2NrKG1wKTsKLQkJ eGZzX2ljc2JfYmFsYW5jZV9jb3VudGVyKG1wLCBYRlNfU0JTX0lDT1VOVCwgMCk7Ci0JCXhmc19p Y3NiX2JhbGFuY2VfY291bnRlcihtcCwgWEZTX1NCU19JRlJFRSwgMCk7Ci0JCXhmc19pY3NiX2Jh bGFuY2VfY291bnRlcihtcCwgWEZTX1NCU19GREJMT0NLUywgMCk7Ci0JCXhmc19pY3NiX3VubG9j ayhtcCk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX0RFQUQ6Ci0JY2FzZSBDUFVfREVBRF9GUk9aRU46 Ci0JCS8qIERpc2FibGUgYWxsIHRoZSBjb3VudGVycywgdGhlbiBmb2xkIHRoZSBkZWFkIGNwdSdz Ci0JCSAqIGNvdW50IGludG8gdGhlIHRvdGFsIG9uIHRoZSBnbG9iYWwgc3VwZXJibG9jayBhbmQK LQkJICogcmUtZW5hYmxlIHRoZSBjb3VudGVycy4gKi8KLQkJeGZzX2ljc2JfbG9jayhtcCk7Ci0J CXNwaW5fbG9jaygmbXAtPm1fc2JfbG9jayk7Ci0JCXhmc19pY3NiX2Rpc2FibGVfY291bnRlciht cCwgWEZTX1NCU19JQ09VTlQpOwotCQl4ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIobXAsIFhGU19T QlNfSUZSRUUpOwotCQl4ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIobXAsIFhGU19TQlNfRkRCTE9D S1MpOwotCi0JCW1wLT5tX3NiLnNiX2ljb3VudCArPSBjbnRwLT5pY3NiX2ljb3VudDsKLQkJbXAt Pm1fc2Iuc2JfaWZyZWUgKz0gY250cC0+aWNzYl9pZnJlZTsKLQkJbXAtPm1fc2Iuc2JfZmRibG9j a3MgKz0gY250cC0+aWNzYl9mZGJsb2NrczsKLQotCQltZW1zZXQoY250cCwgMCwgc2l6ZW9mKHhm c19pY3NiX2NudHNfdCkpOwotCi0JCXhmc19pY3NiX2JhbGFuY2VfY291bnRlcl9sb2NrZWQobXAs IFhGU19TQlNfSUNPVU5ULCAwKTsKLQkJeGZzX2ljc2JfYmFsYW5jZV9jb3VudGVyX2xvY2tlZCht cCwgWEZTX1NCU19JRlJFRSwgMCk7Ci0JCXhmc19pY3NiX2JhbGFuY2VfY291bnRlcl9sb2NrZWQo bXAsIFhGU19TQlNfRkRCTE9DS1MsIDApOwotCQlzcGluX3VubG9jaygmbXAtPm1fc2JfbG9jayk7 Ci0JCXhmc19pY3NiX3VubG9jayhtcCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBOT1RJRllf T0s7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCi0KLWludAoteGZzX2ljc2Jf aW5pdF9jb3VudGVycygKLQl4ZnNfbW91bnRfdAkqbXApCi17Ci0JeGZzX2ljc2JfY250c190ICpj bnRwOwotCWludAkJaTsKLQotCW1wLT5tX3NiX2NudHMgPSBhbGxvY19wZXJjcHUoeGZzX2ljc2Jf Y250c190KTsKLQlpZiAobXAtPm1fc2JfY250cyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsK LQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCW1wLT5tX2ljc2Jfbm90aWZpZXIubm90aWZp ZXJfY2FsbCA9IHhmc19pY3NiX2NwdV9ub3RpZnk7Ci0JbXAtPm1faWNzYl9ub3RpZmllci5wcmlv cml0eSA9IDA7Ci0JcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZtcC0+bV9pY3NiX25vdGlmaWVy KTsKLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KLQotCWZvcl9lYWNoX29ubGluZV9j cHUoaSkgewotCQljbnRwID0gKHhmc19pY3NiX2NudHNfdCAqKXBlcl9jcHVfcHRyKG1wLT5tX3Ni X2NudHMsIGkpOwotCQltZW1zZXQoY250cCwgMCwgc2l6ZW9mKHhmc19pY3NiX2NudHNfdCkpOwot CX0KLQotCW11dGV4X2luaXQoJm1wLT5tX2ljc2JfbXV0ZXgpOwotCi0JLyoKLQkgKiBzdGFydCB3 aXRoIGFsbCBjb3VudGVycyBkaXNhYmxlZCBzbyB0aGF0IHRoZQotCSAqIGluaXRpYWwgYmFsYW5j ZSBraWNrcyB1cyBvZmYgY29ycmVjdGx5Ci0JICovCi0JbXAtPm1faWNzYl9jb3VudGVycyA9IC0x OwotCXJldHVybiAwOwotfQotCi12b2lkCi14ZnNfaWNzYl9yZWluaXRfY291bnRlcnMoCi0JeGZz X21vdW50X3QJKm1wKQotewotCXhmc19pY3NiX2xvY2sobXApOwotCS8qCi0JICogc3RhcnQgd2l0 aCBhbGwgY291bnRlcnMgZGlzYWJsZWQgc28gdGhhdCB0aGUKLQkgKiBpbml0aWFsIGJhbGFuY2Ug a2lja3MgdXMgb2ZmIGNvcnJlY3RseQotCSAqLwotCW1wLT5tX2ljc2JfY291bnRlcnMgPSAtMTsK LQl4ZnNfaWNzYl9iYWxhbmNlX2NvdW50ZXIobXAsIFhGU19TQlNfSUNPVU5ULCAwKTsKLQl4ZnNf aWNzYl9iYWxhbmNlX2NvdW50ZXIobXAsIFhGU19TQlNfSUZSRUUsIDApOwotCXhmc19pY3NiX2Jh bGFuY2VfY291bnRlcihtcCwgWEZTX1NCU19GREJMT0NLUywgMCk7Ci0JeGZzX2ljc2JfdW5sb2Nr KG1wKTsKLX0KLQotdm9pZAoteGZzX2ljc2JfZGVzdHJveV9jb3VudGVycygKLQl4ZnNfbW91bnRf dAkqbXApCi17Ci0JaWYgKG1wLT5tX3NiX2NudHMpIHsKLQkJdW5yZWdpc3Rlcl9ob3RjcHVfbm90 aWZpZXIoJm1wLT5tX2ljc2Jfbm90aWZpZXIpOwotCQlmcmVlX3BlcmNwdShtcC0+bV9zYl9jbnRz KTsKLQl9Ci0JbXV0ZXhfZGVzdHJveSgmbXAtPm1faWNzYl9tdXRleCk7Ci19Ci0KLVNUQVRJQyB2 b2lkCi14ZnNfaWNzYl9sb2NrX2NudHIoCi0JeGZzX2ljc2JfY250c190CSppY3NicCkKLXsKLQl3 aGlsZSAodGVzdF9hbmRfc2V0X2JpdChYRlNfSUNTQl9GTEFHX0xPQ0ssICZpY3NicC0+aWNzYl9m bGFncykpIHsKLQkJbmRlbGF5KDEwMDApOwotCX0KLX0KLQotU1RBVElDIHZvaWQKLXhmc19pY3Ni X3VubG9ja19jbnRyKAotCXhmc19pY3NiX2NudHNfdAkqaWNzYnApCi17Ci0JY2xlYXJfYml0KFhG U19JQ1NCX0ZMQUdfTE9DSywgJmljc2JwLT5pY3NiX2ZsYWdzKTsKLX0KLQotCi1TVEFUSUMgdm9p ZAoteGZzX2ljc2JfbG9ja19hbGxfY291bnRlcnMoCi0JeGZzX21vdW50X3QJKm1wKQotewotCXhm c19pY3NiX2NudHNfdCAqY250cDsKLQlpbnQJCWk7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkp IHsKLQkJY250cCA9ICh4ZnNfaWNzYl9jbnRzX3QgKilwZXJfY3B1X3B0cihtcC0+bV9zYl9jbnRz LCBpKTsKLQkJeGZzX2ljc2JfbG9ja19jbnRyKGNudHApOwotCX0KLX0KLQotU1RBVElDIHZvaWQK LXhmc19pY3NiX3VubG9ja19hbGxfY291bnRlcnMoCi0JeGZzX21vdW50X3QJKm1wKQotewotCXhm c19pY3NiX2NudHNfdCAqY250cDsKLQlpbnQJCWk7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkp IHsKLQkJY250cCA9ICh4ZnNfaWNzYl9jbnRzX3QgKilwZXJfY3B1X3B0cihtcC0+bV9zYl9jbnRz LCBpKTsKLQkJeGZzX2ljc2JfdW5sb2NrX2NudHIoY250cCk7Ci0JfQotfQotCi1TVEFUSUMgdm9p ZAoteGZzX2ljc2JfY291bnQoCi0JeGZzX21vdW50X3QJKm1wLAotCXhmc19pY3NiX2NudHNfdAkq Y250LAotCWludAkJZmxhZ3MpCi17Ci0JeGZzX2ljc2JfY250c190ICpjbnRwOwotCWludAkJaTsK LQotCW1lbXNldChjbnQsIDAsIHNpemVvZih4ZnNfaWNzYl9jbnRzX3QpKTsKLQotCWlmICghKGZs YWdzICYgWEZTX0lDU0JfTEFaWV9DT1VOVCkpCi0JCXhmc19pY3NiX2xvY2tfYWxsX2NvdW50ZXJz KG1wKTsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQljbnRwID0gKHhmc19pY3NiX2Nu dHNfdCAqKXBlcl9jcHVfcHRyKG1wLT5tX3NiX2NudHMsIGkpOwotCQljbnQtPmljc2JfaWNvdW50 ICs9IGNudHAtPmljc2JfaWNvdW50OwotCQljbnQtPmljc2JfaWZyZWUgKz0gY250cC0+aWNzYl9p ZnJlZTsKLQkJY250LT5pY3NiX2ZkYmxvY2tzICs9IGNudHAtPmljc2JfZmRibG9ja3M7Ci0JfQot Ci0JaWYgKCEoZmxhZ3MgJiBYRlNfSUNTQl9MQVpZX0NPVU5UKSkKLQkJeGZzX2ljc2JfdW5sb2Nr X2FsbF9jb3VudGVycyhtcCk7Ci19Ci0KLVNUQVRJQyBpbnQKLXhmc19pY3NiX2NvdW50ZXJfZGlz YWJsZWQoCi0JeGZzX21vdW50X3QJKm1wLAotCXhmc19zYl9maWVsZF90CWZpZWxkKQotewotCUFT U0VSVCgoZmllbGQgPj0gWEZTX1NCU19JQ09VTlQpICYmIChmaWVsZCA8PSBYRlNfU0JTX0ZEQkxP Q0tTKSk7Ci0JcmV0dXJuIHRlc3RfYml0KGZpZWxkLCAmbXAtPm1faWNzYl9jb3VudGVycyk7Ci19 Ci0KLVNUQVRJQyB2b2lkCi14ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIoCi0JeGZzX21vdW50X3QJ Km1wLAotCXhmc19zYl9maWVsZF90CWZpZWxkKQotewotCXhmc19pY3NiX2NudHNfdAljbnQ7Ci0K LQlBU1NFUlQoKGZpZWxkID49IFhGU19TQlNfSUNPVU5UKSAmJiAoZmllbGQgPD0gWEZTX1NCU19G REJMT0NLUykpOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgYWxyZWFkeSBkaXNhYmxlZCwgdGhlbiB0 aGVyZSBpcyBub3RoaW5nIHRvIGRvCi0JICogaGVyZS4gV2UgY2hlY2sgYmVmb3JlIGxvY2tpbmcg YWxsIHRoZSBjb3VudGVycyB0byBhdm9pZAotCSAqIHRoZSBleHBlbnNpdmUgbG9jayBvcGVyYXRp b24gd2hlbiBiZWluZyBjYWxsZWQgaW4gdGhlCi0JICogc2xvdyBwYXRoIGFuZCB0aGUgY291bnRl ciBpcyBhbHJlYWR5IGRpc2FibGVkLiBUaGlzIGlzCi0JICogc2FmZSBiZWNhdXNlIHRoZSBvbmx5 IHRpbWUgd2Ugc2V0IG9yIGNsZWFyIHRoaXMgc3RhdGUgaXMgdW5kZXIKLQkgKiB0aGUgbV9pY3Ni X211dGV4LgotCSAqLwotCWlmICh4ZnNfaWNzYl9jb3VudGVyX2Rpc2FibGVkKG1wLCBmaWVsZCkp Ci0JCXJldHVybjsKLQotCXhmc19pY3NiX2xvY2tfYWxsX2NvdW50ZXJzKG1wKTsKLQlpZiAoIXRl c3RfYW5kX3NldF9iaXQoZmllbGQsICZtcC0+bV9pY3NiX2NvdW50ZXJzKSkgewotCQkvKiBkcmFp biBiYWNrIHRvIHN1cGVyYmxvY2sgKi8KLQotCQl4ZnNfaWNzYl9jb3VudChtcCwgJmNudCwgWEZT X0lDU0JfTEFaWV9DT1VOVCk7Ci0JCXN3aXRjaChmaWVsZCkgewotCQljYXNlIFhGU19TQlNfSUNP VU5UOgotCQkJbXAtPm1fc2Iuc2JfaWNvdW50ID0gY250Lmljc2JfaWNvdW50OwotCQkJYnJlYWs7 Ci0JCWNhc2UgWEZTX1NCU19JRlJFRToKLQkJCW1wLT5tX3NiLnNiX2lmcmVlID0gY250Lmljc2Jf aWZyZWU7Ci0JCQlicmVhazsKLQkJY2FzZSBYRlNfU0JTX0ZEQkxPQ0tTOgotCQkJbXAtPm1fc2Iu c2JfZmRibG9ja3MgPSBjbnQuaWNzYl9mZGJsb2NrczsKLQkJCWJyZWFrOwotCQlkZWZhdWx0Ogot CQkJQlVHKCk7Ci0JCX0KLQl9Ci0KLQl4ZnNfaWNzYl91bmxvY2tfYWxsX2NvdW50ZXJzKG1wKTsK LX0KLQotU1RBVElDIHZvaWQKLXhmc19pY3NiX2VuYWJsZV9jb3VudGVyKAotCXhmc19tb3VudF90 CSptcCwKLQl4ZnNfc2JfZmllbGRfdAlmaWVsZCwKLQl1aW50NjRfdAljb3VudCwKLQl1aW50NjRf dAlyZXNpZCkKLXsKLQl4ZnNfaWNzYl9jbnRzX3QJKmNudHA7Ci0JaW50CQlpOwotCi0JQVNTRVJU KChmaWVsZCA+PSBYRlNfU0JTX0lDT1VOVCkgJiYgKGZpZWxkIDw9IFhGU19TQlNfRkRCTE9DS1Mp KTsKLQotCXhmc19pY3NiX2xvY2tfYWxsX2NvdW50ZXJzKG1wKTsKLQlmb3JfZWFjaF9vbmxpbmVf Y3B1KGkpIHsKLQkJY250cCA9IHBlcl9jcHVfcHRyKG1wLT5tX3NiX2NudHMsIGkpOwotCQlzd2l0 Y2ggKGZpZWxkKSB7Ci0JCWNhc2UgWEZTX1NCU19JQ09VTlQ6Ci0JCQljbnRwLT5pY3NiX2ljb3Vu dCA9IGNvdW50ICsgcmVzaWQ7Ci0JCQlicmVhazsKLQkJY2FzZSBYRlNfU0JTX0lGUkVFOgotCQkJ Y250cC0+aWNzYl9pZnJlZSA9IGNvdW50ICsgcmVzaWQ7Ci0JCQlicmVhazsKLQkJY2FzZSBYRlNf U0JTX0ZEQkxPQ0tTOgotCQkJY250cC0+aWNzYl9mZGJsb2NrcyA9IGNvdW50ICsgcmVzaWQ7Ci0J CQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUJVRygpOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmVzaWQg PSAwOwotCX0KLQljbGVhcl9iaXQoZmllbGQsICZtcC0+bV9pY3NiX2NvdW50ZXJzKTsKLQl4ZnNf aWNzYl91bmxvY2tfYWxsX2NvdW50ZXJzKG1wKTsKLX0KLQotdm9pZAoteGZzX2ljc2Jfc3luY19j b3VudGVyc19sb2NrZWQoCi0JeGZzX21vdW50X3QJKm1wLAotCWludAkJZmxhZ3MpCi17Ci0JeGZz X2ljc2JfY250c190CWNudDsKLQotCXhmc19pY3NiX2NvdW50KG1wLCAmY250LCBmbGFncyk7Ci0K LQlpZiAoIXhmc19pY3NiX2NvdW50ZXJfZGlzYWJsZWQobXAsIFhGU19TQlNfSUNPVU5UKSkKLQkJ bXAtPm1fc2Iuc2JfaWNvdW50ID0gY250Lmljc2JfaWNvdW50OwotCWlmICgheGZzX2ljc2JfY291 bnRlcl9kaXNhYmxlZChtcCwgWEZTX1NCU19JRlJFRSkpCi0JCW1wLT5tX3NiLnNiX2lmcmVlID0g Y250Lmljc2JfaWZyZWU7Ci0JaWYgKCF4ZnNfaWNzYl9jb3VudGVyX2Rpc2FibGVkKG1wLCBYRlNf U0JTX0ZEQkxPQ0tTKSkKLQkJbXAtPm1fc2Iuc2JfZmRibG9ja3MgPSBjbnQuaWNzYl9mZGJsb2Nr czsKLX0KLQotLyoKLSAqIEFjY3VyYXRlIHVwZGF0ZSBvZiBwZXItY3B1IGNvdW50ZXJzIHRvIGlu Y29yZSBzdXBlcmJsb2NrCi0gKi8KLXZvaWQKLXhmc19pY3NiX3N5bmNfY291bnRlcnMoCi0JeGZz X21vdW50X3QJKm1wLAotCWludAkJZmxhZ3MpCi17Ci0Jc3Bpbl9sb2NrKCZtcC0+bV9zYl9sb2Nr KTsKLQl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzX2xvY2tlZChtcCwgZmxhZ3MpOwotCXNwaW5fdW5s b2NrKCZtcC0+bV9zYl9sb2NrKTsKLX0KLQotLyoKLSAqIEJhbGFuY2UgYW5kIGVuYWJsZS9kaXNh YmxlIGNvdW50ZXJzIGFzIG5lY2Vzc2FyeS4KLSAqCi0gKiBUaHJlc2hvbGRzIGZvciByZS1lbmFi bGluZyBjb3VudGVycyBhcmUgc29tZXdoYXQgbWFnaWMuICBpbm9kZSBjb3VudHMgYXJlCi0gKiBj aG9zZW4gdG8gYmUgdGhlIHNhbWUgbnVtYmVyIGFzIHNpbmdsZSBvbiBkaXNrIGFsbG9jYXRpb24g Y2h1bmsgcGVyIENQVSwgYW5kCi0gKiBmcmVlIGJsb2NrcyBpcyBzb21ldGhpbmcgZmFyIGVub3Vn aCB6ZXJvIHRoYXQgd2UgYXJlbid0IGdvaW5nIHRocmFzaCB3aGVuIHdlCi0gKiBnZXQgbmVhciBF Tk9TUEMuIFdlIGFsc28gbmVlZCB0byBzdXBwbHkgYSBtaW5pbXVtIHdlIHJlcXVpcmUgcGVyIGNw dSB0bwotICogcHJldmVudCBsb29waW5nIGVuZGxlc3NseSB3aGVuIHhmc19hbGxvY19zcGFjZSBh c2tzIGZvciBtb3JlIHRoYW4gd2lsbAotICogYmUgZGlzdHJpYnV0ZWQgdG8gYSBzaW5nbGUgQ1BV IGJ1dCBlYWNoIENQVSBoYXMgZW5vdWdoIGJsb2NrcyB0byBiZQotICogcmVlbmFibGVkLgotICoK LSAqIE5vdGUgdGhhdCB3ZSBjYW4gYmUgY2FsbGVkIHdoZW4gY291bnRlcnMgYXJlIGFscmVhZHkg ZGlzYWJsZWQuCi0gKiB4ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIoKSBvcHRpbWlzZXMgdGhlIGNv dW50ZXIgbG9ja2luZyBpbiB0aGlzIGNhc2UgdG8KLSAqIHByZXZlbnQgbG9ja2luZyBldmVyeSBw ZXItY3B1IGNvdW50ZXIgbmVlZGxlc3NseS4KLSAqLwotCi0jZGVmaW5lIFhGU19JQ1NCX0lOT19D TlRSX1JFRU5BQkxFCSh1aW50NjRfdCk2NAotI2RlZmluZSBYRlNfSUNTQl9GREJMS19DTlRSX1JF RU5BQkxFKG1wKSBcCi0JCSh1aW50NjRfdCkoNTEyICsgWEZTX0FMTE9DX1NFVF9BU0lERShtcCkp Ci1TVEFUSUMgdm9pZAoteGZzX2ljc2JfYmFsYW5jZV9jb3VudGVyX2xvY2tlZCgKLQl4ZnNfbW91 bnRfdAkqbXAsCi0JeGZzX3NiX2ZpZWxkX3QgIGZpZWxkLAotCWludAkJbWluX3Blcl9jcHUpCi17 Ci0JdWludDY0X3QJY291bnQsIHJlc2lkOwotCWludAkJd2VpZ2h0ID0gbnVtX29ubGluZV9jcHVz KCk7Ci0JdWludDY0X3QJbWluID0gKHVpbnQ2NF90KW1pbl9wZXJfY3B1OwotCi0JLyogZGlzYWJs ZSBjb3VudGVyIGFuZCBzeW5jIGNvdW50ZXIgKi8KLQl4ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIo bXAsIGZpZWxkKTsKLQotCS8qIHVwZGF0ZSBjb3VudGVycyAgLSBmaXJzdCBDUFUgZ2V0cyByZXNp ZHVhbCovCi0Jc3dpdGNoIChmaWVsZCkgewotCWNhc2UgWEZTX1NCU19JQ09VTlQ6Ci0JCWNvdW50 ID0gbXAtPm1fc2Iuc2JfaWNvdW50OwotCQlyZXNpZCA9IGRvX2Rpdihjb3VudCwgd2VpZ2h0KTsK LQkJaWYgKGNvdW50IDwgbWF4KG1pbiwgWEZTX0lDU0JfSU5PX0NOVFJfUkVFTkFCTEUpKQotCQkJ cmV0dXJuOwotCQlicmVhazsKLQljYXNlIFhGU19TQlNfSUZSRUU6Ci0JCWNvdW50ID0gbXAtPm1f c2Iuc2JfaWZyZWU7Ci0JCXJlc2lkID0gZG9fZGl2KGNvdW50LCB3ZWlnaHQpOwotCQlpZiAoY291 bnQgPCBtYXgobWluLCBYRlNfSUNTQl9JTk9fQ05UUl9SRUVOQUJMRSkpCi0JCQlyZXR1cm47Ci0J CWJyZWFrOwotCWNhc2UgWEZTX1NCU19GREJMT0NLUzoKLQkJY291bnQgPSBtcC0+bV9zYi5zYl9m ZGJsb2NrczsKLQkJcmVzaWQgPSBkb19kaXYoY291bnQsIHdlaWdodCk7Ci0JCWlmIChjb3VudCA8 IG1heChtaW4sIFhGU19JQ1NCX0ZEQkxLX0NOVFJfUkVFTkFCTEUobXApKSkKLQkJCXJldHVybjsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCWNvdW50ID0gcmVzaWQgPSAwOwkvKiBx dWlldCwgZ2NjICovCi0JCWJyZWFrOwotCX0KLQotCXhmc19pY3NiX2VuYWJsZV9jb3VudGVyKG1w LCBmaWVsZCwgY291bnQsIHJlc2lkKTsKLX0KLQotU1RBVElDIHZvaWQKLXhmc19pY3NiX2JhbGFu Y2VfY291bnRlcigKLQl4ZnNfbW91bnRfdAkqbXAsCi0JeGZzX3NiX2ZpZWxkX3QgIGZpZWxkcywK LQlpbnQJCW1pbl9wZXJfY3B1KQotewotCXNwaW5fbG9jaygmbXAtPm1fc2JfbG9jayk7Ci0JeGZz X2ljc2JfYmFsYW5jZV9jb3VudGVyX2xvY2tlZChtcCwgZmllbGRzLCBtaW5fcGVyX2NwdSk7Ci0J c3Bpbl91bmxvY2soJm1wLT5tX3NiX2xvY2spOwotfQotCi1pbnQKLXhmc19pY3NiX21vZGlmeV9j b3VudGVycygKLQl4ZnNfbW91bnRfdAkqbXAsCi0JeGZzX3NiX2ZpZWxkX3QJZmllbGQsCi0JaW50 NjRfdAkJZGVsdGEsCi0JaW50CQlyc3ZkKQotewotCXhmc19pY3NiX2NudHNfdAkqaWNzYnA7Ci0J bG9uZyBsb25nCWxjb3VudGVyOwkvKiBsb25nIGNvdW50ZXIgZm9yIDY0IGJpdCBmaWVsZHMgKi8K LQlpbnQJCXJldCA9IDA7Ci0KLQltaWdodF9zbGVlcCgpOwotYWdhaW46Ci0JcHJlZW1wdF9kaXNh YmxlKCk7Ci0JaWNzYnAgPSB0aGlzX2NwdV9wdHIobXAtPm1fc2JfY250cyk7Ci0KLQkvKgotCSAq IGlmIHRoZSBjb3VudGVyIGlzIGRpc2FibGVkLCBnbyB0byBzbG93IHBhdGgKLQkgKi8KLQlpZiAo dW5saWtlbHkoeGZzX2ljc2JfY291bnRlcl9kaXNhYmxlZChtcCwgZmllbGQpKSkKLQkJZ290byBz bG93X3BhdGg7Ci0JeGZzX2ljc2JfbG9ja19jbnRyKGljc2JwKTsKLQlpZiAodW5saWtlbHkoeGZz X2ljc2JfY291bnRlcl9kaXNhYmxlZChtcCwgZmllbGQpKSkgewotCQl4ZnNfaWNzYl91bmxvY2tf Y250cihpY3NicCk7Ci0JCWdvdG8gc2xvd19wYXRoOwotCX0KLQotCXN3aXRjaCAoZmllbGQpIHsK LQljYXNlIFhGU19TQlNfSUNPVU5UOgotCQlsY291bnRlciA9IGljc2JwLT5pY3NiX2ljb3VudDsK LQkJbGNvdW50ZXIgKz0gZGVsdGE7Ci0JCWlmICh1bmxpa2VseShsY291bnRlciA8IDApKQotCQkJ Z290byBiYWxhbmNlX2NvdW50ZXI7Ci0JCWljc2JwLT5pY3NiX2ljb3VudCA9IGxjb3VudGVyOwot CQlicmVhazsKLQotCWNhc2UgWEZTX1NCU19JRlJFRToKLQkJbGNvdW50ZXIgPSBpY3NicC0+aWNz Yl9pZnJlZTsKLQkJbGNvdW50ZXIgKz0gZGVsdGE7Ci0JCWlmICh1bmxpa2VseShsY291bnRlciA8 IDApKQotCQkJZ290byBiYWxhbmNlX2NvdW50ZXI7Ci0JCWljc2JwLT5pY3NiX2lmcmVlID0gbGNv dW50ZXI7Ci0JCWJyZWFrOwotCi0JY2FzZSBYRlNfU0JTX0ZEQkxPQ0tTOgotCQlCVUdfT04oKG1w LT5tX3Jlc2Jsa3MgLSBtcC0+bV9yZXNibGtzX2F2YWlsKSAhPSAwKTsKLQotCQlsY291bnRlciA9 IGljc2JwLT5pY3NiX2ZkYmxvY2tzIC0gWEZTX0FMTE9DX1NFVF9BU0lERShtcCk7Ci0JCWxjb3Vu dGVyICs9IGRlbHRhOwotCQlpZiAodW5saWtlbHkobGNvdW50ZXIgPCAwKSkKLQkJCWdvdG8gYmFs YW5jZV9jb3VudGVyOwotCQlpY3NicC0+aWNzYl9mZGJsb2NrcyA9IGxjb3VudGVyICsgWEZTX0FM TE9DX1NFVF9BU0lERShtcCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlicmVh azsKLQl9Ci0JeGZzX2ljc2JfdW5sb2NrX2NudHIoaWNzYnApOwotCXByZWVtcHRfZW5hYmxlKCk7 Ci0JcmV0dXJuIDA7Ci0KLXNsb3dfcGF0aDoKLQlwcmVlbXB0X2VuYWJsZSgpOwotCi0JLyoKLQkg KiBzZXJpYWxpc2Ugd2l0aCBhIG11dGV4IHNvIHdlIGRvbid0IGJ1cm4gbG90cyBvZiBjcHUgb24K LQkgKiB0aGUgc3VwZXJibG9jayBsb2NrLiBXZSBzdGlsbCBuZWVkIHRvIGhvbGQgdGhlIHN1cGVy YmxvY2sKLQkgKiBsb2NrLCBob3dldmVyLCB3aGVuIHdlIG1vZGlmeSB0aGUgZ2xvYmFsIHN0cnVj dHVyZXMuCi0JICovCi0JeGZzX2ljc2JfbG9jayhtcCk7Ci0KLQkvKgotCSAqIE5vdyBydW5uaW5n IGF0b21pY2FsbHkuCi0JICoKLQkgKiBJZiB0aGUgY291bnRlciBpcyBlbmFibGVkLCBzb21lb25l IGhhcyBiZWF0ZW4gdXMgdG8gcmViYWxhbmNpbmcuCi0JICogRHJvcCB0aGUgbG9jayBhbmQgdHJ5 IGFnYWluIGluIHRoZSBmYXN0IHBhdGguLi4uCi0JICovCi0JaWYgKCEoeGZzX2ljc2JfY291bnRl cl9kaXNhYmxlZChtcCwgZmllbGQpKSkgewotCQl4ZnNfaWNzYl91bmxvY2sobXApOwotCQlnb3Rv IGFnYWluOwotCX0KLQotCS8qCi0JICogVGhlIGNvdW50ZXIgaXMgY3VycmVudGx5IGRpc2FibGVk LiBCZWNhdXNlIHdlIGFyZQotCSAqIHJ1bm5pbmcgYXRvbWljYWxseSBoZXJlLCB3ZSBrbm93IGEg cmViYWxhbmNlIGNhbm5vdAotCSAqIGJlIGluIHByb2dyZXNzLiBIZW5jZSB3ZSBjYW4gZ28gc3Ry YWlnaHQgdG8gb3BlcmF0aW5nCi0JICogb24gdGhlIGdsb2JhbCBzdXBlcmJsb2NrLiBXZSBkbyBu b3QgY2FsbCB4ZnNfbW9kX2luY29yZV9zYigpCi0JICogaGVyZSBldmVuIHRob3VnaCB3ZSBuZWVk IHRvIGdldCB0aGUgbV9zYl9sb2NrLiBEb2luZyBzbwotCSAqIHdpbGwgY2F1c2UgdXMgdG8gcmUt ZW50ZXIgdGhpcyBmdW5jdGlvbiBhbmQgZGVhZGxvY2suCi0JICogSGVuY2Ugd2UgZ2V0IHRoZSBt X3NiX2xvY2sgb3Vyc2VsdmVzIGFuZCB0aGVuIGNhbGwKLQkgKiB4ZnNfbW9kX2luY29yZV9zYl91 bmxvY2tlZCgpIGFzIHRoZSB1bmxvY2tlZCBwYXRoIG9wZXJhdGVzCi0JICogZGlyZWN0bHkgb24g dGhlIGdsb2JhbCBjb3VudGVycy4KLQkgKi8KLQlzcGluX2xvY2soJm1wLT5tX3NiX2xvY2spOwot CXJldCA9IHhmc19tb2RfaW5jb3JlX3NiX3VubG9ja2VkKG1wLCBmaWVsZCwgZGVsdGEsIHJzdmQp OwotCXNwaW5fdW5sb2NrKCZtcC0+bV9zYl9sb2NrKTsKLQotCS8qCi0JICogTm93IHRoYXQgd2Un dmUgbW9kaWZpZWQgdGhlIGdsb2JhbCBzdXBlcmJsb2NrLCB3ZQotCSAqIG1heSBiZSBhYmxlIHRv IHJlLWVuYWJsZSB0aGUgZGlzdHJpYnV0ZWQgY291bnRlcnMKLQkgKiAoZS5nLiBsb3RzIG9mIHNw YWNlIGp1c3QgZ290IGZyZWVkKS4gQWZ0ZXIgdGhhdAotCSAqIHdlIGFyZSBkb25lLgotCSAqLwot CWlmIChyZXQgIT0gRU5PU1BDKQotCQl4ZnNfaWNzYl9iYWxhbmNlX2NvdW50ZXIobXAsIGZpZWxk LCAwKTsKLQl4ZnNfaWNzYl91bmxvY2sobXApOwotCXJldHVybiByZXQ7Ci0KLWJhbGFuY2VfY291 bnRlcjoKLQl4ZnNfaWNzYl91bmxvY2tfY250cihpY3NicCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsK LQotCS8qCi0JICogV2UgbWF5IGhhdmUgbXVsdGlwbGUgdGhyZWFkcyBoZXJlIGlmIG11bHRpcGxl IHBlci1jcHUKLQkgKiBjb3VudGVycyBydW4gZHJ5IGF0IHRoZSBzYW1lIHRpbWUuIFRoaXMgd2ls bCBtZWFuIHdlIGNhbgotCSAqIGRvIG1vcmUgYmFsYW5jZXMgdGhhbiBzdHJpY3RseSBuZWNlc3Nh cnkgYnV0IGl0IGlzIG5vdAotCSAqIHRoZSBjb21tb24gc2xvd3BhdGggY2FzZS4KLQkgKi8KLQl4 ZnNfaWNzYl9sb2NrKG1wKTsKLQotCS8qCi0JICogcnVubmluZyBhdG9taWNhbGx5LgotCSAqCi0J ICogVGhpcyB3aWxsIGxlYXZlIHRoZSBjb3VudGVyIGluIHRoZSBjb3JyZWN0IHN0YXRlIGZvciBm dXR1cmUKLQkgKiBhY2Nlc3Nlcy4gQWZ0ZXIgdGhlIHJlYmFsYW5jZSwgd2Ugc2ltcGx5IHRyeSBh Z2FpbiBhbmQgb3VyIHJldHJ5Ci0JICogd2lsbCBlaXRoZXIgc3VjY2VlZCB0aHJvdWdoIHRoZSBm YXN0IHBhdGggb3Igc2xvdyBwYXRoIHdpdGhvdXQKLQkgKiBhbm90aGVyIGJhbGFuY2Ugb3BlcmF0 aW9uIGJlaW5nIHJlcXVpcmVkLgotCSAqLwotCXhmc19pY3NiX2JhbGFuY2VfY291bnRlcihtcCwg ZmllbGQsIGRlbHRhKTsKLQl4ZnNfaWNzYl91bmxvY2sobXApOwotCWdvdG8gYWdhaW47Ci19Ci0K LSNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3Vu dC5oCmluZGV4IDU4NjFiNDkuLjdlZmFlMWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQu aAorKysgYi9mcy94ZnMveGZzX21vdW50LmgKQEAgLTY1LDQ0ICs2NSwxOSBAQCBzdHJ1Y3QgeGZz X25hbWVvcHM7CiBzdHJ1Y3QgeGZzX2FpbDsKIHN0cnVjdCB4ZnNfcXVvdGFpbmZvOwogCi0jaWZk ZWYgSEFWRV9QRVJDUFVfU0IKLQogLyoKLSAqIFZhbGlkIHBlci1jcHUgaW5jb3JlIHN1cGVyYmxv Y2sgY291bnRlcnMuIE5vdGUgdGhhdCBpZiB5b3UgYWRkIG5ldyBjb3VudGVycywKLSAqIHlvdSBt YXkgbmVlZCB0byBkZWZpbmUgbmV3IGNvdW50ZXIgZGlzYWJsZWQgYml0IGZpZWxkIGRlc2NyaXB0 b3JzIGFzIHRoZXJlCi0gKiBhcmUgbW9yZSBwb3NzaWJsZSBmaWVsZHMgaW4gdGhlIHN1cGVyYmxv Y2sgdGhhdCBjYW4gZml0IGluIGEgYml0ZmllbGQgb24gYQotICogMzIgYml0IHBsYXRmb3JtLiBU aGUgWEZTX1NCU18qIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgY3VycmVudCBjb3VudGVycyBqdXN0 Ci0gKiBmaXQuCisgKiBQZXItY3B1IGluY29yZSBzdXBlcmJsb2NrIGNvdW50ZXJzLgogICovCi10 eXBlZGVmIHN0cnVjdCB4ZnNfaWNzYl9jbnRzIHsKLQl1aW50NjRfdAlpY3NiX2ZkYmxvY2tzOwot CXVpbnQ2NF90CWljc2JfaWZyZWU7Ci0JdWludDY0X3QJaWNzYl9pY291bnQ7Ci0JdW5zaWduZWQg bG9uZwlpY3NiX2ZsYWdzOwotfSB4ZnNfaWNzYl9jbnRzX3Q7Ci0KLSNkZWZpbmUgWEZTX0lDU0Jf RkxBR19MT0NLCSgxIDw8IDApCS8qIGNvdW50ZXIgbG9jayBiaXQgKi8KK2VudW0geworCVhGU19J Q1NCX0ZEQkxPQ0tTID0gMCwKKwlYRlNfSUNTQl9JRlJFRSwKKwlYRlNfSUNTQl9JQ09VTlQsCisJ WEZTX0lDU0JfTUFYLAorfTsKIAotI2RlZmluZSBYRlNfSUNTQl9MQVpZX0NPVU5UCSgxIDw8IDEp CS8qIGFjY3VyYWN5IG5vdCBuZWVkZWQgKi8KLQotZXh0ZXJuIGludAl4ZnNfaWNzYl9pbml0X2Nv dW50ZXJzKHN0cnVjdCB4ZnNfbW91bnQgKik7Ci1leHRlcm4gdm9pZAl4ZnNfaWNzYl9yZWluaXRf Y291bnRlcnMoc3RydWN0IHhmc19tb3VudCAqKTsKLWV4dGVybiB2b2lkCXhmc19pY3NiX2Rlc3Ry b3lfY291bnRlcnMoc3RydWN0IHhmc19tb3VudCAqKTsKLWV4dGVybiB2b2lkCXhmc19pY3NiX3N5 bmNfY291bnRlcnMoc3RydWN0IHhmc19tb3VudCAqLCBpbnQpOwotZXh0ZXJuIHZvaWQJeGZzX2lj c2Jfc3luY19jb3VudGVyc19sb2NrZWQoc3RydWN0IHhmc19tb3VudCAqLCBpbnQpOwogZXh0ZXJu IGludAl4ZnNfaWNzYl9tb2RpZnlfY291bnRlcnMoc3RydWN0IHhmc19tb3VudCAqLCB4ZnNfc2Jf ZmllbGRfdCwKIAkJCQkJCWludDY0X3QsIGludCk7CiAKLSNlbHNlCi0jZGVmaW5lIHhmc19pY3Ni X2luaXRfY291bnRlcnMobXApCQkoMCkKLSNkZWZpbmUgeGZzX2ljc2JfZGVzdHJveV9jb3VudGVy cyhtcCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgeGZzX2ljc2JfcmVpbml0X2NvdW50ZXJz KG1wKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSB4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzKG1w LCBmbGFncykJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSB4ZnNfaWNzYl9zeW5jX2NvdW50ZXJz X2xvY2tlZChtcCwgZmxhZ3MpIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgeGZzX2ljc2JfbW9k aWZ5X2NvdW50ZXJzKG1wLCBmaWVsZCwgZGVsdGEsIHJzdmQpIFwKLQl4ZnNfbW9kX2luY29yZV9z YihtcCwgZmllbGQsIGRlbHRhLCByc3ZkKQotI2VuZGlmCi0KIHR5cGVkZWYgc3RydWN0IHhmc19t b3VudCB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrCSptX3N1cGVyOwogCXhmc190aWRfdAkJbV90aWQ7 CQkvKiBuZXh0IHVudXNlZCB0aWQgZm9yIGZzICovCkBAIC0xODYsMTIgKzE2MSw2IEBAIHR5cGVk ZWYgc3RydWN0IHhmc19tb3VudCB7CiAJc3RydWN0IHhmc19jaGFzaAkqbV9jaGFzaDsJLyogZnMg cHJpdmF0ZSBpbm9kZSBwZXItY2x1c3RlcgogCQkJCQkJICogaGFzaCB0YWJsZSAqLwogCWF0b21p Y190CQltX2FjdGl2ZV90cmFuczsJLyogbnVtYmVyIHRyYW5zIGZyb3plbiAqLwotI2lmZGVmIEhB VkVfUEVSQ1BVX1NCCi0JeGZzX2ljc2JfY250c190IF9fcGVyY3B1ICptX3NiX2NudHM7CS8qIHBl ci1jcHUgc3VwZXJibG9jayBjb3VudGVycyAqLwotCXVuc2lnbmVkIGxvbmcJCW1faWNzYl9jb3Vu dGVyczsgLyogZGlzYWJsZWQgcGVyLWNwdSBjb3VudGVycyAqLwotCXN0cnVjdCBub3RpZmllcl9i bG9jawltX2ljc2Jfbm90aWZpZXI7IC8qIGhvdHBsdWcgY3B1IG5vdGlmaWVyICovCi0Jc3RydWN0 IG11dGV4CQltX2ljc2JfbXV0ZXg7CS8qIGJhbGFuY2VyIHN5bmMgbG9jayAqLwotI2VuZGlmCiAJ c3RydWN0IHhmc19tcnVfY2FjaGUJKm1fZmlsZXN0cmVhbTsgIC8qIHBlci1tb3VudCBmaWxlc3Ry ZWFtIGRhdGEgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKm1fc3luY190YXNrOwkvKiBnZW5lcmFs aXNlZCBzeW5jIHRocmVhZCAqLwogCXhmc19zeW5jX3dvcmtfdAkJbV9zeW5jX3dvcms7CS8qIHdv cmsgaXRlbSBmb3IgVkZTX1NZTkMgKi8KQEAgLTIwMiw2ICsxNzEsNyBAQCB0eXBlZGVmIHN0cnVj dCB4ZnNfbW91bnQgewogCV9faW50NjRfdAkJbV91cGRhdGVfZmxhZ3M7CS8qIHNiIGZsYWdzIHdl IG5lZWQgdG8gdXBkYXRlCiAJCQkJCQkgICBvbiB0aGUgbmV4dCByZW1vdW50LHJ3ICovCiAJc3Ry dWN0IHNocmlua2VyCQltX2lub2RlX3NocmluazsJLyogaW5vZGUgcmVjbGFpbSBzaHJpbmtlciAq LworCXN0cnVjdCBwZXJjcHVfY291bnRlcgltX2ljc2JbWEZTX0lDU0JfTUFYXTsKIH0geGZzX21v dW50X3Q7CiAKIC8qCkBAIC0zMzMsMjYgKzMwMyw2IEBAIHN0cnVjdCB4ZnNfcGVyYWcgKnhmc19w ZXJhZ19nZXRfdGFnKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCB4ZnNfYWdudW1iZXJfdCBhZ25vLAog dm9pZAl4ZnNfcGVyYWdfcHV0KHN0cnVjdCB4ZnNfcGVyYWcgKnBhZyk7CiAKIC8qCi0gKiBQZXIt Y3B1IHN1cGVyYmxvY2sgbG9ja2luZyBmdW5jdGlvbnMKLSAqLwotI2lmZGVmIEhBVkVfUEVSQ1BV X1NCCi1zdGF0aWMgaW5saW5lIHZvaWQKLXhmc19pY3NiX2xvY2soeGZzX21vdW50X3QgKm1wKQot ewotCW11dGV4X2xvY2soJm1wLT5tX2ljc2JfbXV0ZXgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZv aWQKLXhmc19pY3NiX3VubG9jayh4ZnNfbW91bnRfdCAqbXApCi17Ci0JbXV0ZXhfdW5sb2NrKCZt cC0+bV9pY3NiX211dGV4KTsKLX0KLSNlbHNlCi0jZGVmaW5lIHhmc19pY3NiX2xvY2sobXApCi0j ZGVmaW5lIHhmc19pY3NiX3VubG9jayhtcCkKLSNlbmRpZgotCi0vKgogICogVGhpcyBzdHJ1Y3R1 cmUgaXMgZm9yIHVzZSBieSB0aGUgeGZzX21vZF9pbmNvcmVfc2JfYmF0Y2goKSByb3V0aW5lLgog ICogeGZzX2dyb3dmcyBjYW4gc3BlY2lmeSBhIGZldyBmaWVsZHMgd2hpY2ggYXJlIG1vcmUgdGhh biBpbnQgbGltaXQKICAqLwpAQCAtMzc5LDYgKzMyOSwyMCBAQCBleHRlcm4gaW50CXhmc19zYl92 YWxpZGF0ZV9mc2JfY291bnQoc3RydWN0IHhmc19zYiAqLCBfX3VpbnQ2NF90KTsKIAogZXh0ZXJu IGludAl4ZnNfZGV2X2lzX3JlYWRfb25seShzdHJ1Y3QgeGZzX21vdW50ICosIGNoYXIgKik7CiAK K2V4dGVybiBpbnQJeGZzX2ljc2JfaW5pdF9jb3VudGVycyhzdHJ1Y3QgeGZzX21vdW50ICopOwor ZXh0ZXJuIHZvaWQJeGZzX2ljc2JfcmVpbml0X2NvdW50ZXJzKHN0cnVjdCB4ZnNfbW91bnQgKik7 CitleHRlcm4gdm9pZAl4ZnNfaWNzYl9kZXN0cm95X2NvdW50ZXJzKHN0cnVjdCB4ZnNfbW91bnQg Kik7CitleHRlcm4gdm9pZAl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzX2xvY2tlZChzdHJ1Y3QgeGZz X21vdW50ICopOworCitzdGF0aWMgaW5saW5lIHZvaWQKK3hmc19pY3NiX3N5bmNfY291bnRlcnMo CisJc3RydWN0IHhmc19tb3VudAkqbXApCit7CisJc3Bpbl9sb2NrKCZtcC0+bV9zYl9sb2NrKTsK Kwl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzX2xvY2tlZChtcCk7CisJc3Bpbl91bmxvY2soJm1wLT5t X3NiX2xvY2spOworfQorCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiBleHRlcm4gdm9pZAl4 ZnNfbW9kX3NiKHN0cnVjdCB4ZnNfdHJhbnMgKiwgX19pbnQ2NF90KTsKZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50 ZXIuaAppbmRleCA0NmY2YmE1Li4zMjAxNGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bl cmNwdV9jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCkBAIC00 MSw2ICs0MSw4IEBAIHZvaWQgcGVyY3B1X2NvdW50ZXJfc2V0KHN0cnVjdCBwZXJjcHVfY291bnRl ciAqZmJjLCBzNjQgYW1vdW50KTsKIHZvaWQgX19wZXJjcHVfY291bnRlcl9hZGQoc3RydWN0IHBl cmNwdV9jb3VudGVyICpmYmMsIHM2NCBhbW91bnQsIHMzMiBiYXRjaCk7CiBzNjQgX19wZXJjcHVf Y291bnRlcl9zdW0oc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpOwogaW50IHBlcmNwdV9jb3Vu dGVyX2NvbXBhcmUoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCByaHMpOworaW50IHBl cmNwdV9jb3VudGVyX2FkZF91bmxlc3NfbHQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2 NCBhbW91bnQsCisJCQkJCQkJczY0IHRocmVzaG9sZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBw ZXJjcHVfY291bnRlcl9hZGQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCBhbW91bnQp CiB7CkBAIC0xNTMsNiArMTU1LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBlcmNwdV9jb3VudGVy X2luaXRpYWxpemVkKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKQogCXJldHVybiAxOwogfQog CitzdGF0aWMgaW5saW5lIGludCBwZXJjcHVfY291bnRlcl90ZXN0X2FuZF9hZGRfZGVsdGEoc3Ry dWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCBkZWx0YSkKK3sKKwlzNjQgY291bnQ7CisKKwlw cmVlbXB0X2Rpc2FibGUoKTsKKwljb3VudCA9IGZiYy0+Y291bnQgKyBkZWx0YTsKKwlpZiAoY291 bnQgPCAwKQorCQlyZXR1cm4gLTE7CisJZmJjLT5jb3VudCA9IGNvdW50OworCXByZWVtcHRfZW5h YmxlKCk7CisJcmV0dXJuIGNvdW50ID8gMSA6IDA7Cit9CisKKwogI2VuZGlmCS8qIENPTkZJR19T TVAgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9jb3VudGVyX2luYyhzdHJ1Y3QgcGVy Y3B1X2NvdW50ZXIgKmZiYykKZGlmZiAtLWdpdCBhL2xpYi9wZXJjcHVfY291bnRlci5jIGIvbGli L3BlcmNwdV9jb3VudGVyLmMKaW5kZXggNjA0Njc4ZC4uMTNjNGZmMyAxMDA2NDQKLS0tIGEvbGli L3BlcmNwdV9jb3VudGVyLmMKKysrIGIvbGliL3BlcmNwdV9jb3VudGVyLmMKQEAgLTIxMyw2ICsy MTMsODUgQEAgaW50IHBlcmNwdV9jb3VudGVyX2NvbXBhcmUoc3RydWN0IHBlcmNwdV9jb3VudGVy ICpmYmMsIHM2NCByaHMpCiB9CiBFWFBPUlRfU1lNQk9MKHBlcmNwdV9jb3VudGVyX2NvbXBhcmUp OwogCisvKioKKyAqCisgKiBwZXJjcHVfY291bnRlcl9hZGRfdW5sZXNzX2x0IC0gYWRkIHRvIGEg Y291bnRlciBhdm9pZGluZyB1bmRlcnJ1bnMKKyAqIEBmYmM6CWNvdW50ZXIKKyAqIEBhbW91bnQ6 CWFtb3VudCB0byBhZGQKKyAqIEB0aHJlc2hvbGQ6CXVuZGVycnVuIHRocmVzaG9sZAorICoKKyAq IEFkZCBAYW1vdW50IHRvIEBmZGMgaWYgYW5kIG9ubHkgaWYgcmVzdWx0IG9mIGFkZGl0aW9uIGlz IGdyZWF0ZXIgdGhhbiBvcgorICogZXF1YWwgdG8gQHRocmVzaG9sZCAgUmV0dXJuIDEgaWYgZ3Jl YXRlciBhbmQgYWRkZWQsIDAgaWYgZXF1YWwgYW5kIGFkZGVkCisgKiBhbmQgLTEgaWYgYW5kIHVu ZGVycnVuIHdvdWxkIGhhdmUgb2NjdXJlZC4KKyAqCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igb3Bl cmF0aW9ucyB0aGF0IG11c3QgYWNjdXJhdGVseSBhbmQgYXRvbWljYWxseSBvbmx5IGFkZCBhCisg KiBkZWx0YSB0byBhIGNvdW50ZXIgaWYgdGhlIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gYSBnaXZl biAoZS5nLiBmb3IgZnJlZXNwYWNlCisgKiBhY2NvdW50aW5nIHdpdGggRU5PU1BDIGNoZWNraW5n IGluIGZpbGVzeXN0ZW1zKS4KKyAqLworaW50IHBlcmNwdV9jb3VudGVyX2FkZF91bmxlc3NfbHQo c3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCBhbW91bnQsIHM2NAordGhyZXNob2xkKQor eworCXM2NAljb3VudDsKKwlzNjQJZXJyb3IgPSAyICogcGVyY3B1X2NvdW50ZXJfYmF0Y2ggKiBu dW1fb25saW5lX2NwdXMoKTsKKwlpbnQJY3B1OworCWludAlyZXQgPSAtMTsKKworCXByZWVtcHRf ZGlzYWJsZSgpOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHJvdWdoIGNvdW50IHdpbGwgYmUgc3Vm ZmljaWVudCBmb3IgY29tcGFyaXNvbiAqLworCWNvdW50ID0gcGVyY3B1X2NvdW50ZXJfcmVhZChm YmMpOworCWlmIChjb3VudCArIGFtb3VudCA8IHRocmVzaG9sZCAtIGVycm9yKQorCQlnb3RvIG91 dDsKKworCS8qCisJICogSWYgdGhlIGNvdW50ZXIgaXMgb3ZlciB0aGUgdGhyZXNob2xkIGFuZCB0 aGUgY2hhbmdlIGlzIGxlc3MgdGhhbiB0aGUKKwkgKiBiYXRjaCBzaXplLCB3ZSBtaWdodCBiZSBh YmxlIHRvIGF2b2lkIGxvY2tpbmcuCisJICovCisJaWYgKGNvdW50ID4gdGhyZXNob2xkICsgZXJy b3IgJiYgYWJzKGFtb3VudCkgPCBwZXJjcHVfY291bnRlcl9iYXRjaCkgeworCQlfX3BlcmNwdV9j b3VudGVyX2FkZChmYmMsIGFtb3VudCwgcGVyY3B1X2NvdW50ZXJfYmF0Y2gpOworCQlyZXQgPSAx OworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIElmIHRoZSByZXN1bHQgaXMgaXMgb3ZlciB0 aGUgZXJyb3IgdGhyZXNob2xkLCB3ZSBjYW4ganVzdCBhZGQgaXQKKwkgKiBpbnRvIHRoZSBnbG9i YWwgY291bnRlciBpZ25vcmluZyB3aGF0IGlzIGluIHRoZSBwZXItY3B1IGNvdW50ZXJzCisJICog YXMgdGhleSB3aWxsIG5vdCBjaGFuZ2UgdGhlIHJlc3VsdCBvZiB0aGUgY2FsY3VsYXRpb24uCisJ ICovCisJc3Bpbl9sb2NrKCZmYmMtPmxvY2spOworCWlmIChmYmMtPmNvdW50ICsgYW1vdW50ID4g dGhyZXNob2xkICsgZXJyb3IpIHsKKwkJZmJjLT5jb3VudCArPSBhbW91bnQ7CisJCXJldCA9IDE7 CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKgorCSAqIFJlc3VsdCBpcyB3aXRoaW5nIHRo ZSBlcnJvciBtYXJnaW4uIFJ1biBhbiBvcGVuLWNvZGVkIHN1bSBvZiB0aGUKKwkgKiBwZXItY3B1 IGNvdW50ZXJzIHRvIGdldCB0aGUgZXhhY3QgdmFsdWUgYXQgdGhpcyBwb2ludCBpbiB0aW1lLAor CSAqIGFuZCBpZiB0aGUgcmVzdWx0IHdvdWwgZGJlIGFib3ZlIHRoZSB0aHJlc2hvbGQsIGFkZCB0 aGUgYW1vdW50IHRvCisJICogdGhlIGdsb2JhbCBjb3VudGVyLgorCSAqLworCWNvdW50ID0gZmJj LT5jb3VudDsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlzMzIgKnBjb3VudCA9IHBl cl9jcHVfcHRyKGZiYy0+Y291bnRlcnMsIGNwdSk7CisJCWNvdW50ICs9ICpwY291bnQ7CisJfQor CVdBUk5fT04oY291bnQgPCB0aHJlc2hvbGQpOworCisJaWYgKGNvdW50ICsgYW1vdW50ID49IHRo cmVzaG9sZCkgeworCQlyZXQgPSAwOworCQlpZiAoY291bnQgKyBhbW91bnQgPiB0aHJlc2hvbGQp CisJCQlyZXQgPSAxOworCQlmYmMtPmNvdW50ICs9IGFtb3VudDsKKwl9CitvdXRfdW5sb2NrOgor CXNwaW5fdW5sb2NrKCZmYmMtPmxvY2spOworb3V0OgorCXByZWVtcHRfZW5hYmxlKCk7CisJcmV0 dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocGVyY3B1X2NvdW50ZXJfYWRkX3VubGVzc19sdCk7 CisKIHN0YXRpYyBpbnQgX19pbml0IHBlcmNwdV9jb3VudGVyX3N0YXJ0dXAodm9pZCkKIHsKIAlj b21wdXRlX2JhdGNoX3ZhbHVlKCk7Ci0tIAoxLjcuMi4zCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwp4ZnMgbWFpbGluZyBsaXN0Cnhmc0Bvc3Muc2dpLmNv bQpodHRwOi8vb3NzLnNnaS5jb20vbWFpbG1hbi9saXN0aW5mby94ZnMK