From mboxrd@z Thu Jan 1 00:00:00 1970 From: John.C.Harrison@Intel.com Subject: [RFC 07/39] drm/i915: Start of GPU scheduler Date: Fri, 17 Jul 2015 15:33:16 +0100 Message-ID: <1437143628-6329-8-git-send-email-John.C.Harrison@Intel.com> References: <1437143628-6329-1-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 088226E4EE for ; Fri, 17 Jul 2015 07:33:59 -0700 (PDT) In-Reply-To: <1437143628-6329-1-git-send-email-John.C.Harrison@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KCkluaXRpYWwg Y3JlYXRpb24gb2Ygc2NoZWR1bGVyIHNvdXJjZSBmaWxlcy4gTm90ZSB0aGF0IHRoaXMgcGF0Y2gg aW1wbGVtZW50cyBtb3N0Cm9mIHRoZSBzY2hlZHVsZXIgZnVuY3Rpb25hbGl0eSBidXQgZG9lcyBu b3QgaG9vayBpdCBpbiB0byB0aGUgZHJpdmVyIHlldC4gSXQKYWxzbyBsZWF2ZXMgdGhlIHNjaGVk dWxlciBjb2RlIGluICdwYXNzIHRocm91Z2gnIG1vZGUgc28gdGhhdCBldmVuIHdoZW4gaXQgaXMK aG9va2VkIGluLCBpdCB3aWxsIG5vdCBhY3R1YWxseSBkbyB2ZXJ5IG11Y2guIFRoaXMgYWxsb3dz IHRoZSBob29rcyB0byBiZSBhZGRlZApvbmUgYXQgYSB0aW1lIGluIGJ5dGUgc2l6ZSBjaHVua3Mg YW5kIG9ubHkgd2hlbiB0aGUgc2NoZWR1bGVyIGlzIGZpbmFsbHkgZW5hYmxlZAphdCB0aGUgZW5k IGRvZXMgYW55dGhpbmcgc3RhcnQgaGFwcGVuaW5nLgoKVGhlIGdlbmVyYWwgdGhlb3J5IG9mIG9w ZXJhdGlvbiBpcyB0aGF0IHdoZW4gYmF0Y2ggYnVmZmVycyBhcmUgc3VibWl0dGVkIHRvIHRoZQpk cml2ZXIsIHRoZSBleGVjYnVmZmVyKCkgY29kZSBhc3NpZ25zIGEgdW5pcXVlIHJlcXVlc3QgYW5k IHRoZW4gcGFja2FnZXMgdXAgYWxsCnRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBleGVjdXRl IHRoZSBiYXRjaCBidWZmZXIgYXQgYSBsYXRlciB0aW1lLiBUaGlzCnBhY2thZ2UgaXMgZ2l2ZW4g b3ZlciB0byB0aGUgc2NoZWR1bGVyIHdoaWNoIGFkZHMgaXQgdG8gYW4gaW50ZXJuYWwgbm9kZSBs aXN0LgpUaGUgc2NoZWR1bGVyIGFsc28gc2NhbnMgdGhlIGxpc3Qgb2Ygb2JqZWN0cyBhc3NvY2lh dGVkIHdpdGggdGhlIGJhdGNoIGJ1ZmZlcgphbmQgY29tcGFyZXMgdGhlbSBhZ2FpbnN0IHRoZSBv YmplY3RzIGFscmVhZHkgaW4gdXNlIGJ5IG90aGVyIGJ1ZmZlcnMgaW4gdGhlCm5vZGUgbGlzdC4g SWYgbWF0Y2hlcyBhcmUgZm91bmQgdGhlbiB0aGUgbmV3IGJhdGNoIGJ1ZmZlciBub2RlIGlzIG1h cmtlZCBhcwpiZWluZyBkZXBlbmRlbnQgdXBvbiB0aGUgbWF0Y2hpbmcgbm9kZS4gVGhlIHNhbWUg aXMgZG9uZSBmb3IgdGhlIGNvbnRleHQgb2JqZWN0LgpUaGUgc2NoZWR1bGVyIGFsc28gYnVtcHMg dXAgdGhlIHByaW9yaXR5IG9mIHN1Y2ggbWF0Y2hpbmcgbm9kZXMgb24gdGhlIGdyb3VuZHMKdGhh dCB0aGUgbW9yZSBkZXBlbmRlbmNpZXMgYSBnaXZlbiBiYXRjaCBidWZmZXIgaGFzIHRoZSBtb3Jl IGltcG9ydGFudCBpdCBpcwpsaWtlbHkgdG8gYmUuCgpUaGUgc2NoZWR1bGVyIGFpbXMgdG8gaGF2 ZSBhIGdpdmVuICh0dW5lYWJsZSkgbnVtYmVyIG9mIGJhdGNoIGJ1ZmZlcnMgaW4gZmxpZ2h0Cm9u IHRoZSBoYXJkd2FyZSBhdCBhbnkgZ2l2ZW4gdGltZS4gSWYgZmV3ZXIgdGhhbiB0aGlzIGFyZSBj dXJyZW50bHkgZXhlY3V0aW5nCndoZW4gYSBuZXcgbm9kZSBpcyBxdWV1ZWQsIHRoZW4gdGhlIG5v ZGUgaXMgcGFzc2VkIHN0cmFpZ2h0IHRocm91Z2ggdG8gdGhlCnN1Ym1pdCBmdW5jdGlvbi4gT3Ro ZXJ3aXNlIGl0IGlzIHNpbXBseSBhZGRlZCB0byB0aGUgcXVldWUgYW5kIHRoZSBkcml2ZXIKcmV0 dXJucyBiYWNrIHRvIHVzZXIgbGFuZC4KCkFzIGVhY2ggYmF0Y2ggYnVmZmVyIGNvbXBsZXRlcywg aXQgcmFpc2VzIGFuIGludGVycnVwdCB3aGljaCB3YWtlcyB1cCB0aGUKc2NoZWR1bGVyLiBOb3Rl IHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIG11bHRpcGxlIGJ1ZmZlcnMgdG8gY29tcGxldGUgYmVm b3JlIHRoZQpJUlEgaGFuZGxlciBnZXRzIHRvIHJ1bi4gRnVydGhlciwgaXQgaXMgcG9zc2libGUg Zm9yIHRoZSBzZXFubyB2YWx1ZXMgdG8gYmUKdW4tb3JkZXJlZCAocGFydGljdWxhcmx5IG9uY2Ug cHJlLWVtcHRpb24gaXMgZW5hYmxlZCkuIEhvd2V2ZXIsIHRoZSBzY2hlZHVsZXIKa2VlcHMgdGhl IGxpc3Qgb2YgZXhlY3V0aW5nIGJ1ZmZlcnMgaW4gb3JkZXIgb2YgaGFyZHdhcmUgc3VibWlzc2lv bi4gVGh1cyBpdCBjYW4Kc2NhbiB0aHJvdWdoIHRoZSBsaXN0IHVudGlsIGEgbWF0Y2hpbmcgc2Vx bm8gaXMgZm91bmQgYW5kIHRoZW4gbWFyayBhbGwgaW4KZmxpZ2h0IG5vZGVzIGZyb20gdGhhdCBw b2ludCBvbiBhcyBjb21wbGV0ZWQuCgpBIGRlZmVycmVkIHdvcmsgcXVldWUgaXMgYWxzbyBwb2tl ZCBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFdoZW4gdGhpcyB3YWtlcyB1cAppdCBjYW4gZG8g bW9yZSBpbnZvbHZlZCBwcm9jZXNzaW5nIHN1Y2ggYXMgYWN0dWFsbHkgcmVtb3ZpbmcgY29tcGxl dGVkIG5vZGVzCmZyb20gdGhlIHF1ZXVlIGFuZCBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMgYXNz b2NpYXRlZCB3aXRoIHRoZW0gKGludGVybmFsCm1lbW9yeSBhbGxvY2F0aW9ucywgRFJNIG9iamVj dCByZWZlcmVuY2VzLCBjb250ZXh0IHJlZmVyZW5jZSwgZXRjLikuIFRoZSB3b3JrCmhhbmRsZXIg YWxzbyBjaGVja3MgdGhlIGluIGZsaWdodCBjb3VudCBhbmQgY2FsbHMgdGhlIHN1Ym1pc3Npb24g Y29kZSBpZiBhIG5ldwpzbG90IGhhcyBhcHBlYXJlZC4KCldoZW4gdGhlIHNjaGVkdWxlcidzIHN1 Ym1pdCBjb2RlIGlzIGNhbGxlZCwgaXQgc2NhbnMgdGhlIHF1ZXVlZCBub2RlIGxpc3QgZm9yCnRo ZSBoaWdoZXN0IHByaW9yaXR5IG5vZGUgdGhhdCBoYXMgbm8gdW5tZXQgZGVwZW5kZW5jaWVzLiBO b3RlIHRoYXQgdGhlCmRlcGVuZGVuY3kgY2FsY3VsYXRpb24gaXMgY29tcGxleCBhcyBpdCBtdXN0 IHRha2UgaW50ZXItcmluZyBkZXBlbmRlbmNpZXMgYW5kCnBvdGVudGlhbCBwcmVlbXB0aW9ucyBp bnRvIGFjY291bnQuIE5vdGUgYWxzbyB0aGF0IGluIHRoZSBmdXR1cmUgdGhpcyB3aWxsIGJlCmV4 dGVuZGVkIHRvIGluY2x1ZGUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHN1Y2ggYXMgdGhlIEFuZHJv aWQgTmF0aXZlIFN5bmMgZmlsZQpkZXNjcmlwdG9ycyBhbmQvb3IgdGhlIGxpbnV4IGRtYS1idWZm IHN5bmNocm9uaXNhdGlvbiBzY2hlbWUuCgpJZiBhIHN1aXRhYmxlIG5vZGUgaXMgZm91bmQgdGhl biBpdCBpcyBzZW50IHRvIGV4ZWNidWZmX2ZpbmFsKCkgZm9yIHN1Ym1pc3Npb24KdG8gdGhlIGhh cmR3YXJlLiBUaGUgaW4gZmxpZ2h0IGNvdW50IGlzIHRoZW4gcmUtY2hlY2tlZCBhbmQgYSBuZXcg bm9kZSBwb3BwZWQKZnJvbSB0aGUgbGlzdCBpZiBhcHByb3ByaWF0ZS4KCk5vdGUgdGhhdCB0aGlz IHBhdGNoIGRvZXMgbm90IGltcGxlbWVudCBwcmUtZW1wdGl2ZSBzY2hlZHVsaW5nLiBPbmx5IGJh c2ljCnNjaGVkdWxpbmcgYnkgcmUtb3JkZXJpbmcgYmF0Y2ggYnVmZmVyIHN1Ym1pc3Npb24gaXMg Y3VycmVudGx5IGltcGxlbWVudGVkLgoKQ2hhbmdlLUlkOiBJMWUwOGY1OWU2NTBhM2MyYmJhYWE5 ZGU3NjI3ZGEzMzg0OWIwNjEwNgpGb3I6IFZJWi0xNTg3ClNpZ25lZC1vZmYtYnk6IEpvaG4gSGFy cmlzb24gPEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oICAgICAgIHwgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAg fCAgIDUgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYyB8IDc3NiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3NjaGVkdWxlci5oIHwgIDkxICsrKysKIDUgZmlsZXMgY2hhbmdlZCwgODc3IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxl ci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVs ZXIuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNDdhNzQxMTQuLmMzNjdiMzkgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlCkBAIC05LDYgKzksNyBAQCBjY2ZsYWdzLXkgOj0gLVdlcnJvcgogIyBjb3Jl IGRyaXZlciBjb2RlCiBpOTE1LXkgOj0gaTkxNV9kcnYubyBcCiAJICBpOTE1X3BhcmFtcy5vIFwK KwkgIGk5MTVfc2NoZWR1bGVyLm8gXAogICAgICAgICAgIGk5MTVfc3VzcGVuZC5vIFwKIAkgIGk5 MTVfc3lzZnMubyBcCiAJICBpbnRlbF9wbS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4 IGE2ODA3NzguLjdkMmE0OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTcwMCw2ICsx NzAwLDggQEAgc3RydWN0IGk5MTVfZXhlY2J1ZmZlcl9wYXJhbXMgewogCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAgICAgKnJlcXVlc3Q7CiB9OwogCitzdHJ1Y3QgaTkxNV9zY2hlZHVsZXI7 CisKIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owog CXN0cnVjdCBrbWVtX2NhY2hlICpvYmplY3RzOwpAQCAtMTkzMiw2ICsxOTM0LDggQEAgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgewogCiAJc3RydWN0IGk5MTVfcnVudGltZV9wbSBwbTsKIAorCXN0 cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyOworCiAJLyogQWJzdHJhY3QgdGhlIHN1Ym1p c3Npb24gbWVjaGFuaXNtIChsZWdhY3kgcmluZ2J1ZmZlciBvciBleGVjbGlzdHMpIGF3YXkgKi8K IAlzdHJ1Y3QgewogCQlpbnQgKCpleGVjYnVmX3N1Ym1pdCkoc3RydWN0IGk5MTVfZXhlY2J1ZmZl cl9wYXJhbXMgKnBhcmFtcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDBjNDA3YWUuLjNm YmM2ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNDAsNiArNDAsNyBAQAogI2lmZGVm IENPTkZJR19TWU5DCiAjaW5jbHVkZSA8Li4vZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luYy5o PgogI2VuZGlmCisjaW5jbHVkZSAiaTkxNV9zY2hlZHVsZXIuaCIKIAogI2RlZmluZSBSUV9CVUdf T04oZXhwcikKIApAQCAtNTM5OCw2ICs1Mzk5LDEwIEBAIGk5MTVfZ2VtX2luaXRfaHcoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKIAogCWk5MTVfZ2VtX2luaXRfc3dpenpsaW5nKGRldik7CiAKKwly ZXQgPSBpOTE1X3NjaGVkdWxlcl9pbml0KGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KwogCS8qCiAJICogQXQgbGVhc3QgODMwIGNhbiBsZWF2ZSBzb21lIG9mIHRoZSB1bnVzZWQgcmlu Z3MKIAkgKiAiYWN0aXZlIiAoaWUuIGhlYWQgIT0gdGFpbCkgYWZ0ZXIgcmVzdW1lIHdoaWNoCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi43MWQ4ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zY2hlZHVsZXIuYwpAQCAtMCwwICsxLDc3NiBAQAorLyoKKyAqIENvcHlyaWdodCAo YykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVk ZSAiaW50ZWxfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9zY2hlZHVsZXIuaCIKKworc3RhdGljIGlu dCAgICAgICAgIGk5MTVfc2NoZWR1bGVyX2ZseV9ub2RlKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9x dWV1ZV9lbnRyeSAqbm9kZSk7CitzdGF0aWMgaW50ICAgICAgICAgaTkxNV9zY2hlZHVsZXJfcmVt b3ZlX2RlcGVuZGVudChzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKKwkJCQkJCSAg IHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqcmVtb3ZlKTsKK3N0YXRpYyBpbnQg ICAgICAgICBpOTE1X3NjaGVkdWxlcl9zdWJtaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZywKKwkJCQkJIGJvb2wgaXNfbG9ja2VkKTsKK3N0YXRpYyB1aW50MzJfdCAgICBpOTE1X3NjaGVk dWxlcl9jb3VudF9mbHlpbmcoc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIsCisJCQkJ CSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKK3N0YXRpYyB2b2lkICAgICAg ICBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wX2NsZWFyKHN0cnVjdCBpOTE1X3NjaGVkdWxl ciAqc2NoZWR1bGVyKTsKK3N0YXRpYyBpbnQgICAgICAgICBpOTE1X3NjaGVkdWxlcl9wcmlvcml0 eV9idW1wKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCQkJc3RydWN0IGk5 MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICp0YXJnZXQsCisJCQkJCQl1aW50MzJfdCBidW1wKTsK KworaW50IGk5MTVfc2NoZWR1bGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0 cnVjdCBpOTE1X3NjaGVkdWxlciAgICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2NoZWR1bGVyOwor CWludCAgICAgICAgICAgICAgICAgICAgIHI7CisKKwlpZiAoc2NoZWR1bGVyKQorCQlyZXR1cm4g MDsKKworCXNjaGVkdWxlciA9IGt6YWxsb2Moc2l6ZW9mKCpzY2hlZHVsZXIpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIXNjaGVkdWxlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5p dCgmc2NoZWR1bGVyLT5sb2NrKTsKKworCWZvciAociA9IDA7IHIgPCBJOTE1X05VTV9SSU5HUzsg cisrKQorCQlJTklUX0xJU1RfSEVBRCgmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JdKTsKKworCXNj aGVkdWxlci0+aW5kZXggPSAxOworCisJLyogRGVmYXVsdCB0dW5pbmcgdmFsdWVzOiAqLworCXNj aGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4ICAgICA9IH4wVTsKKwlzY2hlZHVsZXItPnByaW9y aXR5X2xldmVsX3ByZWVtcHQgPSA5MDA7CisJc2NoZWR1bGVyLT5taW5fZmx5aW5nICAgICAgICAg ICAgID0gMjsKKworCWRldl9wcml2LT5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CisKKwlyZXR1cm4g MDsKK30KKworaW50IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2V4ZWNidWZmZXIoc3RydWN0IGk5MTVf c2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpxZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBxZS0+cGFyYW1zLmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfc2No ZWR1bGVyICAgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7CisJc3RydWN0IGludGVs X2VuZ2luZV9jcyAgKnJpbmcgPSBxZS0+cGFyYW1zLnJpbmc7CisJc3RydWN0IGk5MTVfc2NoZWR1 bGVyX3F1ZXVlX2VudHJ5ICAqbm9kZTsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50 cnkgICp0ZXN0OworCXN0cnVjdCB0aW1lc3BlYyAgICAgc3RhbXA7CisJdW5zaWduZWQgbG9uZyAg ICAgICBmbGFnczsKKwlib29sICAgICAgICAgICAgICAgIG5vdF9mbHlpbmcsIGZvdW5kOworCWlu dCAgICAgICAgICAgICAgICAgaSwgaiwgcjsKKwlpbnQgICAgICAgICAgICAgICAgIGluY29tcGxl dGUgPSAwOworCisJQlVHX09OKCFzY2hlZHVsZXIpOworCisJaWYgKDEvKmk5MTUuc2NoZWR1bGVy X292ZXJyaWRlICYgaTkxNV9zb19kaXJlY3Rfc3VibWl0Ki8pIHsKKwkJaW50IHJldDsKKworCQlx ZS0+c2NoZWR1bGVyX2luZGV4ID0gc2NoZWR1bGVyLT5pbmRleCsrOworCisJCXNjaGVkdWxlci0+ ZmxhZ3NbcWUtPnBhcmFtcy5yaW5nLT5pZF0gfD0gaTkxNV9zZl9zdWJtaXR0aW5nOworCQlyZXQg PSBkZXZfcHJpdi0+Z3QuZXhlY2J1Zl9maW5hbCgmcWUtPnBhcmFtcyk7CisJCXNjaGVkdWxlci0+ ZmxhZ3NbcWUtPnBhcmFtcy5yaW5nLT5pZF0gJj0gfmk5MTVfc2Zfc3VibWl0dGluZzsKKworCQkv KgorCQkgKiBEb24ndCBkbyBhbnkgY2xlYW4gdXAgb24gZmFpbHVyZSBiZWNhdXNlIHRoZSBjYWxs ZXIgd2lsbAorCQkgKiBkbyBpdCBhbGwgYW55d2F5LgorCQkgKi8KKwkJaWYgKHJldCkKKwkJCXJl dHVybiByZXQ7CisKKwkJLyogRnJlZSBldmVyeXRoaW5nIHRoYXQgaXMgb3duZWQgYnkgdGhlIFFF IHN0cnVjdHVyZTogKi8KKwkJa2ZyZWUocWUtPnBhcmFtcy5jbGlwcmVjdHMpOworCQlpZiAocWUt PnBhcmFtcy5kaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKQorCQkJaTkxNV9n ZW1fZXhlY2J1ZmZfcmVsZWFzZV9iYXRjaF9vYmoocWUtPnBhcmFtcy5iYXRjaF9vYmopOworCisJ CXJldHVybiAwOworCX0KKworCWdldHJhd21vbm90b25pYygmc3RhbXApOworCisJbm9kZSA9IGtt YWxsb2Moc2l6ZW9mKCpub2RlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFub2RlKQorCQlyZXR1cm4g LUVOT01FTTsKKworCSpub2RlID0gKnFlOworCUlOSVRfTElTVF9IRUFEKCZub2RlLT5saW5rKTsK Kwlub2RlLT5zdGF0dXMgPSBpOTE1X3Nxc19xdWV1ZWQ7CisJbm9kZS0+c3RhbXAgID0gc3RhbXA7 CisJaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uobm9kZS0+cGFyYW1zLnJlcXVlc3QpOworCisJ LyogTmVlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBpbmNvbXBsZXRlIGVudHJpZXMgaW4g dGhlIGxpc3QgYXMKKwkgKiB0aGF0IHdpbGwgYmUgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgZGVw ZW5kZW5jeSBsaXN0LgorCSAqCisJICogTm90ZSB0aGF0IHRoZSBhbGxvY2F0aW9uIG11c3Qgbm90 IGJlIG1hZGUgd2l0aCB0aGUgc3BpbmxvY2sgYWNxdWlyZWQKKwkgKiBhcyBrbWFsbG9jIGNhbiBz bGVlcC4gSG93ZXZlciwgdGhlIHVubG9jay9yZWxvY2sgaXMgc2FmZSBiZWNhdXNlIG5vCisJICog bmV3IGVudHJpZXMgY2FuIGJlIHF1ZXVlZCB1cCBkdXJpbmcgdGhlIHVubG9jayBhcyB0aGUgaTkx NSBkcml2ZXIKKwkgKiBtdXRleCBpcyBzdGlsbCBoZWxkLiBFbnRyaWVzIGNvdWxkIGJlIHJlbW92 ZWQgZnJvbSB0aGUgbGlzdCBidXQgdGhhdAorCSAqIGp1c3QgbWVhbnMgdGhlIGRlcF9saXN0IHdp bGwgYmUgb3Zlci1hbGxvY2F0ZWQgd2hpY2ggaXMgZmluZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJx c2F2ZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7CisJZm9yIChyID0gMDsgciA8IEk5MTVfTlVN X1JJTkdTOyByKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZXN0LCAmc2NoZWR1bGVyLT5u b2RlX3F1ZXVlW3JdLCBsaW5rKSB7CisJCQlpZiAoSTkxNV9TUVNfSVNfQ09NUExFVEUodGVzdCkp CisJCQkJY29udGludWU7CisKKwkJCWluY29tcGxldGUrKzsKKwkJfQorCX0KKworCS8qIFRlbXBv cmFyaWx5IHVubG9jayB0byBhbGxvY2F0ZSBtZW1vcnk6ICovCisJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7CisJaWYgKGluY29tcGxldGUpIHsKKwkJbm9k ZS0+ZGVwX2xpc3QgPSBrbWFsbG9jKHNpemVvZihub2RlLT5kZXBfbGlzdFswXSkgKiBpbmNvbXBs ZXRlLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmICghbm9kZS0+ZGVwX2xpc3QpIHsKKwkJCWtm cmVlKG5vZGUpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9IGVsc2UKKwkJbm9kZS0+ZGVw X2xpc3QgPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkdWxlci0+bG9jaywgZmxh Z3MpOworCW5vZGUtPm51bV9kZXBzID0gMDsKKworCWlmIChub2RlLT5kZXBfbGlzdCkgeworCQlm b3IgKHIgPSAwOyByIDwgSTkxNV9OVU1fUklOR1M7IHIrKykgeworCQkJbGlzdF9mb3JfZWFjaF9l bnRyeSh0ZXN0LCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JdLCBsaW5rKSB7CisJCQkJaWYgKEk5 MTVfU1FTX0lTX0NPTVBMRVRFKHRlc3QpKQorCQkJCQljb250aW51ZTsKKworCQkJCS8qCisJCQkJ ICogQmF0Y2hlcyBvbiB0aGUgc2FtZSByaW5nIGZvciB0aGUgc2FtZQorCQkJCSAqIGNvbnRleHQg bXVzdCBiZSBrZXB0IGluIG9yZGVyLgorCQkJCSAqLworCQkJCWZvdW5kID0gKG5vZGUtPnBhcmFt cy5jdHggPT0gdGVzdC0+cGFyYW1zLmN0eCkgJiYKKwkJCQkJKG5vZGUtPnBhcmFtcy5yaW5nID09 IHRlc3QtPnBhcmFtcy5yaW5nKTsKKworCQkJCS8qCisJCQkJICogQmF0Y2hlcyB3b3JraW5nIG9u IHRoZSBzYW1lIG9iamVjdHMgbXVzdAorCQkJCSAqIGJlIGtlcHQgaW4gb3JkZXIuCisJCQkJICov CisJCQkJZm9yIChpID0gMDsgKGkgPCBub2RlLT5udW1fb2JqcykgJiYgIWZvdW5kOyBpKyspIHsK KwkJCQkJZm9yIChqID0gMDsgaiA8IHRlc3QtPm51bV9vYmpzOyBqKyspIHsKKwkJCQkJCWlmIChu b2RlLT5zYXZlZF9vYmplY3RzW2ldLm9iaiAhPQorCQkJCQkJCSAgICB0ZXN0LT5zYXZlZF9vYmpl Y3RzW2pdLm9iaikKKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkJZm91bmQgPSB0cnVlOworCQkJ CQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoZm91bmQpIHsKKwkJCQkJbm9kZS0+ ZGVwX2xpc3Rbbm9kZS0+bnVtX2RlcHNdID0gdGVzdDsKKwkJCQkJbm9kZS0+bnVtX2RlcHMrKzsK KwkJCQl9CisJCQl9CisJCX0KKworCQlCVUdfT04obm9kZS0+bnVtX2RlcHMgPiBpbmNvbXBsZXRl KTsKKwl9CisKKwlpZiAobm9kZS0+cHJpb3JpdHkgJiYgbm9kZS0+bnVtX2RlcHMpIHsKKwkJaTkx NV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcF9jbGVhcihzY2hlZHVsZXIpOworCisJCWZvciAoaSA9 IDA7IGkgPCBub2RlLT5udW1fZGVwczsgaSsrKQorCQkJaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlf YnVtcChzY2hlZHVsZXIsCisJCQkJCW5vZGUtPmRlcF9saXN0W2ldLCBub2RlLT5wcmlvcml0eSk7 CisJfQorCisJbm9kZS0+c2NoZWR1bGVyX2luZGV4ID0gc2NoZWR1bGVyLT5pbmRleCsrOworCisJ bGlzdF9hZGRfdGFpbCgmbm9kZS0+bGluaywgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5nLT5p ZF0pOworCisJbm90X2ZseWluZyA9IGk5MTVfc2NoZWR1bGVyX2NvdW50X2ZseWluZyhzY2hlZHVs ZXIsIHJpbmcpIDwKKwkJCQkJCSBzY2hlZHVsZXItPm1pbl9mbHlpbmc7CisKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCWlmIChub3RfZmx5aW5n KQorCQlpOTE1X3NjaGVkdWxlcl9zdWJtaXQocmluZywgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBpOTE1X3NjaGVkdWxlcl9mbHlfbm9kZShzdHJ1Y3QgaTkxNV9zY2hlZHVs ZXJfcXVldWVfZW50cnkgKm5vZGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gbm9kZS0+cGFyYW1zLmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfc2NoZWR1 bGVyICAgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7CisJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAgKnJpbmc7CisKKwlCVUdfT04oIXNjaGVkdWxlcik7CisJQlVHX09OKCFub2RlKTsK KwlCVUdfT04obm9kZS0+c3RhdHVzICE9IGk5MTVfc3FzX3BvcHBlZCk7CisKKwlyaW5nID0gbm9k ZS0+cGFyYW1zLnJpbmc7CisKKwkvKiBBZGQgdGhlIG5vZGUgKHdoaWNoIHNob3VsZCBjdXJyZW50 bHkgYmUgaW4gc3RhdGUgbm9uZSkgdG8gdGhlIGZyb250CisJICogb2YgdGhlIHF1ZXVlLiBUaGlz IGVuc3VyZSB0aGF0IGZseWluZyBub2RlcyBhcmUgYWx3YXlzIGhlbGQgaW4KKwkgKiBoYXJkd2Fy ZSBzdWJtaXNzaW9uIG9yZGVyLiAqLworCWxpc3RfYWRkKCZub2RlLT5saW5rLCAmc2NoZWR1bGVy LT5ub2RlX3F1ZXVlW3JpbmctPmlkXSk7CisKKwlub2RlLT5zdGF0dXMgPSBpOTE1X3Nxc19mbHlp bmc7CisKKwlpZiAoIShzY2hlZHVsZXItPmZsYWdzW3JpbmctPmlkXSAmIGk5MTVfc2ZfaW50ZXJy dXB0c19lbmFibGVkKSkgeworCQlib29sICAgIHN1Y2Nlc3MgPSB0cnVlOworCisJCXN1Y2Nlc3Mg PSByaW5nLT5pcnFfZ2V0KHJpbmcpOworCQlpZiAoc3VjY2VzcykKKwkJCXNjaGVkdWxlci0+Zmxh Z3NbcmluZy0+aWRdIHw9IGk5MTVfc2ZfaW50ZXJydXB0c19lbmFibGVkOworCQllbHNlCisJCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5vZGVzIGFyZSBj b25zaWRlcmVkIHZhbGlkIGRlcGVuZGVuY2llcyBpZiB0aGV5IGFyZSBxdWV1ZWQgb24gYW55IHJp bmcgb3IKKyAqIGlmIHRoZXkgYXJlIGluIGZsaWdodCBvbiBhIGRpZmZlcmVudCByaW5nLiBJbiBm bGlnaHQgb24gdGhlIHNhbWUgcmluZyBpcyBubworICogbG9uZ2VyIGludGVyZXN0aW5nIGZvciBu b24tcHJlbXB0aXZlIG5vZGVzIGFzIHRoZSByaW5nIHNlcmlhbGlzZXMgZXhlY3V0aW9uLgorICog Rm9yIHByZS1lbXB0aW5nIG5vZGVzLCBhbGwgaW4gZmxpZ2h0IGRlcGVuZGVuY2llcyBhcmUgdmFs aWQgYXMgdGhleSBtdXN0IG5vdAorICogYmUganVtcGVkIGJ5IHRoZSBhY3Qgb2YgcHJlLWVtcHRp bmcuCisgKgorICogQW55dGhpbmcgdGhhdCBpcyBuZWl0aGVyIHF1ZXVlZCBub3IgZmx5aW5nIGlz IHVuaW50ZXJlc3RpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3NjaGVkdWxlcl9p c19kZXBlbmRlbmN5X3ZhbGlkKAorCQkJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5 ICpub2RlLCB1aW50MzJfdCBpZHgpCit7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2Vu dHJ5ICpkZXA7CisKKwlkZXAgPSBub2RlLT5kZXBfbGlzdFtpZHhdOworCWlmICghZGVwKQorCQly ZXR1cm4gZmFsc2U7CisKKwlpZiAoSTkxNV9TUVNfSVNfUVVFVUVEKGRlcCkpCisJCXJldHVybiB0 cnVlOworCisJaWYgKEk5MTVfU1FTX0lTX0ZMWUlORyhkZXApKSB7CisJCWlmIChub2RlLT5wYXJh bXMucmluZyAhPSBkZXAtPnBhcmFtcy5yaW5nKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0 dXJuIGZhbHNlOworfQorCitzdGF0aWMgdWludDMyX3QgaTkxNV9zY2hlZHVsZXJfY291bnRfZmx5 aW5nKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCQkgICAgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZykKK3sKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50 cnkgKm5vZGU7CisJdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGZseWluZyA9IDA7 CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZzY2hlZHVsZXItPm5vZGVfcXVldWVbcmlu Zy0+aWRdLCBsaW5rKQorCQlpZiAoSTkxNV9TUVNfSVNfRkxZSU5HKG5vZGUpKQorCQkJZmx5aW5n Kys7CisKKwlyZXR1cm4gZmx5aW5nOworfQorCisvKiBBZGQgYSBwb3BwZWQgbm9kZSBiYWNrIGlu IHRvIHRoZSBxdWV1ZS4gRm9yIGV4YW1wbGUsIGJlY2F1c2UgdGhlIHJpbmcgd2FzCisgKiBodW5n IHdoZW4gZXhlY2ZpbmFsKCkgd2FzIGNhbGxlZCBhbmQgdGh1cyB0aGUgcmluZyBzdWJtaXNzaW9u IG5lZWRzIHRvIGJlCisgKiByZXRyaWVkIGxhdGVyLiAqLworc3RhdGljIHZvaWQgaTkxNV9zY2hl ZHVsZXJfbm9kZV9yZXF1ZXVlKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9k ZSkKK3sKKwlCVUdfT04oIW5vZGUpOworCUJVR19PTighSTkxNV9TUVNfSVNfRkxZSU5HKG5vZGUp KTsKKworCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3FzX3F1ZXVlZDsKK30KKworLyogR2l2ZSB1cCBv biBhIHBvcHBlZCBub2RlIGNvbXBsZXRlbHkuIEZvciBleGFtcGxlLCBiZWNhdXNlIGl0IGlzIGNh dXNpbmcgdGhlCisgKiByaW5nIHRvIGhhbmcgb3IgaXMgdXNpbmcgc29tZSByZXNvdXJjZSB0aGF0 IG5vIGxvbmdlciBleGlzdHMuICovCitzdGF0aWMgdm9pZCBpOTE1X3NjaGVkdWxlcl9ub2RlX2tp bGwoc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlKQoreworCUJVR19PTigh bm9kZSk7CisJQlVHX09OKCFJOTE1X1NRU19JU19GTFlJTkcobm9kZSkpOworCisJbm9kZS0+c3Rh dHVzID0gaTkxNV9zcXNfZGVhZDsKK30KKworLyoKKyAqIFRoZSBiYXRjaCB0YWdnZWQgd2l0aCB0 aGUgaW5kaWNhdGVkIHNlcWVuY2UgbnVtYmVyIGhhcyBjb21wbGV0ZWQuCisgKiBTZWFyY2ggdGhl IHF1ZXVlIGZvciBpdCwgdXBkYXRlIGl0cyBzdGF0dXMgYW5kIHRob3NlIG9mIGFueSBiYXRjaGVz CisgKiBzdWJtaXR0ZWQgZWFybGllciwgd2hpY2ggbXVzdCBhbHNvIGhhdmUgY29tcGxldGVkIG9y IGJlZW4gcHJlZWVtcHRlZAorICogYXMgYXBwcm9wcmlhdGUuCisgKgorICogQ2FsbGVkIHdpdGgg c3BpbmxvY2sgYWxyZWFkeSBoZWxkLgorICovCitzdGF0aWMgdm9pZCBpOTE1X3NjaGVkdWxlcl9z ZXFub19jb21wbGV0ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCB1aW50MzJfdCBzZXFu bykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRl dl9wcml2YXRlOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAgICpzY2hlZHVsZXIgPSBkZXZfcHJp di0+c2NoZWR1bGVyOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZTsK Kwlib29sIGdvdF9jaGFuZ2VzID0gZmFsc2U7CisKKwkvKgorCSAqIEJhdGNoIGJ1ZmZlcnMgYXJl IGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IGluIGV4ZWN1dGlvbiBvcmRlciwKKwkgKiB0 aHVzIHNlcW5vIHZhbHVlcywgYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IGluY3JlbWVudGluZywg d2lsbCBiZQorCSAqIG1ldCBpbiBjb21wbGV0aW9uIG9yZGVyIHdoZW4gc2Nhbm5pbmcgdGhlIGxp c3QuIFNvIHdoZW4gYSBtYXRjaCBpcworCSAqIGZvdW5kLCBhbGwgc3Vic2VxdWVudCBlbnRyaWVz IG11c3QgaGF2ZSBhbHNvIHBvcHBlZCBvdXQuIENvbnZlcnNlbHksCisJICogaWYgYSBjb21wbGV0 ZWQgZW50cnkgaXMgZm91bmQgdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIHNjYW4gZnVydGhlci4K KwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZzY2hlZHVsZXItPm5vZGVfcXVldWVb cmluZy0+aWRdLCBsaW5rKSB7CisJCWlmIChJOTE1X1NRU19JU19DT01QTEVURShub2RlKSkKKwkJ CXJldHVybjsKKworCQlpZiAoc2Vxbm8gPT0gbm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5vKQor CQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBOQjogTG90cyBvZiBleHRyYSBzZXFub3MgZ2V0IGFk ZGVkIHRvIHRoZSByaW5nIHRvIHRyYWNrIHRoaW5ncworCSAqIGxpa2UgY2FjaGUgZmx1c2hlcyBh bmQgcGFnZSBmbGlwcy4gU28gZG9uJ3QgY29tcGxhaW4gYWJvdXQgaWYKKwkgKiBubyBub2RlIHdh cyBmb3VuZC4KKwkgKi8KKwlpZiAoJm5vZGUtPmxpbmsgPT0gJnNjaGVkdWxlci0+bm9kZV9xdWV1 ZVtyaW5nLT5pZF0pCisJCXJldHVybjsKKworCVdBUk5fT04oIUk5MTVfU1FTX0lTX0ZMWUlORyhu b2RlKSk7CisKKwkvKiBFdmVyeXRoaW5nIGZyb20gaGVyZSBjYW4gYmUgbWFya2VkIGFzIGRvbmU6 ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKG5vZGUsICZzY2hlZHVsZXItPm5vZGVfcXVl dWVbcmluZy0+aWRdLCBsaW5rKSB7CisJCS8qIENoZWNrIGlmIHRoZSBtYXJraW5nIGhhcyBhbHJl YWR5IGJlZW4gZG9uZTogKi8KKwkJaWYgKEk5MTVfU1FTX0lTX0NPTVBMRVRFKG5vZGUpKQorCQkJ YnJlYWs7CisKKwkJaWYgKCFJOTE1X1NRU19JU19GTFlJTkcobm9kZSkpCisJCQljb250aW51ZTsK KworCQkvKiBOb2RlIHdhcyBpbiBmbGlnaHQgc28gbWFyayBpdCBhcyBjb21wbGV0ZS4gKi8KKwkJ bm9kZS0+c3RhdHVzID0gaTkxNV9zcXNfY29tcGxldGU7CisJCWdvdF9jaGFuZ2VzID0gdHJ1ZTsK Kwl9CisKKwkvKiBTaG91bGQgc3VibWl0IG5ldyB3b3JrIGhlcmUgaWYgZmxpZ2h0IGxpc3QgaXMg ZW1wdHkgYnV0IHRoZSBEUk0KKwkgKiBtdXRleCBsb2NrIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUg aWYgYSAnX193YWl0X3JlcXVlc3QoKScgY2FsbCBpcworCSAqIGJsb2NraW5nIHRoZSBzeXN0ZW0u ICovCit9CisKK2ludCBpOTE1X3NjaGVkdWxlcl9oYW5kbGVfaXJxKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmlu Zy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgICAqc2NoZWR1bGVy ID0gZGV2X3ByaXYtPnNjaGVkdWxlcjsKKwl1bnNpZ25lZCBsb25nICAgICAgIGZsYWdzOworCXVp bnQzMl90ICAgICAgICAgICAgc2Vxbm87CisKKwlzZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5n LCBmYWxzZSk7CisKKwlpZiAoMS8qaTkxNS5zY2hlZHVsZXJfb3ZlcnJpZGUgJiBpOTE1X3NvX2Rp cmVjdF9zdWJtaXQqLykKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2Vxbm8gPT0gc2NoZWR1bGVyLT5s YXN0X2lycV9zZXFub1tyaW5nLT5pZF0pIHsKKwkJLyogV2h5IGFyZSB0aGVyZSBzb21ldGltZXMg bXVsdGlwbGUgaW50ZXJydXB0cyBwZXIgc2Vxbm8/ICovCisJCXJldHVybiAwOworCX0KKwlzY2hl ZHVsZXItPmxhc3RfaXJxX3NlcW5vW3JpbmctPmlkXSA9IHNlcW5vOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOworCWk5MTVfc2NoZWR1bGVyX3NlcW5vX2Nv bXBsZXRlKHJpbmcsIHNlcW5vKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZHVsZXIt PmxvY2ssIGZsYWdzKTsKKworCS8qIFhYWDogTmVlZCB0byBhbHNvIGNhbGwgaTkxNV9zY2hlZHVs ZXJfcmVtb3ZlKCkgdmlhIHdvcmsgaGFuZGxlci4gKi8KKworCXJldHVybiAwOworfQorCitpbnQg aTkxNV9zY2hlZHVsZXJfcmVtb3ZlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0 ZTsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgICAqc2NoZWR1bGVyID0gZGV2X3ByaXYtPnNjaGVk dWxlcjsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICpub2RlLCAqbm9kZV9u ZXh0OworCXVuc2lnbmVkIGxvbmcgICAgICAgZmxhZ3M7CisJaW50ICAgICAgICAgICAgICAgICBm bHlpbmcgPSAwLCBxdWV1ZWQgPSAwOworCWludCAgICAgICAgICAgICAgICAgcmV0ID0gMDsKKwli b29sICAgICAgICAgICAgICAgIGRvX3N1Ym1pdDsKKwl1aW50MzJfdCAgICAgICAgICAgIG1pbl9z ZXFubzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgIHJlbW92ZTsKKworCWlmIChsaXN0X2VtcHR5KCZz Y2hlZHVsZXItPm5vZGVfcXVldWVbcmluZy0+aWRdKSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7CisKKwkvKiAvaTkxNV9zY2hlZHVs ZXJfZHVtcF9sb2NrZWQocmluZywgInJlbW92ZS9wcmUiKTsvICovCisKKwkvKgorCSAqIEluIHRo ZSBjYXNlIHdoZXJlIHRoZSBzeXN0ZW0gaXMgaWRsZSwgc3RhcnRpbmcgJ21pbl9zZXFubycgZnJv bSBhIGJpZworCSAqIG51bWJlciB3aWxsIGNhdXNlIGFsbCBub2RlcyB0byBiZSByZW1vdmVkIGFz IHRoZXkgYXJlIG5vdyBiYWNrIHRvCisJICogYmVpbmcgaW4tb3JkZXIuIEhvd2V2ZXIsIHRoaXMg d2lsbCBiZSBhIHByb2JsZW0gaWYgdGhlIGxhc3Qgb25lIHRvCisJICogY29tcGxldGUgd2FzIGFj dHVhbGx5IG91dC1vZi1vcmRlciBhcyB0aGUgcmluZyBzZXFubyB2YWx1ZSB3aWxsIGJlCisJICog bG93ZXIgdGhhbiBvbmUgb3IgbW9yZSBjb21wbGV0ZWQgYnVmZmVycy4gVGh1cyBjb2RlIGxvb2tp bmcgZm9yIHRoZQorCSAqIGNvbXBsZXRpb24gb2Ygc2FpZCBidWZmZXJzIHdpbGwgd2FpdCBmb3Jl dmVyLgorCSAqIEluc3RlYWQsIHVzZSB0aGUgaGFyZHdhcmUgc2Vxbm8gYXMgdGhlIHN0YXJ0aW5n IHBvaW50LiBUaGlzIG1lYW5zCisJICogdGhhdCBzb21lIGJ1ZmZlcnMgbWlnaHQgYmUga2VwdCBh cm91bmQgZXZlbiBpbiBhIGNvbXBsZXRlbHkgaWRsZQorCSAqIHN5c3RlbSBidXQgaXQgc2hvdWxk IGd1YXJhbnRlZSB0aGF0IG5vLW9uZSBldmVyIGdldHMgY29uZnVzZWQgd2hlbgorCSAqIHdhaXRp bmcgZm9yIGJ1ZmZlciBjb21wbGV0aW9uLgorCSAqLworCW1pbl9zZXFubyA9IHJpbmctPmdldF9z ZXFubyhyaW5nLCB0cnVlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnNjaGVkdWxl ci0+bm9kZV9xdWV1ZVtyaW5nLT5pZF0sIGxpbmspIHsKKwkJaWYgKEk5MTVfU1FTX0lTX1FVRVVF RChub2RlKSkKKwkJCXF1ZXVlZCsrOworCQllbHNlIGlmIChJOTE1X1NRU19JU19GTFlJTkcobm9k ZSkpCisJCQlmbHlpbmcrKzsKKwkJZWxzZSBpZiAoSTkxNV9TUVNfSVNfQ09NUExFVEUobm9kZSkp CisJCQljb250aW51ZTsKKworCQlpZiAobm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5vID09IDAp CisJCQljb250aW51ZTsKKworCQlpZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKG5vZGUtPnBhcmFtcy5y ZXF1ZXN0LT5zZXFubywgbWluX3NlcW5vKSkKKwkJCW1pbl9zZXFubyA9IG5vZGUtPnBhcmFtcy5y ZXF1ZXN0LT5zZXFubzsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcmVtb3ZlKTsKKwlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbm9kZV9uZXh0LCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVl W3JpbmctPmlkXSwgbGluaykgeworCQkvKgorCQkgKiBPbmx5IHJlbW92ZSBjb21wbGV0ZWQgbm9k ZXMgd2hpY2ggaGF2ZSBhIGxvd2VyIHNlcW5vIHRoYW4KKwkJICogYWxsIHBlbmRpbmcgbm9kZXMu IFdoaWxlIHRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUKKwkJICogcmluZydzIHNlcW5v IGNvdW50aW5nIGJhY2t3YXJkcywgYWxsIGhpZ2hlciBidWZmZXJzIG11c3QKKwkJICogYmUgcmVt ZW1iZXJlZCBzbyB0aGF0IHRoZSAnaTkxNV9zZXFub19wYXNzZWQoKScgdGVzdCBjYW4KKwkJICog cmVwb3J0IHRoYXQgdGhleSBoYXZlIGluIGZhY3QgcGFzc2VkLgorCQkgKgorCQkgKiBOQjogVGhp cyBpcyBub3QgdHJ1ZSBmb3IgJ2RlYWQnIG5vZGVzLiBUaGUgR1BVIHJlc2V0IGNhdXNlcworCQkg KiB0aGUgc29mdHdhcmUgc2Vxbm8gdG8gcmVzdGFydCBmcm9tIGl0cyBpbml0aWFsIHZhbHVlLiBU aHVzCisJCSAqIHRoZSBkZWFkIG5vZGVzIG11c3QgYmUgcmVtb3ZlZCBldmVuIHRob3VnaCB0aGVp ciBzZXFubyB2YWx1ZXMKKwkJICogYXJlIHBvdGVudGlhbGx5IHZhc3RseSBncmVhdGVyIHRoYW4g dGhlIGN1cnJlbnQgcmluZyBzZXFuby4KKwkJICovCisJCWlmICghSTkxNV9TUVNfSVNfQ09NUExF VEUobm9kZSkpCisJCQljb250aW51ZTsKKworCQlpZiAobm9kZS0+c3RhdHVzICE9IGk5MTVfc3Fz X2RlYWQpIHsKKwkJCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChub2RlLT5wYXJhbXMucmVxdWVzdC0+ c2Vxbm8sIG1pbl9zZXFubykgJiYKKwkJCSAgICAobm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5v ICE9IG1pbl9zZXFubykpCisJCQkJY29udGludWU7CisJCX0KKworCQlsaXN0X2RlbCgmbm9kZS0+ bGluayk7CisJCWxpc3RfYWRkKCZub2RlLT5saW5rLCAmcmVtb3ZlKTsKKworCQkvKiBTdHJpcCB0 aGUgZGVwZW5kZW5jeSBpbmZvIHdoaWxlIHRoZSBtdXRleCBpcyBzdGlsbCBsb2NrZWQgKi8KKwkJ aTkxNV9zY2hlZHVsZXJfcmVtb3ZlX2RlcGVuZGVudChzY2hlZHVsZXIsIG5vZGUpOworCisJCWNv bnRpbnVlOworCX0KKworCS8qCisJICogTm8gaWRlYSB3aHkgYnV0IHRoaXMgc2VlbXMgdG8gY2F1 c2UgcHJvYmxlbXMgb2NjYXNpb25hbGx5LgorCSAqIE5vdGUgdGhhdCB0aGUgJ2lycV9wdXQnIGNv ZGUgaXMgaW50ZXJuYWxseSByZWZlcmVuY2UgY291bnRlZAorCSAqIGFuZCBzcGluX2xvY2tlZCBz byBpdCBzaG91bGQgYmUgc2FmZSB0byBjYWxsLgorCSAqLworCS8qaWYgKChzY2hlZHVsZXItPmZs YWdzW3JpbmctPmlkXSAmIGk5MTVfc2ZfaW50ZXJydXB0c19lbmFibGVkKSAmJgorCSAgICAoZmly c3RfZmxpZ2h0W3JpbmctPmlkXSA9PSBOVUxMKSkgeworCQlyaW5nLT5pcnFfcHV0KHJpbmcpOwor CQlzY2hlZHVsZXItPmZsYWdzW3JpbmctPmlkXSAmPSB+aTkxNV9zZl9pbnRlcnJ1cHRzX2VuYWJs ZWQ7CisJfSovCisKKwkvKiBMYXVuY2ggbW9yZSBwYWNrZXRzIG5vdz8gKi8KKwlkb19zdWJtaXQg PSAocXVldWVkID4gMCkgJiYgKGZseWluZyA8IHNjaGVkdWxlci0+bWluX2ZseWluZyk7CisKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCWlmIChk b19zdWJtaXQpCisJCXJldCA9IGk5MTVfc2NoZWR1bGVyX3N1Ym1pdChyaW5nLCB0cnVlKTsKKwor CXdoaWxlICghbGlzdF9lbXB0eSgmcmVtb3ZlKSkgeworCQlub2RlID0gbGlzdF9maXJzdF9lbnRy eSgmcmVtb3ZlLCB0eXBlb2YoKm5vZGUpLCBsaW5rKTsKKwkJbGlzdF9kZWwoJm5vZGUtPmxpbmsp OworCisJCS8qIFRoZSBiYXRjaCBidWZmZXIgbXVzdCBiZSB1bnBpbm5lZCBiZWZvcmUgaXQgaXMg dW5yZWZlcmVuY2VkCisJCSAqIG90aGVyd2lzZSB0aGUgdW5waW4gZmFpbHMgd2l0aCBhIG1pc3Np bmcgdm1hIT8gKi8KKwkJaWYgKG5vZGUtPnBhcmFtcy5kaXNwYXRjaF9mbGFncyAmIEk5MTVfRElT UEFUQ0hfU0VDVVJFKQorCQkJaTkxNV9nZW1fZXhlY2J1ZmZfcmVsZWFzZV9iYXRjaF9vYmoobm9k ZS0+cGFyYW1zLmJhdGNoX29iaik7CisKKwkJLyogRnJlZSBldmVyeXRoaW5nIHRoYXQgaXMgb3du ZWQgYnkgdGhlIG5vZGU6ICovCisJCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2Uobm9kZS0+ cGFyYW1zLnJlcXVlc3QpOworCQlrZnJlZShub2RlLT5wYXJhbXMuY2xpcHJlY3RzKTsKKwkJa2Zy ZWUobm9kZS0+ZGVwX2xpc3QpOworCQlrZnJlZShub2RlKTsKKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgdm9pZCBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wX2NsZWFyKHN0cnVj dCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyKQoreworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9x dWV1ZV9lbnRyeSAqbm9kZTsKKwlpbnQgaTsKKworCS8qCisJICogRW5zdXJlIGNpcmN1bGFyIGRl cGVuZGVuY2llcyBkb24ndCBjYXVzZSBwcm9ibGVtcyBhbmQgdGhhdCBhIGJ1bXAKKwkgKiBieSBv YmplY3QgdXNhZ2Ugb25seSBidW1wcyBlYWNoIHVzaW5nIGJ1ZmZlciBvbmNlOgorCSAqLworCWZv ciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50 cnkobm9kZSwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtpXSwgbGluaykKKwkJCW5vZGUtPmJ1bXBl ZCA9IGZhbHNlOworCX0KK30KKworc3RhdGljIGludCBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9i dW1wKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCQlzdHJ1Y3QgaTkxNV9z Y2hlZHVsZXJfcXVldWVfZW50cnkgKnRhcmdldCwKKwkJCQkJdWludDMyX3QgYnVtcCkKK3sKKwl1 aW50MzJfdCBuZXdfcHJpb3JpdHk7CisJaW50ICAgICAgaSwgY291bnQ7CisKKwlpZiAodGFyZ2V0 LT5wcmlvcml0eSA+PSBzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21heCkKKwkJcmV0dXJuIDE7 CisKKwlpZiAodGFyZ2V0LT5idW1wZWQpCisJCXJldHVybiAwOworCisJbmV3X3ByaW9yaXR5ID0g dGFyZ2V0LT5wcmlvcml0eSArIGJ1bXA7CisJaWYgKChuZXdfcHJpb3JpdHkgPD0gdGFyZ2V0LT5w cmlvcml0eSkgfHwKKwkgICAgKG5ld19wcmlvcml0eSA+IHNjaGVkdWxlci0+cHJpb3JpdHlfbGV2 ZWxfbWF4KSkKKwkJdGFyZ2V0LT5wcmlvcml0eSA9IHNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxf bWF4OworCWVsc2UKKwkJdGFyZ2V0LT5wcmlvcml0eSA9IG5ld19wcmlvcml0eTsKKworCWNvdW50 ID0gMTsKKwl0YXJnZXQtPmJ1bXBlZCA9IHRydWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0 LT5udW1fZGVwczsgaSsrKSB7CisJCWlmICghdGFyZ2V0LT5kZXBfbGlzdFtpXSkKKwkJCWNvbnRp bnVlOworCisJCWlmICh0YXJnZXQtPmRlcF9saXN0W2ldLT5idW1wZWQpCisJCQljb250aW51ZTsK KworCQljb3VudCArPSBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wKHNjaGVkdWxlciwKKwkJ CQkJCSAgICAgIHRhcmdldC0+ZGVwX2xpc3RbaV0sCisJCQkJCQkgICAgICBidW1wKTsKKwl9CisK KwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9zY2hlZHVsZXJfcG9wX2Zyb21f cXVldWVfbG9ja2VkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCisJCQkJICAgIHN0cnVj dCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqKnBvcF9ub2RlLAorCQkJCSAgICB1bnNpZ25l ZCBsb25nICpmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAgICAgICAgICAgICpk ZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVy ICAgICAgICAgICAgICAqc2NoZWR1bGVyID0gZGV2X3ByaXYtPnNjaGVkdWxlcjsKKwlzdHJ1Y3Qg aTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICpiZXN0OworCXN0cnVjdCBpOTE1X3NjaGVkdWxl cl9xdWV1ZV9lbnRyeSAgKm5vZGU7CisJaW50ICAgICByZXQ7CisJaW50ICAgICBpOworCWJvb2wJ YW55X3F1ZXVlZDsKKwlib29sCWhhc19sb2NhbCwgaGFzX3JlbW90ZSwgb25seV9yZW1vdGU7CisK KwkqcG9wX25vZGUgPSBOVUxMOworCXJldCA9IC1FTk9EQVRBOworCisJYW55X3F1ZXVlZCA9IGZh bHNlOworCW9ubHlfcmVtb3RlID0gZmFsc2U7CisJYmVzdCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KG5vZGUsICZzY2hlZHVsZXItPm5vZGVfcXVldWVbcmluZy0+aWRdLCBsaW5rKSB7 CisJCWlmICghSTkxNV9TUVNfSVNfUVVFVUVEKG5vZGUpKQorCQkJY29udGludWU7CisJCWFueV9x dWV1ZWQgPSB0cnVlOworCisJCWhhc19sb2NhbCAgPSBmYWxzZTsKKwkJaGFzX3JlbW90ZSA9IGZh bHNlOworCQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+bnVtX2RlcHM7IGkrKykgeworCQkJaWYgKCFp OTE1X3NjaGVkdWxlcl9pc19kZXBlbmRlbmN5X3ZhbGlkKG5vZGUsIGkpKQorCQkJCWNvbnRpbnVl OworCisJCQlpZiAobm9kZS0+ZGVwX2xpc3RbaV0tPnBhcmFtcy5yaW5nID09IG5vZGUtPnBhcmFt cy5yaW5nKQorCQkJCWhhc19sb2NhbCA9IHRydWU7CisJCQllbHNlCisJCQkJaGFzX3JlbW90ZSA9 IHRydWU7CisJCX0KKworCQlpZiAoaGFzX3JlbW90ZSAmJiAhaGFzX2xvY2FsKQorCQkJb25seV9y ZW1vdGUgPSB0cnVlOworCisJCWlmICghaGFzX2xvY2FsICYmICFoYXNfcmVtb3RlKSB7CisJCQlp ZiAoIWJlc3QgfHwKKwkJCSAgICAobm9kZS0+cHJpb3JpdHkgPiBiZXN0LT5wcmlvcml0eSkpCisJ CQkJYmVzdCA9IG5vZGU7CisJCX0KKwl9CisKKwlpZiAoYmVzdCkgeworCQlsaXN0X2RlbCgmYmVz dC0+bGluayk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJmJlc3QtPmxpbmspOworCQliZXN0LT5zdGF0 dXMgID0gaTkxNV9zcXNfcG9wcGVkOworCisJCXJldCA9IDA7CisJfSBlbHNlIHsKKwkJLyogQ2Fu IG9ubHkgZ2V0IGhlcmUgaWY6CisJCSAqIChhKSB0aGVyZSBhcmUgbm8gYnVmZmVycyBpbiB0aGUg cXVldWUKKwkJICogKGIpIGFsbCBxdWV1ZWQgYnVmZmVycyBhcmUgZGVwZW5kZW50IG9uIG90aGVy IGJ1ZmZlcnMKKwkJICogICAgIGUuZy4gb24gYSBidWZmZXIgdGhhdCBpcyBpbiBmbGlnaHQgb24g YSBkaWZmZXJlbnQgcmluZworCQkgKi8KKwkJaWYgKG9ubHlfcmVtb3RlKSB7CisJCQkvKiBUaGUg b25seSBkZXBlbmRlbnQgYnVmZmVycyBhcmUgb24gYW5vdGhlciByaW5nLiAqLworCQkJcmV0ID0g LUVBR0FJTjsKKwkJfSBlbHNlIGlmIChhbnlfcXVldWVkKSB7CisJCQkvKiBJdCBzZWVtcyB0aGF0 IHNvbWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSB3cm9uZyEgKi8KKwkJCURSTV9FUlJPUigiQnJv a2VuIGRlcGVuZGVuY3kgdHJhY2tpbmcgb24gcmluZyAlZCFcbiIsCisJCQkJICAoaW50KSByaW5n LT5pZCk7CisJCX0KKwl9CisKKwkvKiBpOTE1X3NjaGVkdWxlcl9kdW1wX3F1ZXVlX3BvcChyaW5n LCBiZXN0KTsgKi8KKworCSpwb3Bfbm9kZSA9IGJlc3Q7CisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBpOTE1X3NjaGVkdWxlcl9zdWJtaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZywgYm9vbCB3YXNfbG9ja2VkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICAgKmRldiA9IHJpbmct PmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAgICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2No ZWR1bGVyOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAgKm5vZGU7CisJdW5z aWduZWQgbG9uZyAgICAgICBmbGFnczsKKwlpbnQgICAgICAgICAgICAgICAgIHJldCA9IDAsIGNv dW50ID0gMDsKKworCWlmICghd2FzX2xvY2tlZCkgeworCQlyZXQgPSBpOTE1X211dGV4X2xvY2tf aW50ZXJydXB0aWJsZShkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlC VUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCXNwaW5fbG9j a19pcnFzYXZlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCS8qIEZpcnN0IHRpbWUgYXJv dW5kLCBjb21wbGFpbiBpZiBhbnl0aGluZyB1bmV4cGVjdGVkIG9jY3VyczogKi8KKwlyZXQgPSBp OTE1X3NjaGVkdWxlcl9wb3BfZnJvbV9xdWV1ZV9sb2NrZWQocmluZywgJm5vZGUsICZmbGFncyk7 CisJaWYgKHJldCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ss IGZsYWdzKTsKKworCQlpZiAoIXdhc19sb2NrZWQpCisJCQltdXRleF91bmxvY2soJmRldi0+c3Ry dWN0X211dGV4KTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCWRvIHsKKwkJQlVHX09OKCFub2Rl KTsKKwkJQlVHX09OKG5vZGUtPnBhcmFtcy5yaW5nICE9IHJpbmcpOworCQlCVUdfT04obm9kZS0+ c3RhdHVzICE9IGk5MTVfc3FzX3BvcHBlZCk7CisJCWNvdW50Kys7CisKKwkJLyogVGhlIGNhbGwg dG8gcG9wIGFib3ZlIHdpbGwgaGF2ZSByZW1vdmVkIHRoZSBub2RlIGZyb20gdGhlCisJCSAqIGxp c3QuIFNvIGFkZCBpdCBiYWNrIGluIGFuZCBtYXJrIGl0IGFzIGluIGZsaWdodC4gKi8KKwkJaTkx NV9zY2hlZHVsZXJfZmx5X25vZGUobm9kZSk7CisKKwkJc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5p ZF0gfD0gaTkxNV9zZl9zdWJtaXR0aW5nOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hl ZHVsZXItPmxvY2ssIGZsYWdzKTsKKwkJcmV0ID0gZGV2X3ByaXYtPmd0LmV4ZWNidWZfZmluYWwo Jm5vZGUtPnBhcmFtcyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzY2hlZHVsZXItPmxvY2ssIGZs YWdzKTsKKwkJc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0gJj0gfmk5MTVfc2Zfc3VibWl0dGlu ZzsKKworCQlpZiAocmV0KSB7CisJCQlib29sIHJlcXVldWUgPSB0cnVlOworCisJCQkvKiBPaCBk ZWFyISBFaXRoZXIgdGhlIG5vZGUgaXMgYnJva2VuIG9yIHRoZSByaW5nIGlzCisJCQkgKiBidXN5 LiBTbyBuZWVkIHRvIGtpbGwgdGhlIG5vZGUgb3IgcmVxdWV1ZSBpdCBhbmQgdHJ5CisJCQkgKiBh Z2FpbiBsYXRlciBhcyBhcHByb3ByaWF0ZS4gKi8KKworCQkJc3dpdGNoICgtcmV0KSB7CisJCQlj YXNlIEVOT0RFVjoKKwkJCWNhc2UgRU5PRU5UOgorCQkJCS8qIEZhdGFsIGVycm9ycy4gS2lsbCB0 aGUgbm9kZS4gKi8KKwkJCQlyZXF1ZXVlID0gZmFsc2U7CisJCQlicmVhazsKKworCQkJY2FzZSBF QUdBSU46CisJCQljYXNlIEVCVVNZOgorCQkJY2FzZSBFSU86CisJCQljYXNlIEVOT01FTToKKwkJ CWNhc2UgRVJFU1RBUlRTWVM6CisJCQljYXNlIEVJTlRSOgorCQkJCS8qIFN1cHBvc2VkbHkgcmVj b3ZlcmFibGUgZXJyb3JzLiAqLworCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJRFJNX0RF QlVHX0RSSVZFUigiPCVzPiBHb3QgdW5leHBlY3RlZCBlcnJvciBmcm9tIGV4ZWNmaW5hbCgpOiAl ZCFcbiIsCisJCQkJCQkgcmluZy0+bmFtZSwgcmV0KTsKKwkJCQkvKiBBc3N1bWUgaXQgaXMgcmVj b3ZlcmFibGUgYW5kIGhvcGUgZm9yIHRoZSBiZXN0LiAqLworCQkJYnJlYWs7CisJCQl9CisKKwkJ CWlmIChyZXF1ZXVlKSB7CisJCQkJaTkxNV9zY2hlZHVsZXJfbm9kZV9yZXF1ZXVlKG5vZGUpOwor CQkJCS8qIE5vIHBvaW50IHNwaW5uaW5nIGlmIHRoZSByaW5nIGlzIGN1cnJlbnRseQorCQkJCSAq IHVuYXZhaWxhYmxlIHNvIGp1c3QgZ2l2ZSB1cCBhbmQgY29tZSBiYWNrCisJCQkJICogbGF0ZXIu ICovCisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlpOTE1X3NjaGVkdWxlcl9ub2RlX2tpbGwo bm9kZSk7CisJCX0KKworCQkvKiBLZWVwIGxhdW5jaGluZyB1bnRpbCB0aGUgc2t5IGlzIHN1ZmZp Y2llbnRseSBmdWxsLiAqLworCQlpZiAoaTkxNV9zY2hlZHVsZXJfY291bnRfZmx5aW5nKHNjaGVk dWxlciwgcmluZykgPj0KKwkJCQkJCXNjaGVkdWxlci0+bWluX2ZseWluZykKKwkJCWJyZWFrOwor CisJCXJldCA9IGk5MTVfc2NoZWR1bGVyX3BvcF9mcm9tX3F1ZXVlX2xvY2tlZChyaW5nLCAmbm9k ZSwgJmZsYWdzKTsKKwl9IHdoaWxlIChyZXQgPT0gMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCWlmICghd2FzX2xvY2tlZCkKKwkJbXV0 ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwkvKiBEb24ndCBjb21wbGFpbiBhYm91 dCBub3QgYmVpbmcgYWJsZSB0byBzdWJtaXQgZXh0cmEgZW50cmllcyAqLworCWlmIChyZXQgPT0g LUVOT0RBVEEpCisJCXJldCA9IDA7CisKKwlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogY291bnQ7 Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9zY2hlZHVsZXJfcmVtb3ZlX2RlcGVuZGVudChzdHJ1Y3Qg aTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKKwkJCQkJICAgc3RydWN0IGk5MTVfc2NoZWR1bGVy X3F1ZXVlX2VudHJ5ICpyZW1vdmUpCit7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2Vu dHJ5ICAqbm9kZTsKKwlpbnQgICAgIGksIHI7CisJaW50ICAgICBjb3VudCA9IDA7CisKKwlmb3Ig KGkgPSAwOyBpIDwgcmVtb3ZlLT5udW1fZGVwczsgaSsrKQorCQlpZiAoKHJlbW92ZS0+ZGVwX2xp c3RbaV0pICYmCisJCSAgICAoIUk5MTVfU1FTX0lTX0NPTVBMRVRFKHJlbW92ZS0+ZGVwX2xpc3Rb aV0pKSkKKwkJCWNvdW50Kys7CisJQlVHX09OKGNvdW50KTsKKworCWZvciAociA9IDA7IHIgPCBJ OTE1X05VTV9SSU5HUzsgcisrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnNjaGVk dWxlci0+bm9kZV9xdWV1ZVtyXSwgbGluaykgeworCQkJZm9yIChpID0gMDsgaSA8IG5vZGUtPm51 bV9kZXBzOyBpKyspIHsKKwkJCQlpZiAobm9kZS0+ZGVwX2xpc3RbaV0gIT0gcmVtb3ZlKQorCQkJ CQljb250aW51ZTsKKworCQkJCW5vZGUtPmRlcF9saXN0W2ldID0gTlVMTDsKKwkJCX0KKwkJfQor CX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9zY2hlZHVsZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1ZmM3ZgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmgKQEAgLTAsMCArMSw5MSBA QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisg KgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBf STkxNV9TQ0hFRFVMRVJfSF8KKyNkZWZpbmUgX0k5MTVfU0NIRURVTEVSX0hfCisKK2VudW0gaTkx NV9zY2hlZHVsZXJfcXVldWVfc3RhdHVzIHsKKwkvKiBMaW1ibzogKi8KKwlpOTE1X3Nxc19ub25l ID0gMCwKKwkvKiBOb3QgeWV0IHN1Ym1pdHRlZCB0byBoYXJkd2FyZTogKi8KKwlpOTE1X3Nxc19x dWV1ZWQsCisJLyogUG9wcGVkIGZyb20gcXVldWUsIHJlYWR5IHRvIGZseTogKi8KKwlpOTE1X3Nx c19wb3BwZWQsCisJLyogU2VudCB0byBoYXJkd2FyZSBmb3IgcHJvY2Vzc2luZzogKi8KKwlpOTE1 X3Nxc19mbHlpbmcsCisJLyogRmluaXNoZWQgcHJvY2Vzc2luZyBvbiB0aGUgaGFyZHdhcmU6ICov CisJaTkxNV9zcXNfY29tcGxldGUsCisJLyogS2lsbGVkIGJ5IGNhdGFzdHJvcGhpYyBzdWJtaXNz aW9uIGZhaWx1cmU6ICovCisJaTkxNV9zcXNfZGVhZCwKKwkvKiBMaW1pdCB2YWx1ZSBmb3IgdXNl IHdpdGggYXJyYXlzL2xvb3BzICovCisJaTkxNV9zcXNfTUFYCit9OworCisjZGVmaW5lIEk5MTVf U1FTX0lTX1FVRVVFRChub2RlKQkoKChub2RlKS0+c3RhdHVzID09IGk5MTVfc3FzX3F1ZXVlZCkp CisjZGVmaW5lIEk5MTVfU1FTX0lTX0ZMWUlORyhub2RlKQkoKChub2RlKS0+c3RhdHVzID09IGk5 MTVfc3FzX2ZseWluZykpCisjZGVmaW5lIEk5MTVfU1FTX0lTX0NPTVBMRVRFKG5vZGUpCSgoKG5v ZGUpLT5zdGF0dXMgPT0gaTkxNV9zcXNfY29tcGxldGUpIHx8IFwKKwkJCQkJICgobm9kZSktPnN0 YXR1cyA9PSBpOTE1X3Nxc19kZWFkKSkKKworc3RydWN0IGk5MTVfc2NoZWR1bGVyX29ial9lbnRy eSB7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgICAgICAgICAgKm9iajsKK307CisKK3N0 cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSB7CisJc3RydWN0IGk5MTVfZXhlY2J1ZmZl cl9wYXJhbXMgICAgICAgcGFyYW1zOworCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByaW9yaXR5OworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9vYmpfZW50cnkgICAgICpzYXZl ZF9vYmplY3RzOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9vYmpz OworCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bXBlZDsKKwlzdHJ1Y3Qg aTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICAqKmRlcF9saXN0OworCWludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG51bV9kZXBzOworCWVudW0gaTkxNV9zY2hlZHVsZXJfcXVl dWVfc3RhdHVzICAgIHN0YXR1czsKKwlzdHJ1Y3QgdGltZXNwZWMgICAgICAgICAgICAgICAgICAg ICBzdGFtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgICAgICBsaW5rOworCXVp bnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcl9pbmRleDsKK307CisK K3N0cnVjdCBpOTE1X3NjaGVkdWxlciB7CisJc3RydWN0IGxpc3RfaGVhZCAgICBub2RlX3F1ZXVl W0k5MTVfTlVNX1JJTkdTXTsKKwl1aW50MzJfdCAgICAgICAgICAgIGZsYWdzW0k5MTVfTlVNX1JJ TkdTXTsKKwlzcGlubG9ja190ICAgICAgICAgIGxvY2s7CisJdWludDMyX3QgICAgICAgICAgICBp bmRleDsKKwl1aW50MzJfdCAgICAgICAgICAgIGxhc3RfaXJxX3NlcW5vW0k5MTVfTlVNX1JJTkdT XTsKKworCS8qIFR1bmluZyBwYXJhbWV0ZXJzOiAqLworCXVpbnQzMl90ICAgICAgICAgICAgcHJp b3JpdHlfbGV2ZWxfbWF4OworCXVpbnQzMl90ICAgICAgICAgICAgcHJpb3JpdHlfbGV2ZWxfcHJl ZW1wdDsKKwl1aW50MzJfdCAgICAgICAgICAgIG1pbl9mbHlpbmc7Cit9OworCisvKiBGbGFnIGJp dHMgZm9yIGk5MTVfc2NoZWR1bGVyOjpmbGFncyAqLworZW51bSB7CisJaTkxNV9zZl9pbnRlcnJ1 cHRzX2VuYWJsZWQgID0gKDEgPDwgMCksCisJaTkxNV9zZl9zdWJtaXR0aW5nICAgICAgICAgID0g KDEgPDwgMSksCit9OworCitpbnQgICAgICAgICBpOTE1X3NjaGVkdWxlcl9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOworaW50ICAgICAgICAgaTkxNV9zY2hlZHVsZXJfcXVldWVfZXhlY2J1 ZmZlcihzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKnFlKTsKK2ludCAgICAgICAg IGk5MTVfc2NoZWR1bGVyX2hhbmRsZV9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7 CisKKyNlbmRpZiAgLyogX0k5MTVfU0NIRURVTEVSX0hfICovCi0tIAoxLjkuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK