From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 6/6] drm/msm/a6xx: Add a6xx gpu state Date: Fri, 14 Sep 2018 09:19:35 -0600 Message-ID: <20180914151935.9714-7-jcrouse@codeaurora.org> References: <20180914151935.9714-1-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180914151935.9714-1-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIGdhdGhlcmluZyBhbmQgZHVtcGluZyB0aGUgYTZ4eCBHUFUgc3RhdGUg aW5jbHVkaW5nCnJlZ2lzdGVycywgR01VIHJlZ2lzdGVycywgaW5kZXhlZCByZWdpc3RlcnMsIHNo YWRlciBibG9ja3MsCmNvbnRleHQgY2x1c3RlcnMgYW5kIGRlYnVnYnVzLgoKU2lnbmVkLW9mZi1i eTogSm9yZGFuIENyb3VzZSA8amNyb3VzZUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hNnh4X2dtdS5jICAgICAgIHwgICAyNSArLQogZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYTZ4eF9nbXUuaCAgICAgICB8ICAgIDMgKwogZHJpdmVycy9ncHUvZHJtL21z bS9hZHJlbm8vYTZ4eF9ncHUuYyAgICAgICB8ICAgMzkgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20v YWRyZW5vL2E2eHhfZ3B1LmggICAgICAgfCAgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRy ZW5vL2E2eHhfZ3B1X3N0YXRlLmMgfCAxMTU5ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmggfCAgNDMwICsrKysrKysKIDcgZmls ZXMgY2hhbmdlZCwgMTYyNSBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3Rh dGUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL01ha2VmaWxlCmluZGV4IDE5YWI1MjFkNGMzYS4uMzM2NDVjNjUzOWVlIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAgbXNtLXkgOj0gXAogCWFkcmVuby9h Nnh4X2dwdS5vIFwKIAlhZHJlbm8vYTZ4eF9nbXUubyBcCiAJYWRyZW5vL2E2eHhfaGZpLm8gXAor CWFkcmVuby9hNnh4X2dwdV9zdGF0ZS5vIFwKIAloZG1pL2hkbWkubyBcCiAJaGRtaS9oZG1pX2F1 ZGlvLm8gXAogCWhkbWkvaGRtaV9icmlkZ2UubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hNnh4X2dtdS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4 eF9nbXUuYwppbmRleCBkMDRiNjNlYThjZDkuLmFkMmE4ODdjZTcwMCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hNnh4X2dtdS5jCkBAIC01NSwxMCArNTUsMzEgQEAgc3RhdGljIGlycXJldHVy bl90IGE2eHhfaGZpX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQogCXJldHVybiBJUlFfSEFORExF RDsKIH0KIAorYm9vbCBhNnh4X2dtdV9zcHRwcmFjX2lzX29uKHN0cnVjdCBhNnh4X2dtdSAqZ211 KQoreworCXUzMiB2YWw7CisKKwkvKiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBncHUgc3RhdGUg Y29kZSBzbyBtYWtlIHN1cmUgR01VIGlzIHZhbGlkICovCisJaWYgKElTX0VSUl9PUl9OVUxMKGdt dS0+bW1pbykpCisJCXJldHVybiBmYWxzZTsKKworCXZhbCA9IGdtdV9yZWFkKGdtdSwgUkVHX0E2 WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVMpOworCisJcmV0dXJuICEodmFsICYKKwkJKEE2 WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVNfU1BUUFJBQ19HRFNDX1BPV0VSX09GRiB8CisJ CUE2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVNfU1BfQ0xPQ0tfT0ZGKSk7Cit9CisKIC8q IENoZWNrIHRvIHNlZSBpZiB0aGUgR1ggcmFpbCBpcyBzdGlsbCBwb3dlcmVkICovCi1zdGF0aWMg Ym9vbCBhNnh4X2dtdV9neF9pc19vbihzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK2Jvb2wgYTZ4eF9n bXVfZ3hfaXNfb24oc3RydWN0IGE2eHhfZ211ICpnbXUpCiB7Ci0JdTMyIHZhbCA9IGdtdV9yZWFk KGdtdSwgUkVHX0E2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVMpOworCXUzMiB2YWw7CisK KwkvKiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBncHUgc3RhdGUgY29kZSBzbyBtYWtlIHN1cmUg R01VIGlzIHZhbGlkICovCisJaWYgKElTX0VSUl9PUl9OVUxMKGdtdS0+bW1pbykpCisJCXJldHVy biBmYWxzZTsKKworCXZhbCA9IGdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR01VX1NQVFBSQUNfUFdS X0NMS19TVEFUVVMpOwogCiAJcmV0dXJuICEodmFsICYKIAkJKEE2WFhfR01VX1NQVFBSQUNfUFdS X0NMS19TVEFUVVNfR1hfSE1fR0RTQ19QT1dFUl9PRkYgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5v L2E2eHhfZ211LmgKaW5kZXggMDlkOTdlNGVkMjkzLi45NjgzZTY1YjA3ODMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuaApAQCAtMTUzLDQgKzE1Myw3IEBAIHZvaWQgYTZ4eF9o Zmlfc3RvcChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSk7CiAKIHZvaWQgYTZ4eF9oZmlfdGFzayh1bnNp Z25lZCBsb25nIGRhdGEpOwogCitib29sIGE2eHhfZ211X2d4X2lzX29uKHN0cnVjdCBhNnh4X2dt dSAqZ211KTsKK2Jvb2wgYTZ4eF9nbXVfc3B0cHJhY19pc19vbihzdHJ1Y3QgYTZ4eF9nbXUgKmdt dSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4 eF9ncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMKaW5kZXggOWEx NGNiM2Q1MDI3Li42OTcwMDgwNmVlOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v YWRyZW5vL2E2eHhfZ3B1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9n cHUuYwpAQCAtNjQ1LDMzICs2NDUsNiBAQCBzdGF0aWMgY29uc3QgdTMyIGE2eHhfcmVnaXN0ZXJf b2Zmc2V0c1tSRUdfQURSRU5PX1JFR0lTVEVSX01BWF0gPSB7CiAJUkVHX0FEUkVOT19ERUZJTkUo UkVHX0FEUkVOT19DUF9SQl9DTlRMLCBSRUdfQTZYWF9DUF9SQl9DTlRMKSwKIH07CiAKLXN0YXRp YyBjb25zdCB1MzIgYTZ4eF9yZWdpc3RlcnNbXSA9IHsKLQkweDAwMDAsIDB4MDAwMiwgMHgwMDEw LCAweDAwMTAsIDB4MDAxMiwgMHgwMDEyLCAweDAwMTgsIDB4MDAxYiwKLQkweDAwMWUsIDB4MDAz MiwgMHgwMDM4LCAweDAwM2MsIDB4MDA0MiwgMHgwMDQyLCAweDAwNDQsIDB4MDA0NCwKLQkweDAw NDcsIDB4MDA0NywgMHgwMDU2LCAweDAwNTYsIDB4MDBhZCwgMHgwMGFlLCAweDAwYjAsIDB4MDBm YiwKLQkweDAxMDAsIDB4MDExZCwgMHgwMjAwLCAweDAyMGQsIDB4MDIxMCwgMHgwMjEzLCAweDAy MTgsIDB4MDIzZCwKLQkweDA0MDAsIDB4MDRmOSwgMHgwNTAwLCAweDA1MDAsIDB4MDUwNSwgMHgw NTBiLCAweDA1MGUsIDB4MDUxMSwKLQkweDA1MzMsIDB4MDUzMywgMHgwNTQwLCAweDA1NTUsIDB4 MDgwMCwgMHgwODA4LCAweDA4MTAsIDB4MDgxMywKLQkweDA4MjAsIDB4MDgyMSwgMHgwODIzLCAw eDA4MjcsIDB4MDgzMCwgMHgwODMzLCAweDA4NDAsIDB4MDg0MywKLQkweDA4NGYsIDB4MDg2Ziwg MHgwODgwLCAweDA4OGEsIDB4MDhhMCwgMHgwOGFiLCAweDA4YzAsIDB4MDhjNCwKLQkweDA4ZDAs IDB4MDhkZCwgMHgwOGYwLCAweDA4ZjMsIDB4MDkwMCwgMHgwOTAzLCAweDA5MDgsIDB4MDkxMSwK LQkweDA5MjgsIDB4MDkzZSwgMHgwOTQyLCAweDA5NGQsIDB4MDk4MCwgMHgwOTg0LCAweDA5OGQs IDB4MDk5NiwKLQkweDA5OTgsIDB4MDk5ZSwgMHgwOWEwLCAweDA5YTYsIDB4MDlhOCwgMHgwOWFl LCAweDA5YjAsIDB4MDliMSwKLQkweDA5YzIsIDB4MDljOCwgMHgwYTAwLCAweDBhMDMsIDB4MGMw MCwgMHgwYzA0LCAweDBjMDYsIDB4MGMwNiwKLQkweDBjMTAsIDB4MGNkOSwgMHgwZTAwLCAweDBl MGUsIDB4MGUxMCwgMHgwZTEzLCAweDBlMTcsIDB4MGUxOSwKLQkweDBlMWMsIDB4MGUyYiwgMHgw ZTMwLCAweDBlMzIsIDB4MGUzOCwgMHgwZTM5LCAweDg2MDAsIDB4ODYwMSwKLQkweDg2MTAsIDB4 ODYxYiwgMHg4NjIwLCAweDg2MjAsIDB4ODYyOCwgMHg4NjJiLCAweDg2MzAsIDB4ODYzNywKLQkw eDhlMDEsIDB4OGUwMSwgMHg4ZTA0LCAweDhlMDUsIDB4OGUwNywgMHg4ZTA4LCAweDhlMGMsIDB4 OGUwYywKLQkweDhlMTAsIDB4OGUxYywgMHg4ZTIwLCAweDhlMjUsIDB4OGUyOCwgMHg4ZTI4LCAw eDhlMmMsIDB4OGUyZiwKLQkweDhlM2IsIDB4OGUzZSwgMHg4ZTQwLCAweDhlNDMsIDB4OGU1MCwg MHg4ZTVlLCAweDhlNzAsIDB4OGU3NywKLQkweDk2MDAsIDB4OTYwNCwgMHg5NjI0LCAweDk2Mzcs IDB4OWUwMCwgMHg5ZTAxLCAweDllMDMsIDB4OWUwZSwKLQkweDllMTEsIDB4OWUxNiwgMHg5ZTE5 LCAweDllMTksIDB4OWUxYywgMHg5ZTFjLCAweDllMjAsIDB4OWUyMywKLQkweDllMzAsIDB4OWUz MSwgMHg5ZTM0LCAweDllMzQsIDB4OWU3MCwgMHg5ZTcyLCAweDllNzgsIDB4OWU3OSwKLQkweDll ODAsIDB4OWZmZiwgMHhhNjAwLCAweGE2MDEsIDB4YTYwMywgMHhhNjAzLCAweGE2MGEsIDB4YTYw YSwKLQkweGE2MTAsIDB4YTYxNywgMHhhNjMwLCAweGE2MzAsCi0JfjAKLX07Ci0KIHN0YXRpYyBp bnQgYTZ4eF9wbV9yZXN1bWUoc3RydWN0IG1zbV9ncHUgKmdwdSkKIHsKIAlzdHJ1Y3QgYWRyZW5v X2dwdSAqYWRyZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKQEAgLTcyMCwxNCArNjkzLDYg QEAgc3RhdGljIGludCBhNnh4X2dldF90aW1lc3RhbXAoc3RydWN0IG1zbV9ncHUgKmdwdSwgdWlu dDY0X3QgKnZhbHVlKQogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdf RlMpIHx8IGRlZmluZWQoQ09ORklHX0RFVl9DT1JFRFVNUCkKLXN0YXRpYyB2b2lkIGE2eHhfc2hv dyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUsCi0JCXN0 cnVjdCBkcm1fcHJpbnRlciAqcCkKLXsKLQlhZHJlbm9fc2hvdyhncHUsIHN0YXRlLCBwKTsKLX0K LSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IG1zbV9yaW5nYnVmZmVyICphNnh4X2FjdGl2ZV9yaW5n KHN0cnVjdCBtc21fZ3B1ICpncHUpCiB7CiAJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUg PSB0b19hZHJlbm9fZ3B1KGdwdSk7CkBAIC03NjgsNiArNzMzLDggQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBhZHJlbm9fZ3B1X2Z1bmNzIGZ1bmNzID0gewogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVH X0ZTKSB8fCBkZWZpbmVkKENPTkZJR19ERVZfQ09SRURVTVApCiAJCS5zaG93ID0gYTZ4eF9zaG93 LAogI2VuZGlmCisJCS5ncHVfc3RhdGVfZ2V0ID0gYTZ4eF9ncHVfc3RhdGVfZ2V0LAorCQkuZ3B1 X3N0YXRlX3B1dCA9IGE2eHhfZ3B1X3N0YXRlX3B1dCwKIAl9LAogCS5nZXRfdGltZXN0YW1wID0g YTZ4eF9nZXRfdGltZXN0YW1wLAogfTsKQEAgLTc4OSw3ICs3NTYsNyBAQCBzdHJ1Y3QgbXNtX2dw dSAqYTZ4eF9ncHVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCWFkcmVub19ncHUgPSAm YTZ4eF9ncHUtPmJhc2U7CiAJZ3B1ID0gJmFkcmVub19ncHUtPmJhc2U7CiAKLQlhZHJlbm9fZ3B1 LT5yZWdpc3RlcnMgPSBhNnh4X3JlZ2lzdGVyczsKKwlhZHJlbm9fZ3B1LT5yZWdpc3RlcnMgPSBO VUxMOwogCWFkcmVub19ncHUtPnJlZ19vZmZzZXRzID0gYTZ4eF9yZWdpc3Rlcl9vZmZzZXRzOwog CiAJcmV0ID0gYWRyZW5vX2dwdV9pbml0KGRldiwgcGRldiwgYWRyZW5vX2dwdSwgJmZ1bmNzLCAx KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmggYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdS5oCmluZGV4IGRkNjllNWIwZTY5Mi4u MWU4ZjhhZTkzODk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4 X2dwdS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmgKQEAgLTU3 LDQgKzU3LDEwIEBAIHZvaWQgYTZ4eF9nbXVfY2xlYXJfb29iKHN0cnVjdCBhNnh4X2dtdSAqZ211 LCBlbnVtIGE2eHhfZ211X29vYl9zdGF0ZSBzdGF0ZSk7CiBpbnQgYTZ4eF9nbXVfcHJvYmUoc3Ry dWN0IGE2eHhfZ3B1ICphNnh4X2dwdSwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKIHZvaWQg YTZ4eF9nbXVfcmVtb3ZlKHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUpOwogCit2b2lkIGE2eHhf c2hvdyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUsCisJ CXN0cnVjdCBkcm1fcHJpbnRlciAqcCk7CisKK3N0cnVjdCBtc21fZ3B1X3N0YXRlICphNnh4X2dw dV9zdGF0ZV9nZXQoc3RydWN0IG1zbV9ncHUgKmdwdSk7CitpbnQgYTZ4eF9ncHVfc3RhdGVfcHV0 KHN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZSk7CisKICNlbmRpZiAvKiBfX0E2WFhfR1BVX0hf XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3Rh dGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wOWY4MTEwY2E2ZTQKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5jCkBA IC0wLDAgKzEsMTE1OSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8q IENvcHlyaWdodCAoYykgMjAxOCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4gKi8KKworI2luY2x1ZGUgPGxpbnV4L2FzY2lpODUuaD4KKyNpbmNsdWRlICJtc21fZ2Vt LmgiCisjaW5jbHVkZSAiYTZ4eF9ncHUuaCIKKyNpbmNsdWRlICJhNnh4X2dtdS5oIgorI2luY2x1 ZGUgImE2eHhfZ3B1X3N0YXRlLmgiCisjaW5jbHVkZSAiYTZ4eF9nbXUueG1sLmgiCisKK3N0cnVj dCBhNnh4X2dwdV9zdGF0ZV9vYmogeworCWNvbnN0IHZvaWQgKmhhbmRsZTsKKwl1MzIgKmRhdGE7 Cit9OworCitzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGUgeworCXN0cnVjdCBtc21fZ3B1X3N0YXRlIGJh c2U7CisKKwlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpnbXVfcmVnaXN0ZXJzOworCWludCBu cl9nbXVfcmVnaXN0ZXJzOworCisJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqcmVnaXN0ZXJz OworCWludCBucl9yZWdpc3RlcnM7CisKKwlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpzaGFk ZXJzOworCWludCBucl9zaGFkZXJzOworCisJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqY2x1 c3RlcnM7CisJaW50IG5yX2NsdXN0ZXJzOworCisJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAq ZGJnYWhiX2NsdXN0ZXJzOworCWludCBucl9kYmdhaGJfY2x1c3RlcnM7CisKKwlzdHJ1Y3QgYTZ4 eF9ncHVfc3RhdGVfb2JqICppbmRleGVkX3JlZ3M7CisJaW50IG5yX2luZGV4ZWRfcmVnczsKKwor CXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKmRlYnVnYnVzOworCWludCBucl9kZWJ1Z2J1czsK KworCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKnZiaWZfZGVidWdidXM7CisKKwlzdHJ1Y3Qg YTZ4eF9ncHVfc3RhdGVfb2JqICpjeF9kZWJ1Z2J1czsKKwlpbnQgbnJfY3hfZGVidWdidXM7Cit9 OworCitzdGF0aWMgaW5saW5lIGludCBDUkFTSERVTVBfV1JJVEUodTY0ICppbiwgdTMyIHJlZywg dTMyIHZhbCkKK3sKKwlpblswXSA9IHZhbDsKKwlpblsxXSA9ICgoKHU2NCkgcmVnKSA8PCA0NCB8 ICgxIDw8IDIxKSB8IDEpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IENS QVNIRFVNUF9SRUFEKHU2NCAqaW4sIHUzMiByZWcsIHUzMiBkd29yZHMsIHU2NCB0YXJnZXQpCit7 CisJaW5bMF0gPSB0YXJnZXQ7CisJaW5bMV0gPSAoKCh1NjQpIHJlZykgPDwgNDQgfCBkd29yZHMp OworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IENSQVNIRFVNUF9GSU5JKHU2 NCAqaW4pCit7CisJaW5bMF0gPSAwOworCWluWzFdID0gMDsKKworCXJldHVybiAyOworfQorCitz dHJ1Y3QgYTZ4eF9jcmFzaGR1bXBlciB7CisJdm9pZCAqcHRyOworCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqYm87CisJdTY0IGlvdmE7Cit9OworCisvKgorICogQWxsb2NhdGUgMU1CIGZvciB0aGUg Y3Jhc2hkdW1wZXIgc2NyYXRjaCByZWdpb24gLSA4ayBmb3IgdGhlIHNjcmlwdCBhbmQKKyAqIHRo ZSByZXN0IGZvciB0aGUgZGF0YQorICovCisjZGVmaW5lIEE2WFhfQ0RfREFUQV9PRkZTRVQgODE5 MgorI2RlZmluZSBBNlhYX0NEX0RBVEFfU0laRSAgKFNaXzFNIC0gODE5MikKKworc3RhdGljIGlu dCBhNnh4X2NyYXNoZHVtcGVyX2luaXQoc3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJc3RydWN0IGE2 eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sKKwlkdW1wZXItPnB0ciA9IG1zbV9nZW1fa2VybmVs X25ld19sb2NrZWQoZ3B1LT5kZXYsCisJCVNaXzFNLCBNU01fQk9fVU5DQUNIRUQsIGdwdS0+YXNw YWNlLAorCQkmZHVtcGVyLT5ibywgJmR1bXBlci0+aW92YSk7CisKKwlyZXR1cm4gSVNfRVJSKGR1 bXBlci0+cHRyKSA/IFBUUl9FUlIoZHVtcGVyLT5wdHIpIDogMDsKK30KKworc3RhdGljIGludCBh Nnh4X2NyYXNoZHVtcGVyX3J1bihzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAorCQlzdHJ1Y3QgYTZ4eF9j cmFzaGR1bXBlciAqZHVtcGVyKQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0g dG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4 X2dwdShhZHJlbm9fZ3B1KTsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlpZiAoSVNfRVJSX09S X05VTEwoZHVtcGVyLT5wdHIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghYTZ4eF9nbXVf c3B0cHJhY19pc19vbigmYTZ4eF9ncHUtPmdtdSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyog TWFrZSBzdXJlIGFsbCBwZW5kaW5nIG1lbW9yeSB3cml0ZXMgYXJlIHBvc3RlZCAqLworCXdtYigp OworCisJZ3B1X3dyaXRlNjQoZ3B1LCBSRUdfQTZYWF9DUF9DUkFTSF9TQ1JJUFRfQkFTRV9MTywK KwkJUkVHX0E2WFhfQ1BfQ1JBU0hfU0NSSVBUX0JBU0VfSEksIGR1bXBlci0+aW92YSk7CisKKwln cHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9DUkFTSF9EVU1QX0NOVEwsIDEpOworCisJcmV0ID0g Z3B1X3BvbGxfdGltZW91dChncHUsIFJFR19BNlhYX0NQX0NSQVNIX0RVTVBfU1RBVFVTLCB2YWws CisJCXZhbCAmIDB4MDIsIDEwMCwgMTAwMDApOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf Q1BfQ1JBU0hfRFVNUF9DTlRMLCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IGE2eHhfY3Jhc2hkdW1wZXJfZnJlZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAorCQlzdHJ1Y3QgYTZ4 eF9jcmFzaGR1bXBlciAqZHVtcGVyKQoreworCW1zbV9nZW1fcHV0X2lvdmEoZHVtcGVyLT5ibywg Z3B1LT5hc3BhY2UpOworCW1zbV9nZW1fcHV0X3ZhZGRyKGR1bXBlci0+Ym8pOworCisJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2UoZHVtcGVyLT5ibyk7Cit9CisKKy8qIHJlYWQgYSB2YWx1ZSBm cm9tIHRoZSBHWCBkZWJ1ZyBidXMgKi8KK3N0YXRpYyBpbnQgZGVidWdidXNfcmVhZChzdHJ1Y3Qg bXNtX2dwdSAqZ3B1LCB1MzIgYmxvY2ssIHUzMiBvZmZzZXQsCisJCXUzMiAqZGF0YSkKK3sKKwl1 MzIgcmVnID0gQTZYWF9EQkdDX0NGR19EQkdCVVNfU0VMX0RfUElOR19JTkRFWChvZmZzZXQpIHwK KwkJQTZYWF9EQkdDX0NGR19EQkdCVVNfU0VMX0RfUElOR19CTEtfU0VMKGJsb2NrKTsKKworCWdw dV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19TRUxfQSwgcmVnKTsKKwlncHVf d3JpdGUoZ3B1LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfU0VMX0IsIHJlZyk7CisJZ3B1X3dy aXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX1NFTF9DLCByZWcpOworCWdwdV93cml0 ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19TRUxfRCwgcmVnKTsKKworCS8qIFdhaXQg MSB1cyB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgZmxvd2luZyAqLworCXVkZWxheSgxKTsKKwor CWRhdGFbMF0gPSBncHVfcmVhZChncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19UUkFDRV9C VUYyKTsKKwlkYXRhWzFdID0gZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNf VFJBQ0VfQlVGMSk7CisKKwlyZXR1cm4gMjsKK30KKworI2RlZmluZSBjeGRiZ193cml0ZShwdHIs IG9mZnNldCwgdmFsKSBcCisJbXNtX3dyaXRlbCgodmFsKSwgKHB0cikgKyAoKG9mZnNldCkgPDwg MikpCisKKyNkZWZpbmUgY3hkYmdfcmVhZChwdHIsIG9mZnNldCkgXAorCW1zbV9yZWFkbCgocHRy KSArICgob2Zmc2V0KSA8PCAyKSkKKworLyogcmVhZCBhIHZhbHVlIGZyb20gdGhlIENYIGRlYnVn IGJ1cyAqLworc3RhdGljIGludCBjeF9kZWJ1Z2J1c19yZWFkKHZvaWQgKl9faW9tZW0gY3hkYmcs IHUzMiBibG9jaywgdTMyIG9mZnNldCwKKwkJdTMyICpkYXRhKQoreworCXUzMiByZWcgPSBBNlhY X0NYX0RCR0NfQ0ZHX0RCR0JVU19TRUxfQV9QSU5HX0lOREVYKG9mZnNldCkgfAorCQlBNlhYX0NY X0RCR0NfQ0ZHX0RCR0JVU19TRUxfQV9QSU5HX0JMS19TRUwoYmxvY2spOworCisJY3hkYmdfd3Jp dGUoY3hkYmcsIFJFR19BNlhYX0NYX0RCR0NfQ0ZHX0RCR0JVU19TRUxfQSwgcmVnKTsKKwljeGRi Z193cml0ZShjeGRiZywgUkVHX0E2WFhfQ1hfREJHQ19DRkdfREJHQlVTX1NFTF9CLCByZWcpOwor CWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9DWF9EQkdDX0NGR19EQkdCVVNfU0VMX0MsIHJl Zyk7CisJY3hkYmdfd3JpdGUoY3hkYmcsIFJFR19BNlhYX0NYX0RCR0NfQ0ZHX0RCR0JVU19TRUxf RCwgcmVnKTsKKworCS8qIFdhaXQgMSB1cyB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgZmxvd2lu ZyAqLworCXVkZWxheSgxKTsKKworCWRhdGFbMF0gPSBjeGRiZ19yZWFkKGN4ZGJnLCBSRUdfQTZY WF9DWF9EQkdDX0NGR19EQkdCVVNfVFJBQ0VfQlVGMik7CisJZGF0YVsxXSA9IGN4ZGJnX3JlYWQo Y3hkYmcsIFJFR19BNlhYX0NYX0RCR0NfQ0ZHX0RCR0JVU19UUkFDRV9CVUYxKTsKKworCXJldHVy biAyOworfQorCisvKiBSZWFkIGEgY2h1bmsgb2YgZGF0YSBmcm9tIHRoZSBWQklGIGRlYnVnIGJ1 cyAqLworc3RhdGljIGludCB2YmlmX2RlYnVnYnVzX3JlYWQoc3RydWN0IG1zbV9ncHUgKmdwdSwg dTMyIGN0cmwwLCB1MzIgY3RybDEsCisJCXUzMiByZWcsIGludCBjb3VudCwgdTMyICpkYXRhKQor eworCWludCBpOworCisJZ3B1X3dyaXRlKGdwdSwgY3RybDAsIHJlZyk7CisKKwlmb3IgKGkgPSAw OyBpIDwgY291bnQ7IGkrKykgeworCQlncHVfd3JpdGUoZ3B1LCBjdHJsMSwgaSk7CisJCWRhdGFb aV0gPSBncHVfcmVhZChncHUsIFJFR19BNlhYX1ZCSUZfVEVTVF9CVVNfT1VUKTsKKwl9CisKKwly ZXR1cm4gY291bnQ7Cit9CisKKyNkZWZpbmUgQVhJX0FSQl9CTE9DS1MgMgorI2RlZmluZSBYSU5f QVhJX0JMT0NLUyA1CisjZGVmaW5lIFhJTl9DT1JFX0JMT0NLUyA0CisKKyNkZWZpbmUgVkJJRl9E RUJVR0JVU19CTE9DS19TSVpFIFwKKwkoKDE2ICogQVhJX0FSQl9CTE9DS1MpICsgXAorCSAoMTgg KiBYSU5fQVhJX0JMT0NLUykgKyBcCisJICgxMiAqIFhJTl9DT1JFX0JMT0NLUykpCisKK3N0YXRp YyB2b2lkIGE2eHhfZ2V0X3ZiaWZfZGVidWdidXNfYmxvY2soc3RydWN0IG1zbV9ncHUgKmdwdSwK KwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqKQoreworCXUzMiBjbGssICpwdHI7CisJ aW50IGk7CisKKwlvYmotPmRhdGEgPSBrY2FsbG9jKFZCSUZfREVCVUdCVVNfQkxPQ0tfU0laRSwg c2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCW9iai0+aGFuZGxlID0gTlVMTDsKKworCS8qIEdl dCB0aGUgY3VycmVudCBjbG9jayBzZXR0aW5nICovCisJY2xrID0gZ3B1X3JlYWQoZ3B1LCBSRUdf QTZYWF9WQklGX0NMS09OKTsKKworCS8qIEZvcmNlIG9uIHRoZSBidXMgc28gd2UgY2FuIHJlYWQg aXQgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9WQklGX0NMS09OLAorCQljbGsgfCBBNlhY X1ZCSUZfQ0xLT05fRk9SQ0VfT05fVEVTVEJVUyk7CisKKwkvKiBXZSB3aWxsIHJlYWQgZnJvbSBC VVMyIGZpcnN0LCBzbyBkaXNhYmxlIEJVUzEgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9W QklGX1RFU1RfQlVTMV9DVFJMMCwgMCk7CisKKwkvKiBFbmFibGUgdGhlIFZCSUYgYnVzIGZvciBy ZWFkaW5nICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVkJJRl9URVNUX0JVU19PVVRfQ1RS TCwgMSk7CisKKwlwdHIgPSBvYmotPmRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVhJX0FSQl9C TE9DS1M7IGkrKykKKwkJcHRyICs9IHZiaWZfZGVidWdidXNfcmVhZChncHUsCisJCQlSRUdfQTZY WF9WQklGX1RFU1RfQlVTMl9DVFJMMCwKKwkJCVJFR19BNlhYX1ZCSUZfVEVTVF9CVVMyX0NUUkwx LAorCQkJMSA8PCAoaSArIDE2KSwgMTYsIHB0cik7CisKKwlmb3IgKGkgPSAwOyBpIDwgWElOX0FY SV9CTE9DS1M7IGkrKykKKwkJcHRyICs9IHZiaWZfZGVidWdidXNfcmVhZChncHUsCisJCQlSRUdf QTZYWF9WQklGX1RFU1RfQlVTMl9DVFJMMCwKKwkJCVJFR19BNlhYX1ZCSUZfVEVTVF9CVVMyX0NU UkwxLAorCQkJMSA8PCBpLCAxOCwgcHRyKTsKKworCS8qIFN0b3AgQlVTMiBzbyB3ZSBjYW4gdHVy biBvbiBCVVMxICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVkJJRl9URVNUX0JVUzJfQ1RS TDAsIDApOworCisJZm9yIChpID0gMDsgaSA8IFhJTl9DT1JFX0JMT0NLUzsgaSsrKQorCQlwdHIg Kz0gdmJpZl9kZWJ1Z2J1c19yZWFkKGdwdSwKKwkJCVJFR19BNlhYX1ZCSUZfVEVTVF9CVVMxX0NU UkwwLAorCQkJUkVHX0E2WFhfVkJJRl9URVNUX0JVUzFfQ1RSTDEsCisJCQkxIDw8IGksIDEyLCBw dHIpOworCisJLyogUmVzdG9yZSB0aGUgVkJJRiBjbG9jayBzZXR0aW5nICovCisJZ3B1X3dyaXRl KGdwdSwgUkVHX0E2WFhfVkJJRl9DTEtPTiwgY2xrKTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9n ZXRfZGVidWdidXNfYmxvY2soc3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJY29uc3Qgc3RydWN0IGE2 eHhfZGVidWdidXNfYmxvY2sgKmJsb2NrLAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpv YmopCit7CisJaW50IGk7CisJdTMyICpwdHI7CisKKwlvYmotPmRhdGEgPSBrY2FsbG9jKGJsb2Nr LT5jb3VudCwgc2l6ZW9mKHU2NCksIEdGUF9LRVJORUwpOworCWlmICghb2JqLT5kYXRhKQorCQly ZXR1cm47CisKKwlvYmotPmhhbmRsZSA9IGJsb2NrOworCisJZm9yIChwdHIgPSBvYmotPmRhdGEs IGkgPSAwOyBpIDwgYmxvY2stPmNvdW50OyBpKyspCisJCXB0ciArPSBkZWJ1Z2J1c19yZWFkKGdw dSwgYmxvY2stPmlkLCBpLCBwdHIpOworfQorCitzdGF0aWMgdm9pZCBhNnh4X2dldF9jeF9kZWJ1 Z2J1c19ibG9jayh2b2lkIF9faW9tZW0gKmN4ZGJnLAorCQljb25zdCBzdHJ1Y3QgYTZ4eF9kZWJ1 Z2J1c19ibG9jayAqYmxvY2ssCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaikKK3sK KwlpbnQgaTsKKwl1MzIgKnB0cjsKKworCW9iai0+ZGF0YSA9IGtjYWxsb2MoYmxvY2stPmNvdW50 LCBzaXplb2YodTY0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmotPmRhdGEpCisJCXJldHVybjsK KworCW9iai0+aGFuZGxlID0gYmxvY2s7CisKKwlmb3IgKHB0ciA9IG9iai0+ZGF0YSwgaSA9IDA7 IGkgPCBibG9jay0+Y291bnQ7IGkrKykKKwkJcHRyICs9IGN4X2RlYnVnYnVzX3JlYWQoY3hkYmcs IGJsb2NrLT5pZCwgaSwgcHRyKTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9nZXRfZGVidWdidXMo c3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlICphNnh4X3N0YXRl KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqY3hkYmcgPSBOVUxM OworCisJLyogU2V0IHVwIHRoZSBHWCBkZWJ1ZyBidXMgKi8KKworCWdwdV93cml0ZShncHUsIFJF R19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19DTlRMVCwKKwkJQTZYWF9EQkdDX0NGR19EQkdCVVNfQ05U TFRfU0VHVCgweGYpKTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JV U19DTlRMTSwKKwkJQTZYWF9EQkdDX0NGR19EQkdCVVNfQ05UTE1fRU5BQkxFKDB4ZikpOworCisJ Z3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX0lWVExfMCwgMCk7CisJZ3B1 X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX0lWVExfMSwgMCk7CisJZ3B1X3dy aXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX0lWVExfMiwgMCk7CisJZ3B1X3dyaXRl KGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX0lWVExfMywgMCk7CisKKwlncHVfd3JpdGUo Z3B1LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfQllURUxfMCwgMHg3NjU0MzIxMCk7CisJZ3B1 X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX0JZVEVMXzEsIDB4RkVEQ0JBOTgp OworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX01BU0tMXzAsIDAp OworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19NQVNLTF8xLCAwKTsK KwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfTUFTS0xfMiwgMCk7CisJ Z3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX01BU0tMXzMsIDApOworCisJ LyogU2V0IHVwIHRoZSBDWCBkZWJ1ZyBidXMgLSBpdCBsaXZlcyBlbHNld2hlcmUgaW4gdGhlIHN5 c3RlbSBzbyBkbyBhCisJICogdGVtcG9yYXJ5IGlvcmVtYXAgZm9yIHRoZSByZWdpc3RlcnMKKwkg Ki8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGdwdS0+cGRldiwgSU9SRVNP VVJDRV9NRU0sCisJCQkiY3hfZGJnYyIpOworCisJaWYgKHJlcykKKwkJY3hkYmcgPSBpb3JlbWFw KHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlpZiAoY3hkYmcpIHsKKwkJY3hk Ymdfd3JpdGUoY3hkYmcsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19DTlRMVCwKKwkJCUE2WFhf REJHQ19DRkdfREJHQlVTX0NOVExUX1NFR1QoMHhmKSk7CisKKwkJY3hkYmdfd3JpdGUoY3hkYmcs IFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19DTlRMTSwKKwkJCUE2WFhfREJHQ19DRkdfREJHQlVT X0NOVExNX0VOQUJMRSgweGYpKTsKKworCQljeGRiZ193cml0ZShjeGRiZywgUkVHX0E2WFhfREJH Q19DRkdfREJHQlVTX0lWVExfMCwgMCk7CisJCWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9E QkdDX0NGR19EQkdCVVNfSVZUTF8xLCAwKTsKKwkJY3hkYmdfd3JpdGUoY3hkYmcsIFJFR19BNlhY X0RCR0NfQ0ZHX0RCR0JVU19JVlRMXzIsIDApOworCQljeGRiZ193cml0ZShjeGRiZywgUkVHX0E2 WFhfREJHQ19DRkdfREJHQlVTX0lWVExfMywgMCk7CisKKwkJY3hkYmdfd3JpdGUoY3hkYmcsIFJF R19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19CWVRFTF8wLAorCQkJMHg3NjU0MzIxMCk7CisJCWN4ZGJn X3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfQllURUxfMSwKKwkJCTB4RkVE Q0JBOTgpOworCisJCWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNf TUFTS0xfMCwgMCk7CisJCWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdC VVNfTUFTS0xfMSwgMCk7CisJCWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19E QkdCVVNfTUFTS0xfMiwgMCk7CisJCWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NG R19EQkdCVVNfTUFTS0xfMywgMCk7CisJfQorCisJYTZ4eF9zdGF0ZS0+ZGVidWdidXMgPSBrY2Fs bG9jKEFSUkFZX1NJWkUoYTZ4eF9kZWJ1Z2J1c19ibG9ja3MpLAorCQlzaXplb2YoKmE2eHhfc3Rh dGUtPmRlYnVnYnVzKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoYTZ4eF9zdGF0ZS0+ZGVidWdidXMp IHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYTZ4eF9kZWJ1Z2J1 c19ibG9ja3MpOyBpKyspCisJCQlhNnh4X2dldF9kZWJ1Z2J1c19ibG9jayhncHUsCisJCQkJJmE2 eHhfZGVidWdidXNfYmxvY2tzW2ldLAorCQkJCSZhNnh4X3N0YXRlLT5kZWJ1Z2J1c1tpXSk7CisK KwkJYTZ4eF9zdGF0ZS0+bnJfZGVidWdidXMgPSBBUlJBWV9TSVpFKGE2eHhfZGVidWdidXNfYmxv Y2tzKTsKKwl9CisKKwlhNnh4X3N0YXRlLT52YmlmX2RlYnVnYnVzID0ga3phbGxvYyhzaXplb2Yo KmE2eHhfc3RhdGUtPnZiaWZfZGVidWdidXMpLAorCQlHRlBfS0VSTkVMKTsKKworCWlmIChhNnh4 X3N0YXRlLT52YmlmX2RlYnVnYnVzKQorCQlhNnh4X2dldF92YmlmX2RlYnVnYnVzX2Jsb2NrKGdw dSwgYTZ4eF9zdGF0ZS0+dmJpZl9kZWJ1Z2J1cyk7CisKKwlpZiAoY3hkYmcpIHsKKwkJYTZ4eF9z dGF0ZS0+Y3hfZGVidWdidXMgPQorCQkJa2NhbGxvYyhBUlJBWV9TSVpFKGE2eHhfY3hfZGVidWdi dXNfYmxvY2tzKSwKKwkJCXNpemVvZigqYTZ4eF9zdGF0ZS0+Y3hfZGVidWdidXMpLCBHRlBfS0VS TkVMKTsKKworCQlpZiAoYTZ4eF9zdGF0ZS0+Y3hfZGVidWdidXMpIHsKKwkJCWludCBpOworCisJ CQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhNnh4X2N4X2RlYnVnYnVzX2Jsb2Nrcyk7IGkr KykKKwkJCQlhNnh4X2dldF9jeF9kZWJ1Z2J1c19ibG9jayhjeGRiZywKKwkJCQkJJmE2eHhfY3hf ZGVidWdidXNfYmxvY2tzW2ldLAorCQkJCQkmYTZ4eF9zdGF0ZS0+Y3hfZGVidWdidXNbaV0pOwor CisJCQlhNnh4X3N0YXRlLT5ucl9jeF9kZWJ1Z2J1cyA9CisJCQkJQVJSQVlfU0laRShhNnh4X2N4 X2RlYnVnYnVzX2Jsb2Nrcyk7CisJCX0KKworCQlpb3VubWFwKGN4ZGJnKTsKKwl9Cit9CisKKyNk ZWZpbmUgUkFOR0UocmVnLCBhKSAoKHJlZylbKGEpICsgMV0gLSAocmVnKVsoYSldICsgMSkKKwor LyogUmVhZCBhIGRhdGEgY2x1c3RlciBmcm9tIGJlaGluZCB0aGUgQUhCIGFwZXJ0dXJlICovCitz dGF0aWMgdm9pZCBhNnh4X2dldF9kYmdhaGJfY2x1c3RlcihzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAor CQljb25zdCBzdHJ1Y3QgYTZ4eF9kYmdhaGJfY2x1c3RlciAqZGJnYWhiLAorCQlzdHJ1Y3QgYTZ4 eF9ncHVfc3RhdGVfb2JqICpvYmosCisJCXN0cnVjdCBhNnh4X2NyYXNoZHVtcGVyICpkdW1wZXIp Cit7CisJdTY0ICppbiA9IGR1bXBlci0+cHRyOworCXU2NCBvdXQgPSBkdW1wZXItPmlvdmEgKyBB NlhYX0NEX0RBVEFfT0ZGU0VUOworCXNpemVfdCBkYXRhc2l6ZTsKKwlpbnQgaSwgcmVnY291bnQg PSAwOworCisJZm9yIChpID0gMDsgaSA8IEE2WFhfTlVNX0NPTlRFWFRTOyBpKyspIHsKKwkJaW50 IGo7CisKKwkJaW4gKz0gQ1JBU0hEVU1QX1dSSVRFKGluLCBSRUdfQTZYWF9ITFNRX0RCR19SRUFE X1NFTCwKKwkJCShkYmdhaGItPnN0YXRldHlwZSArIGkgKiAyKSA8PCA4KTsKKworCQlmb3IgKGog PSAwOyBqIDwgZGJnYWhiLT5jb3VudDsgaiArPSAyKSB7CisJCQlpbnQgY291bnQgPSBSQU5HRShk YmdhaGItPnJlZ2lzdGVycywgaik7CisJCQl1MzIgb2Zmc2V0ID0gUkVHX0E2WFhfSExTUV9EQkdf QUhCX1JFQURfQVBFUlRVUkUgKworCQkJCWRiZ2FoYi0+cmVnaXN0ZXJzW2pdIC0gKGRiZ2FoYi0+ YmFzZSA+PiAyKTsKKworCQkJaW4gKz0gQ1JBU0hEVU1QX1JFQUQoaW4sIG9mZnNldCwgY291bnQs IG91dCk7CisKKwkJCW91dCArPSBjb3VudCAqIHNpemVvZih1MzIpOworCisJCQlpZiAoaSA9PSAw KQorCQkJCXJlZ2NvdW50ICs9IGNvdW50OworCQl9CisJfQorCisJQ1JBU0hEVU1QX0ZJTkkoaW4p OworCisJZGF0YXNpemUgPSByZWdjb3VudCAqIEE2WFhfTlVNX0NPTlRFWFRTICogc2l6ZW9mKHUz Mik7CisKKwlpZiAoV0FSTl9PTihkYXRhc2l6ZSA+IEE2WFhfQ0RfREFUQV9TSVpFKSkKKwkJcmV0 dXJuOworCisJaWYgKGE2eHhfY3Jhc2hkdW1wZXJfcnVuKGdwdSwgZHVtcGVyKSkKKwkJcmV0dXJu OworCisJb2JqLT5oYW5kbGUgPSBkYmdhaGI7CisJb2JqLT5kYXRhID0ga21lbWR1cChkdW1wZXIt PnB0ciArIEE2WFhfQ0RfREFUQV9PRkZTRVQsCisJCWRhdGFzaXplLCBHRlBfS0VSTkVMKTsKK30K Kworc3RhdGljIHZvaWQgYTZ4eF9nZXRfZGJnYWhiX2NsdXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpn cHUsCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAqYTZ4eF9zdGF0ZSwKKwkJc3RydWN0IGE2eHhf Y3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sKKwlpbnQgaTsKKworCWE2eHhfc3RhdGUtPmRiZ2FoYl9j bHVzdGVycyA9IGtjYWxsb2MoQVJSQVlfU0laRShhNnh4X2RiZ2FoYl9jbHVzdGVycyksCisJCXNp emVvZigqYTZ4eF9zdGF0ZS0+ZGJnYWhiX2NsdXN0ZXJzKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAo IWE2eHhfc3RhdGUtPmRiZ2FoYl9jbHVzdGVycykKKwkJcmV0dXJuOworCisJYTZ4eF9zdGF0ZS0+ bnJfZGJnYWhiX2NsdXN0ZXJzID0gQVJSQVlfU0laRShhNnh4X2RiZ2FoYl9jbHVzdGVycyk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhNnh4X2RiZ2FoYl9jbHVzdGVycyk7IGkrKykK KwkJYTZ4eF9nZXRfZGJnYWhiX2NsdXN0ZXIoZ3B1LCAmYTZ4eF9kYmdhaGJfY2x1c3RlcnNbaV0s CisJCQkmYTZ4eF9zdGF0ZS0+ZGJnYWhiX2NsdXN0ZXJzW2ldLCBkdW1wZXIpOworfQorCisvKiBS ZWFkIGEgZGF0YSBjbHVzdGVyIGZyb20gdGhlIENQIGFwZXJ0dXJlIHdpdGggdGhlIGNyYXNoZHVt cGVyICovCitzdGF0aWMgdm9pZCBhNnh4X2dldF9jbHVzdGVyKHN0cnVjdCBtc21fZ3B1ICpncHUs CisJCWNvbnN0IHN0cnVjdCBhNnh4X2NsdXN0ZXIgKmNsdXN0ZXIsCisJCXN0cnVjdCBhNnh4X2dw dV9zdGF0ZV9vYmogKm9iaiwKKwkJc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sK Kwl1NjQgKmluID0gZHVtcGVyLT5wdHI7CisJdTY0IG91dCA9IGR1bXBlci0+aW92YSArIEE2WFhf Q0RfREFUQV9PRkZTRVQ7CisJc2l6ZV90IGRhdGFzaXplOworCWludCBpLCByZWdjb3VudCA9IDA7 CisKKwkvKiBTb21lIGNsdXN0ZXJzIG5lZWQgYSBzZWxlY3RvciByZWdpc3RlciB0byBiZSBwcm9n cmFtbWVkIHRvbyAqLworCWlmIChjbHVzdGVyLT5zZWxfcmVnKQorCQlpbiArPSBDUkFTSERVTVBf V1JJVEUoaW4sIGNsdXN0ZXItPnNlbF9yZWcsIGNsdXN0ZXItPnNlbF92YWwpOworCisJZm9yIChp ID0gMDsgaSA8IEE2WFhfTlVNX0NPTlRFWFRTOyBpKyspIHsKKwkJaW50IGo7CisKKwkJaW4gKz0g Q1JBU0hEVU1QX1dSSVRFKGluLCBSRUdfQTZYWF9DUF9BUEVSVFVSRV9DTlRMX0NELAorCQkJKGNs dXN0ZXItPmlkIDw8IDgpIHwgKGkgPDwgNCkgfCBpKTsKKworCQlmb3IgKGogPSAwOyBqIDwgY2x1 c3Rlci0+Y291bnQ7IGogKz0gMikgeworCQkJaW50IGNvdW50ID0gUkFOR0UoY2x1c3Rlci0+cmVn aXN0ZXJzLCBqKTsKKworCQkJaW4gKz0gQ1JBU0hEVU1QX1JFQUQoaW4sIGNsdXN0ZXItPnJlZ2lz dGVyc1tqXSwKKwkJCQljb3VudCwgb3V0KTsKKworCQkJb3V0ICs9IGNvdW50ICogc2l6ZW9mKHUz Mik7CisKKwkJCWlmIChpID09IDApCisJCQkJcmVnY291bnQgKz0gY291bnQ7CisJCX0KKwl9CisK KwlDUkFTSERVTVBfRklOSShpbik7CisKKwlkYXRhc2l6ZSA9IHJlZ2NvdW50ICogQTZYWF9OVU1f Q09OVEVYVFMgKiBzaXplb2YodTMyKTsKKworCWlmIChXQVJOX09OKGRhdGFzaXplID4gQTZYWF9D RF9EQVRBX1NJWkUpKQorCQlyZXR1cm47CisKKwlpZiAoYTZ4eF9jcmFzaGR1bXBlcl9ydW4oZ3B1 LCBkdW1wZXIpKQorCQlyZXR1cm47CisKKwlvYmotPmhhbmRsZSA9IGNsdXN0ZXI7CisJb2JqLT5k YXRhID0ga21lbWR1cChkdW1wZXItPnB0ciArIEE2WFhfQ0RfREFUQV9PRkZTRVQsCisJCWRhdGFz aXplLCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9nZXRfY2x1c3RlcnMoc3Ry dWN0IG1zbV9ncHUgKmdwdSwKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlICphNnh4X3N0YXRlLAor CQlzdHJ1Y3QgYTZ4eF9jcmFzaGR1bXBlciAqZHVtcGVyKQoreworCWludCBpOworCisJYTZ4eF9z dGF0ZS0+Y2x1c3RlcnMgPSBrY2FsbG9jKEFSUkFZX1NJWkUoYTZ4eF9jbHVzdGVycyksCisJCXNp emVvZigqYTZ4eF9zdGF0ZS0+Y2x1c3RlcnMpLCBHRlBfS0VSTkVMKTsKKworCWlmICghYTZ4eF9z dGF0ZS0+Y2x1c3RlcnMpCisJCXJldHVybjsKKworCWE2eHhfc3RhdGUtPm5yX2NsdXN0ZXJzID0g QVJSQVlfU0laRShhNnh4X2NsdXN0ZXJzKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGE2eHhfY2x1c3RlcnMpOyBpKyspCisJCWE2eHhfZ2V0X2NsdXN0ZXIoZ3B1LCAmYTZ4eF9jbHVz dGVyc1tpXSwKKwkJCSZhNnh4X3N0YXRlLT5jbHVzdGVyc1tpXSwgZHVtcGVyKTsKK30KKworLyog UmVhZCBhIHNoYWRlciAvIGRlYnVnIGJsb2NrIGZyb20gdGhlIEhMU1EgYXBlcnR1cmUgd2l0aCB0 aGUgY3Jhc2hkdW1wZXIgKi8KK3N0YXRpYyB2b2lkIGE2eHhfZ2V0X3NoYWRlcl9ibG9jayhzdHJ1 Y3QgbXNtX2dwdSAqZ3B1LAorCQljb25zdCBzdHJ1Y3QgYTZ4eF9zaGFkZXJfYmxvY2sgKmJsb2Nr LAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmosCisJCXN0cnVjdCBhNnh4X2NyYXNo ZHVtcGVyICpkdW1wZXIpCit7CisJdTY0ICppbiA9IGR1bXBlci0+cHRyOworCXNpemVfdCBkYXRh c2l6ZSA9IGJsb2NrLT5zaXplICogQTZYWF9OVU1fU0hBREVSX0JBTktTICogc2l6ZW9mKHUzMik7 CisJaW50IGk7CisKKwlpZiAoV0FSTl9PTihkYXRhc2l6ZSA+IEE2WFhfQ0RfREFUQV9TSVpFKSkK KwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IEE2WFhfTlVNX1NIQURFUl9CQU5LUzsgaSsr KSB7CisJCWluICs9IENSQVNIRFVNUF9XUklURShpbiwgUkVHX0E2WFhfSExTUV9EQkdfUkVBRF9T RUwsCisJCQkoYmxvY2stPnR5cGUgPDwgOCkgfCBpKTsKKworCQlpbiArPSBDUkFTSERVTVBfUkVB RChpbiwgUkVHX0E2WFhfSExTUV9EQkdfQUhCX1JFQURfQVBFUlRVUkUsCisJCQlibG9jay0+c2l6 ZSwgZHVtcGVyLT5pb3ZhICsgQTZYWF9DRF9EQVRBX09GRlNFVCk7CisJfQorCisJQ1JBU0hEVU1Q X0ZJTkkoaW4pOworCisJaWYgKGE2eHhfY3Jhc2hkdW1wZXJfcnVuKGdwdSwgZHVtcGVyKSkKKwkJ cmV0dXJuOworCisJb2JqLT5oYW5kbGUgPSBibG9jazsKKwlvYmotPmRhdGEgPSBrbWVtZHVwKGR1 bXBlci0+cHRyICsgQTZYWF9DRF9EQVRBX09GRlNFVCwKKwkJZGF0YXNpemUsIEdGUF9LRVJORUwp OworfQorCitzdGF0aWMgdm9pZCBhNnh4X2dldF9zaGFkZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUs CisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAqYTZ4eF9zdGF0ZSwKKwkJc3RydWN0IGE2eHhfY3Jh c2hkdW1wZXIgKmR1bXBlcikKK3sKKwlpbnQgaTsKKworCWE2eHhfc3RhdGUtPnNoYWRlcnMgPSBr Y2FsbG9jKEFSUkFZX1NJWkUoYTZ4eF9zaGFkZXJfYmxvY2tzKSwKKwkJc2l6ZW9mKCphNnh4X3N0 YXRlLT5zaGFkZXJzKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWE2eHhfc3RhdGUtPnNoYWRlcnMp CisJCXJldHVybjsKKworCWE2eHhfc3RhdGUtPm5yX3NoYWRlcnMgPSBBUlJBWV9TSVpFKGE2eHhf c2hhZGVyX2Jsb2Nrcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhNnh4X3NoYWRl cl9ibG9ja3MpOyBpKyspCisJCWE2eHhfZ2V0X3NoYWRlcl9ibG9jayhncHUsICZhNnh4X3NoYWRl cl9ibG9ja3NbaV0sCisJCQkmYTZ4eF9zdGF0ZS0+c2hhZGVyc1tpXSwgZHVtcGVyKTsKK30KKwor LyogUmVhZCByZWdpc3RlcnMgZnJvbSBiZWhpbmQgdGhlIEhMU1EgYXBlcnR1cmUgd2l0aCB0aGUg Y3Jhc2hkdW1wZXIgKi8KK3N0YXRpYyB2b2lkIGE2eHhfZ2V0X2NyYXNoZHVtcGVyX2hsc3FfcmVn aXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCWNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVy cyAqcmVncywKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqLAorCQlzdHJ1Y3QgYTZ4 eF9jcmFzaGR1bXBlciAqZHVtcGVyKQorCit7CisJdTY0ICppbiA9IGR1bXBlci0+cHRyOworCXU2 NCBvdXQgPSBkdW1wZXItPmlvdmEgKyBBNlhYX0NEX0RBVEFfT0ZGU0VUOworCWludCBpLCByZWdj b3VudCA9IDA7CisKKwlpbiArPSBDUkFTSERVTVBfV1JJVEUoaW4sIFJFR19BNlhYX0hMU1FfREJH X1JFQURfU0VMLCByZWdzLT52YWwxKTsKKworCWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsg aSArPSAyKSB7CisJCXUzMiBjb3VudCA9IFJBTkdFKHJlZ3MtPnJlZ2lzdGVycywgaSk7CisJCXUz MiBvZmZzZXQgPSBSRUdfQTZYWF9ITFNRX0RCR19BSEJfUkVBRF9BUEVSVFVSRSArCisJCQlyZWdz LT5yZWdpc3RlcnNbaV0gLSAocmVncy0+dmFsMCA+PiAyKTsKKworCQlpbiArPSBDUkFTSERVTVBf UkVBRChpbiwgb2Zmc2V0LCBjb3VudCwgb3V0KTsKKworCQlvdXQgKz0gY291bnQgKiBzaXplb2Yo dTMyKTsKKwkJcmVnY291bnQgKz0gY291bnQ7CisJfQorCisJQ1JBU0hEVU1QX0ZJTkkoaW4pOwor CisJaWYgKFdBUk5fT04oKHJlZ2NvdW50ICogc2l6ZW9mKHUzMikpID4gQTZYWF9DRF9EQVRBX1NJ WkUpKQorCQlyZXR1cm47CisKKwlpZiAoYTZ4eF9jcmFzaGR1bXBlcl9ydW4oZ3B1LCBkdW1wZXIp KQorCQlyZXR1cm47CisKKwlvYmotPmhhbmRsZSA9IHJlZ3M7CisJb2JqLT5kYXRhID0ga21lbWR1 cChkdW1wZXItPnB0ciArIEE2WFhfQ0RfREFUQV9PRkZTRVQsCisJCXJlZ2NvdW50ICogc2l6ZW9m KHUzMiksIEdGUF9LRVJORUwpOworfQorCisvKiBSZWFkIGEgYmxvY2sgb2YgcmVnaXN0ZXJzIHVz aW5nIHRoZSBjcmFzaGR1bXBlciAqLworc3RhdGljIHZvaWQgYTZ4eF9nZXRfY3Jhc2hkdW1wZXJf cmVnaXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCWNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lz dGVycyAqcmVncywKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqLAorCQlzdHJ1Y3Qg YTZ4eF9jcmFzaGR1bXBlciAqZHVtcGVyKQorCit7CisJdTY0ICppbiA9IGR1bXBlci0+cHRyOwor CXU2NCBvdXQgPSBkdW1wZXItPmlvdmEgKyBBNlhYX0NEX0RBVEFfT0ZGU0VUOworCWludCBpLCBy ZWdjb3VudCA9IDA7CisKKwkvKiBTb21lIGJsb2NrcyBtaWdodCBuZWVkIHRvIHByb2dyYW0gYSBz ZWxlY3RvciByZWdpc3RlciBmaXJzdCAqLworCWlmIChyZWdzLT52YWwwKQorCQlpbiArPSBDUkFT SERVTVBfV1JJVEUoaW4sIHJlZ3MtPnZhbDAsIHJlZ3MtPnZhbDEpOworCisJZm9yIChpID0gMDsg aSA8IHJlZ3MtPmNvdW50OyBpICs9IDIpIHsKKwkJdTMyIGNvdW50ID0gUkFOR0UocmVncy0+cmVn aXN0ZXJzLCBpKTsKKworCQlpbiArPSBDUkFTSERVTVBfUkVBRChpbiwgcmVncy0+cmVnaXN0ZXJz W2ldLCBjb3VudCwgb3V0KTsKKworCQlvdXQgKz0gY291bnQgKiBzaXplb2YodTMyKTsKKwkJcmVn Y291bnQgKz0gY291bnQ7CisJfQorCisJQ1JBU0hEVU1QX0ZJTkkoaW4pOworCisJaWYgKFdBUk5f T04oKHJlZ2NvdW50ICogc2l6ZW9mKHUzMikpID4gQTZYWF9DRF9EQVRBX1NJWkUpKQorCQlyZXR1 cm47CisKKwlpZiAoYTZ4eF9jcmFzaGR1bXBlcl9ydW4oZ3B1LCBkdW1wZXIpKQorCQlyZXR1cm47 CisKKwlvYmotPmhhbmRsZSA9IHJlZ3M7CisJb2JqLT5kYXRhID0ga21lbWR1cChkdW1wZXItPnB0 ciArIEE2WFhfQ0RfREFUQV9PRkZTRVQsCisJCXJlZ2NvdW50ICogc2l6ZW9mKHUzMiksIEdGUF9L RVJORUwpOworfQorCisvKiBSZWFkIGEgYmxvY2sgb2YgcmVnaXN0ZXJzIHZpYSBBSEIgKi8KK3N0 YXRpYyB2b2lkIGE2eHhfZ2V0X2FoYl9ncHVfcmVnaXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUs CisJCWNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVycyAqcmVncywKKwkJc3RydWN0IGE2eHhfZ3B1 X3N0YXRlX29iaiAqb2JqKQoreworCWludCBpLCByZWdjb3VudCA9IDAsIGluZGV4ID0gMDsKKwor CWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSArPSAyKQorCQlyZWdjb3VudCArPSBSQU5H RShyZWdzLT5yZWdpc3RlcnMsIGkpOworCisJb2JqLT5oYW5kbGUgPSAoY29uc3Qgdm9pZCAqKSBy ZWdzOworCW9iai0+ZGF0YSA9IGtjYWxsb2MocmVnY291bnQsIHNpemVvZih1MzIpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIW9iai0+ZGF0YSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHJl Z3MtPmNvdW50OyBpICs9IDIpIHsKKwkJdTMyIGNvdW50ID0gUkFOR0UocmVncy0+cmVnaXN0ZXJz LCBpKTsKKwkJaW50IGo7CisKKwkJZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspCisJCQlvYmot PmRhdGFbaW5kZXgrK10gPSBncHVfcmVhZChncHUsCisJCQkJcmVncy0+cmVnaXN0ZXJzW2ldICsg aik7CisJfQorfQorCisvKiBSZWFkIGEgYmxvY2sgb2YgR01VIHJlZ2lzdGVycyAqLworc3RhdGlj IHZvaWQgX2E2eHhfZ2V0X2dtdV9yZWdpc3RlcnMoc3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJY29u c3Qgc3RydWN0IGE2eHhfcmVnaXN0ZXJzICpyZWdzLAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVf b2JqICpvYmopCit7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9f Z3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFkcmVu b19ncHUpOworCXN0cnVjdCBhNnh4X2dtdSAqZ211ID0gJmE2eHhfZ3B1LT5nbXU7CisJaW50IGks IHJlZ2NvdW50ID0gMCwgaW5kZXggPSAwOworCisJZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50 OyBpICs9IDIpCisJCXJlZ2NvdW50ICs9IFJBTkdFKHJlZ3MtPnJlZ2lzdGVycywgaSk7CisKKwlv YmotPmhhbmRsZSA9IChjb25zdCB2b2lkICopIHJlZ3M7CisJb2JqLT5kYXRhID0ga2NhbGxvYyhy ZWdjb3VudCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWlmICghb2JqLT5kYXRhKQorCQly ZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkgKz0gMikgeworCQl1MzIg Y291bnQgPSBSQU5HRShyZWdzLT5yZWdpc3RlcnMsIGkpOworCQlpbnQgajsKKworCQlmb3IgKGog PSAwOyBqIDwgY291bnQ7IGorKykKKwkJCW9iai0+ZGF0YVtpbmRleCsrXSA9IGdtdV9yZWFkKGdt dSwKKwkJCQlyZWdzLT5yZWdpc3RlcnNbaV0gKyBqKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGE2 eHhfZ2V0X2dtdV9yZWdpc3RlcnMoc3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJc3RydWN0IGE2eHhf Z3B1X3N0YXRlICphNnh4X3N0YXRlKQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1 ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19h Nnh4X2dwdShhZHJlbm9fZ3B1KTsKKworCWE2eHhfc3RhdGUtPmdtdV9yZWdpc3RlcnMgPSBrY2Fs bG9jKDIsCisJCXNpemVvZigqYTZ4eF9zdGF0ZS0+Z211X3JlZ2lzdGVycyksIEdGUF9LRVJORUwp OworCisJaWYgKCFhNnh4X3N0YXRlLT5nbXVfcmVnaXN0ZXJzKQorCQlyZXR1cm47CisKKwlhNnh4 X3N0YXRlLT5ucl9nbXVfcmVnaXN0ZXJzID0gMjsKKworCS8qIEdldCB0aGUgQ1ggR01VIHJlZ2lz dGVycyBmcm9tIEFIQiAqLworCV9hNnh4X2dldF9nbXVfcmVnaXN0ZXJzKGdwdSwgJmE2eHhfZ211 X3JlZ2xpc3RbMF0sCisJCSZhNnh4X3N0YXRlLT5nbXVfcmVnaXN0ZXJzWzBdKTsKKworCWlmICgh YTZ4eF9nbXVfZ3hfaXNfb24oJmE2eHhfZ3B1LT5nbXUpKQorCQlyZXR1cm47CisKKwkvKiBTZXQg dGhlIGZlbmNlIHRvIEFMTE9XIG1vZGUgc28gd2UgY2FuIGFjY2VzcyB0aGUgcmVnaXN0ZXJzICov CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfR01VX0FPX0FIQl9GRU5DRV9DVFJMLCAwKTsKKwor CV9hNnh4X2dldF9nbXVfcmVnaXN0ZXJzKGdwdSwgJmE2eHhfZ211X3JlZ2xpc3RbMV0sCisJCSZh Nnh4X3N0YXRlLT5nbXVfcmVnaXN0ZXJzWzFdKTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9nZXRf cmVnaXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAq YTZ4eF9zdGF0ZSwKKwkJc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sKKwlpbnQg aSwgY291bnQgPSBBUlJBWV9TSVpFKGE2eHhfYWhiX3JlZ2xpc3QpICsKKwkJQVJSQVlfU0laRShh Nnh4X3JlZ2xpc3QpICsKKwkJQVJSQVlfU0laRShhNnh4X2hsc3FfcmVnbGlzdCk7CisJaW50IGlu ZGV4ID0gMDsKKworCWE2eHhfc3RhdGUtPnJlZ2lzdGVycyA9IGtjYWxsb2MoY291bnQsIHNpemVv ZigqYTZ4eF9zdGF0ZS0+cmVnaXN0ZXJzKSwKKwkJR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWE2eHhf c3RhdGUtPnJlZ2lzdGVycykKKwkJcmV0dXJuOworCisJYTZ4eF9zdGF0ZS0+bnJfcmVnaXN0ZXJz ID0gY291bnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhNnh4X2FoYl9yZWdsaXN0 KTsgaSsrKQorCQlhNnh4X2dldF9haGJfZ3B1X3JlZ2lzdGVycyhncHUsCisJCQkmYTZ4eF9haGJf cmVnbGlzdFtpXSwKKwkJCSZhNnh4X3N0YXRlLT5yZWdpc3RlcnNbaW5kZXgrK10pOworCisJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYTZ4eF9yZWdsaXN0KTsgaSsrKQorCQlhNnh4X2dldF9j cmFzaGR1bXBlcl9yZWdpc3RlcnMoZ3B1LAorCQkJJmE2eHhfcmVnbGlzdFtpXSwKKwkJCSZhNnh4 X3N0YXRlLT5yZWdpc3RlcnNbaW5kZXgrK10sCisJCQlkdW1wZXIpOworCisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoYTZ4eF9obHNxX3JlZ2xpc3QpOyBpKyspCisJCWE2eHhfZ2V0X2NyYXNo ZHVtcGVyX2hsc3FfcmVnaXN0ZXJzKGdwdSwKKwkJCSZhNnh4X2hsc3FfcmVnbGlzdFtpXSwKKwkJ CSZhNnh4X3N0YXRlLT5yZWdpc3RlcnNbaW5kZXgrK10sCisJCQlkdW1wZXIpOworfQorCisvKiBS ZWFkIGEgYmxvY2sgb2YgZGF0YSBmcm9tIGFuIGluZGV4ZWQgcmVnaXN0ZXIgcGFpciAqLworc3Rh dGljIHZvaWQgYTZ4eF9nZXRfaW5kZXhlZF9yZWdzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCWNv bnN0IHN0cnVjdCBhNnh4X2luZGV4ZWRfcmVnaXN0ZXJzICppbmRleGVkLAorCQlzdHJ1Y3QgYTZ4 eF9ncHVfc3RhdGVfb2JqICpvYmopCit7CisJaW50IGk7CisKKwlvYmotPmhhbmRsZSA9IChjb25z dCB2b2lkICopIGluZGV4ZWQ7CisJb2JqLT5kYXRhID0ga2NhbGxvYyhpbmRleGVkLT5jb3VudCwg c2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWlmICghb2JqLT5kYXRhKQorCQlyZXR1cm47CisK KwkvKiBBbGwgdGhlIGluZGV4ZWQgYmFua3Mgc3RhcnQgYXQgYWRkcmVzcyAwICovCisJZ3B1X3dy aXRlKGdwdSwgaW5kZXhlZC0+YWRkciwgMCk7CisKKwkvKiBSZWFkIHRoZSBkYXRhIC0gZWFjaCBy ZWFkIGluY3JlbWVudHMgdGhlIGludGVybmFsIGFkZHJlc3MgYnkgMSAqLworCWZvciAoaSA9IDA7 IGkgPCBpbmRleGVkLT5jb3VudDsgaSsrKQorCQlvYmotPmRhdGFbaV0gPSBncHVfcmVhZChncHUs IGluZGV4ZWQtPmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBhNnh4X2dldF9pbmRleGVkX3JlZ2lz dGVycyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGUgKmE2eHhf c3RhdGUpCit7CisJdTMyIG1lbXBvb2xfc2l6ZTsKKwlpbnQgY291bnQgPSBBUlJBWV9TSVpFKGE2 eHhfaW5kZXhlZF9yZWdsaXN0KSArIDE7CisJaW50IGk7CisKKwlhNnh4X3N0YXRlLT5pbmRleGVk X3JlZ3MgPSBrY2FsbG9jKGNvdW50LAorCQlzaXplb2YoYTZ4eF9zdGF0ZS0+aW5kZXhlZF9yZWdz KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhNnh4X3N0YXRlLT5pbmRleGVkX3JlZ3MpCisJCXJldHVy bjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGE2eHhfaW5kZXhlZF9yZWdsaXN0KTsg aSsrKQorCQlhNnh4X2dldF9pbmRleGVkX3JlZ3MoZ3B1LCAmYTZ4eF9pbmRleGVkX3JlZ2xpc3Rb aV0sCisJCQkmYTZ4eF9zdGF0ZS0+aW5kZXhlZF9yZWdzW2ldKTsKKworCS8qIFNldCB0aGUgQ1Ag bWVtcG9vbCBzaXplIHRvIDAgdG8gc3RhYmlsaXplIGl0IHdoaWxlIGR1bXBpbmcgKi8KKwltZW1w b29sX3NpemUgPSBncHVfcmVhZChncHUsIFJFR19BNlhYX0NQX01FTV9QT09MX1NJWkUpOworCWdw dV93cml0ZShncHUsIFJFR19BNlhYX0NQX01FTV9QT09MX1NJWkUsIDApOworCisJLyogR2V0IHRo ZSBjb250ZW50cyBvZiB0aGUgQ1AgbWVtcG9vbCAqLworCWE2eHhfZ2V0X2luZGV4ZWRfcmVncyhn cHUsICZhNnh4X2NwX21lbXBvb2xfaW5kZXhlZCwKKwkJJmE2eHhfc3RhdGUtPmluZGV4ZWRfcmVn c1tpXSk7CisKKwkvKgorCSAqIE9mZnNldCAweDIwMDAgaW4gdGhlIG1lbXBvb2wgaXMgdGhlIHNp emUgLSBjb3B5IHRoZSBzYXZlZCBzaXplIG92ZXIKKwkgKiBzbyB0aGUgZGF0YSBpcyBjb25zaXN0 ZW50CisJICovCisJYTZ4eF9zdGF0ZS0+aW5kZXhlZF9yZWdzW2ldLmRhdGFbMHgyMDAwXSA9IG1l bXBvb2xfc2l6ZTsKKworCS8qIFJlc3RvcmUgdGhlIHNpemUgaW4gdGhlIGhhcmR3YXJlICovCisJ Z3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfTUVNX1BPT0xfU0laRSwgbWVtcG9vbF9zaXplKTsK KworCWE2eHhfc3RhdGUtPm5yX2luZGV4ZWRfcmVncyA9IGNvdW50OworfQorCitzdHJ1Y3QgbXNt X2dwdV9zdGF0ZSAqYTZ4eF9ncHVfc3RhdGVfZ2V0KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJ c3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgZHVtcGVyID0geyAwIH07CisJc3RydWN0IGFkcmVub19n cHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICph Nnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFkcmVub19ncHUpOworCXN0cnVjdCBhNnh4X2dwdV9zdGF0 ZSAqYTZ4eF9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCphNnh4X3N0YXRlKSwKKwkJR0ZQX0tFUk5F TCk7CisKKwlpZiAoIWE2eHhfc3RhdGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ LyogR2V0IHRoZSBnZW5lcmljIHN0YXRlIGZyb20gdGhlIGFkcmVubyBjb3JlICovCisJYWRyZW5v X2dwdV9zdGF0ZV9nZXQoZ3B1LCAmYTZ4eF9zdGF0ZS0+YmFzZSk7CisKKwlhNnh4X2dldF9nbXVf cmVnaXN0ZXJzKGdwdSwgYTZ4eF9zdGF0ZSk7CisKKwkvKiBJZiBHWCBpc24ndCBvbiB0aGUgcmVz dCBvZiB0aGUgZGF0YSBpc24ndCBnb2luZyB0byBiZSBhY2Nlc3NpYmxlICovCisJaWYgKCFhNnh4 X2dtdV9neF9pc19vbigmYTZ4eF9ncHUtPmdtdSkpCisJCXJldHVybiAmYTZ4eF9zdGF0ZS0+YmFz ZTsKKworCS8qIEdldCB0aGUgYmFua3Mgb2YgaW5kZXhlZCByZWdpc3RlcnMgKi8KKwlhNnh4X2dl dF9pbmRleGVkX3JlZ2lzdGVycyhncHUsIGE2eHhfc3RhdGUpOworCisJLyogVHJ5IHRvIGluaXRp YWx6ZSB0aGUgY3Jhc2hkdW1wZXIgKi8KKwlpZiAoIWE2eHhfY3Jhc2hkdW1wZXJfaW5pdChncHUs ICZkdW1wZXIpKSB7CisJCWE2eHhfZ2V0X3JlZ2lzdGVycyhncHUsIGE2eHhfc3RhdGUsICZkdW1w ZXIpOworCQlhNnh4X2dldF9zaGFkZXJzKGdwdSwgYTZ4eF9zdGF0ZSwgJmR1bXBlcik7CisJCWE2 eHhfZ2V0X2NsdXN0ZXJzKGdwdSwgYTZ4eF9zdGF0ZSwgJmR1bXBlcik7CisJCWE2eHhfZ2V0X2Ri Z2FoYl9jbHVzdGVycyhncHUsIGE2eHhfc3RhdGUsICZkdW1wZXIpOworCisJCWE2eHhfY3Jhc2hk dW1wZXJfZnJlZShncHUsICZkdW1wZXIpOworCX0KKworCWE2eHhfZ2V0X2RlYnVnYnVzKGdwdSwg YTZ4eF9zdGF0ZSk7CisKKwlyZXR1cm4gICZhNnh4X3N0YXRlLT5iYXNlOworfQorCit2b2lkIGE2 eHhfZ3B1X3N0YXRlX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IG1zbV9n cHVfc3RhdGUgKnN0YXRlID0gY29udGFpbmVyX29mKGtyZWYsCisJCQlzdHJ1Y3QgbXNtX2dwdV9z dGF0ZSwgcmVmKTsKKwlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGUgKmE2eHhfc3RhdGUgPSBjb250YWlu ZXJfb2Yoc3RhdGUsCisJCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGUsIGJhc2UpOworCWludCBpOwor CisJZm9yIChpID0gMDsgaSA8IGE2eHhfc3RhdGUtPm5yX2dtdV9yZWdpc3RlcnM7IGkrKykKKwkJ a2ZyZWUoYTZ4eF9zdGF0ZS0+Z211X3JlZ2lzdGVyc1tpXS5kYXRhKTsKKworCWtmcmVlKGE2eHhf c3RhdGUtPmdtdV9yZWdpc3RlcnMpOworCisJZm9yIChpID0gMDsgaSA8IGE2eHhfc3RhdGUtPm5y X3JlZ2lzdGVyczsgaSsrKQorCQlrZnJlZShhNnh4X3N0YXRlLT5yZWdpc3RlcnNbaV0uZGF0YSk7 CisKKwlrZnJlZShhNnh4X3N0YXRlLT5yZWdpc3RlcnMpOworCisJZm9yIChpID0gMDsgaSA8IGE2 eHhfc3RhdGUtPm5yX3NoYWRlcnM7IGkrKykKKwkJa2ZyZWUoYTZ4eF9zdGF0ZS0+c2hhZGVyc1tp XS5kYXRhKTsKKworCWtmcmVlKGE2eHhfc3RhdGUtPnNoYWRlcnMpOworCisJZm9yIChpID0gMDsg aSA8IGE2eHhfc3RhdGUtPm5yX2NsdXN0ZXJzOyBpKyspCisJCWtmcmVlKGE2eHhfc3RhdGUtPmNs dXN0ZXJzW2ldLmRhdGEpOworCisJa2ZyZWUoYTZ4eF9zdGF0ZS0+Y2x1c3RlcnMpOworCisJZm9y IChpID0gMDsgaSA8IGE2eHhfc3RhdGUtPm5yX2RiZ2FoYl9jbHVzdGVyczsgaSsrKQorCQlrZnJl ZShhNnh4X3N0YXRlLT5kYmdhaGJfY2x1c3RlcnNbaV0uZGF0YSk7CisKKwlrZnJlZShhNnh4X3N0 YXRlLT5kYmdhaGJfY2x1c3RlcnMpOworCisJZm9yIChpID0gMDsgaSA8IGE2eHhfc3RhdGUtPm5y X2luZGV4ZWRfcmVnczsgaSsrKQorCQlrZnJlZShhNnh4X3N0YXRlLT5pbmRleGVkX3JlZ3NbaV0u ZGF0YSk7CisKKwlrZnJlZShhNnh4X3N0YXRlLT5pbmRleGVkX3JlZ3MpOworCisJZm9yIChpID0g MDsgaSA8IGE2eHhfc3RhdGUtPm5yX2RlYnVnYnVzOyBpKyspCisJCWtmcmVlKGE2eHhfc3RhdGUt PmRlYnVnYnVzW2ldLmRhdGEpOworCisJa2ZyZWUoYTZ4eF9zdGF0ZS0+ZGVidWdidXMpOworCisJ aWYgKGE2eHhfc3RhdGUtPnZiaWZfZGVidWdidXMpCisJCWtmcmVlKGE2eHhfc3RhdGUtPnZiaWZf ZGVidWdidXMtPmRhdGEpOworCisJa2ZyZWUoYTZ4eF9zdGF0ZS0+dmJpZl9kZWJ1Z2J1cyk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+bnJfY3hfZGVidWdidXM7IGkrKykKKwkJa2Zy ZWUoYTZ4eF9zdGF0ZS0+Y3hfZGVidWdidXNbaV0uZGF0YSk7CisKKwlrZnJlZShhNnh4X3N0YXRl LT5jeF9kZWJ1Z2J1cyk7CisKKworCWtmcmVlKGE2eHhfc3RhdGUpOworfQorCitpbnQgYTZ4eF9n cHVfc3RhdGVfcHV0KHN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoSVNfRVJS X09SX05VTEwoc3RhdGUpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBrcmVmX3B1dCgmc3RhdGUt PnJlZiwgYTZ4eF9ncHVfc3RhdGVfZGVzdHJveSk7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfc2hv d19yZWdpc3RlcnMoY29uc3QgdTMyICpyZWdpc3RlcnMsIHUzMiAqZGF0YSwgc2l6ZV90IGNvdW50 LAorCQlzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApCit7CisJaW50IGksIGluZGV4ID0gMDsKKworCWlm ICghZGF0YSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpICs9IDIpIHsK KwkJdTMyIGNvdW50ID0gUkFOR0UocmVnaXN0ZXJzLCBpKTsKKwkJdTMyIG9mZnNldCA9IHJlZ2lz dGVyc1tpXTsKKwkJaW50IGo7CisKKwkJZm9yIChqID0gMDsgaiA8IGNvdW50OyBpbmRleCsrLCBv ZmZzZXQrKywgaisrKSB7CisJCQlpZiAoZGF0YVtpbmRleF0gPT0gMHhkZWFmYmVhZCkKKwkJCQlj b250aW51ZTsKKworCQkJZHJtX3ByaW50ZihwLCAiICAtIHsgb2Zmc2V0OiAweCUwNngsIHZhbHVl OiAweCUwOHggfVxuIiwKKwkJCQlvZmZzZXQgPDwgMiwgZGF0YVtpbmRleF0pOworCQl9CisJfQor fQorCitzdGF0aWMgdm9pZCBwcmludF9hc2NpaTg1KHN0cnVjdCBkcm1fcHJpbnRlciAqcCwgc2l6 ZV90IGxlbiwgdTMyICpkYXRhKQoreworCWNoYXIgb3V0W0FTQ0lJODVfQlVGU1pdOworCWxvbmcg aSwgbCwgZGF0YWxlbiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuID4+IDI7IGkrKykgewor CQlpZiAoZGF0YVtpXSkKKwkJCWRhdGFsZW4gPSAoaSA8PCAyKSArIDE7CisJfQorCisJaWYgKGRh dGFsZW4gPT0gMCkKKwkJcmV0dXJuOworCisJZHJtX3B1dHMocCwgIiAgICBkYXRhOiAhIWFzY2lp ODUgfFxuIik7CisJZHJtX3B1dHMocCwgIiAgICAgICIpOworCisKKwlsID0gYXNjaWk4NV9lbmNv ZGVfbGVuKGRhdGFsZW4pOworCisJZm9yIChpID0gMDsgaSA8IGw7IGkrKykKKwkJZHJtX3B1dHMo cCwgYXNjaWk4NV9lbmNvZGUoZGF0YVtpXSwgb3V0KSk7CisKKwlkcm1fcHV0cyhwLCAiXG4iKTsK K30KKworc3RhdGljIHZvaWQgcHJpbnRfbmFtZShzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAsIGNvbnN0 IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlkcm1fcHV0cyhwLCBmbXQpOworCWRy bV9wdXRzKHAsIG5hbWUpOworCWRybV9wdXRzKHAsICJcbiIpOworfQorCitzdGF0aWMgdm9pZCBh Nnh4X3Nob3dfc2hhZGVyKHN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaiwKKwkJc3RydWN0 IGRybV9wcmludGVyICpwKQoreworCWNvbnN0IHN0cnVjdCBhNnh4X3NoYWRlcl9ibG9jayAqYmxv Y2sgPSBvYmotPmhhbmRsZTsKKwlpbnQgaTsKKworCWlmICghb2JqLT5oYW5kbGUpCisJCXJldHVy bjsKKworCXByaW50X25hbWUocCwgIiAgLSB0eXBlOiAiLCBibG9jay0+bmFtZSk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgQTZYWF9OVU1fU0hBREVSX0JBTktTOyBpKyspIHsKKwkJZHJtX3ByaW50Zihw LCAiICAgIC0gYmFuazogJWRcbiIsIGkpOworCQlkcm1fcHJpbnRmKHAsICIgICAgICBzaXplOiAl ZFxuIiwgYmxvY2stPnNpemUpOworCisJCWlmICghb2JqLT5kYXRhKQorCQkJY29udGludWU7CisK KwkJcHJpbnRfYXNjaWk4NShwLCBibG9jay0+c2l6ZSA8PCAyLAorCQkJb2JqLT5kYXRhICsgKGJs b2NrLT5zaXplICogaSkpOworCX0KK30KKworc3RhdGljIHZvaWQgYTZ4eF9zaG93X2NsdXN0ZXJf ZGF0YShjb25zdCB1MzIgKnJlZ2lzdGVycywgaW50IHNpemUsIHUzMiAqZGF0YSwKKwkJc3RydWN0 IGRybV9wcmludGVyICpwKQoreworCWludCBjdHgsIGluZGV4ID0gMDsKKworCWZvciAoY3R4ID0g MDsgY3R4IDwgQTZYWF9OVU1fQ09OVEVYVFM7IGN0eCsrKSB7CisJCWludCBqOworCisJCWRybV9w cmludGYocCwgIiAgICAtIGNvbnRleHQ6ICVkXG4iLCBjdHgpOworCisJCWZvciAoaiA9IDA7IGog PCBzaXplOyBqICs9IDIpIHsKKwkJCXUzMiBjb3VudCA9IFJBTkdFKHJlZ2lzdGVycywgaik7CisJ CQl1MzIgb2Zmc2V0ID0gcmVnaXN0ZXJzW2pdOworCQkJaW50IGs7CisKKwkJCWZvciAoayA9IDA7 IGsgPCBjb3VudDsgaW5kZXgrKywgb2Zmc2V0KyssIGsrKykgeworCQkJCWlmIChkYXRhW2luZGV4 XSA9PSAweGRlYWZiZWFkKQorCQkJCQljb250aW51ZTsKKworCQkJCWRybV9wcmludGYocCwgIiAg ICAgIC0geyBvZmZzZXQ6IDB4JTA2eCwgdmFsdWU6IDB4JTA4eCB9XG4iLAorCQkJCQlvZmZzZXQg PDwgMiwgZGF0YVtpbmRleF0pOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBhNnh4 X3Nob3dfZGJnYWhiX2NsdXN0ZXIoc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqLAorCQlz dHJ1Y3QgZHJtX3ByaW50ZXIgKnApCit7CisJY29uc3Qgc3RydWN0IGE2eHhfZGJnYWhiX2NsdXN0 ZXIgKmRiZ2FoYiA9IG9iai0+aGFuZGxlOworCisJaWYgKGRiZ2FoYikgeworCQlwcmludF9uYW1l KHAsICIgIC0gY2x1c3Rlci1uYW1lOiAiLCBkYmdhaGItPm5hbWUpOworCQlhNnh4X3Nob3dfY2x1 c3Rlcl9kYXRhKGRiZ2FoYi0+cmVnaXN0ZXJzLCBkYmdhaGItPmNvdW50LAorCQkJb2JqLT5kYXRh LCBwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfc2hvd19jbHVzdGVyKHN0cnVjdCBhNnh4 X2dwdV9zdGF0ZV9vYmogKm9iaiwKKwkJc3RydWN0IGRybV9wcmludGVyICpwKQoreworCWNvbnN0 IHN0cnVjdCBhNnh4X2NsdXN0ZXIgKmNsdXN0ZXIgPSBvYmotPmhhbmRsZTsKKworCWlmIChjbHVz dGVyKSB7CisJCXByaW50X25hbWUocCwgIiAgLSBjbHVzdGVyLW5hbWU6ICIsIGNsdXN0ZXItPm5h bWUpOworCQlhNnh4X3Nob3dfY2x1c3Rlcl9kYXRhKGNsdXN0ZXItPnJlZ2lzdGVycywgY2x1c3Rl ci0+Y291bnQsCisJCQlvYmotPmRhdGEsIHApOworCX0KK30KKworc3RhdGljIHZvaWQgYTZ4eF9z aG93X2luZGV4ZWRfcmVncyhzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmosCisJCXN0cnVj dCBkcm1fcHJpbnRlciAqcCkKK3sKKwljb25zdCBzdHJ1Y3QgYTZ4eF9pbmRleGVkX3JlZ2lzdGVy cyAqaW5kZXhlZCA9IG9iai0+aGFuZGxlOworCisJaWYgKCFpbmRleGVkKQorCQlyZXR1cm47CisK KwlwcmludF9uYW1lKHAsICIgIC0gcmVncy1uYW1lOiAiLCBpbmRleGVkLT5uYW1lKTsKKwlkcm1f cHJpbnRmKHAsICIgICAgZHdvcmRzOiAlZFxuIiwgaW5kZXhlZC0+Y291bnQpOworCisJcHJpbnRf YXNjaWk4NShwLCBpbmRleGVkLT5jb3VudCA8PCAyLCBvYmotPmRhdGEpOworfQorCitzdGF0aWMg dm9pZCBhNnh4X3Nob3dfZGVidWdidXNfYmxvY2soY29uc3Qgc3RydWN0IGE2eHhfZGVidWdidXNf YmxvY2sgKmJsb2NrLAorCQl1MzIgKmRhdGEsIHN0cnVjdCBkcm1fcHJpbnRlciAqcCkKK3sKKwlp ZiAoYmxvY2spIHsKKwkJcHJpbnRfbmFtZShwLCAiICAtIGRlYnVnYnVzLWJsb2NrOiAiLCBibG9j ay0+bmFtZSk7CisKKwkJLyoKKwkJICogY291bnQgZm9yIHJlZ3VsYXIgZGVidWdidXMgZGF0YSBp cyBpbiBxdWFkd29yZHMsCisJCSAqIGJ1dCBwcmludCB0aGUgc2l6ZSBpbiBkd29yZHMgZm9yIGNv bnNpc3RlbmN5CisJCSAqLworCQlkcm1fcHJpbnRmKHAsICIgICAgY291bnQ6ICVkXG4iLCBibG9j ay0+Y291bnQgPDwgMSk7CisKKwkJcHJpbnRfYXNjaWk4NShwLCBibG9jay0+Y291bnQgPDwgMywg ZGF0YSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhNnh4X3Nob3dfZGVidWdidXMoc3RydWN0IGE2 eHhfZ3B1X3N0YXRlICphNnh4X3N0YXRlLAorCQlzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApCit7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+bnJfZGVidWdidXM7IGkrKykg eworCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmogPSAmYTZ4eF9zdGF0ZS0+ZGVidWdi dXNbaV07CisKKwkJYTZ4eF9zaG93X2RlYnVnYnVzX2Jsb2NrKG9iai0+aGFuZGxlLCBvYmotPmRh dGEsIHApOworCX0KKworCWlmIChhNnh4X3N0YXRlLT52YmlmX2RlYnVnYnVzKSB7CisJCXN0cnVj dCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaiA9IGE2eHhfc3RhdGUtPnZiaWZfZGVidWdidXM7CisK KwkJZHJtX3B1dHMocCwgIiAgLSBkZWJ1Z2J1cy1ibG9jazogQTZYWF9EQkdCVVNfVkJJRlxuIik7 CisJCWRybV9wcmludGYocCwgIiAgICBjb3VudDogJWRcbiIsIFZCSUZfREVCVUdCVVNfQkxPQ0tf U0laRSk7CisKKwkJLyogdmJpZiBkZWJ1Z2J1cyBkYXRhIGlzIGluIGR3b3Jkcy4gIENvbmZ1c2lu ZywgaHVoPyAqLworCQlwcmludF9hc2NpaTg1KHAsIFZCSUZfREVCVUdCVVNfQkxPQ0tfU0laRSA8 PCAyLCBvYmotPmRhdGEpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9j eF9kZWJ1Z2J1czsgaSsrKSB7CisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaiA9ICZh Nnh4X3N0YXRlLT5jeF9kZWJ1Z2J1c1tpXTsKKworCQlhNnh4X3Nob3dfZGVidWdidXNfYmxvY2so b2JqLT5oYW5kbGUsIG9iai0+ZGF0YSwgcCk7CisJfQorfQorCit2b2lkIGE2eHhfc2hvdyhzdHJ1 Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUsCisJCXN0cnVjdCBk cm1fcHJpbnRlciAqcCkKK3sKKwlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGUgKmE2eHhfc3RhdGUgPSBj b250YWluZXJfb2Yoc3RhdGUsCisJCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGUsIGJhc2UpOworCWlu dCBpOworCisJaWYgKElTX0VSUl9PUl9OVUxMKHN0YXRlKSkKKwkJcmV0dXJuOworCisJYWRyZW5v X3Nob3coZ3B1LCBzdGF0ZSwgcCk7CisKKwlkcm1fcHV0cyhwLCAicmVnaXN0ZXJzOlxuIik7CisJ Zm9yIChpID0gMDsgaSA8IGE2eHhfc3RhdGUtPm5yX3JlZ2lzdGVyczsgaSsrKSB7CisJCXN0cnVj dCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaiA9ICZhNnh4X3N0YXRlLT5yZWdpc3RlcnNbaV07CisJ CWNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVycyAqcmVncyA9IG9iai0+aGFuZGxlOworCisJCWlm ICghb2JqLT5oYW5kbGUpCisJCQljb250aW51ZTsKKworCQlhNnh4X3Nob3dfcmVnaXN0ZXJzKHJl Z3MtPnJlZ2lzdGVycywgb2JqLT5kYXRhLCByZWdzLT5jb3VudCwgcCk7CisJfQorCisJZHJtX3B1 dHMocCwgInJlZ2lzdGVycy1nbXU6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+ bnJfZ211X3JlZ2lzdGVyczsgaSsrKSB7CisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9i aiA9ICZhNnh4X3N0YXRlLT5nbXVfcmVnaXN0ZXJzW2ldOworCQljb25zdCBzdHJ1Y3QgYTZ4eF9y ZWdpc3RlcnMgKnJlZ3MgPSBvYmotPmhhbmRsZTsKKworCQlpZiAoIW9iai0+aGFuZGxlKQorCQkJ Y29udGludWU7CisKKwkJYTZ4eF9zaG93X3JlZ2lzdGVycyhyZWdzLT5yZWdpc3RlcnMsIG9iai0+ ZGF0YSwgcmVncy0+Y291bnQsIHApOworCX0KKworCWRybV9wdXRzKHAsICJpbmRleGVkLXJlZ2lz dGVyczpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9pbmRleGVkX3JlZ3M7 IGkrKykKKwkJYTZ4eF9zaG93X2luZGV4ZWRfcmVncygmYTZ4eF9zdGF0ZS0+aW5kZXhlZF9yZWdz W2ldLCBwKTsKKworCWRybV9wdXRzKHAsICJzaGFkZXItYmxvY2tzOlxuIik7CisJZm9yIChpID0g MDsgaSA8IGE2eHhfc3RhdGUtPm5yX3NoYWRlcnM7IGkrKykKKwkJYTZ4eF9zaG93X3NoYWRlcigm YTZ4eF9zdGF0ZS0+c2hhZGVyc1tpXSwgcCk7CisKKwlkcm1fcHV0cyhwLCAiY2x1c3RlcnM6XG4i KTsKKwlmb3IgKGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+bnJfY2x1c3RlcnM7IGkrKykKKwkJYTZ4 eF9zaG93X2NsdXN0ZXIoJmE2eHhfc3RhdGUtPmNsdXN0ZXJzW2ldLCBwKTsKKworCWZvciAoaSA9 IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9kYmdhaGJfY2x1c3RlcnM7IGkrKykKKwkJYTZ4eF9zaG93 X2RiZ2FoYl9jbHVzdGVyKCZhNnh4X3N0YXRlLT5kYmdhaGJfY2x1c3RlcnNbaV0sIHApOworCisJ ZHJtX3B1dHMocCwgImRlYnVnYnVzOlxuIik7CisJYTZ4eF9zaG93X2RlYnVnYnVzKGE2eHhfc3Rh dGUsIHApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9n cHVfc3RhdGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42OGNjY2ZhMjg3MGEKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0 ZS5oCkBAIC0wLDAgKzEsNDMwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAorLyogQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLiAqLworCisjaWZuZGVmIF9BNlhYX0NSQVNIX0RVTVBfSF8KKyNkZWZpbmUgX0E2 WFhfQ1JBU0hfRFVNUF9IXworCisjaW5jbHVkZSAiYTZ4eC54bWwuaCIKKworI2RlZmluZSBBNlhY X05VTV9DT05URVhUUyAyCisjZGVmaW5lIEE2WFhfTlVNX1NIQURFUl9CQU5LUyAzCisKK3N0YXRp YyBjb25zdCB1MzIgYTZ4eF9ncmFzX2NsdXN0ZXJbXSA9IHsKKwkweDgwMDAsIDB4ODAwNiwgMHg4 MDEwLCAweDgwOTIsIDB4ODA5NCwgMHg4MDlkLCAweDgwYTAsIDB4ODBhNiwKKwkweDgwYWYsIDB4 ODBmMSwgMHg4MTAwLCAweDgxMDcsIDB4ODEwOSwgMHg4MTA5LCAweDgxMTAsIDB4ODExMCwKKwkw eDg0MDAsIDB4ODQwYiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9wc19jbHVzdGVyX3Jh Y1tdID0geworCTB4ODgwMCwgMHg4ODA2LCAweDg4MDksIDB4ODgxMSwgMHg4ODE4LCAweDg4MWUs IDB4ODgyMCwgMHg4ODY1LAorCTB4ODg3MCwgMHg4ODc5LCAweDg4ODAsIDB4ODg4OSwgMHg4ODkw LCAweDg4OTEsIDB4ODg5OCwgMHg4ODk4LAorCTB4ODhjMCwgMHg4OGMxLCAweDg4ZDAsIDB4ODhl MywgMHg4OTAwLCAweDg5MGMsIDB4ODkwZiwgMHg4OTFhLAorCTB4OGMwMCwgMHg4YzAxLCAweDhj MDgsIDB4OGMxMCwgMHg4YzE3LCAweDhjMWYsIDB4OGMyNiwgMHg4YzMzLAorfTsKKworc3RhdGlj IGNvbnN0IHUzMiBhNnh4X3BzX2NsdXN0ZXJfcmJwW10gPSB7CisJMHg4OGYwLCAweDg4ZjMsIDB4 ODkwZCwgMHg4OTBlLCAweDg5MjcsIDB4ODkyOCwgMHg4YmYwLCAweDhiZjEsCisJMHg4YzAyLCAw eDhjMDcsIDB4OGMxMSwgMHg4YzE2LCAweDhjMjAsIDB4OGMyNSwKK307CisKK3N0YXRpYyBjb25z dCB1MzIgYTZ4eF9wc19jbHVzdGVyW10gPSB7CisJMHg5MjAwLCAweDkyMTYsIDB4OTIxOCwgMHg5 MjM2LCAweDkzMDAsIDB4OTMwNiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9mZV9jbHVz dGVyW10gPSB7CisJMHg5MzAwLCAweDkzMDYsIDB4OTgwMCwgMHg5ODA2LCAweDliMDAsIDB4OWIw NywgMHhhMDAwLCAweGEwMDksCisJMHhhMDBlLCAweGEwZWYsIDB4YTBmOCwgMHhhMGY4LAorfTsK Kworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3BjX3ZzX2NsdXN0ZXJbXSA9IHsKKwkweDkxMDAsIDB4 OTEwOCwgMHg5MzAwLCAweDkzMDYsIDB4OTk4MCwgMHg5OTgxLCAweDliMDAsIDB4OWIwNywKK307 CisKKyNkZWZpbmUgQ0xVU1RFUl9GRSAgICAwCisjZGVmaW5lIENMVVNURVJfU1BfVlMgMQorI2Rl ZmluZSBDTFVTVEVSX1BDX1ZTIDIKKyNkZWZpbmUgQ0xVU1RFUl9HUkFTICAzCisjZGVmaW5lIENM VVNURVJfU1BfUFMgNAorI2RlZmluZSBDTFVTVEVSX1BTICAgIDUKKworI2RlZmluZSBDTFVTVEVS KF9pZCwgX3JlZywgX3NlbF9yZWcsIF9zZWxfdmFsKSBcCisJeyAuaWQgPSBfaWQsIC5uYW1lID0g I19pZCxcCisJCS5yZWdpc3RlcnMgPSBfcmVnLCBcCisJCS5jb3VudCA9IEFSUkFZX1NJWkUoX3Jl ZyksIFwKKwkJLnNlbF9yZWcgPSBfc2VsX3JlZywgLnNlbF92YWwgPSBfc2VsX3ZhbCB9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgYTZ4eF9jbHVzdGVyIHsKKwl1MzIgaWQ7CisJY29uc3QgY2hhciAq bmFtZTsKKwljb25zdCB1MzIgKnJlZ2lzdGVyczsKKwlzaXplX3QgY291bnQ7CisJdTMyIHNlbF9y ZWc7CisJdTMyIHNlbF92YWw7Cit9IGE2eHhfY2x1c3RlcnNbXSA9IHsKKwlDTFVTVEVSKENMVVNU RVJfR1JBUywgYTZ4eF9ncmFzX2NsdXN0ZXIsIDAsIDApLAorCUNMVVNURVIoQ0xVU1RFUl9QUywg YTZ4eF9wc19jbHVzdGVyX3JhYywgUkVHX0E2WFhfUkJfUkJfU1VCX0JMT0NLX1NFTF9DTlRMX0NE LCAweDApLAorCUNMVVNURVIoQ0xVU1RFUl9QUywgYTZ4eF9wc19jbHVzdGVyX3JicCwgUkVHX0E2 WFhfUkJfUkJfU1VCX0JMT0NLX1NFTF9DTlRMX0NELCAweDkpLAorCUNMVVNURVIoQ0xVU1RFUl9Q UywgYTZ4eF9wc19jbHVzdGVyLCAwLCAwKSwKKwlDTFVTVEVSKENMVVNURVJfRkUsIGE2eHhfZmVf Y2x1c3RlciwgMCwgMCksCisJQ0xVU1RFUihDTFVTVEVSX1BDX1ZTLCBhNnh4X3BjX3ZzX2NsdXN0 ZXIsIDAsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3NwX3ZzX2hsc3FfY2x1c3Rl cltdID0geworCTB4YjgwMCwgMHhiODAzLCAweGI4MjAsIDB4YjgyMiwKK307CisKK3N0YXRpYyBj b25zdCB1MzIgYTZ4eF9zcF92c19zcF9jbHVzdGVyW10gPSB7CisJMHhhODAwLCAweGE4MjQsIDB4 YTgzMCwgMHhhODNjLCAweGE4NDAsIDB4YTg2NCwgMHhhODcwLCAweGE4OTUsCisJMHhhOGEwLCAw eGE4YWYsIDB4YThjMCwgMHhhOGMzLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X2hsc3Ff ZHVwbGljYXRlX2NsdXN0ZXJbXSA9IHsKKwkweGJiMTAsIDB4YmIxMSwgMHhiYjIwLCAweGJiMjks Cit9OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfaGxzcV8yZF9kdXBsaWNhdGVfY2x1c3Rlcltd ID0geworCTB4YmQ4MCwgMHhiZDgwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3NwX2R1 cGxpY2F0ZV9jbHVzdGVyW10gPSB7CisJMHhhYjAwLCAweGFiMDAsIDB4YWIwNCwgMHhhYjA1LCAw eGFiMTAsIDB4YWIxYiwgMHhhYjIwLCAweGFiMjAsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGE2 eHhfdHBfZHVwbGljYXRlX2NsdXN0ZXJbXSA9IHsKKwkweGIzMDAsIDB4YjMwNywgMHhiMzA5LCAw eGIzMDksIDB4YjM4MCwgMHhiMzgyLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3NwX3Bz X2hsc3FfY2x1c3RlcltdID0geworCTB4Yjk4MCwgMHhiOTgwLCAweGI5ODIsIDB4Yjk4NywgMHhi OTkwLCAweGI5OWIsIDB4YjlhMCwgMHhiOWEyLAorCTB4YjljMCwgMHhiOWM5LAorfTsKKworc3Rh dGljIGNvbnN0IHUzMiBhNnh4X3NwX3BzX2hsc3FfMmRfY2x1c3RlcltdID0geworCTB4YmQ4MCwg MHhiZDgwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3NwX3BzX3NwX2NsdXN0ZXJbXSA9 IHsKKwkweGE5ODAsIDB4YTlhOCwgMHhhOWIwLCAweGE5YmMsIDB4YTlkMCwgMHhhOWQzLCAweGE5 ZTAsIDB4YTlmMywKKwkweGFhMDAsIDB4YWEwMCwgMHhhYTMwLCAweGFhMzEsCit9OworCitzdGF0 aWMgY29uc3QgdTMyIGE2eHhfc3BfcHNfc3BfMmRfY2x1c3RlcltdID0geworCTB4YWNjMCwgMHhh Y2MwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3NwX3BzX3RwX2NsdXN0ZXJbXSA9IHsK KwkweGIxODAsIDB4YjE4MywgMHhiMTkwLCAweGIxOTEsCit9OworCitzdGF0aWMgY29uc3QgdTMy IGE2eHhfc3BfcHNfdHBfMmRfY2x1c3RlcltdID0geworCTB4YjRjMCwgMHhiNGQxLAorfTsKKwor I2RlZmluZSBDTFVTVEVSX0RCR0FIQihfaWQsIF9iYXNlLCBfdHlwZSwgX3JlZykgXAorCXsgLm5h bWUgPSAjX2lkLCAuc3RhdGV0eXBlID0gX3R5cGUsIC5iYXNlID0gX2Jhc2UsIFwKKwkJLnJlZ2lz dGVycyA9IF9yZWcsIC5jb3VudCA9IEFSUkFZX1NJWkUoX3JlZykgfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGE2eHhfZGJnYWhiX2NsdXN0ZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIHN0 YXRldHlwZTsKKwl1MzIgYmFzZTsKKwljb25zdCB1MzIgKnJlZ2lzdGVyczsKKwlzaXplX3QgY291 bnQ7Cit9IGE2eHhfZGJnYWhiX2NsdXN0ZXJzW10gPSB7CisJQ0xVU1RFUl9EQkdBSEIoQ0xVU1RF Ul9TUF9WUywgMHgwMDAyZTAwMCwgMHg0MSwgYTZ4eF9zcF92c19obHNxX2NsdXN0ZXIpLAorCUNM VVNURVJfREJHQUhCKENMVVNURVJfU1BfVlMsIDB4MDAwMmEwMDAsIDB4MjEsIGE2eHhfc3BfdnNf c3BfY2x1c3RlciksCisJQ0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyZTAwMCwg MHg0MSwgYTZ4eF9obHNxX2R1cGxpY2F0ZV9jbHVzdGVyKSwKKwlDTFVTVEVSX0RCR0FIQihDTFVT VEVSX1NQX1ZTLCAweDAwMDJmMDAwLCAweDQ1LCBhNnh4X2hsc3FfMmRfZHVwbGljYXRlX2NsdXN0 ZXIpLAorCUNMVVNURVJfREJHQUhCKENMVVNURVJfU1BfVlMsIDB4MDAwMmEwMDAsIDB4MjEsIGE2 eHhfc3BfZHVwbGljYXRlX2NsdXN0ZXIpLAorCUNMVVNURVJfREJHQUhCKENMVVNURVJfU1BfVlMs IDB4MDAwMmMwMDAsIDB4MSwgYTZ4eF90cF9kdXBsaWNhdGVfY2x1c3RlciksCisJQ0xVU1RFUl9E QkdBSEIoQ0xVU1RFUl9TUF9QUywgMHgwMDAyZTAwMCwgMHg0MiwgYTZ4eF9zcF9wc19obHNxX2Ns dXN0ZXIpLAorCUNMVVNURVJfREJHQUhCKENMVVNURVJfU1BfUFMsIDB4MDAwMmYwMDAsIDB4NDYs IGE2eHhfc3BfcHNfaGxzcV8yZF9jbHVzdGVyKSwKKwlDTFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQ X1BTLCAweDAwMDJhMDAwLCAweDIyLCBhNnh4X3NwX3BzX3NwX2NsdXN0ZXIpLAorCUNMVVNURVJf REJHQUhCKENMVVNURVJfU1BfUFMsIDB4MDAwMmIwMDAsIDB4MjYsIGE2eHhfc3BfcHNfc3BfMmRf Y2x1c3RlciksCisJQ0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9QUywgMHgwMDAyYzAwMCwgMHgy LCBhNnh4X3NwX3BzX3RwX2NsdXN0ZXIpLAorCUNMVVNURVJfREJHQUhCKENMVVNURVJfU1BfUFMs IDB4MDAwMmQwMDAsIDB4NiwgYTZ4eF9zcF9wc190cF8yZF9jbHVzdGVyKSwKKwlDTFVTVEVSX0RC R0FIQihDTFVTVEVSX1NQX1BTLCAweDAwMDJlMDAwLCAweDQyLCBhNnh4X2hsc3FfZHVwbGljYXRl X2NsdXN0ZXIpLAorCUNMVVNURVJfREJHQUhCKENMVVNURVJfU1BfUFMsIDB4MDAwMmEwMDAsIDB4 MjIsIGE2eHhfc3BfZHVwbGljYXRlX2NsdXN0ZXIpLAorCUNMVVNURVJfREJHQUhCKENMVVNURVJf U1BfUFMsIDB4MDAwMmMwMDAsIDB4MiwgYTZ4eF90cF9kdXBsaWNhdGVfY2x1c3RlciksCit9Owor CitzdGF0aWMgY29uc3QgdTMyIGE2eHhfaGxzcV9yZWdpc3RlcnNbXSA9IHsKKwkweGJlMDAsIDB4 YmUwMSwgMHhiZTA0LCAweGJlMDUsIDB4YmUwOCwgMHhiZTA5LCAweGJlMTAsIDB4YmUxNSwKKwkw eGJlMjAsIDB4YmUyMywKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9zcF9yZWdpc3RlcnNb XSA9IHsKKwkweGFlMDAsIDB4YWUwNCwgMHhhZTBjLCAweGFlMGMsIDB4YWUwZiwgMHhhZTJiLCAw eGFlMzAsIDB4YWUzMiwKKwkweGFlMzUsIDB4YWUzNSwgMHhhZTNhLCAweGFlM2YsIDB4YWU1MCwg MHhhZTUyLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3RwX3JlZ2lzdGVyc1tdID0gewor CTB4YjYwMCwgMHhiNjAxLCAweGI2MDQsIDB4YjYwNSwgMHhiNjEwLCAweGI2MWIsIDB4YjYyMCwg MHhiNjIzLAorfTsKKworc3RydWN0IGE2eHhfcmVnaXN0ZXJzIHsKKwljb25zdCB1MzIgKnJlZ2lz dGVyczsKKwlzaXplX3QgY291bnQ7CisJdTMyIHZhbDA7CisJdTMyIHZhbDE7Cit9OworCisjZGVm aW5lIEhMU1FfREJHX1JFR1MoX2Jhc2UsIF90eXBlLCBfYXJyYXkpIFwKKwl7IC52YWwwID0gX2Jh c2UsIC52YWwxID0gX3R5cGUsIC5yZWdpc3RlcnMgPSBfYXJyYXksIFwKKwkJLmNvdW50ID0gQVJS QVlfU0laRShfYXJyYXkpLCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYTZ4eF9yZWdpc3RlcnMg YTZ4eF9obHNxX3JlZ2xpc3RbXSA9IHsKKwlITFNRX0RCR19SRUdTKDB4MDAwMkY4MDAsIDB4NDAs IGE2eHhfaGxzcV9yZWdpc3RlcnMpLAorCUhMU1FfREJHX1JFR1MoMHgwMDAyQjgwMCwgMHgyMCwg YTZ4eF9zcF9yZWdpc3RlcnMpLAorCUhMU1FfREJHX1JFR1MoMHgwMDAyRDgwMCwgMHgwLCBhNnh4 X3RwX3JlZ2lzdGVycyksCit9OworCisjZGVmaW5lIFNIQURFUihfdHlwZSwgX3NpemUpIFwKKwl7 IC50eXBlID0gX3R5cGUsIC5uYW1lID0gI190eXBlLCAuc2l6ZSA9IF9zaXplIH0KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBhNnh4X3NoYWRlcl9ibG9jayB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1 MzIgdHlwZTsKKwl1MzIgc2l6ZTsKK30gYTZ4eF9zaGFkZXJfYmxvY2tzW10gPSB7CisJU0hBREVS KEE2WFhfVFAwX1RNT19EQVRBLCAweDIwMCksCisJU0hBREVSKEE2WFhfVFAwX1NNT19EQVRBLCAw eDgwKSwKKwlTSEFERVIoQTZYWF9UUDBfTUlQTUFQX0JBU0VfREFUQSwgMHgzYzApLAorCVNIQURF UihBNlhYX1RQMV9UTU9fREFUQSwgMHgyMDApLAorCVNIQURFUihBNlhYX1RQMV9TTU9fREFUQSwg MHg4MCksCisJU0hBREVSKEE2WFhfVFAxX01JUE1BUF9CQVNFX0RBVEEsIDB4M2MwKSwKKwlTSEFE RVIoQTZYWF9TUF9JTlNUX0RBVEEsIDB4ODAwKSwKKwlTSEFERVIoQTZYWF9TUF9MQl8wX0RBVEEs IDB4ODAwKSwKKwlTSEFERVIoQTZYWF9TUF9MQl8xX0RBVEEsIDB4ODAwKSwKKwlTSEFERVIoQTZY WF9TUF9MQl8yX0RBVEEsIDB4ODAwKSwKKwlTSEFERVIoQTZYWF9TUF9MQl8zX0RBVEEsIDB4ODAw KSwKKwlTSEFERVIoQTZYWF9TUF9MQl80X0RBVEEsIDB4ODAwKSwKKwlTSEFERVIoQTZYWF9TUF9M Ql81X0RBVEEsIDB4MjAwKSwKKwlTSEFERVIoQTZYWF9TUF9DQl9CSU5ETEVTU19EQVRBLCAweDIw MDApLAorCVNIQURFUihBNlhYX1NQX0NCX0xFR0FDWV9EQVRBLCAweDI4MCksCisJU0hBREVSKEE2 WFhfU1BfVUFWX0RBVEEsIDB4ODApLAorCVNIQURFUihBNlhYX1NQX0lOU1RfVEFHLCAweDgwKSwK KwlTSEFERVIoQTZYWF9TUF9DQl9CSU5ETEVTU19UQUcsIDB4ODApLAorCVNIQURFUihBNlhYX1NQ X1RNT19VTU9fVEFHLCAweDgwKSwKKwlTSEFERVIoQTZYWF9TUF9TTU9fVEFHLCAweDgwKSwKKwlT SEFERVIoQTZYWF9TUF9TVEFURV9EQVRBLCAweDNmKSwKKwlTSEFERVIoQTZYWF9ITFNRX0NIVU5L X0NWU19SQU0sIDB4MWMwKSwKKwlTSEFERVIoQTZYWF9ITFNRX0NIVU5LX0NQU19SQU0sIDB4Mjgw KSwKKwlTSEFERVIoQTZYWF9ITFNRX0NIVU5LX0NWU19SQU1fVEFHLCAweDQwKSwKKwlTSEFERVIo QTZYWF9ITFNRX0NIVU5LX0NQU19SQU1fVEFHLCAweDQwKSwKKwlTSEFERVIoQTZYWF9ITFNRX0lD Ql9DVlNfQ0JfQkFTRV9UQUcsIDB4NCksCisJU0hBREVSKEE2WFhfSExTUV9JQ0JfQ1BTX0NCX0JB U0VfVEFHLCAweDQpLAorCVNIQURFUihBNlhYX0hMU1FfQ1ZTX01JU0NfUkFNLCAweDFjMCksCisJ U0hBREVSKEE2WFhfSExTUV9DUFNfTUlTQ19SQU0sIDB4NTgwKSwKKwlTSEFERVIoQTZYWF9ITFNR X0lOU1RfUkFNLCAweDgwMCksCisJU0hBREVSKEE2WFhfSExTUV9HRlhfQ1ZTX0NPTlNUX1JBTSwg MHg4MDApLAorCVNIQURFUihBNlhYX0hMU1FfR0ZYX0NQU19DT05TVF9SQU0sIDB4ODAwKSwKKwlT SEFERVIoQTZYWF9ITFNRX0NWU19NSVNDX1JBTV9UQUcsIDB4OCksCisJU0hBREVSKEE2WFhfSExT UV9DUFNfTUlTQ19SQU1fVEFHLCAweDQpLAorCVNIQURFUihBNlhYX0hMU1FfSU5TVF9SQU1fVEFH LCAweDgwKSwKKwlTSEFERVIoQTZYWF9ITFNRX0dGWF9DVlNfQ09OU1RfUkFNX1RBRywgMHhjKSwK KwlTSEFERVIoQTZYWF9ITFNRX0dGWF9DUFNfQ09OU1RfUkFNX1RBRywgMHgxMCksCisJU0hBREVS KEE2WFhfSExTUV9QV1JfUkVTVF9SQU0sIDB4MjgpLAorCVNIQURFUihBNlhYX0hMU1FfUFdSX1JF U1RfVEFHLCAweDE0KSwKKwlTSEFERVIoQTZYWF9ITFNRX0RBVEFQQVRIX01FVEEsIDB4NDApLAor CVNIQURFUihBNlhYX0hMU1FfRlJPTlRFTkRfTUVUQSwgMHg0MCksCisJU0hBREVSKEE2WFhfSExT UV9JTkRJUkVDVF9NRVRBLCAweDQwKSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9yYl9y YWNfcmVnaXN0ZXJzW10gPSB7CisJMHg4ZTA0LCAweDhlMDUsIDB4OGUwNywgMHg4ZTA4LCAweDhl MTAsIDB4OGUxYywgMHg4ZTIwLCAweDhlMjUsCisJMHg4ZTI4LCAweDhlMjgsIDB4OGUyYywgMHg4 ZTJmLCAweDhlNTAsIDB4OGU1MiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9yYl9yYnBf cmVnaXN0ZXJzW10gPSB7CisJMHg4ZTAxLCAweDhlMDEsIDB4OGUwYywgMHg4ZTBjLCAweDhlM2Is IDB4OGUzZSwgMHg4ZTQwLCAweDhlNDMsCisJMHg4ZTUzLCAweDhlNWYsIDB4OGU3MCwgMHg4ZTc3 LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3JlZ2lzdGVyc1tdID0geworCS8qIFJCQk0g Ki8KKwkweDAwMDAsIDB4MDAwMiwgMHgwMDEwLCAweDAwMTAsIDB4MDAxMiwgMHgwMDEyLCAweDAw MTgsIDB4MDAxYiwKKwkweDAwMWUsIDB4MDAzMiwgMHgwMDM4LCAweDAwM2MsIDB4MDA0MiwgMHgw MDQyLCAweDAwNDQsIDB4MDA0NCwKKwkweDAwNDcsIDB4MDA0NywgMHgwMDU2LCAweDAwNTYsIDB4 MDBhZCwgMHgwMGFlLCAweDAwYjAsIDB4MDBmYiwKKwkweDAxMDAsIDB4MDExZCwgMHgwMjAwLCAw eDAyMGQsIDB4MDIxOCwgMHgwMjNkLCAweDA0MDAsIDB4MDRmOSwKKwkweDA1MDAsIDB4MDUwMCwg MHgwNTA1LCAweDA1MGIsIDB4MDUwZSwgMHgwNTExLCAweDA1MzMsIDB4MDUzMywKKwkweDA1NDAs IDB4MDU1NSwKKwkvKiBDUCAqLworCTB4MDgwMCwgMHgwODA4LCAweDA4MTAsIDB4MDgxMywgMHgw ODIwLCAweDA4MjEsIDB4MDgyMywgMHgwODI0LAorCTB4MDgyNiwgMHgwODI3LCAweDA4MzAsIDB4 MDgzMywgMHgwODQwLCAweDA4NDMsIDB4MDg0ZiwgMHgwODZmLAorCTB4MDg4MCwgMHgwODhhLCAw eDA4YTAsIDB4MDhhYiwgMHgwOGMwLCAweDA4YzQsIDB4MDhkMCwgMHgwOGRkLAorCTB4MDhmMCwg MHgwOGYzLCAweDA5MDAsIDB4MDkwMywgMHgwOTA4LCAweDA5MTEsIDB4MDkyOCwgMHgwOTNlLAor CTB4MDk0MiwgMHgwOTRkLCAweDA5ODAsIDB4MDk4NCwgMHgwOThkLCAweDA5OTYsIDB4MDk5OCwg MHgwOTllLAorCTB4MDlhMCwgMHgwOWE2LCAweDA5YTgsIDB4MDlhZSwgMHgwOWIwLCAweDA5YjEs IDB4MDljMiwgMHgwOWM4LAorCTB4MGEwMCwgMHgwYTAzLAorCS8qIFZTQyAqLworCTB4MGMwMCwg MHgwYzA0LCAweDBjMDYsIDB4MGMwNiwgMHgwYzEwLCAweDBjZDksIDB4MGUwMCwgMHgwZTBlLAor CS8qIFVDSEUgKi8KKwkweDBlMTAsIDB4MGUxMywgMHgwZTE3LCAweDBlMTksIDB4MGUxYywgMHgw ZTJiLCAweDBlMzAsIDB4MGUzMiwKKwkweDBlMzgsIDB4MGUzOSwKKwkvKiBHUkFTICovCisJMHg4 NjAwLCAweDg2MDEsIDB4ODYxMCwgMHg4NjFiLCAweDg2MjAsIDB4ODYyMCwgMHg4NjI4LCAweDg2 MmIsCisJMHg4NjMwLCAweDg2MzcsCisJLyogVlBDICovCisJMHg5NjAwLCAweDk2MDQsIDB4OTYy NCwgMHg5NjM3LAorCS8qIFBDICovCisJMHg5ZTAwLCAweDllMDEsIDB4OWUwMywgMHg5ZTBlLCAw eDllMTEsIDB4OWUxNiwgMHg5ZTE5LCAweDllMTksCisJMHg5ZTFjLCAweDllMWMsIDB4OWUyMCwg MHg5ZTIzLCAweDllMzAsIDB4OWUzMSwgMHg5ZTM0LCAweDllMzQsCisJMHg5ZTcwLCAweDllNzIs IDB4OWU3OCwgMHg5ZTc5LCAweDllODAsIDB4OWZmZiwKKwkvKiBWRkQgKi8KKwkweGE2MDAsIDB4 YTYwMSwgMHhhNjAzLCAweGE2MDMsIDB4YTYwYSwgMHhhNjBhLCAweGE2MTAsIDB4YTYxNywKKwkw eGE2MzAsIDB4YTYzMCwKK307CisKKyNkZWZpbmUgUkVHUyhfYXJyYXksIF9zZWxfcmVnLCBfc2Vs X3ZhbCkgXAorCXsgLnJlZ2lzdGVycyA9IF9hcnJheSwgLmNvdW50ID0gQVJSQVlfU0laRShfYXJy YXkpLCBcCisJCS52YWwwID0gX3NlbF9yZWcsIC52YWwxID0gX3NlbF92YWwgfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGE2eHhfcmVnaXN0ZXJzIGE2eHhfcmVnbGlzdFtdID0geworCVJFR1MoYTZ4 eF9yZWdpc3RlcnMsIDAsIDApLAorCVJFR1MoYTZ4eF9yYl9yYWNfcmVnaXN0ZXJzLCBSRUdfQTZY WF9SQl9SQl9TVUJfQkxPQ0tfU0VMX0NOVExfQ0QsIDApLAorCVJFR1MoYTZ4eF9yYl9yYnBfcmVn aXN0ZXJzLCBSRUdfQTZYWF9SQl9SQl9TVUJfQkxPQ0tfU0VMX0NOVExfQ0QsIDkpLAorfTsKKwor c3RhdGljIGNvbnN0IHUzMiBhNnh4X2FoYl9yZWdpc3RlcnNbXSA9IHsKKwkvKiBSQkJNX1NUQVRV UyAtIFJCQk1fU1RBVFVTMyAqLworCTB4MjEwLCAweDIxMywKKwkvKiBDUF9TVEFUVVNfMSAqLwor CTB4ODI1LCAweDgyNSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF92YmlmX3JlZ2lzdGVy c1tdID0geworCTB4MzAwMCwgMHgzMDA3LCAweDMwMGMsIDB4MzAxNCwgMHgzMDE4LCAweDMwMmQs IDB4MzAzMCwgMHgzMDMxLAorCTB4MzAzNCwgMHgzMDM2LCAweDMwM2MsIDB4MzAzZCwgMHgzMDQw LCAweDMwNDAsIDB4MzA0MiwgMHgzMDQyLAorCTB4MzA0OSwgMHgzMDQ5LCAweDMwNTgsIDB4MzA1 OCwgMHgzMDVhLCAweDMwNjEsIDB4MzA2NCwgMHgzMDY4LAorCTB4MzA2YywgMHgzMDZkLCAweDMw ODAsIDB4MzA4OCwgMHgzMDhiLCAweDMwOGMsIDB4MzA5MCwgMHgzMDk0LAorCTB4MzA5OCwgMHgz MDk4LCAweDMwOWMsIDB4MzA5YywgMHgzMGMwLCAweDMwYzAsIDB4MzBjOCwgMHgzMGM4LAorCTB4 MzBkMCwgMHgzMGQwLCAweDMwZDgsIDB4MzBkOCwgMHgzMGUwLCAweDMwZTAsIDB4MzEwMCwgMHgz MTAwLAorCTB4MzEwOCwgMHgzMTA4LCAweDMxMTAsIDB4MzExMCwgMHgzMTE4LCAweDMxMTgsIDB4 MzEyMCwgMHgzMTIwLAorCTB4MzEyNCwgMHgzMTI1LCAweDMxMjksIDB4MzEyOSwgMHgzMTMxLCAw eDMxMzEsIDB4MzE1NCwgMHgzMTU0LAorCTB4MzE1NiwgMHgzMTU2LCAweDMxNTgsIDB4MzE1OCwg MHgzMTVhLCAweDMxNWEsIDB4MzE1YywgMHgzMTVjLAorCTB4MzE1ZSwgMHgzMTVlLCAweDMxNjAs IDB4MzE2MCwgMHgzMTYyLCAweDMxNjIsIDB4MzQwYywgMHgzNDBjLAorCTB4MzQxMCwgMHgzNDEw LCAweDM4MDAsIDB4MzgwMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYTZ4eF9yZWdpc3Rl cnMgYTZ4eF9haGJfcmVnbGlzdFtdID0geworCVJFR1MoYTZ4eF9haGJfcmVnaXN0ZXJzLCAwLCAw KSwKKwlSRUdTKGE2eHhfdmJpZl9yZWdpc3RlcnMsIDAsIDApLAorfTsKKworc3RhdGljIGNvbnN0 IHUzMiBhNnh4X2dtdV9neF9yZWdpc3RlcnNbXSA9IHsKKwkvKiBHTVUgR1ggKi8KKwkweDAwMDAs IDB4MDAwMCwgMHgwMDEwLCAweDAwMTMsIDB4MDAxNiwgMHgwMDE2LCAweDAwMTgsIDB4MDAxYiwK KwkweDAwMWUsIDB4MDAxZSwgMHgwMDIwLCAweDAwMjMsIDB4MDAyNiwgMHgwMDI2LCAweDAwMjgs IDB4MDAyYiwKKwkweDAwMmUsIDB4MDAyZSwgMHgwMDMwLCAweDAwMzMsIDB4MDAzNiwgMHgwMDM2 LCAweDAwMzgsIDB4MDAzYiwKKwkweDAwM2UsIDB4MDAzZSwgMHgwMDQwLCAweDAwNDMsIDB4MDA0 NiwgMHgwMDQ2LCAweDAwODAsIDB4MDA4NCwKKwkweDAxMDAsIDB4MDEyYiwgMHgwMTQwLCAweDAx NDAsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfZ211X2N4X3JlZ2lzdGVyc1tdID0gewor CS8qIEdNVSBDWCAqLworCTB4NGMwMCwgMHg0YzA3LCAweDRjMTAsIDB4NGMxMiwgMHg0ZDAwLCAw eDRkMDAsIDB4NGQwNywgMHg0ZDBhLAorCTB4NTAwMCwgMHg1MDA0LCAweDUwMDcsIDB4NTAwOCwg MHg1MDBiLCAweDUwMGMsIDB4NTAwZiwgMHg1MDFjLAorCTB4NTAyNCwgMHg1MDJhLCAweDUwMmQs IDB4NTAzMCwgMHg1MDQwLCAweDUwNTMsIDB4NTA4NywgMHg1MDg5LAorCTB4NTBhMCwgMHg1MGEy LCAweDUwYTQsIDB4NTBhZiwgMHg1MGMwLCAweDUwYzMsIDB4NTBkMCwgMHg1MGQwLAorCTB4NTBl NCwgMHg1MGU0LCAweDUwZTgsIDB4NTBlYywgMHg1MTAwLCAweDUxMDMsIDB4NTE0MCwgMHg1MTQw LAorCTB4NTE0MiwgMHg1MTQ0LCAweDUxNGMsIDB4NTE0ZCwgMHg1MTRmLCAweDUxNTEsIDB4NTE1 NCwgMHg1MTU0LAorCTB4NTE1NywgMHg1MTU4LCAweDUxNWQsIDB4NTE1ZCwgMHg1MTYyLCAweDUx NjIsIDB4NTE2NCwgMHg1MTY1LAorCTB4NTE4MCwgMHg1MTg2LCAweDUxOTAsIDB4NTE5ZSwgMHg1 MWMwLCAweDUxYzAsIDB4NTFjNSwgMHg1MWNjLAorCTB4NTFlMCwgMHg1MWUyLCAweDUxZjAsIDB4 NTFmMCwgMHg1MjAwLCAweDUyMDEsCisJLyogR1BVIFJTQ0MgKi8KKwkweDhjOGMsIDB4OGM4Yywg MHg4ZDAxLCAweDhkMDIsIDB4OGY0MCwgMHg4ZjQyLCAweDhmNDQsIDB4OGY0NywKKwkweDhmNGMs IDB4OGY4NywgMHg4ZmVjLCAweDhmZWYsIDB4OGZmNCwgMHg5MDJmLCAweDkwOTQsIDB4OTA5NywK KwkweDkwOWMsIDB4OTBkNywgMHg5MTNjLCAweDkxM2YsIDB4OTE0NCwgMHg5MTdmLAorCS8qIEdN VSBBTyAqLworCTB4OTMwMCwgMHg5MzE2LCAweDk0MDAsIDB4OTQwMCwKKwkvKiBHUFUgQ0MgKi8K KwkweDk4MDAsIDB4OTgxMiwgMHg5ODQwLCAweDk4NTIsIDB4OWMwMCwgMHg5YzA0LCAweDljMDcs IDB4OWMwYiwKKwkweDljMTUsIDB4OWMxYywgMHg5YzFlLCAweDljMmQsIDB4OWMzYywgMHg5YzNk LCAweDljM2YsIDB4OWM0MCwKKwkweDljNDIsIDB4OWM0OSwgMHg5YzU4LCAweDljNWEsIDB4OWQ0 MCwgMHg5ZDVlLCAweGEwMDAsIDB4YTAwMiwKKwkweGE0MDAsIDB4YTQwMiwgMHhhYzAwLCAweGFj MDIsIDB4YjAwMCwgMHhiMDAyLCAweGI0MDAsIDB4YjQwMiwKKwkweGI4MDAsIDB4YjgwMiwKKwkv KiBHUFUgQ0MgQUNEICovCisJMHhiYzAwLCAweGJjMTYsIDB4YmMyMCwgMHhiYzI3LAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVycyBhNnh4X2dtdV9yZWdsaXN0W10gPSB7 CisJUkVHUyhhNnh4X2dtdV9jeF9yZWdpc3RlcnMsIDAsIDApLAorCVJFR1MoYTZ4eF9nbXVfZ3hf cmVnaXN0ZXJzLCAwLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYTZ4eF9pbmRleGVk X3JlZ2lzdGVycyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1MzIgYWRkcjsKKwl1MzIgZGF0YTsK Kwl1MzIgY291bnQ7Cit9IGE2eHhfaW5kZXhlZF9yZWdsaXN0W10gPSB7CisJeyAiQ1BfU0VRX1NU QVQiLCBSRUdfQTZYWF9DUF9TUUVfU1RBVF9BRERSLAorCQlSRUdfQTZYWF9DUF9TUUVfU1RBVF9E QVRBLCAweDMzIH0sCisJeyAiQ1BfRFJBV19TVEFURSIsIFJFR19BNlhYX0NQX0RSQVdfU1RBVEVf QUREUiwKKwkJUkVHX0E2WFhfQ1BfRFJBV19TVEFURV9EQVRBLCAweDEwMCB9LAorCXsgIkNQX1VD T0RFX0RCR19EQVRBIiwgUkVHX0E2WFhfQ1BfU1FFX1VDT0RFX0RCR19BRERSLAorCQlSRUdfQTZY WF9DUF9TUUVfVUNPREVfREJHX0RBVEEsIDB4NjAwMCB9LAorCXsgIkNQX1JPUSIsIFJFR19BNlhY X0NQX1JPUV9EQkdfQUREUiwKKwkJUkVHX0E2WFhfQ1BfUk9RX0RCR19EQVRBLCAweDQwMCB9LAor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X2luZGV4ZWRfcmVnaXN0ZXJzIGE2eHhfY3Bf bWVtcG9vbF9pbmRleGVkID0geworCSJDUF9NRU1QT09PTCIsIFJFR19BNlhYX0NQX01FTV9QT09M X0RCR19BRERSLAorCQlSRUdfQTZYWF9DUF9NRU1fUE9PTF9EQkdfREFUQSwgMHgyMDYwLAorfTsK KworI2RlZmluZSBERUJVR0JVUyhfaWQsIF9jb3VudCkgeyAuaWQgPSBfaWQsIC5uYW1lID0gI19p ZCwgLmNvdW50ID0gX2NvdW50IH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X2RlYnVnYnVz X2Jsb2NrIHsKKwljb25zdCBjaGFyICpuYW1lOworCXUzMiBpZDsKKwl1MzIgY291bnQ7Cit9IGE2 eHhfZGVidWdidXNfYmxvY2tzW10gPSB7CisJREVCVUdCVVMoQTZYWF9EQkdCVVNfQ1AsIDB4MTAw KSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19SQkJNLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9E QkdCVVNfSExTUSwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1VDSEUsIDB4MTAwKSwK KwlERUJVR0JVUyhBNlhYX0RCR0JVU19EUE0sIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JV U19URVNTLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfUEMsIDB4MTAwKSwKKwlERUJV R0JVUyhBNlhYX0RCR0JVU19WRkRQLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVlBD LCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVFNFLCAweDEwMCksCisJREVCVUdCVVMo QTZYWF9EQkdCVVNfUkFTLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVlNDLCAweDEw MCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfQ09NLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9E QkdCVVNfTFJaLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfQTJELCAweDEwMCksCisJ REVCVUdCVVMoQTZYWF9EQkdCVVNfQ0NVRkNIRSwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJH QlVTX1JCUCwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX0RDUywgMHgxMDApLAorCURF QlVHQlVTKEE2WFhfREJHQlVTX0RCR0MsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19H TVVfR1gsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19UUEZDSEUsIDB4MTAwKSwKKwlE RUJVR0JVUyhBNlhYX0RCR0JVU19HUEMsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19M QVJDLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfSExTUV9TUFRQLCAweDEwMCksCisJ REVCVUdCVVMoQTZYWF9EQkdCVVNfUkJfMCwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVT X1JCXzEsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19VQ0hFX1dSQVBQRVIsIDB4MTAw KSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19DQ1VfMCwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhf REJHQlVTX0NDVV8xLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVkZEXzAsIDB4MTAw KSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19WRkRfMSwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhf REJHQlVTX1ZGRF8yLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVkZEXzMsIDB4MTAw KSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19TUF8wLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9E QkdCVVNfU1BfMSwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1RQTDFfMCwgMHgxMDAp LAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1RQTDFfMSwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhf REJHQlVTX1RQTDFfMiwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1RQTDFfMywgMHgx MDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X2RlYnVnYnVzX2Jsb2NrIGE2eHhf Y3hfZGVidWdidXNfYmxvY2tzW10gPSB7CisJREVCVUdCVVMoQTZYWF9EQkdCVVNfR01VX0NYLCAw eDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfQ1gsIDB4MTAwKSwKK307CisKKyNlbmRpZgot LSAKMi4xOC4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K