From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiaoguang Chen Subject: [PATCH v9 4/7] drm/i915/gvt: Frame buffer decoder support for GVT-g Date: Thu, 15 Jun 2017 16:00:08 +0800 Message-ID: <1497513611-2814-5-git-send-email-xiaoguang.chen@intel.com> References: <1497513611-2814-1-git-send-email-xiaoguang.chen@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1497513611-2814-1-git-send-email-xiaoguang.chen@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: alex.williamson@redhat.com, kraxel@redhat.com, chris@chris-wilson.co.uk, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, zhenyuw@linux.intel.com, zhiyuan.lv@intel.com, intel-gvt-dev@lists.freedesktop.org, zhi.a.wang@intel.com, kevin.tian@intel.com Cc: Xiaoguang Chen List-Id: intel-gfx@lists.freedesktop.org ZGVjb2RlIGZyYW1idWZmZXIgYXR0cmlidXRlcyBvZiBwcmltYXJ5LCBjdXJzb3IgYW5kIHNwcml0 ZSBwbGFuZQoKU2lnbmVkLW9mZi1ieTogWGlhb2d1YW5nIENoZW4gPHhpYW9ndWFuZy5jaGVuQGlu dGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUgICAgIHwgICAz ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGlzcGxheS5jICAgIHwgICAyICstCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGlzcGxheS5oICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9mYl9kZWNvZGVyLmMgfCA0MjUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2RlY29kZXIuaCB8IDE3MSArKysr KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oICAgICAgICB8ICAgMSAr CiA2IGZpbGVzIGNoYW5nZWQsIDYwMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9mYl9kZWNvZGVyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZmJfZGVjb2Rlci5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlCmluZGV4IGIxMjNjMjAuLjE5MmNhMjYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvTWFrZWZpbGUKQEAgLTEsNyArMSw4IEBACiBHVlRfRElSIDo9IGd2dAogR1ZU X1NPVVJDRSA6PSBndnQubyBhcGVydHVyZV9nbS5vIGhhbmRsZXJzLm8gdmdwdS5vIHRyYWNlX3Bv aW50cy5vIGZpcm13YXJlLm8gXAogCWludGVycnVwdC5vIGd0dC5vIGNmZ19zcGFjZS5vIG9wcmVn aW9uLm8gbW1pby5vIGRpc3BsYXkubyBlZGlkLm8gXAotCWV4ZWNsaXN0Lm8gc2NoZWR1bGVyLm8g c2NoZWRfcG9saWN5Lm8gcmVuZGVyLm8gY21kX3BhcnNlci5vCisJZXhlY2xpc3QubyBzY2hlZHVs ZXIubyBzY2hlZF9wb2xpY3kubyByZW5kZXIubyBjbWRfcGFyc2VyLm8gXAorCWZiX2RlY29kZXIu bwogCiBjY2ZsYWdzLXkJCQkJKz0gLUkkKHNyYykgLUkkKHNyYykvJChHVlRfRElSKSAtV2FsbAog aTkxNS15CQkJCQkrPSAkKGFkZHByZWZpeCAkKEdWVF9ESVIpLywgJChHVlRfU09VUkNFKSkKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kaXNwbGF5LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvZGlzcGxheS5jCmluZGV4IGUwMjYxZmMuLmY1ZjYzYzUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L2Rpc3BsYXkuYwpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgaW50IGVkcF9w aXBlX2lzX2VuYWJsZWQoc3RydWN0IGludGVsX3ZncHUgKnZncHUpCiAJcmV0dXJuIDE7CiB9CiAK LXN0YXRpYyBpbnQgcGlwZV9pc19lbmFibGVkKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCBpbnQg cGlwZSkKK2ludCBwaXBlX2lzX2VuYWJsZWQoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIGludCBw aXBlKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHZncHUtPmd2dC0+ ZGV2X3ByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kaXNwbGF5 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGlzcGxheS5oCmluZGV4IGQ3M2RlMjIuLmI0 NmI4NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kaXNwbGF5LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2Rpc3BsYXkuaApAQCAtMTc5LDQgKzE3OSw2IEBA IGludCBpbnRlbF92Z3B1X2luaXRfZGlzcGxheShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdTY0 IHJlc29sdXRpb24pOwogdm9pZCBpbnRlbF92Z3B1X3Jlc2V0X2Rpc3BsYXkoc3RydWN0IGludGVs X3ZncHUgKnZncHUpOwogdm9pZCBpbnRlbF92Z3B1X2NsZWFuX2Rpc3BsYXkoc3RydWN0IGludGVs X3ZncHUgKnZncHUpOwogCitpbnQgcGlwZV9pc19lbmFibGVkKHN0cnVjdCBpbnRlbF92Z3B1ICp2 Z3B1LCBpbnQgcGlwZSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2ZiX2RlY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9mYl9kZWNvZGVy LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2MTRiNQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9mYl9kZWNvZGVyLmMKQEAgLTAsMCAr MSw0MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisg KiBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgS2V2aW4gVGlhbiA8a2V2aW4udGlh bkBpbnRlbC5jb20+CisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgQmluZyBOaXUgPGJpbmcu bml1QGludGVsLmNvbT4KKyAqICAgIFh1IEhhbiA8eHUuaGFuQGludGVsLmNvbT4KKyAqICAgIFBp bmcgR2FvIDxwaW5nLmEuZ2FvQGludGVsLmNvbT4KKyAqICAgIFhpYW9ndWFuZyBDaGVuIDx4aWFv Z3VhbmcuY2hlbkBpbnRlbC5jb20+CisgKiAgICBZYW5nIExpdSA8eWFuZzIubGl1QGludGVsLmNv bT4KKyAqCisgKi8KKworI2luY2x1ZGUgPHVhcGkvZHJtL2RybV9mb3VyY2MuaD4KKyNpbmNsdWRl ICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImd2dC5oIgorCisjZGVmaW5lIFBSSU1BUllfRk9STUFU X05VTQkxNgorc3RydWN0IHBpeGVsX2Zvcm1hdCB7CisJaW50CWRybV9mb3JtYXQ7CS8qIFBpeGVs IGZvcm1hdCBpbiBEUk0gZGVmaW5pdGlvbiAqLworCWludAlicHA7CQkvKiBCaXRzIHBlciBwaXhl bCwgMCBpbmRpY2F0ZXMgaW52YWxpZCAqLworCWNoYXIgKmRlc2M7CQkvKiBUaGUgZGVzY3JpcHRp b24gKi8KK307CisKKy8qIG5vbi1zdXBwb3J0ZWQgZm9ybWF0IGhhcyBicHAgZGVmYXVsdCB0byAw ICovCitzdGF0aWMgc3RydWN0IHBpeGVsX2Zvcm1hdCBiZHdfcGl4ZWxfZm9ybWF0c1tQUklNQVJZ X0ZPUk1BVF9OVU1dID0geworCVsweDJdID0ge0RSTV9GT1JNQVRfQzgsIDgsICI4LWJpdCBJbmRl eGVkIn0sCisJWzB4NV0gPSB7RFJNX0ZPUk1BVF9SR0I1NjUsIDE2LCAiMTYtYml0IEJHUlggKDU6 Njo1IE1TQi1SOkc6QikifSwKKwlbMHg2XSA9IHtEUk1fRk9STUFUX1hSR0I4ODg4LCAzMiwKKwkJ IjMyLWJpdCBCR1JYICg4Ojg6ODo4IE1TQi1YOlI6RzpCKSJ9LAorCVsweDhdID0ge0RSTV9GT1JN QVRfWEJHUjIxMDEwMTAsIDMyLAorCQkiMzItYml0IFJHQlggKDI6MTA6MTA6MTAgTVNCLVg6QjpH OlIpIn0sCisJWzB4YV0gPSB7RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwgMzIsCisJCSIzMi1iaXQg QkdSWCAoMjoxMDoxMDoxMCBNU0ItWDpSOkc6QikifSwKKwlbMHhjXSA9IHtEUk1fRk9STUFUX1hS R0IxNjE2MTYsIDY0LAorCQkiNjQtYml0IFJHQlggRmxvYXRpbmcgUG9pbnQoMTY6MTY6MTY6MTYg TVNCLVg6QjpHOlIpIn0sCisJWzB4ZV0gPSB7RFJNX0ZPUk1BVF9YQkdSODg4OCwgMzIsCisJCSIz Mi1iaXQgUkdCWCAoODo4Ojg6OCBNU0ItWDpCOkc6UikifSwKK307CisKKy8qIG5vbi1zdXBwb3J0 ZWQgZm9ybWF0IGhhcyBicHAgZGVmYXVsdCB0byAwICovCitzdGF0aWMgc3RydWN0IHBpeGVsX2Zv cm1hdCBza2xfcGl4ZWxfZm9ybWF0c1tdID0geworCXtEUk1fRk9STUFUX1lVWVYsIDE2LCAiMTYt Yml0IHBhY2tlZCBZVVlWICg4Ojg6ODo4IE1TQi1WOlkyOlU6WTEpIn0sCisJe0RSTV9GT1JNQVRf VVlWWSwgMTYsICIxNi1iaXQgcGFja2VkIFVZVlkgKDg6ODo4OjggTVNCLVkyOlY6WTE6VSkifSwK Kwl7RFJNX0ZPUk1BVF9ZVllVLCAxNiwgIjE2LWJpdCBwYWNrZWQgWVZZVSAoODo4Ojg6OCBNU0It VTpZMjpWOlkxKSJ9LAorCXtEUk1fRk9STUFUX1ZZVVksIDE2LCAiMTYtYml0IHBhY2tlZCBWWVVZ ICg4Ojg6ODo4IE1TQi1ZMjpVOlkxOlYpIn0sCisKKwl7RFJNX0ZPUk1BVF9DOCwgOCwgIjgtYml0 IEluZGV4ZWQifSwKKwl7RFJNX0ZPUk1BVF9SR0I1NjUsIDE2LCAiMTYtYml0IEJHUlggKDU6Njo1 IE1TQi1SOkc6QikifSwKKwl7RFJNX0ZPUk1BVF9BQkdSODg4OCwgMzIsICIzMi1iaXQgUkdCQSAo ODo4Ojg6OCBNU0ItQTpCOkc6UikifSwKKwl7RFJNX0ZPUk1BVF9YQkdSODg4OCwgMzIsICIzMi1i aXQgUkdCWCAoODo4Ojg6OCBNU0ItWDpCOkc6UikifSwKKworCXtEUk1fRk9STUFUX0FSR0I4ODg4 LCAzMiwgIjMyLWJpdCBCR1JBICg4Ojg6ODo4IE1TQi1BOlI6RzpCKSJ9LAorCXtEUk1fRk9STUFU X1hSR0I4ODg4LCAzMiwgIjMyLWJpdCBCR1JYICg4Ojg6ODo4IE1TQi1YOlI6RzpCKSJ9LAorCXtE Uk1fRk9STUFUX1hCR1IyMTAxMDEwLCAzMiwgIjMyLWJpdCBSR0JYICgyOjEwOjEwOjEwIE1TQi1Y OkI6RzpSKSJ9LAorCXtEUk1fRk9STUFUX1hSR0IyMTAxMDEwLCAzMiwgIjMyLWJpdCBCR1JYICgy OjEwOjEwOjEwIE1TQi1YOlI6RzpCKSJ9LAorCisJe0RSTV9GT1JNQVRfWFJHQjE2MTYxNiwgNjQs CisJCSI2NC1iaXQgWFJHQiAoMTY6MTY6MTY6MTYgTVNCLVg6UjpHOkIpIn0sCisJe0RSTV9GT1JN QVRfWEJHUjE2MTYxNiwgNjQsCisJCSI2NC1iaXQgWEJHUiAoMTY6MTY6MTY6MTYgTVNCLVg6QjpH OlIpIn0sCisKKwkvKiBub24tc3VwcG9ydGVkIGZvcm1hdCBoYXMgYnBwIGRlZmF1bHQgdG8gMCAq LworCXswLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBpbnQgc2tsX2Zvcm1hdF90b19kcm0oaW50 IGZvcm1hdCwgYm9vbCByZ2Jfb3JkZXIsIGJvb2wgYWxwaGEsCisJaW50IHl1dl9vcmRlcikKK3sK KwlpbnQgc2tsX3BpeGVsX2Zvcm1hdHNfaW5kZXggPSAxNDsKKworCXN3aXRjaCAoZm9ybWF0KSB7 CisJY2FzZSBQTEFORV9DVExfRk9STUFUX0lOREVYRUQ6CisJCXNrbF9waXhlbF9mb3JtYXRzX2lu ZGV4ID0gNDsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1JHQl81NjU6CisJCXNr bF9waXhlbF9mb3JtYXRzX2luZGV4ID0gNTsKKwkJYnJlYWs7CisJY2FzZSBQTEFORV9DVExfRk9S TUFUX1hSR0JfODg4ODoKKwkJaWYgKHJnYl9vcmRlcikKKwkJCXNrbF9waXhlbF9mb3JtYXRzX2lu ZGV4ID0gYWxwaGEgPyA2IDogNzsKKwkJZWxzZQorCQkJc2tsX3BpeGVsX2Zvcm1hdHNfaW5kZXgg PSBhbHBoYSA/IDggOiA5OworCQlicmVhazsKKwljYXNlIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8y MTAxMDEwOgorCQlza2xfcGl4ZWxfZm9ybWF0c19pbmRleCA9IHJnYl9vcmRlciA/IDEwIDogMTE7 CisJCWJyZWFrOworCisJY2FzZSBQTEFORV9DVExfRk9STUFUX1hSR0JfMTYxNjE2MTZGOgorCQlz a2xfcGl4ZWxfZm9ybWF0c19pbmRleCA9IHJnYl9vcmRlciA/IDEyIDogMTM7CisJCWJyZWFrOwor CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1lVVjQyMjoKKwkJc2tsX3BpeGVsX2Zvcm1hdHNfaW5k ZXggPSB5dXZfb3JkZXIgPj4gMTY7CisJCWlmIChza2xfcGl4ZWxfZm9ybWF0c19pbmRleCA+IDMp CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9 CisKKwlyZXR1cm4gc2tsX3BpeGVsX2Zvcm1hdHNfaW5kZXg7Cit9CisKK3N0YXRpYyB1MzIgaW50 ZWxfdmdwdV9nZXRfc3RyaWRlKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCBpbnQgcGlwZSwKKwl1 MzIgdGlsZWQsIGludCBzdHJpZGVfbWFzaywgaW50IGJwcCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB2Z3B1LT5ndnQtPmRldl9wcml2OworCisJdTMyIHN0cmlkZV9y ZWcgPSB2Z3B1X3ZyZWcodmdwdSwgRFNQU1RSSURFKHBpcGUpKSAmIHN0cmlkZV9tYXNrOworCXUz MiBzdHJpZGUgPSBzdHJpZGVfcmVnOworCisJaWYgKElTX1NLWUxBS0UoZGV2X3ByaXYpKSB7CisJ CXN3aXRjaCAodGlsZWQpIHsKKwkJY2FzZSBQTEFORV9DVExfVElMRURfTElORUFSOgorCQkJc3Ry aWRlID0gc3RyaWRlX3JlZyAqIDY0OworCQkJYnJlYWs7CisJCWNhc2UgUExBTkVfQ1RMX1RJTEVE X1g6CisJCQlzdHJpZGUgPSBzdHJpZGVfcmVnICogNTEyOworCQkJYnJlYWs7CisJCWNhc2UgUExB TkVfQ1RMX1RJTEVEX1k6CisJCQlzdHJpZGUgPSBzdHJpZGVfcmVnICogMTI4OworCQkJYnJlYWs7 CisJCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1lGOgorCQkJaWYgKGJwcCA9PSA4KQorCQkJCXN0cmlk ZSA9IHN0cmlkZV9yZWcgKiA2NDsKKwkJCWVsc2UgaWYgKGJwcCA9PSAxNiB8fCBicHAgPT0gMzIg fHwgYnBwID09IDY0KQorCQkJCXN0cmlkZSA9IHN0cmlkZV9yZWcgKiAxMjg7CisJCQllbHNlCisJ CQkJZ3Z0X2RiZ19jb3JlKCJza2w6IHVuc3VwcG9ydGVkIGJwcDolZFxuIiwgYnBwKTsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJZ3Z0X2RiZ19jb3JlKCJza2w6IHVuc3VwcG9ydGVkIHRpbGUg Zm9ybWF0OiV4XG4iLAorCQkJCXRpbGVkKTsKKwkJfQorCX0KKworCXJldHVybiBzdHJpZGU7Cit9 CisKK3N0YXRpYyBpbnQgZ2V0X2FjdGl2ZV9waXBlKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1KQor eworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEk5MTVfTUFYX1BJUEVTOyBpKyspCisJCWlm IChwaXBlX2lzX2VuYWJsZWQodmdwdSwgaSkpCisJCQlicmVhazsKKworCXJldHVybiBpOworfQor CisvKioKKyAqIGludGVsX3ZncHVfZGVjb2RlX3ByaW1hcnlfcGxhbmUgLSBEZWNvZGUgcHJpbWFy eSBwbGFuZQorICogQHZncHU6IGlucHV0IHZncHUKKyAqIEBwbGFuZTogcHJpbWFyeSBwbGFuZSB0 byBzYXZlIGRlY29kZWQgaW5mbworICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGRlY29k aW5nIHBsYW5lCisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gaWYg ZmFpbGVkLgorICovCitpbnQgaW50ZWxfdmdwdV9kZWNvZGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3Qg aW50ZWxfdmdwdSAqdmdwdSwKKwlzdHJ1Y3QgaW50ZWxfdmdwdV9wcmltYXJ5X3BsYW5lX2Zvcm1h dCAqcGxhbmUpCit7CisJdTMyIHZhbCwgZm10OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHZncHUtPmd2dC0+ZGV2X3ByaXY7CisJaW50IHBpcGU7CisKKwlwaXBlID0gZ2V0 X2FjdGl2ZV9waXBlKHZncHUpOworCWlmIChwaXBlID49IEk5MTVfTUFYX1BJUEVTKQorCQlyZXR1 cm4gLUVOT0RFVjsKKworCXZhbCA9IHZncHVfdnJlZyh2Z3B1LCBEU1BDTlRSKHBpcGUpKTsKKwlw bGFuZS0+ZW5hYmxlZCA9ICEhKHZhbCAmIERJU1BMQVlfUExBTkVfRU5BQkxFKTsKKwlpZiAoIXBs YW5lLT5lbmFibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChJU19TS1lMQUtFKGRldl9w cml2KSkgeworCQlwbGFuZS0+dGlsZWQgPSAodmFsICYgUExBTkVfQ1RMX1RJTEVEX01BU0spID4+ CisJCV9QTEFORV9DVExfVElMRURfU0hJRlQ7CisJCWZtdCA9IHNrbF9mb3JtYXRfdG9fZHJtKAor CQkJdmFsICYgUExBTkVfQ1RMX0ZPUk1BVF9NQVNLLAorCQkJdmFsICYgUExBTkVfQ1RMX09SREVS X1JHQlgsCisJCQl2YWwgJiBQTEFORV9DVExfQUxQSEFfTUFTSywKKwkJCXZhbCAmIFBMQU5FX0NU TF9ZVVY0MjJfT1JERVJfTUFTSyk7CisJCXBsYW5lLT5icHAgPSBza2xfcGl4ZWxfZm9ybWF0c1tm bXRdLmJwcDsKKwkJcGxhbmUtPmRybV9mb3JtYXQgPSBza2xfcGl4ZWxfZm9ybWF0c1tmbXRdLmRy bV9mb3JtYXQ7CisJfSBlbHNlIHsKKwkJcGxhbmUtPnRpbGVkID0gISEodmFsICYgRElTUFBMQU5F X1RJTEVEKTsKKwkJZm10ID0gKHZhbCAmIERJU1BQTEFORV9QSVhGT1JNQVRfTUFTSykgPj4gX1BS SV9QTEFORV9GTVRfU0hJRlQ7CisJCXBsYW5lLT5icHAgPSBiZHdfcGl4ZWxfZm9ybWF0c1tmbXRd LmJwcDsKKwkJcGxhbmUtPmRybV9mb3JtYXQgPSBiZHdfcGl4ZWxfZm9ybWF0c1tmbXRdLmRybV9m b3JtYXQ7CisJfQorCisJaWYgKCFwbGFuZS0+YnBwKSB7CisJCWd2dF92Z3B1X2VycigiTm9uLXN1 cHBvcnRlZCBwaXhlbCBmb3JtYXQgKDB4JXgpXG4iLCBmbXQpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlwbGFuZS0+aHdfZm9ybWF0ID0gZm10OworCisJcGxhbmUtPmJhc2UgPSB2Z3B1X3Zy ZWcodmdwdSwgRFNQU1VSRihwaXBlKSkgJiBHVFRfUEFHRV9NQVNLOworCisJcGxhbmUtPnN0cmlk ZSA9IGludGVsX3ZncHVfZ2V0X3N0cmlkZSh2Z3B1LCBwaXBlLCAocGxhbmUtPnRpbGVkIDw8IDEw KSwKKwkJKElTX1NLWUxBS0UoZGV2X3ByaXYpKSA/IChfUFJJX1BMQU5FX1NUUklERV9NQVNLID4+ IDYpIDoKKwkJX1BSSV9QTEFORV9TVFJJREVfTUFTSywgcGxhbmUtPmJwcCk7CisKKwlwbGFuZS0+ d2lkdGggPSAodmdwdV92cmVnKHZncHUsIFBJUEVTUkMocGlwZSkpICYgX1BJUEVfSF9TUkNTWl9N QVNLKSA+PgorCQlfUElQRV9IX1NSQ1NaX1NISUZUOworCXBsYW5lLT53aWR0aCArPSAxOworCXBs YW5lLT5oZWlnaHQgPSAodmdwdV92cmVnKHZncHUsIFBJUEVTUkMocGlwZSkpICYKKwkJCV9QSVBF X1ZfU1JDU1pfTUFTSykgPj4gX1BJUEVfVl9TUkNTWl9TSElGVDsKKwlwbGFuZS0+aGVpZ2h0ICs9 IDE7CS8qIHJhdyBoZWlnaHQgaXMgb25lIG1pbnVzIHRoZSByZWFsIHZhbHVlICovCisKKwl2YWwg PSB2Z3B1X3ZyZWcodmdwdSwgRFNQVElMRU9GRihwaXBlKSk7CisJcGxhbmUtPnhfb2Zmc2V0ID0g KHZhbCAmIF9QUklfUExBTkVfWF9PRkZfTUFTSykgPj4KKwkJX1BSSV9QTEFORV9YX09GRl9TSElG VDsKKwlwbGFuZS0+eV9vZmZzZXQgPSAodmFsICYgX1BSSV9QTEFORV9ZX09GRl9NQVNLKSA+Pgor CQlfUFJJX1BMQU5FX1lfT0ZGX1NISUZUOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQ1VS U09SX0ZPUk1BVF9OVU0JKDEgPDwgNikKK3N0cnVjdCBjdXJzb3JfbW9kZV9mb3JtYXQgeworCWlu dAlkcm1fZm9ybWF0OwkvKiBQaXhlbCBmb3JtYXQgaW4gRFJNIGRlZmluaXRpb24gKi8KKwl1OAli cHA7CQkvKiBCaXRzIHBlciBwaXhlbDsgMCBpbmRpY2F0ZXMgaW52YWxpZCAqLworCXUzMgl3aWR0 aDsJCS8qIEluIHBpeGVsICovCisJdTMyCWhlaWdodDsJCS8qIEluIGxpbmVzICovCisJY2hhcgkq ZGVzYzsJCS8qIFRoZSBkZXNjcmlwdGlvbiAqLworfTsKKworLyogbm9uLXN1cHBvcnRlZCBmb3Jt YXQgaGFzIGJwcCBkZWZhdWx0IHRvIDAgKi8KK3N0YXRpYyBzdHJ1Y3QgY3Vyc29yX21vZGVfZm9y bWF0IGN1cnNvcl9waXhlbF9mb3JtYXRzW0NVUlNPUl9GT1JNQVRfTlVNXSA9IHsKKwlbMHgyMl0g ID0ge0RSTV9GT1JNQVRfQVJHQjg4ODgsIDMyLCAxMjgsIDEyOCwgIjEyOHgxMjggMzJicHAgQVJH QiJ9LAorCVsweDIzXSAgPSB7RFJNX0ZPUk1BVF9BUkdCODg4OCwgMzIsIDI1NiwgMjU2LCAiMjU2 eDI1NiAzMmJwcCBBUkdCIn0sCisJWzB4MjddICA9IHtEUk1fRk9STUFUX0FSR0I4ODg4LCAzMiwg NjQsIDY0LCAiNjR4NjQgMzJicHAgQVJHQiJ9LAorCVsweDddICA9IHtEUk1fRk9STUFUX0FSR0I4 ODg4LCAzMiwgNjQsIDY0LCAiNjR4NjQgMzJicHAgQVJHQiJ9LAorfTsKKworLyoqCisgKiBpbnRl bF92Z3B1X2RlY29kZV9jdXJzb3JfcGxhbmUgLSBEZWNvZGUgc3ByaXRlIHBsYW5lCisgKiBAdmdw dTogaW5wdXQgdmdwdQorICogQHBsYW5lOiBjdXJzb3IgcGxhbmUgdG8gc2F2ZSBkZWNvZGVkIGlu Zm8KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBkZWNvZGluZyBwbGFuZQorICoKKyAq IFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIGlmIGZhaWxlZC4KKyAqLworaW50 IGludGVsX3ZncHVfZGVjb2RlX2N1cnNvcl9wbGFuZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwK KwlzdHJ1Y3QgaW50ZWxfdmdwdV9jdXJzb3JfcGxhbmVfZm9ybWF0ICpwbGFuZSkKK3sKKwl1MzIg dmFsLCBtb2RlOworCXUzMiBhbHBoYV9wbGFuZSwgYWxwaGFfZm9yY2U7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdmdwdS0+Z3Z0LT5kZXZfcHJpdjsKKwlpbnQgcGlwZTsK KworCXBpcGUgPSBnZXRfYWN0aXZlX3BpcGUodmdwdSk7CisJaWYgKHBpcGUgPj0gSTkxNV9NQVhf UElQRVMpCisJCXJldHVybiAtRU5PREVWOworCisJdmFsID0gdmdwdV92cmVnKHZncHUsIENVUkNO VFIocGlwZSkpOworCW1vZGUgPSB2YWwgJiBDVVJTT1JfTU9ERTsKKwlwbGFuZS0+ZW5hYmxlZCA9 IChtb2RlICE9IENVUlNPUl9NT0RFX0RJU0FCTEUpOworCWlmICghcGxhbmUtPmVuYWJsZWQpCisJ CXJldHVybiAtRU5PREVWOworCisJaWYgKCFjdXJzb3JfcGl4ZWxfZm9ybWF0c1ttb2RlXS5icHAp IHsKKwkJZ3Z0X3ZncHVfZXJyKCJOb24tc3VwcG9ydGVkIGN1cnNvciBtb2RlICgweCV4KVxuIiwg bW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwbGFuZS0+bW9kZSA9IG1vZGU7CisJcGxh bmUtPmJwcCA9IGN1cnNvcl9waXhlbF9mb3JtYXRzW21vZGVdLmJwcDsKKwlwbGFuZS0+ZHJtX2Zv cm1hdCA9IGN1cnNvcl9waXhlbF9mb3JtYXRzW21vZGVdLmRybV9mb3JtYXQ7CisJcGxhbmUtPndp ZHRoID0gY3Vyc29yX3BpeGVsX2Zvcm1hdHNbbW9kZV0ud2lkdGg7CisJcGxhbmUtPmhlaWdodCA9 IGN1cnNvcl9waXhlbF9mb3JtYXRzW21vZGVdLmhlaWdodDsKKworCWFscGhhX3BsYW5lID0gKHZh bCAmIF9DVVJTT1JfQUxQSEFfUExBTkVfTUFTSykgPj4KKwkJCQlfQ1VSU09SX0FMUEhBX1BMQU5F X1NISUZUOworCWFscGhhX2ZvcmNlID0gKHZhbCAmIF9DVVJTT1JfQUxQSEFfRk9SQ0VfTUFTSykg Pj4KKwkJCQlfQ1VSU09SX0FMUEhBX0ZPUkNFX1NISUZUOworCWlmIChhbHBoYV9wbGFuZSB8fCBh bHBoYV9mb3JjZSkKKwkJZ3Z0X2RiZ19jb3JlKCJhbHBoYV9wbGFuZT0weCV4LCBhbHBoYV9mb3Jj ZT0weCV4XG4iLAorCQkJYWxwaGFfcGxhbmUsIGFscGhhX2ZvcmNlKTsKKworCXBsYW5lLT5iYXNl ID0gdmdwdV92cmVnKHZncHUsIENVUkJBU0UocGlwZSkpICYgR1RUX1BBR0VfTUFTSzsKKworCXZh bCA9IHZncHVfdnJlZyh2Z3B1LCBDVVJQT1MocGlwZSkpOworCXBsYW5lLT54X3BvcyA9ICh2YWwg JiBfQ1VSU09SX1BPU19YX01BU0spID4+IF9DVVJTT1JfUE9TX1hfU0hJRlQ7CisJcGxhbmUtPnhf c2lnbiA9ICh2YWwgJiBfQ1VSU09SX1NJR05fWF9NQVNLKSA+PiBfQ1VSU09SX1NJR05fWF9TSElG VDsKKwlwbGFuZS0+eV9wb3MgPSAodmFsICYgX0NVUlNPUl9QT1NfWV9NQVNLKSA+PiBfQ1VSU09S X1BPU19ZX1NISUZUOworCXBsYW5lLT55X3NpZ24gPSAodmFsICYgX0NVUlNPUl9TSUdOX1lfTUFT SykgPj4gX0NVUlNPUl9TSUdOX1lfU0hJRlQ7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBT UFJJVEVfRk9STUFUX05VTQkoMSA8PCAzKQorCitzdGF0aWMgc3RydWN0IHBpeGVsX2Zvcm1hdCBz cHJpdGVfcGl4ZWxfZm9ybWF0c1tTUFJJVEVfRk9STUFUX05VTV0gPSB7CisJWzB4MF0gID0ge0RS TV9GT1JNQVRfWVVWNDIyLCAxNiwgIllVViAxNi1iaXQgNDoyOjIgcGFja2VkIn0sCisJWzB4MV0g ID0ge0RSTV9GT1JNQVRfWFJHQjIxMDEwMTAsIDMyLCAiUkdCIDMyLWJpdCAyOjEwOjEwOjEwIn0s CisJWzB4Ml0gID0ge0RSTV9GT1JNQVRfWFJHQjg4ODgsIDMyLCAiUkdCIDMyLWJpdCA4Ojg6ODo4 In0sCisJWzB4M10gID0ge0RSTV9GT1JNQVRfWFJHQjE2MTYxNiwgNjQsCisJCSAgICAiUkdCIDY0 LWJpdCAxNjoxNjoxNjoxNiBGbG9hdGluZyBQb2ludCJ9LAorCVsweDRdID0ge0RSTV9GT1JNQVRf QVlVViwgMzIsCisJCSJZVVYgMzItYml0IDQ6NDo0IHBhY2tlZCAoODo4Ojg6OCBNU0ItWDpZOlU6 VikifSwKK307CisKKy8qKgorICogaW50ZWxfdmdwdV9kZWNvZGVfc3ByaXRlX3BsYW5lIC0gRGVj b2RlIHNwcml0ZSBwbGFuZQorICogQHZncHU6IGlucHV0IHZncHUKKyAqIEBwbGFuZTogc3ByaXRl IHBsYW5lIHRvIHNhdmUgZGVjb2RlZCBpbmZvCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBm b3IgZGVjb2RpbmcgcGxhbmUKKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzLCBub24t emVybyBpZiBmYWlsZWQuCisgKi8KK2ludCBpbnRlbF92Z3B1X2RlY29kZV9zcHJpdGVfcGxhbmUo c3RydWN0IGludGVsX3ZncHUgKnZncHUsCisJc3RydWN0IGludGVsX3ZncHVfc3ByaXRlX3BsYW5l X2Zvcm1hdCAqcGxhbmUpCit7CisJdTMyIHZhbCwgZm10OworCXUzMiBjb2xvcl9vcmRlciwgeXV2 X29yZGVyOworCWludCBkcm1fZm9ybWF0OworCWludCBwaXBlOworCisJcGlwZSA9IGdldF9hY3Rp dmVfcGlwZSh2Z3B1KTsKKwlpZiAocGlwZSA+PSBJOTE1X01BWF9QSVBFUykKKwkJcmV0dXJuIC1F Tk9ERVY7CisKKwl2YWwgPSB2Z3B1X3ZyZWcodmdwdSwgU1BSQ1RMKHBpcGUpKTsKKwlwbGFuZS0+ ZW5hYmxlZCA9ICEhKHZhbCAmIFNQUklURV9FTkFCTEUpOworCWlmICghcGxhbmUtPmVuYWJsZWQp CisJCXJldHVybiAtRU5PREVWOworCisJcGxhbmUtPnRpbGVkID0gISEodmFsICYgU1BSSVRFX1RJ TEVEKTsKKwljb2xvcl9vcmRlciA9ICEhKHZhbCAmIFNQUklURV9SR0JfT1JERVJfUkdCWCk7CisJ eXV2X29yZGVyID0gKHZhbCAmIFNQUklURV9ZVVZfQllURV9PUkRFUl9NQVNLKSA+PgorCQkJCV9T UFJJVEVfWVVWX09SREVSX1NISUZUOworCisJZm10ID0gKHZhbCAmIFNQUklURV9QSVhGT1JNQVRf TUFTSykgPj4gX1NQUklURV9GTVRfU0hJRlQ7CisJaWYgKCFzcHJpdGVfcGl4ZWxfZm9ybWF0c1tm bXRdLmJwcCkgeworCQlndnRfdmdwdV9lcnIoIk5vbi1zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0ICgw eCV4KVxuIiwgZm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBsYW5lLT5od19mb3JtYXQg PSBmbXQ7CisJcGxhbmUtPmJwcCA9IHNwcml0ZV9waXhlbF9mb3JtYXRzW2ZtdF0uYnBwOworCWRy bV9mb3JtYXQgPSBzcHJpdGVfcGl4ZWxfZm9ybWF0c1tmbXRdLmRybV9mb3JtYXQ7CisKKwkvKiBP cmRlciBvZiBSR0IgdmFsdWVzIGluIGFuIFJHQnh4eCBidWZmZXIgbWF5IGJlIG9yZGVyZWQgUkdC IG9yCisJICogQkdSIGRlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIGNvbG9yX29yZGVyIGZp ZWxkCisJICovCisJaWYgKCFjb2xvcl9vcmRlcikgeworCQlpZiAoZHJtX2Zvcm1hdCA9PSBEUk1f Rk9STUFUX1hSR0IyMTAxMDEwKQorCQkJZHJtX2Zvcm1hdCA9IERSTV9GT1JNQVRfWEJHUjIxMDEw MTA7CisJCWVsc2UgaWYgKGRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9YUkdCODg4OCkKKwkJCWRy bV9mb3JtYXQgPSBEUk1fRk9STUFUX1hCR1I4ODg4OworCX0KKworCWlmIChkcm1fZm9ybWF0ID09 IERSTV9GT1JNQVRfWVVWNDIyKSB7CisJCXN3aXRjaCAoeXV2X29yZGVyKSB7CisJCWNhc2UgMDoK KwkJCWRybV9mb3JtYXQgPSBEUk1fRk9STUFUX1lVWVY7CisJCQlicmVhazsKKwkJY2FzZSAxOgor CQkJZHJtX2Zvcm1hdCA9IERSTV9GT1JNQVRfVVlWWTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJ CQlkcm1fZm9ybWF0ID0gRFJNX0ZPUk1BVF9ZVllVOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJ CWRybV9mb3JtYXQgPSBEUk1fRk9STUFUX1ZZVVk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CS8qIHl1dl9vcmRlciBoYXMgb25seSAyIGJpdHMgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJ cGxhbmUtPmRybV9mb3JtYXQgPSBkcm1fZm9ybWF0OworCisJcGxhbmUtPmJhc2UgPSB2Z3B1X3Zy ZWcodmdwdSwgU1BSU1VSRihwaXBlKSkgJiBHVFRfUEFHRV9NQVNLOworCXBsYW5lLT5zdHJpZGUg PSB2Z3B1X3ZyZWcodmdwdSwgU1BSU1RSSURFKHBpcGUpKSAmCisJCQkJX1NQUklURV9TVFJJREVf TUFTSzsKKworCXZhbCA9IHZncHVfdnJlZyh2Z3B1LCBTUFJTSVpFKHBpcGUpKTsKKwlwbGFuZS0+ aGVpZ2h0ID0gKHZhbCAmIF9TUFJJVEVfU0laRV9IRUlHSFRfTUFTSykgPj4KKwkJX1NQUklURV9T SVpFX0hFSUdIVF9TSElGVDsKKwlwbGFuZS0+d2lkdGggPSAodmFsICYgX1NQUklURV9TSVpFX1dJ RFRIX01BU0spID4+CisJCV9TUFJJVEVfU0laRV9XSURUSF9TSElGVDsKKwlwbGFuZS0+aGVpZ2h0 ICs9IDE7CS8qIHJhdyBoZWlnaHQgaXMgb25lIG1pbnVzIHRoZSByZWFsIHZhbHVlICovCisJcGxh bmUtPndpZHRoICs9IDE7CS8qIHJhdyB3aWR0aCBpcyBvbmUgbWludXMgdGhlIHJlYWwgdmFsdWUg Ki8KKworCXZhbCA9IHZncHVfdnJlZyh2Z3B1LCBTUFJQT1MocGlwZSkpOworCXBsYW5lLT54X3Bv cyA9ICh2YWwgJiBfU1BSSVRFX1BPU19YX01BU0spID4+IF9TUFJJVEVfUE9TX1hfU0hJRlQ7CisJ cGxhbmUtPnlfcG9zID0gKHZhbCAmIF9TUFJJVEVfUE9TX1lfTUFTSykgPj4gX1NQUklURV9QT1Nf WV9TSElGVDsKKworCXZhbCA9IHZncHVfdnJlZyh2Z3B1LCBTUFJPRkZTRVQocGlwZSkpOworCXBs YW5lLT54X29mZnNldCA9ICh2YWwgJiBfU1BSSVRFX09GRlNFVF9TVEFSVF9YX01BU0spID4+CisJ CQkgICBfU1BSSVRFX09GRlNFVF9TVEFSVF9YX1NISUZUOworCXBsYW5lLT55X29mZnNldCA9ICh2 YWwgJiBfU1BSSVRFX09GRlNFVF9TVEFSVF9ZX01BU0spID4+CisJCQkgICBfU1BSSVRFX09GRlNF VF9TVEFSVF9ZX1NISUZUOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvZmJfZGVjb2Rlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2Zi X2RlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGQ0ZDhhCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2RlY29kZXIuaApA QCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJ TiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBLZXZpbiBUaWFuIDxr ZXZpbi50aWFuQGludGVsLmNvbT4KKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICBCaW5nIE5p dSA8YmluZy5uaXVAaW50ZWwuY29tPgorICogICAgWHUgSGFuIDx4dS5oYW5AaW50ZWwuY29tPgor ICogICAgUGluZyBHYW8gPHBpbmcuYS5nYW9AaW50ZWwuY29tPgorICogICAgWGlhb2d1YW5nIENo ZW4gPHhpYW9ndWFuZy5jaGVuQGludGVsLmNvbT4KKyAqICAgIFlhbmcgTGl1IDx5YW5nMi5saXVA aW50ZWwuY29tPgorICoKKyAqLworCisjaWZuZGVmIF9HVlRfRkJfREVDT0RFUl9IXworI2RlZmlu ZSBfR1ZUX0ZCX0RFQ09ERVJfSF8KKworI2RlZmluZSBfUExBTkVfQ1RMX0ZPUk1BVF9TSElGVAkJ MjQKKyNkZWZpbmUgX1BMQU5FX0NUTF9USUxFRF9TSElGVAkJMTAKKyNkZWZpbmUgX1BJUEVfVl9T UkNTWl9TSElGVAkJMAorI2RlZmluZSBfUElQRV9WX1NSQ1NaX01BU0sJCSgweGZmZiA8PCBfUElQ RV9WX1NSQ1NaX1NISUZUKQorI2RlZmluZSBfUElQRV9IX1NSQ1NaX1NISUZUCQkxNgorI2RlZmlu ZSBfUElQRV9IX1NSQ1NaX01BU0sJCSgweDFmZmYgPDwgX1BJUEVfSF9TUkNTWl9TSElGVCkKKwor I2RlZmluZSBfUFJJX1BMQU5FX0ZNVF9TSElGVAkJMjYKKyNkZWZpbmUgX1BSSV9QTEFORV9TVFJJ REVfTUFTSwkJKDB4M2ZmIDw8IDYpCisjZGVmaW5lIF9QUklfUExBTkVfWF9PRkZfU0hJRlQJCTAK KyNkZWZpbmUgX1BSSV9QTEFORV9YX09GRl9NQVNLCQkoMHgxZmZmIDw8IF9QUklfUExBTkVfWF9P RkZfU0hJRlQpCisjZGVmaW5lIF9QUklfUExBTkVfWV9PRkZfU0hJRlQJCTE2CisjZGVmaW5lIF9Q UklfUExBTkVfWV9PRkZfTUFTSwkJKDB4ZmZmIDw8IF9QUklfUExBTkVfWV9PRkZfU0hJRlQpCisK KyNkZWZpbmUgX0NVUlNPUl9NT0RFCQkJMHgzZgorI2RlZmluZSBfQ1VSU09SX0FMUEhBX0ZPUkNF X1NISUZUCTgKKyNkZWZpbmUgX0NVUlNPUl9BTFBIQV9GT1JDRV9NQVNLCSgweDMgPDwgX0NVUlNP Ul9BTFBIQV9GT1JDRV9TSElGVCkKKyNkZWZpbmUgX0NVUlNPUl9BTFBIQV9QTEFORV9TSElGVAkx MAorI2RlZmluZSBfQ1VSU09SX0FMUEhBX1BMQU5FX01BU0sJKDB4MyA8PCBfQ1VSU09SX0FMUEhB X1BMQU5FX1NISUZUKQorI2RlZmluZSBfQ1VSU09SX1BPU19YX1NISUZUCQkwCisjZGVmaW5lIF9D VVJTT1JfUE9TX1hfTUFTSwkJKDB4MWZmZiA8PCBfQ1VSU09SX1BPU19YX1NISUZUKQorI2RlZmlu ZSBfQ1VSU09SX1NJR05fWF9TSElGVAkJMTUKKyNkZWZpbmUgX0NVUlNPUl9TSUdOX1hfTUFTSwkJ KDEgPDwgX0NVUlNPUl9TSUdOX1hfU0hJRlQpCisjZGVmaW5lIF9DVVJTT1JfUE9TX1lfU0hJRlQJ CTE2CisjZGVmaW5lIF9DVVJTT1JfUE9TX1lfTUFTSwkJKDB4ZmZmIDw8IF9DVVJTT1JfUE9TX1lf U0hJRlQpCisjZGVmaW5lIF9DVVJTT1JfU0lHTl9ZX1NISUZUCQkzMQorI2RlZmluZSBfQ1VSU09S X1NJR05fWV9NQVNLCQkoMSA8PCBfQ1VSU09SX1NJR05fWV9TSElGVCkKKworI2RlZmluZSBfU1BS SVRFX0ZNVF9TSElGVAkJMjUKKyNkZWZpbmUgX1NQUklURV9DT0xPUl9PUkRFUl9TSElGVAkyMAor I2RlZmluZSBfU1BSSVRFX1lVVl9PUkRFUl9TSElGVAkJMTYKKyNkZWZpbmUgX1NQUklURV9TVFJJ REVfU0hJRlQJCTYKKyNkZWZpbmUgX1NQUklURV9TVFJJREVfTUFTSwkJKDB4MWZmIDw8IF9TUFJJ VEVfU1RSSURFX1NISUZUKQorI2RlZmluZSBfU1BSSVRFX1NJWkVfV0lEVEhfU0hJRlQJMAorI2Rl ZmluZSBfU1BSSVRFX1NJWkVfSEVJR0hUX1NISUZUCTE2CisjZGVmaW5lIF9TUFJJVEVfU0laRV9X SURUSF9NQVNLCQkoMHgxZmZmIDw8IF9TUFJJVEVfU0laRV9XSURUSF9TSElGVCkKKyNkZWZpbmUg X1NQUklURV9TSVpFX0hFSUdIVF9NQVNLCSgweGZmZiA8PCBfU1BSSVRFX1NJWkVfSEVJR0hUX1NI SUZUKQorI2RlZmluZSBfU1BSSVRFX1BPU19YX1NISUZUCQkwCisjZGVmaW5lIF9TUFJJVEVfUE9T X1lfU0hJRlQJCTE2CisjZGVmaW5lIF9TUFJJVEVfUE9TX1hfTUFTSwkJKDB4MWZmZiA8PCBfU1BS SVRFX1BPU19YX1NISUZUKQorI2RlZmluZSBfU1BSSVRFX1BPU19ZX01BU0sJCSgweGZmZiA8PCBf U1BSSVRFX1BPU19ZX1NISUZUKQorI2RlZmluZSBfU1BSSVRFX09GRlNFVF9TVEFSVF9YX1NISUZU CTAKKyNkZWZpbmUgX1NQUklURV9PRkZTRVRfU1RBUlRfWV9TSElGVAkxNgorI2RlZmluZSBfU1BS SVRFX09GRlNFVF9TVEFSVF9YX01BU0sJKDB4MWZmZiA8PCBfU1BSSVRFX09GRlNFVF9TVEFSVF9Y X1NISUZUKQorI2RlZmluZSBfU1BSSVRFX09GRlNFVF9TVEFSVF9ZX01BU0sJKDB4ZmZmIDw8IF9T UFJJVEVfT0ZGU0VUX1NUQVJUX1lfU0hJRlQpCisKK2VudW0gR1ZUX0ZCX0VWRU5UIHsKKwlGQl9N T0RFX1NFVF9TVEFSVCA9IDEsCisJRkJfTU9ERV9TRVRfRU5ELAorCUZCX0RJU1BMQVlfRkxJUCwK K307CisKK2VudW0gRERJX1BPUlQgeworCURESV9QT1JUX05PTkUJPSAwLAorCURESV9QT1JUX0IJ PSAxLAorCURESV9QT1JUX0MJPSAyLAorCURESV9QT1JUX0QJPSAzLAorCURESV9QT1JUX0UJPSA0 Cit9OworCitzdHJ1Y3QgaW50ZWxfZ3Z0OworCitzdHJ1Y3QgZ3Z0X2ZiX25vdGlmeV9tc2cgewor CXVuc2lnbmVkIGludCB2bV9pZDsKKwl1bnNpZ25lZCBpbnQgcGlwZV9pZDsgLyogaWQgc3RhcnRp bmcgZnJvbSAwICovCisJdW5zaWduZWQgaW50IHBsYW5lX2lkOyAvKiBwcmltYXJ5LCBjdXJzb3Is IG9yIHNwcml0ZSAqLworfTsKKworLyogY29sb3Igc3BhY2UgY29udmVyc2lvbiBhbmQgZ2FtbWEg Y29ycmVjdGlvbiBhcmUgbm90IGluY2x1ZGVkICovCitzdHJ1Y3QgaW50ZWxfdmdwdV9wcmltYXJ5 X3BsYW5lX2Zvcm1hdCB7CisJdTgJZW5hYmxlZDsJLyogcGxhbmUgaXMgZW5hYmxlZCAqLworCXU4 CXRpbGVkOwkJLyogWC10aWxlZCAqLworCXU4CWJwcDsJCS8qIGJpdHMgcGVyIHBpeGVsICovCisJ dTMyCWh3X2Zvcm1hdDsJLyogZm9ybWF0IGZpZWxkIGluIHRoZSBQUklfQ1RMIHJlZ2lzdGVyICov CisJdTMyCWRybV9mb3JtYXQ7CS8qIGZvcm1hdCBpbiBEUk0gZGVmaW5pdGlvbiAqLworCXUzMgli YXNlOwkJLyogZnJhbWVidWZmZXIgYmFzZSBpbiBncmFwaGljcyBtZW1vcnkgKi8KKwl1MzIJeF9v ZmZzZXQ7CS8qIGluIHBpeGVscyAqLworCXUzMgl5X29mZnNldDsJLyogaW4gbGluZXMgKi8KKwl1 MzIJd2lkdGg7CQkvKiBpbiBwaXhlbHMgKi8KKwl1MzIJaGVpZ2h0OwkJLyogaW4gbGluZXMgKi8K Kwl1MzIJc3RyaWRlOwkJLyogaW4gYnl0ZXMgKi8KK307CisKK3N0cnVjdCBpbnRlbF92Z3B1X3Nw cml0ZV9wbGFuZV9mb3JtYXQgeworCXU4CWVuYWJsZWQ7CS8qIHBsYW5lIGlzIGVuYWJsZWQgKi8K Kwl1OAl0aWxlZDsJCS8qIFgtdGlsZWQgKi8KKwl1OAlicHA7CQkvKiBiaXRzIHBlciBwaXhlbCAq LworCXUzMglod19mb3JtYXQ7CS8qIGZvcm1hdCBmaWVsZCBpbiB0aGUgU1BSX0NUTCByZWdpc3Rl ciAqLworCXUzMglkcm1fZm9ybWF0OwkvKiBmb3JtYXQgaW4gRFJNIGRlZmluaXRpb24gKi8KKwl1 MzIJYmFzZTsJCS8qIHNwcml0ZSBiYXNlIGluIGdyYXBoaWNzIG1lbW9yeSAqLworCXUzMgl4X3Bv czsJCS8qIGluIHBpeGVscyAqLworCXUzMgl5X3BvczsJCS8qIGluIGxpbmVzICovCisJdTMyCXhf b2Zmc2V0OwkvKiBpbiBwaXhlbHMgKi8KKwl1MzIJeV9vZmZzZXQ7CS8qIGluIGxpbmVzICovCisJ dTMyCXdpZHRoOwkJLyogaW4gcGl4ZWxzICovCisJdTMyCWhlaWdodDsJCS8qIGluIGxpbmVzICov CisJdTMyCXN0cmlkZTsJCS8qIGluIGJ5dGVzICovCit9OworCitzdHJ1Y3QgaW50ZWxfdmdwdV9j dXJzb3JfcGxhbmVfZm9ybWF0IHsKKwl1OAllbmFibGVkOworCXU4CW1vZGU7CQkvKiBjdXJzb3Ig bW9kZSBzZWxlY3QgKi8KKwl1OAlicHA7CQkvKiBiaXRzIHBlciBwaXhlbCAqLworCXUzMglkcm1f Zm9ybWF0OwkvKiBmb3JtYXQgaW4gRFJNIGRlZmluaXRpb24gKi8KKwl1MzIJYmFzZTsJCS8qIGN1 cnNvciBiYXNlIGluIGdyYXBoaWNzIG1lbW9yeSAqLworCXUzMgl4X3BvczsJCS8qIGluIHBpeGVs cyAqLworCXUzMgl5X3BvczsJCS8qIGluIGxpbmVzICovCisJdTgJeF9zaWduOwkJLyogWCBQb3Np dGlvbiBTaWduICovCisJdTgJeV9zaWduOwkJLyogWSBQb3NpdGlvbiBTaWduICovCisJdTMyCXdp ZHRoOwkJLyogaW4gcGl4ZWxzICovCisJdTMyCWhlaWdodDsJCS8qIGluIGxpbmVzICovCisJdTMy CXhfaG90OwkJLyogaW4gcGl4ZWxzICovCisJdTMyCXlfaG90OwkJLyogaW4gcGl4ZWxzICovCit9 OworCitzdHJ1Y3QgaW50ZWxfdmdwdV9waXBlX2Zvcm1hdCB7CisJc3RydWN0IGludGVsX3ZncHVf cHJpbWFyeV9wbGFuZV9mb3JtYXQJcHJpbWFyeTsKKwlzdHJ1Y3QgaW50ZWxfdmdwdV9zcHJpdGVf cGxhbmVfZm9ybWF0CXNwcml0ZTsKKwlzdHJ1Y3QgaW50ZWxfdmdwdV9jdXJzb3JfcGxhbmVfZm9y bWF0CWN1cnNvcjsKKwllbnVtIERESV9QT1JUIGRkaV9wb3J0OyAgLyogdGhlIERESSBwb3J0IHRo YXQgcGlwZSBpcyBjb25uZWN0ZWQgdG8gKi8KK307CisKK3N0cnVjdCBpbnRlbF92Z3B1X2ZiX2Zv cm1hdCB7CisJc3RydWN0IGludGVsX3ZncHVfcGlwZV9mb3JtYXQJcGlwZXNbSTkxNV9NQVhfUElQ RVNdOworfTsKKworaW50IGludGVsX3ZncHVfZGVjb2RlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGlu dGVsX3ZncHUgKnZncHUsCisJc3RydWN0IGludGVsX3ZncHVfcHJpbWFyeV9wbGFuZV9mb3JtYXQg KnBsYW5lKTsKK2ludCBpbnRlbF92Z3B1X2RlY29kZV9jdXJzb3JfcGxhbmUoc3RydWN0IGludGVs X3ZncHUgKnZncHUsCisJc3RydWN0IGludGVsX3ZncHVfY3Vyc29yX3BsYW5lX2Zvcm1hdCAqcGxh bmUpOworaW50IGludGVsX3ZncHVfZGVjb2RlX3Nwcml0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfdmdw dSAqdmdwdSwKKwlzdHJ1Y3QgaW50ZWxfdmdwdV9zcHJpdGVfcGxhbmVfZm9ybWF0ICpwbGFuZSk7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCmluZGV4IDkzMDczMmUuLmM0MjI2NmMgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvZ3Z0LmgKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJzY2hlZF9w b2xpY3kuaCIKICNpbmNsdWRlICJyZW5kZXIuaCIKICNpbmNsdWRlICJjbWRfcGFyc2VyLmgiCisj aW5jbHVkZSAiZmJfZGVjb2Rlci5oIgogCiAjZGVmaW5lIEdWVF9NQVhfVkdQVSA4CiAKLS0gCjIu Ny40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK