From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rex Zhu Subject: [PATCH 1/4] drm/amd/pp: Move helper functions to smu_help.c Date: Mon, 12 Mar 2018 20:34:07 +0800 Message-ID: <1520858050-7338-1-git-send-email-Rex.Zhu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Rex Zhu U2lnbmVkLW9mZi1ieTogUmV4IFpodSA8UmV4LlpodUBhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL01ha2VmaWxlICAgICB8ICAgMiArLQogZHJpdmVycy9n cHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvaHdtZ3IuYyAgICAgIHwgNTEzICstLS0tLS0tLS0t LS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3NtdV9oZWxw ZXIuYyB8IDUzNiArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9w b3dlcnBsYXkvaHdtZ3Ivc211X2hlbHBlci5oIHwgMTgwICsrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9pbmMvaHdtZ3IuaCAgICAgICAgfCAxNTUgKy0tLS0tLQogNSBmaWxl cyBjaGFuZ2VkLCA3MjMgaW5zZXJ0aW9ucygrKSwgNjYzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3NtdV9oZWxwZXIu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdy L3NtdV9oZWxwZXIuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5 L2h3bWdyL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvTWFr ZWZpbGUKaW5kZXggMWZhOWE5Ny4uNDU1ZTU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9wb3dlcnBsYXkvaHdtZ3IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9w b3dlcnBsYXkvaHdtZ3IvTWFrZWZpbGUKQEAgLTMxLDcgKzMxLDcgQEAgSEFSRFdBUkVfTUdSID0g aHdtZ3IubyBwcm9jZXNzcHB0YWJsZXMubyBcCiAJCXNtdTdfY2xvY2twb3dlcmdhdGluZy5vIFwK IAkJdmVnYTEwX3Byb2Nlc3NwcHRhYmxlcy5vIHZlZ2ExMF9od21nci5vIHZlZ2ExMF9wb3dlcnR1 bmUubyBcCiAJCXZlZ2ExMF90aGVybWFsLm8gc211MTBfaHdtZ3IubyBwcF9wc20ub1wKLQkJcHBf b3ZlcmRyaXZlci5vCisJCXBwX292ZXJkcml2ZXIubyBzbXVfaGVscGVyLm8KIAogQU1EX1BQX0hX TUdSID0gJChhZGRwcmVmaXggJChBTURfUFBfUEFUSCkvaHdtZ3IvLCQoSEFSRFdBUkVfTUdSKSkK IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvaHdtZ3Iu YyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2h3bWdyLmMKaW5kZXggMzQz MmRjMC4uNTU2M2I2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkv aHdtZ3IvaHdtZ3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9o d21nci5jCkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSA8ZHJtL2FtZGdwdV9kcm0uaD4KICNp bmNsdWRlICJwb3dlcl9zdGF0ZS5oIgogI2luY2x1ZGUgImh3bWdyLmgiCi0jaW5jbHVkZSAicHBw Y2llbGFuZXMuaCIKLSNpbmNsdWRlICJwcGF0b21jdHJsLmgiCiAjaW5jbHVkZSAicHBzbWMuaCIK ICNpbmNsdWRlICJhbWRfYWNwaS5oIgogI2luY2x1ZGUgInBwX3BzbS5oIgpAQCAtNDUsNyArNDMs MTEgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHBfc211bWdyX2Z1bmMgdmVnYTEwX3NtdV9mdW5j czsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHBfc211bWdyX2Z1bmMgc211MTBfc211X2Z1bmNzOwog CitleHRlcm4gaW50IHNtdTdfaW5pdF9mdW5jdGlvbl9wb2ludGVycyhzdHJ1Y3QgcHBfaHdtZ3Ig Kmh3bWdyKTsKIGV4dGVybiBpbnQgY3pfaW5pdF9mdW5jdGlvbl9wb2ludGVycyhzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyKTsKK2V4dGVybiBpbnQgdmVnYTEwX2h3bWdyX2luaXQoc3RydWN0IHBwX2h3 bWdyICpod21ncik7CitleHRlcm4gaW50IHNtdTEwX2luaXRfZnVuY3Rpb25fcG9pbnRlcnMoc3Ry dWN0IHBwX2h3bWdyICpod21ncik7CisKIHN0YXRpYyBpbnQgcG9sYXJpc19zZXRfYXNpY19zcGVj aWFsX2NhcHMoc3RydWN0IHBwX2h3bWdyICpod21ncik7CiBzdGF0aWMgdm9pZCBod21ncl9pbml0 X2RlZmF1bHRfY2FwcyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKIHN0YXRpYyBpbnQgaHdtZ3Jf c2V0X3VzZXJfc3BlY2lmeV9jYXBzKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpOwpAQCAtNTQsMzIg KzU2LDYgQEAKIHN0YXRpYyBpbnQgdG9wYXpfc2V0X2FzaWNfc3BlY2lhbF9jYXBzKHN0cnVjdCBw cF9od21nciAqaHdtZ3IpOwogc3RhdGljIGludCBjaV9zZXRfYXNpY19zcGVjaWFsX2NhcHMoc3Ry dWN0IHBwX2h3bWdyICpod21ncik7CiAKLXVpbnQ4X3QgY29udmVydF90b192aWQodWludDE2X3Qg dmRkYykKLXsKLQlyZXR1cm4gKHVpbnQ4X3QpICgoNjIwMCAtICh2ZGRjICogVk9MVEFHRV9TQ0FM RSkpIC8gMjUpOwotfQotCi11aW50MTZfdCBjb252ZXJ0X3RvX3ZkZGModWludDhfdCB2aWQpCi17 Ci0JcmV0dXJuICh1aW50MTZfdCkgKCg2MjAwIC0gKHZpZCAqIDI1KSkgLyBWT0xUQUdFX1NDQUxF KTsKLX0KLQotdWludDMyX3QgcGhtX3NldF9maWVsZF90b191MzIodTMyIG9mZnNldCwgdTMyIG9y aWdpbmFsX2RhdGEsIHUzMiBmaWVsZCwgdTMyIHNpemUpCi17Ci0JdTMyIG1hc2sgPSAwOwotCXUz MiBzaGlmdCA9IDA7Ci0KLQlzaGlmdCA9IChvZmZzZXQgJSA0KSA8PCAzOwotCWlmIChzaXplID09 IHNpemVvZih1aW50OF90KSkKLQkJbWFzayA9IDB4RkYgPDwgc2hpZnQ7Ci0JZWxzZSBpZiAoc2l6 ZSA9PSBzaXplb2YodWludDE2X3QpKQotCQltYXNrID0gMHhGRkZGIDw8IHNoaWZ0OwotCi0Jb3Jp Z2luYWxfZGF0YSAmPSB+bWFzazsKLQlvcmlnaW5hbF9kYXRhIHw9IChmaWVsZCA8PCBzaGlmdCk7 Ci0JcmV0dXJuIG9yaWdpbmFsX2RhdGE7Ci19Ci0KIHN0YXRpYyBpbnQgcGhtX3RoZXJtYWxfbDJo X2lycSh2b2lkICpwcml2YXRlX2RhdGEsCiAJCSB1bnNpZ25lZCBzcmNfaWQsIGNvbnN0IHVpbnQz Ml90ICppdl9lbnRyeSkKIHsKQEAgLTQzMiw0NjggKzQwOCw2IEBAIGludCBod21ncl9oYW5kbGVf dGFzayhzdHJ1Y3QgcHBfaW5zdGFuY2UgKmhhbmRsZSwgZW51bSBhbWRfcHBfdGFzayB0YXNrX2lk LAogCX0KIAlyZXR1cm4gcmV0OwogfQotLyoqCi0gKiBSZXR1cm5zIG9uY2UgdGhlIHBhcnQgb2Yg dGhlIHJlZ2lzdGVyIGluZGljYXRlZCBieSB0aGUgbWFzayBoYXMKLSAqIHJlYWNoZWQgdGhlIGdp dmVuIHZhbHVlLgotICovCi1pbnQgcGhtX3dhaXRfb25fcmVnaXN0ZXIoc3RydWN0IHBwX2h3bWdy ICpod21nciwgdWludDMyX3QgaW5kZXgsCi0JCQkgdWludDMyX3QgdmFsdWUsIHVpbnQzMl90IG1h c2spCi17Ci0JdWludDMyX3QgaTsKLQl1aW50MzJfdCBjdXJfdmFsdWU7Ci0KLQlpZiAoaHdtZ3Ig PT0gTlVMTCB8fCBod21nci0+ZGV2aWNlID09IE5VTEwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIEhh cmR3YXJlIE1hbmFnZXIhIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBod21nci0+dXNlY190aW1lb3V0OyBpKyspIHsKLQkJY3VyX3ZhbHVlID0gY2dzX3JlYWRf cmVnaXN0ZXIoaHdtZ3ItPmRldmljZSwgaW5kZXgpOwotCQlpZiAoKGN1cl92YWx1ZSAmIG1hc2sp ID09ICh2YWx1ZSAmIG1hc2spKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxKTsKLQl9Ci0KLQkvKiB0 aW1lb3V0IG1lYW5zIHdyb25nIGxvZ2ljKi8KLQlpZiAoaSA9PSBod21nci0+dXNlY190aW1lb3V0 KQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqCi0gKiBSZXR1cm5zIG9uY2Ug dGhlIHBhcnQgb2YgdGhlIHJlZ2lzdGVyIGluZGljYXRlZCBieSB0aGUgbWFzayBoYXMKLSAqIHJl YWNoZWQgdGhlIGdpdmVuIHZhbHVlLlRoZSBpbmRpcmVjdCBzcGFjZSBpcyBkZXNjcmliZWQgYnkg Z2l2aW5nCi0gKiB0aGUgbWVtb3J5LW1hcHBlZCBpbmRleCBvZiB0aGUgaW5kaXJlY3QgaW5kZXgg cmVnaXN0ZXIuCi0gKi8KLWludCBwaG1fd2FpdF9vbl9pbmRpcmVjdF9yZWdpc3RlcihzdHJ1Y3Qg cHBfaHdtZ3IgKmh3bWdyLAotCQkJCXVpbnQzMl90IGluZGlyZWN0X3BvcnQsCi0JCQkJdWludDMy X3QgaW5kZXgsCi0JCQkJdWludDMyX3QgdmFsdWUsCi0JCQkJdWludDMyX3QgbWFzaykKLXsKLQlp ZiAoaHdtZ3IgPT0gTlVMTCB8fCBod21nci0+ZGV2aWNlID09IE5VTEwpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIEhhcmR3YXJlIE1hbmFnZXIhIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNn c193cml0ZV9yZWdpc3Rlcihod21nci0+ZGV2aWNlLCBpbmRpcmVjdF9wb3J0LCBpbmRleCk7Ci0J cmV0dXJuIHBobV93YWl0X29uX3JlZ2lzdGVyKGh3bWdyLCBpbmRpcmVjdF9wb3J0ICsgMSwgbWFz aywgdmFsdWUpOwotfQotCi1pbnQgcGhtX3dhaXRfZm9yX3JlZ2lzdGVyX3VuZXF1YWwoc3RydWN0 IHBwX2h3bWdyICpod21nciwKLQkJCQkJdWludDMyX3QgaW5kZXgsCi0JCQkJCXVpbnQzMl90IHZh bHVlLCB1aW50MzJfdCBtYXNrKQotewotCXVpbnQzMl90IGk7Ci0JdWludDMyX3QgY3VyX3ZhbHVl OwotCi0JaWYgKGh3bWdyID09IE5VTEwgfHwgaHdtZ3ItPmRldmljZSA9PSBOVUxMKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQotCWZvciAoaSA9IDA7IGkgPCBod21nci0+dXNlY190aW1lb3V0OyBpKysp IHsKLQkJY3VyX3ZhbHVlID0gY2dzX3JlYWRfcmVnaXN0ZXIoaHdtZ3ItPmRldmljZSwKLQkJCQkJ CQkJCWluZGV4KTsKLQkJaWYgKChjdXJfdmFsdWUgJiBtYXNrKSAhPSAodmFsdWUgJiBtYXNrKSkK LQkJCWJyZWFrOwotCQl1ZGVsYXkoMSk7Ci0JfQotCi0JLyogdGltZW91dCBtZWFucyB3cm9uZyBs b2dpYyAqLwotCWlmIChpID09IGh3bWdyLT51c2VjX3RpbWVvdXQpCi0JCXJldHVybiAtRVRJTUU7 Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBwaG1fd2FpdF9mb3JfaW5kaXJlY3RfcmVnaXN0ZXJfdW5l cXVhbChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAotCQkJCQkJdWludDMyX3QgaW5kaXJlY3RfcG9y dCwKLQkJCQkJCXVpbnQzMl90IGluZGV4LAotCQkJCQkJdWludDMyX3QgdmFsdWUsCi0JCQkJCQl1 aW50MzJfdCBtYXNrKQotewotCWlmIChod21nciA9PSBOVUxMIHx8IGh3bWdyLT5kZXZpY2UgPT0g TlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljZ3Nfd3JpdGVfcmVnaXN0ZXIoaHdtZ3ItPmRl dmljZSwgaW5kaXJlY3RfcG9ydCwgaW5kZXgpOwotCXJldHVybiBwaG1fd2FpdF9mb3JfcmVnaXN0 ZXJfdW5lcXVhbChod21nciwgaW5kaXJlY3RfcG9ydCArIDEsCi0JCQkJCQl2YWx1ZSwgbWFzayk7 Ci19Ci0KLWJvb2wgcGhtX2NmX3dhbnRfdXZkX3Bvd2VyX2dhdGluZyhzdHJ1Y3QgcHBfaHdtZ3Ig Kmh3bWdyKQotewotCXJldHVybiBwaG1fY2FwX2VuYWJsZWQoaHdtZ3ItPnBsYXRmb3JtX2Rlc2Ny aXB0b3IucGxhdGZvcm1DYXBzLCBQSE1fUGxhdGZvcm1DYXBzX1VWRFBvd2VyR2F0aW5nKTsKLX0K LQotYm9vbCBwaG1fY2Zfd2FudF92Y2VfcG93ZXJfZ2F0aW5nKHN0cnVjdCBwcF9od21nciAqaHdt Z3IpCi17Ci0JcmV0dXJuIHBobV9jYXBfZW5hYmxlZChod21nci0+cGxhdGZvcm1fZGVzY3JpcHRv ci5wbGF0Zm9ybUNhcHMsIFBITV9QbGF0Zm9ybUNhcHNfVkNFUG93ZXJHYXRpbmcpOwotfQotCi0K LWludCBwaG1fdHJpbV92b2x0YWdlX3RhYmxlKHN0cnVjdCBwcF9hdG9tY3RybF92b2x0YWdlX3Rh YmxlICp2b2xfdGFibGUpCi17Ci0JdWludDMyX3QgaSwgajsKLQl1aW50MTZfdCB2dmFsdWU7Ci0J Ym9vbCBmb3VuZCA9IGZhbHNlOwotCXN0cnVjdCBwcF9hdG9tY3RybF92b2x0YWdlX3RhYmxlICp0 YWJsZTsKLQotCVBQX0FTU0VSVF9XSVRIX0NPREUoKE5VTEwgIT0gdm9sX3RhYmxlKSwKLQkJCSJW b2x0YWdlIFRhYmxlIGVtcHR5LiIsIHJldHVybiAtRUlOVkFMKTsKLQotCXRhYmxlID0ga3phbGxv YyhzaXplb2Yoc3RydWN0IHBwX2F0b21jdHJsX3ZvbHRhZ2VfdGFibGUpLAotCQkJR0ZQX0tFUk5F TCk7Ci0KLQlpZiAoTlVMTCA9PSB0YWJsZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0YWJsZS0+ bWFza19sb3cgPSB2b2xfdGFibGUtPm1hc2tfbG93OwotCXRhYmxlLT5waGFzZV9kZWxheSA9IHZv bF90YWJsZS0+cGhhc2VfZGVsYXk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdm9sX3RhYmxlLT5jb3Vu dDsgaSsrKSB7Ci0JCXZ2YWx1ZSA9IHZvbF90YWJsZS0+ZW50cmllc1tpXS52YWx1ZTsKLQkJZm91 bmQgPSBmYWxzZTsKLQotCQlmb3IgKGogPSAwOyBqIDwgdGFibGUtPmNvdW50OyBqKyspIHsKLQkJ CWlmICh2dmFsdWUgPT0gdGFibGUtPmVudHJpZXNbal0udmFsdWUpIHsKLQkJCQlmb3VuZCA9IHRy dWU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIWZvdW5kKSB7Ci0JCQl0YWJsZS0+ ZW50cmllc1t0YWJsZS0+Y291bnRdLnZhbHVlID0gdnZhbHVlOwotCQkJdGFibGUtPmVudHJpZXNb dGFibGUtPmNvdW50XS5zbWlvX2xvdyA9Ci0JCQkJCXZvbF90YWJsZS0+ZW50cmllc1tpXS5zbWlv X2xvdzsKLQkJCXRhYmxlLT5jb3VudCsrOwotCQl9Ci0JfQotCi0JbWVtY3B5KHZvbF90YWJsZSwg dGFibGUsIHNpemVvZihzdHJ1Y3QgcHBfYXRvbWN0cmxfdm9sdGFnZV90YWJsZSkpOwotCWtmcmVl KHRhYmxlKTsKLQl0YWJsZSA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBwaG1fZ2V0X3N2 aTJfbXZkZF92b2x0YWdlX3RhYmxlKHN0cnVjdCBwcF9hdG9tY3RybF92b2x0YWdlX3RhYmxlICp2 b2xfdGFibGUsCi0JCXBobV9wcHRfdjFfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICpk ZXBfdGFibGUpCi17Ci0JdWludDMyX3QgaTsKLQlpbnQgcmVzdWx0OwotCi0JUFBfQVNTRVJUX1dJ VEhfQ09ERSgoMCAhPSBkZXBfdGFibGUtPmNvdW50KSwKLQkJCSJWb2x0YWdlIERlcGVuZGVuY3kg VGFibGUgZW1wdHkuIiwgcmV0dXJuIC1FSU5WQUwpOwotCi0JUFBfQVNTRVJUX1dJVEhfQ09ERSgo TlVMTCAhPSB2b2xfdGFibGUpLAotCQkJInZvbF90YWJsZSBlbXB0eS4iLCByZXR1cm4gLUVJTlZB TCk7Ci0KLQl2b2xfdGFibGUtPm1hc2tfbG93ID0gMDsKLQl2b2xfdGFibGUtPnBoYXNlX2RlbGF5 ID0gMDsKLQl2b2xfdGFibGUtPmNvdW50ID0gZGVwX3RhYmxlLT5jb3VudDsKLQotCWZvciAoaSA9 IDA7IGkgPCBkZXBfdGFibGUtPmNvdW50OyBpKyspIHsKLQkJdm9sX3RhYmxlLT5lbnRyaWVzW2ld LnZhbHVlID0gZGVwX3RhYmxlLT5lbnRyaWVzW2ldLm12ZGQ7Ci0JCXZvbF90YWJsZS0+ZW50cmll c1tpXS5zbWlvX2xvdyA9IDA7Ci0JfQotCi0JcmVzdWx0ID0gcGhtX3RyaW1fdm9sdGFnZV90YWJs ZSh2b2xfdGFibGUpOwotCVBQX0FTU0VSVF9XSVRIX0NPREUoKDAgPT0gcmVzdWx0KSwKLQkJCSJG YWlsZWQgdG8gdHJpbSBNVkREIHRhYmxlLiIsIHJldHVybiByZXN1bHQpOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLWludCBwaG1fZ2V0X3N2aTJfdmRkY2lfdm9sdGFnZV90YWJsZShzdHJ1Y3QgcHBfYXRv bWN0cmxfdm9sdGFnZV90YWJsZSAqdm9sX3RhYmxlLAotCQlwaG1fcHB0X3YxX2Nsb2NrX3ZvbHRh Z2VfZGVwZW5kZW5jeV90YWJsZSAqZGVwX3RhYmxlKQotewotCXVpbnQzMl90IGk7Ci0JaW50IHJl c3VsdDsKLQotCVBQX0FTU0VSVF9XSVRIX0NPREUoKDAgIT0gZGVwX3RhYmxlLT5jb3VudCksCi0J CQkiVm9sdGFnZSBEZXBlbmRlbmN5IFRhYmxlIGVtcHR5LiIsIHJldHVybiAtRUlOVkFMKTsKLQot CVBQX0FTU0VSVF9XSVRIX0NPREUoKE5VTEwgIT0gdm9sX3RhYmxlKSwKLQkJCSJ2b2xfdGFibGUg ZW1wdHkuIiwgcmV0dXJuIC1FSU5WQUwpOwotCi0Jdm9sX3RhYmxlLT5tYXNrX2xvdyA9IDA7Ci0J dm9sX3RhYmxlLT5waGFzZV9kZWxheSA9IDA7Ci0Jdm9sX3RhYmxlLT5jb3VudCA9IGRlcF90YWJs ZS0+Y291bnQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGVwX3RhYmxlLT5jb3VudDsgaSsrKSB7Ci0J CXZvbF90YWJsZS0+ZW50cmllc1tpXS52YWx1ZSA9IGRlcF90YWJsZS0+ZW50cmllc1tpXS52ZGRj aTsKLQkJdm9sX3RhYmxlLT5lbnRyaWVzW2ldLnNtaW9fbG93ID0gMDsKLQl9Ci0KLQlyZXN1bHQg PSBwaG1fdHJpbV92b2x0YWdlX3RhYmxlKHZvbF90YWJsZSk7Ci0JUFBfQVNTRVJUX1dJVEhfQ09E RSgoMCA9PSByZXN1bHQpLAotCQkJIkZhaWxlZCB0byB0cmltIFZERENJIHRhYmxlLiIsIHJldHVy biByZXN1bHQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBwaG1fZ2V0X3N2aTJfdmRkX3ZvbHRh Z2VfdGFibGUoc3RydWN0IHBwX2F0b21jdHJsX3ZvbHRhZ2VfdGFibGUgKnZvbF90YWJsZSwKLQkJ cGhtX3BwdF92MV92b2x0YWdlX2xvb2t1cF90YWJsZSAqbG9va3VwX3RhYmxlKQotewotCWludCBp ID0gMDsKLQotCVBQX0FTU0VSVF9XSVRIX0NPREUoKDAgIT0gbG9va3VwX3RhYmxlLT5jb3VudCks Ci0JCQkiVm9sdGFnZSBMb29rdXAgVGFibGUgZW1wdHkuIiwgcmV0dXJuIC1FSU5WQUwpOwotCi0J UFBfQVNTRVJUX1dJVEhfQ09ERSgoTlVMTCAhPSB2b2xfdGFibGUpLAotCQkJInZvbF90YWJsZSBl bXB0eS4iLCByZXR1cm4gLUVJTlZBTCk7Ci0KLQl2b2xfdGFibGUtPm1hc2tfbG93ID0gMDsKLQl2 b2xfdGFibGUtPnBoYXNlX2RlbGF5ID0gMDsKLQotCXZvbF90YWJsZS0+Y291bnQgPSBsb29rdXBf dGFibGUtPmNvdW50OwotCi0JZm9yIChpID0gMDsgaSA8IHZvbF90YWJsZS0+Y291bnQ7IGkrKykg ewotCQl2b2xfdGFibGUtPmVudHJpZXNbaV0udmFsdWUgPSBsb29rdXBfdGFibGUtPmVudHJpZXNb aV0udXNfdmRkOwotCQl2b2xfdGFibGUtPmVudHJpZXNbaV0uc21pb19sb3cgPSAwOwotCX0KLQot CXJldHVybiAwOwotfQotCi12b2lkIHBobV90cmltX3ZvbHRhZ2VfdGFibGVfdG9fZml0X3N0YXRl X3RhYmxlKHVpbnQzMl90IG1heF92b2xfc3RlcHMsCi0JCQkJc3RydWN0IHBwX2F0b21jdHJsX3Zv bHRhZ2VfdGFibGUgKnZvbF90YWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgaSwgZGlmZjsKLQotCWlm ICh2b2xfdGFibGUtPmNvdW50IDw9IG1heF92b2xfc3RlcHMpCi0JCXJldHVybjsKLQotCWRpZmYg PSB2b2xfdGFibGUtPmNvdW50IC0gbWF4X3ZvbF9zdGVwczsKLQotCWZvciAoaSA9IDA7IGkgPCBt YXhfdm9sX3N0ZXBzOyBpKyspCi0JCXZvbF90YWJsZS0+ZW50cmllc1tpXSA9IHZvbF90YWJsZS0+ ZW50cmllc1tpICsgZGlmZl07Ci0KLQl2b2xfdGFibGUtPmNvdW50ID0gbWF4X3ZvbF9zdGVwczsK LQotCXJldHVybjsKLX0KLQotaW50IHBobV9yZXNldF9zaW5nbGVfZHBtX3RhYmxlKHZvaWQgKnRh YmxlLAotCQkJCXVpbnQzMl90IGNvdW50LCBpbnQgbWF4KQotewotCWludCBpOwotCi0Jc3RydWN0 IHZpX2RwbV90YWJsZSAqZHBtX3RhYmxlID0gKHN0cnVjdCB2aV9kcG1fdGFibGUgKil0YWJsZTsK LQotCWRwbV90YWJsZS0+Y291bnQgPSBjb3VudCA+IG1heCA/IG1heCA6IGNvdW50OwotCi0JZm9y IChpID0gMDsgaSA8IGRwbV90YWJsZS0+Y291bnQ7IGkrKykKLQkJZHBtX3RhYmxlLT5kcG1fbGV2 ZWxbaV0uZW5hYmxlZCA9IGZhbHNlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcGhtX3NldHVw X3BjaWVfdGFibGVfZW50cnkoCi0Jdm9pZCAqdGFibGUsCi0JdWludDMyX3QgaW5kZXgsIHVpbnQz Ml90IHBjaWVfZ2VuLAotCXVpbnQzMl90IHBjaWVfbGFuZXMpCi17Ci0Jc3RydWN0IHZpX2RwbV90 YWJsZSAqZHBtX3RhYmxlID0gKHN0cnVjdCB2aV9kcG1fdGFibGUgKil0YWJsZTsKLQlkcG1fdGFi bGUtPmRwbV9sZXZlbFtpbmRleF0udmFsdWUgPSBwY2llX2dlbjsKLQlkcG1fdGFibGUtPmRwbV9s ZXZlbFtpbmRleF0ucGFyYW0xID0gcGNpZV9sYW5lczsKLQlkcG1fdGFibGUtPmRwbV9sZXZlbFtp bmRleF0uZW5hYmxlZCA9IDE7Ci19Ci0KLWludDMyX3QgcGhtX2dldF9kcG1fbGV2ZWxfZW5hYmxl X21hc2tfdmFsdWUodm9pZCAqdGFibGUpCi17Ci0JaW50MzJfdCBpOwotCWludDMyX3QgbWFzayA9 IDA7Ci0Jc3RydWN0IHZpX2RwbV90YWJsZSAqZHBtX3RhYmxlID0gKHN0cnVjdCB2aV9kcG1fdGFi bGUgKil0YWJsZTsKLQotCWZvciAoaSA9IGRwbV90YWJsZS0+Y291bnQ7IGkgPiAwOyBpLS0pIHsK LQkJbWFzayA9IG1hc2sgPDwgMTsKLQkJaWYgKGRwbV90YWJsZS0+ZHBtX2xldmVsW2kgLSAxXS5l bmFibGVkKQotCQkJbWFzayB8PSAweDE7Ci0JCWVsc2UKLQkJCW1hc2sgJj0gMHhGRkZGRkZGRTsK LQl9Ci0KLQlyZXR1cm4gbWFzazsKLX0KLQotdWludDhfdCBwaG1fZ2V0X3ZvbHRhZ2VfaW5kZXgo Ci0JCXN0cnVjdCBwaG1fcHB0X3YxX3ZvbHRhZ2VfbG9va3VwX3RhYmxlICpsb29rdXBfdGFibGUs IHVpbnQxNl90IHZvbHRhZ2UpCi17Ci0JdWludDhfdCBjb3VudCA9ICh1aW50OF90KSAobG9va3Vw X3RhYmxlLT5jb3VudCk7Ci0JdWludDhfdCBpOwotCi0JUFBfQVNTRVJUX1dJVEhfQ09ERSgoTlVM TCAhPSBsb29rdXBfdGFibGUpLAotCQkJIkxvb2t1cCBUYWJsZSBlbXB0eS4iLCByZXR1cm4gMCk7 Ci0JUFBfQVNTRVJUX1dJVEhfQ09ERSgoMCAhPSBjb3VudCksCi0JCQkiTG9va3VwIFRhYmxlIGVt cHR5LiIsIHJldHVybiAwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBsb29rdXBfdGFibGUtPmNvdW50 OyBpKyspIHsKLQkJLyogZmluZCBmaXJzdCB2b2x0YWdlIGVxdWFsIG9yIGJpZ2dlciB0aGFuIHJl cXVlc3RlZCAqLwotCQlpZiAobG9va3VwX3RhYmxlLT5lbnRyaWVzW2ldLnVzX3ZkZCA+PSB2b2x0 YWdlKQotCQkJcmV0dXJuIGk7Ci0JfQotCS8qIHZvbHRhZ2UgaXMgYmlnZ2VyIHRoYW4gbWF4IHZv bHRhZ2UgaW4gdGhlIHRhYmxlICovCi0JcmV0dXJuIGkgLSAxOwotfQotCi11aW50OF90IHBobV9n ZXRfdm9sdGFnZV9pZChwcF9hdG9tY3RybF92b2x0YWdlX3RhYmxlICp2b2x0YWdlX3RhYmxlLAot CQl1aW50MzJfdCB2b2x0YWdlKQotewotCXVpbnQ4X3QgY291bnQgPSAodWludDhfdCkgKHZvbHRh Z2VfdGFibGUtPmNvdW50KTsKLQl1aW50OF90IGkgPSAwOwotCi0JUFBfQVNTRVJUX1dJVEhfQ09E RSgoTlVMTCAhPSB2b2x0YWdlX3RhYmxlKSwKLQkJIlZvbHRhZ2UgVGFibGUgZW1wdHkuIiwgcmV0 dXJuIDA7KTsKLQlQUF9BU1NFUlRfV0lUSF9DT0RFKCgwICE9IGNvdW50KSwKLQkJIlZvbHRhZ2Ug VGFibGUgZW1wdHkuIiwgcmV0dXJuIDA7KTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr KSB7Ci0JCS8qIGZpbmQgZmlyc3Qgdm9sdGFnZSBiaWdnZXIgdGhhbiByZXF1ZXN0ZWQgKi8KLQkJ aWYgKHZvbHRhZ2VfdGFibGUtPmVudHJpZXNbaV0udmFsdWUgPj0gdm9sdGFnZSkKLQkJCXJldHVy biBpOwotCX0KLQotCS8qIHZvbHRhZ2UgaXMgYmlnZ2VyIHRoYW4gbWF4IHZvbHRhZ2UgaW4gdGhl IHRhYmxlICovCi0JcmV0dXJuIGkgLSAxOwotfQotCi11aW50MTZfdCBwaG1fZmluZF9jbG9zZXN0 X3ZkZGNpKHN0cnVjdCBwcF9hdG9tY3RybF92b2x0YWdlX3RhYmxlICp2ZGRjaV90YWJsZSwgdWlu dDE2X3QgdmRkY2kpCi17Ci0JdWludDMyX3QgIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdmRkY2lf dGFibGUtPmNvdW50OyBpKyspIHsKLQkJaWYgKHZkZGNpX3RhYmxlLT5lbnRyaWVzW2ldLnZhbHVl ID49IHZkZGNpKQotCQkJcmV0dXJuIHZkZGNpX3RhYmxlLT5lbnRyaWVzW2ldLnZhbHVlOwotCX0K LQotCXByX2RlYnVnKCJ2ZGRjaSBpcyBsYXJnZXIgdGhhbiBtYXggdmFsdWUgaW4gdmRkY2lfdGFi bGVcbiIpOwotCXJldHVybiB2ZGRjaV90YWJsZS0+ZW50cmllc1tpLTFdLnZhbHVlOwotfQotCi1p bnQgcGhtX2ZpbmRfYm9vdF9sZXZlbCh2b2lkICp0YWJsZSwKLQkJdWludDMyX3QgdmFsdWUsIHVp bnQzMl90ICpib290X2xldmVsKQotewotCWludCByZXN1bHQgPSAtRUlOVkFMOwotCXVpbnQzMl90 IGk7Ci0Jc3RydWN0IHZpX2RwbV90YWJsZSAqZHBtX3RhYmxlID0gKHN0cnVjdCB2aV9kcG1fdGFi bGUgKil0YWJsZTsKLQotCWZvciAoaSA9IDA7IGkgPCBkcG1fdGFibGUtPmNvdW50OyBpKyspIHsK LQkJaWYgKHZhbHVlID09IGRwbV90YWJsZS0+ZHBtX2xldmVsW2ldLnZhbHVlKSB7Ci0JCQkqYm9v dF9sZXZlbCA9IGk7Ci0JCQlyZXN1bHQgPSAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsK LX0KLQotaW50IHBobV9nZXRfc2Nsa19mb3Jfdm9sdGFnZV9ldnYoc3RydWN0IHBwX2h3bWdyICpo d21nciwKLQlwaG1fcHB0X3YxX3ZvbHRhZ2VfbG9va3VwX3RhYmxlICpsb29rdXBfdGFibGUsCi0J dWludDE2X3QgdmlydHVhbF92b2x0YWdlX2lkLCBpbnQzMl90ICpzY2xrKQotewotCXVpbnQ4X3Qg ZW50cnlfaWQ7Ci0JdWludDhfdCB2b2x0YWdlX2lkOwotCXN0cnVjdCBwaG1fcHB0X3YxX2luZm9y bWF0aW9uICp0YWJsZV9pbmZvID0KLQkJCShzdHJ1Y3QgcGhtX3BwdF92MV9pbmZvcm1hdGlvbiAq KShod21nci0+cHB0YWJsZSk7Ci0KLQlQUF9BU1NFUlRfV0lUSF9DT0RFKGxvb2t1cF90YWJsZS0+ Y291bnQgIT0gMCwgIkxvb2t1cCB0YWJsZSBpcyBlbXB0eSIsIHJldHVybiAtRUlOVkFMKTsKLQot CS8qIHNlYXJjaCBmb3IgbGVha2FnZSB2b2x0YWdlIElEIDB4ZmYwMSB+IDB4ZmYwOCBhbmQgc2Nr bCAqLwotCWZvciAoZW50cnlfaWQgPSAwOyBlbnRyeV9pZCA8IHRhYmxlX2luZm8tPnZkZF9kZXBf b25fc2Nsay0+Y291bnQ7IGVudHJ5X2lkKyspIHsKLQkJdm9sdGFnZV9pZCA9IHRhYmxlX2luZm8t PnZkZF9kZXBfb25fc2Nsay0+ZW50cmllc1tlbnRyeV9pZF0udmRkSW5kOwotCQlpZiAobG9va3Vw X3RhYmxlLT5lbnRyaWVzW3ZvbHRhZ2VfaWRdLnVzX3ZkZCA9PSB2aXJ0dWFsX3ZvbHRhZ2VfaWQp Ci0JCQlicmVhazsKLQl9Ci0KLQlpZiAoZW50cnlfaWQgPj0gdGFibGVfaW5mby0+dmRkX2RlcF9v bl9zY2xrLT5jb3VudCkgewotCQlwcl9kZWJ1ZygiQ2FuJ3QgZmluZCByZXF1ZXN0ZWQgdm9sdGFn ZSBpZCBpbiB2ZGRfZGVwX29uX3NjbGsgdGFibGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQkqc2NsayA9IHRhYmxlX2luZm8tPnZkZF9kZXBfb25fc2Nsay0+ZW50cmllc1tlbnRyeV9p ZF0uY2xrOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogSW5pdGlhbGl6ZSBEeW5hbWljIFN0 YXRlIEFkanVzdG1lbnQgUnVsZSBTZXR0aW5ncwotICoKLSAqIEBwYXJhbSAgICBod21nciAgdGhl IGFkZHJlc3Mgb2YgdGhlIHBvd2VycGxheSBoYXJkd2FyZSBtYW5hZ2VyLgotICovCi1pbnQgcGht X2luaXRpYWxpemFfZHluYW1pY19zdGF0ZV9hZGp1c3RtZW50X3J1bGVfc2V0dGluZ3Moc3RydWN0 IHBwX2h3bWdyICpod21ncikKLXsKLQl1aW50MzJfdCB0YWJsZV9zaXplOwotCXN0cnVjdCBwaG1f Y2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICp0YWJsZV9jbGtfdmx0OwotCXN0cnVjdCBw aG1fcHB0X3YxX2luZm9ybWF0aW9uICpwcHRhYmxlX2luZm8gPSAoc3RydWN0IHBobV9wcHRfdjFf aW5mb3JtYXRpb24gKikoaHdtZ3ItPnBwdGFibGUpOwotCi0JLyogaW5pdGlhbGl6ZSB2ZGRjX2Rl cF9vbl9kYWxfcHdybCB0YWJsZSAqLwotCXRhYmxlX3NpemUgPSBzaXplb2YodWludDMyX3QpICsg NCAqIHNpemVvZihzdHJ1Y3QgcGhtX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV9yZWNvcmQpOwot CXRhYmxlX2Nsa192bHQgPSBremFsbG9jKHRhYmxlX3NpemUsIEdGUF9LRVJORUwpOwotCi0JaWYg KE5VTEwgPT0gdGFibGVfY2xrX3ZsdCkgewotCQlwcl9lcnIoIkNhbiBub3QgYWxsb2NhdGUgc3Bh Y2UgZm9yIHZkZGNfZGVwX29uX2RhbF9wd3JsISBcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9 IGVsc2UgewotCQl0YWJsZV9jbGtfdmx0LT5jb3VudCA9IDQ7Ci0JCXRhYmxlX2Nsa192bHQtPmVu dHJpZXNbMF0uY2xrID0gUFBfREFMX1BPV0VSTEVWRUxfVUxUUkFMT1c7Ci0JCXRhYmxlX2Nsa192 bHQtPmVudHJpZXNbMF0udiA9IDA7Ci0JCXRhYmxlX2Nsa192bHQtPmVudHJpZXNbMV0uY2xrID0g UFBfREFMX1BPV0VSTEVWRUxfTE9XOwotCQl0YWJsZV9jbGtfdmx0LT5lbnRyaWVzWzFdLnYgPSA3 MjA7Ci0JCXRhYmxlX2Nsa192bHQtPmVudHJpZXNbMl0uY2xrID0gUFBfREFMX1BPV0VSTEVWRUxf Tk9NSU5BTDsKLQkJdGFibGVfY2xrX3ZsdC0+ZW50cmllc1syXS52ID0gODEwOwotCQl0YWJsZV9j bGtfdmx0LT5lbnRyaWVzWzNdLmNsayA9IFBQX0RBTF9QT1dFUkxFVkVMX1BFUkZPUk1BTkNFOwot CQl0YWJsZV9jbGtfdmx0LT5lbnRyaWVzWzNdLnYgPSA5MDA7Ci0JCWlmIChwcHRhYmxlX2luZm8g IT0gTlVMTCkKLQkJCXBwdGFibGVfaW5mby0+dmRkY19kZXBfb25fZGFsX3B3cmwgPSB0YWJsZV9j bGtfdmx0OwotCQlod21nci0+ZHluX3N0YXRlLnZkZGNfZGVwX29uX2RhbF9wd3JsID0gdGFibGVf Y2xrX3ZsdDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdWludDMyX3QgcGhtX2dldF9sb3dlc3Rf ZW5hYmxlZF9sZXZlbChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50MzJfdCBtYXNrKQotewot CXVpbnQzMl90IGxldmVsID0gMDsKLQotCXdoaWxlICgwID09IChtYXNrICYgKDEgPDwgbGV2ZWwp KSkKLQkJbGV2ZWwrKzsKLQotCXJldHVybiBsZXZlbDsKLX0KLQotdm9pZCBwaG1fYXBwbHlfZGFs X21pbl92b2x0YWdlX3JlcXVlc3Qoc3RydWN0IHBwX2h3bWdyICpod21ncikKLXsKLQlzdHJ1Y3Qg cGhtX3BwdF92MV9pbmZvcm1hdGlvbiAqdGFibGVfaW5mbyA9Ci0JCQkoc3RydWN0IHBobV9wcHRf djFfaW5mb3JtYXRpb24gKilod21nci0+cHB0YWJsZTsKLQlzdHJ1Y3QgcGhtX2Nsb2NrX3ZvbHRh Z2VfZGVwZW5kZW5jeV90YWJsZSAqdGFibGUgPQotCQkJCXRhYmxlX2luZm8tPnZkZGNfZGVwX29u X2RhbF9wd3JsOwotCXN0cnVjdCBwaG1fcHB0X3YxX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90 YWJsZSAqdmRkY190YWJsZTsKLQllbnVtIFBQX0RBTF9QT1dFUkxFVkVMIGRhbF9wb3dlcl9sZXZl bCA9IGh3bWdyLT5kYWxfcG93ZXJfbGV2ZWw7Ci0JdWludDMyX3QgcmVxX3ZkZGMgPSAwLCByZXFf dm9sdCwgaTsKLQotCWlmICghdGFibGUgfHwgdGFibGUtPmNvdW50IDw9IDAKLQkJfHwgZGFsX3Bv d2VyX2xldmVsIDwgUFBfREFMX1BPV0VSTEVWRUxfVUxUUkFMT1cKLQkJfHwgZGFsX3Bvd2VyX2xl dmVsID4gUFBfREFMX1BPV0VSTEVWRUxfUEVSRk9STUFOQ0UpCi0JCXJldHVybjsKLQotCWZvciAo aSA9IDA7IGkgPCB0YWJsZS0+Y291bnQ7IGkrKykgewotCQlpZiAoZGFsX3Bvd2VyX2xldmVsID09 IHRhYmxlLT5lbnRyaWVzW2ldLmNsaykgewotCQkJcmVxX3ZkZGMgPSB0YWJsZS0+ZW50cmllc1tp XS52OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQl2ZGRjX3RhYmxlID0gdGFibGVfaW5mby0+dmRk X2RlcF9vbl9zY2xrOwotCWZvciAoaSA9IDA7IGkgPCB2ZGRjX3RhYmxlLT5jb3VudDsgaSsrKSB7 Ci0JCWlmIChyZXFfdmRkYyA8PSB2ZGRjX3RhYmxlLT5lbnRyaWVzW2ldLnZkZGMpIHsKLQkJCXJl cV92b2x0ID0gKCgodWludDMyX3QpdmRkY190YWJsZS0+ZW50cmllc1tpXS52ZGRjKSAqIFZPTFRB R0VfU0NBTEUpOwotCQkJc211bV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoaHdtZ3Is Ci0JCQkJCVBQU01DX01TR19WZGRDX1JlcXVlc3QsIHJlcV92b2x0KTsKLQkJCXJldHVybjsKLQkJ fQotCX0KLQlwcl9lcnIoIkRBTCByZXF1ZXN0ZWQgbGV2ZWwgY2FuIG5vdCIKLQkJCSIgZm91bmQg YSBhdmFpbGFibGUgdm9sdGFnZSBpbiBWRERDIERQTSBUYWJsZSBcbiIpOwotfQogCiB2b2lkIGh3 bWdyX2luaXRfZGVmYXVsdF9jYXBzKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCiB7CkBAIC05NTQs MjUgKzQ2OCw2IEBAIGludCBod21ncl9zZXRfdXNlcl9zcGVjaWZ5X2NhcHMoc3RydWN0IHBwX2h3 bWdyICpod21ncikKIAlyZXR1cm4gMDsKIH0KIAotaW50IHBobV9nZXRfdm9sdGFnZV9ldnZfb25f c2NsayhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50OF90IHZvbHRhZ2VfdHlwZSwKLQkJCQl1 aW50MzJfdCBzY2xrLCB1aW50MTZfdCBpZCwgdWludDE2X3QgKnZvbHRhZ2UpCi17Ci0JdWludDMy X3Qgdm9sOwotCWludCByZXQgPSAwOwotCi0JaWYgKGh3bWdyLT5jaGlwX2lkIDwgQ0hJUF9UT05H QSkgewotCQlyZXQgPSBhdG9tY3RybF9nZXRfdm9sdGFnZV9ldnYoaHdtZ3IsIGlkLCB2b2x0YWdl KTsKLQl9IGVsc2UgaWYgKGh3bWdyLT5jaGlwX2lkIDwgQ0hJUF9QT0xBUklTMTApIHsKLQkJcmV0 ID0gYXRvbWN0cmxfZ2V0X3ZvbHRhZ2VfZXZ2X29uX3NjbGsoaHdtZ3IsIHZvbHRhZ2VfdHlwZSwg c2NsaywgaWQsIHZvbHRhZ2UpOwotCQlpZiAoKnZvbHRhZ2UgPj0gMjAwMCB8fCAqdm9sdGFnZSA9 PSAwKQotCQkJKnZvbHRhZ2UgPSAxMTUwOwotCX0gZWxzZSB7Ci0JCXJldCA9IGF0b21jdHJsX2dl dF92b2x0YWdlX2V2dl9vbl9zY2xrX2FpKGh3bWdyLCB2b2x0YWdlX3R5cGUsIHNjbGssIGlkLCAm dm9sKTsKLQkJKnZvbHRhZ2UgPSAodWludDE2X3QpKHZvbC8xMDApOwotCX0KLQlyZXR1cm4gcmV0 OwotfQotCiBpbnQgcG9sYXJpc19zZXRfYXNpY19zcGVjaWFsX2NhcHMoc3RydWN0IHBwX2h3bWdy ICpod21ncikKIHsKIAlwaG1fY2FwX3NldChod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5wbGF0 Zm9ybUNhcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21n ci9zbXVfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9zbXVf aGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExZGFmNQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3NtdV9o ZWxwZXIuYwpAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IEFkdmFuY2Vk IE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IK KyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlICJo d21nci5oIgorI2luY2x1ZGUgInBwX2RlYnVnLmgiCisjaW5jbHVkZSAicHBhdG9tY3RybC5oIgor I2luY2x1ZGUgInBwc21jLmgiCisKK3VpbnQ4X3QgY29udmVydF90b192aWQodWludDE2X3QgdmRk YykKK3sKKwlyZXR1cm4gKHVpbnQ4X3QpICgoNjIwMCAtICh2ZGRjICogVk9MVEFHRV9TQ0FMRSkp IC8gMjUpOworfQorCit1aW50MTZfdCBjb252ZXJ0X3RvX3ZkZGModWludDhfdCB2aWQpCit7CisJ cmV0dXJuICh1aW50MTZfdCkgKCg2MjAwIC0gKHZpZCAqIDI1KSkgLyBWT0xUQUdFX1NDQUxFKTsK K30KKwordWludDMyX3QgcGhtX3NldF9maWVsZF90b191MzIodTMyIG9mZnNldCwgdTMyIG9yaWdp bmFsX2RhdGEsIHUzMiBmaWVsZCwgdTMyIHNpemUpCit7CisJdTMyIG1hc2sgPSAwOworCXUzMiBz aGlmdCA9IDA7CisKKwlzaGlmdCA9IChvZmZzZXQgJSA0KSA8PCAzOworCWlmIChzaXplID09IHNp emVvZih1aW50OF90KSkKKwkJbWFzayA9IDB4RkYgPDwgc2hpZnQ7CisJZWxzZSBpZiAoc2l6ZSA9 PSBzaXplb2YodWludDE2X3QpKQorCQltYXNrID0gMHhGRkZGIDw8IHNoaWZ0OworCisJb3JpZ2lu YWxfZGF0YSAmPSB+bWFzazsKKwlvcmlnaW5hbF9kYXRhIHw9IChmaWVsZCA8PCBzaGlmdCk7CisJ cmV0dXJuIG9yaWdpbmFsX2RhdGE7Cit9CisKKy8qKgorICogUmV0dXJucyBvbmNlIHRoZSBwYXJ0 IG9mIHRoZSByZWdpc3RlciBpbmRpY2F0ZWQgYnkgdGhlIG1hc2sgaGFzCisgKiByZWFjaGVkIHRo ZSBnaXZlbiB2YWx1ZS4KKyAqLworaW50IHBobV93YWl0X29uX3JlZ2lzdGVyKHN0cnVjdCBwcF9o d21nciAqaHdtZ3IsIHVpbnQzMl90IGluZGV4LAorCQkJIHVpbnQzMl90IHZhbHVlLCB1aW50MzJf dCBtYXNrKQoreworCXVpbnQzMl90IGk7CisJdWludDMyX3QgY3VyX3ZhbHVlOworCisJaWYgKGh3 bWdyID09IE5VTEwgfHwgaHdtZ3ItPmRldmljZSA9PSBOVUxMKSB7CisJCXByX2VycigiSW52YWxp ZCBIYXJkd2FyZSBNYW5hZ2VyISIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkg PSAwOyBpIDwgaHdtZ3ItPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCWN1cl92YWx1ZSA9IGNnc19y ZWFkX3JlZ2lzdGVyKGh3bWdyLT5kZXZpY2UsIGluZGV4KTsKKwkJaWYgKChjdXJfdmFsdWUgJiBt YXNrKSA9PSAodmFsdWUgJiBtYXNrKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCisJ LyogdGltZW91dCBtZWFucyB3cm9uZyBsb2dpYyovCisJaWYgKGkgPT0gaHdtZ3ItPnVzZWNfdGlt ZW91dCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisKKy8qKgorICogUmV0dXJucyBv bmNlIHRoZSBwYXJ0IG9mIHRoZSByZWdpc3RlciBpbmRpY2F0ZWQgYnkgdGhlIG1hc2sgaGFzCisg KiByZWFjaGVkIHRoZSBnaXZlbiB2YWx1ZS5UaGUgaW5kaXJlY3Qgc3BhY2UgaXMgZGVzY3JpYmVk IGJ5IGdpdmluZworICogdGhlIG1lbW9yeS1tYXBwZWQgaW5kZXggb2YgdGhlIGluZGlyZWN0IGlu ZGV4IHJlZ2lzdGVyLgorICovCitpbnQgcGhtX3dhaXRfb25faW5kaXJlY3RfcmVnaXN0ZXIoc3Ry dWN0IHBwX2h3bWdyICpod21nciwKKwkJCQl1aW50MzJfdCBpbmRpcmVjdF9wb3J0LAorCQkJCXVp bnQzMl90IGluZGV4LAorCQkJCXVpbnQzMl90IHZhbHVlLAorCQkJCXVpbnQzMl90IG1hc2spCit7 CisJaWYgKGh3bWdyID09IE5VTEwgfHwgaHdtZ3ItPmRldmljZSA9PSBOVUxMKSB7CisJCXByX2Vy cigiSW52YWxpZCBIYXJkd2FyZSBNYW5hZ2VyISIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwljZ3Nfd3JpdGVfcmVnaXN0ZXIoaHdtZ3ItPmRldmljZSwgaW5kaXJlY3RfcG9ydCwgaW5kZXgp OworCXJldHVybiBwaG1fd2FpdF9vbl9yZWdpc3Rlcihod21nciwgaW5kaXJlY3RfcG9ydCArIDEs IG1hc2ssIHZhbHVlKTsKK30KKworaW50IHBobV93YWl0X2Zvcl9yZWdpc3Rlcl91bmVxdWFsKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkJCXVpbnQzMl90IGluZGV4LAorCQkJCQl1aW50MzJf dCB2YWx1ZSwgdWludDMyX3QgbWFzaykKK3sKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IGN1cl92 YWx1ZTsKKworCWlmIChod21nciA9PSBOVUxMIHx8IGh3bWdyLT5kZXZpY2UgPT0gTlVMTCkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHdtZ3ItPnVzZWNfdGltZW91dDsg aSsrKSB7CisJCWN1cl92YWx1ZSA9IGNnc19yZWFkX3JlZ2lzdGVyKGh3bWdyLT5kZXZpY2UsCisJ CQkJCQkJCQlpbmRleCk7CisJCWlmICgoY3VyX3ZhbHVlICYgbWFzaykgIT0gKHZhbHVlICYgbWFz aykpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0KKworCS8qIHRpbWVvdXQgbWVhbnMgd3Jv bmcgbG9naWMgKi8KKwlpZiAoaSA9PSBod21nci0+dXNlY190aW1lb3V0KQorCQlyZXR1cm4gLUVU SU1FOworCXJldHVybiAwOworfQorCitpbnQgcGhtX3dhaXRfZm9yX2luZGlyZWN0X3JlZ2lzdGVy X3VuZXF1YWwoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCQkJCXVpbnQzMl90IGluZGlyZWN0 X3BvcnQsCisJCQkJCQl1aW50MzJfdCBpbmRleCwKKwkJCQkJCXVpbnQzMl90IHZhbHVlLAorCQkJ CQkJdWludDMyX3QgbWFzaykKK3sKKwlpZiAoaHdtZ3IgPT0gTlVMTCB8fCBod21nci0+ZGV2aWNl ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJY2dzX3dyaXRlX3JlZ2lzdGVyKGh3bWdy LT5kZXZpY2UsIGluZGlyZWN0X3BvcnQsIGluZGV4KTsKKwlyZXR1cm4gcGhtX3dhaXRfZm9yX3Jl Z2lzdGVyX3VuZXF1YWwoaHdtZ3IsIGluZGlyZWN0X3BvcnQgKyAxLAorCQkJCQkJdmFsdWUsIG1h c2spOworfQorCitib29sIHBobV9jZl93YW50X3V2ZF9wb3dlcl9nYXRpbmcoc3RydWN0IHBwX2h3 bWdyICpod21ncikKK3sKKwlyZXR1cm4gcGhtX2NhcF9lbmFibGVkKGh3bWdyLT5wbGF0Zm9ybV9k ZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywgUEhNX1BsYXRmb3JtQ2Fwc19VVkRQb3dlckdhdGluZyk7 Cit9CisKK2Jvb2wgcGhtX2NmX3dhbnRfdmNlX3Bvd2VyX2dhdGluZyhzdHJ1Y3QgcHBfaHdtZ3Ig Kmh3bWdyKQoreworCXJldHVybiBwaG1fY2FwX2VuYWJsZWQoaHdtZ3ItPnBsYXRmb3JtX2Rlc2Ny aXB0b3IucGxhdGZvcm1DYXBzLCBQSE1fUGxhdGZvcm1DYXBzX1ZDRVBvd2VyR2F0aW5nKTsKK30K KworCitpbnQgcGhtX3RyaW1fdm9sdGFnZV90YWJsZShzdHJ1Y3QgcHBfYXRvbWN0cmxfdm9sdGFn ZV90YWJsZSAqdm9sX3RhYmxlKQoreworCXVpbnQzMl90IGksIGo7CisJdWludDE2X3QgdnZhbHVl OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKwlzdHJ1Y3QgcHBfYXRvbWN0cmxfdm9sdGFnZV90YWJs ZSAqdGFibGU7CisKKwlQUF9BU1NFUlRfV0lUSF9DT0RFKChOVUxMICE9IHZvbF90YWJsZSksCisJ CQkiVm9sdGFnZSBUYWJsZSBlbXB0eS4iLCByZXR1cm4gLUVJTlZBTCk7CisKKwl0YWJsZSA9IGt6 YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcF9hdG9tY3RybF92b2x0YWdlX3RhYmxlKSwKKwkJCUdGUF9L RVJORUwpOworCisJaWYgKE5VTEwgPT0gdGFibGUpCisJCXJldHVybiAtRUlOVkFMOworCisJdGFi bGUtPm1hc2tfbG93ID0gdm9sX3RhYmxlLT5tYXNrX2xvdzsKKwl0YWJsZS0+cGhhc2VfZGVsYXkg PSB2b2xfdGFibGUtPnBoYXNlX2RlbGF5OworCisJZm9yIChpID0gMDsgaSA8IHZvbF90YWJsZS0+ Y291bnQ7IGkrKykgeworCQl2dmFsdWUgPSB2b2xfdGFibGUtPmVudHJpZXNbaV0udmFsdWU7CisJ CWZvdW5kID0gZmFsc2U7CisKKwkJZm9yIChqID0gMDsgaiA8IHRhYmxlLT5jb3VudDsgaisrKSB7 CisJCQlpZiAodnZhbHVlID09IHRhYmxlLT5lbnRyaWVzW2pdLnZhbHVlKSB7CisJCQkJZm91bmQg PSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFmb3VuZCkgeworCQkJdGFi bGUtPmVudHJpZXNbdGFibGUtPmNvdW50XS52YWx1ZSA9IHZ2YWx1ZTsKKwkJCXRhYmxlLT5lbnRy aWVzW3RhYmxlLT5jb3VudF0uc21pb19sb3cgPQorCQkJCQl2b2xfdGFibGUtPmVudHJpZXNbaV0u c21pb19sb3c7CisJCQl0YWJsZS0+Y291bnQrKzsKKwkJfQorCX0KKworCW1lbWNweSh2b2xfdGFi bGUsIHRhYmxlLCBzaXplb2Yoc3RydWN0IHBwX2F0b21jdHJsX3ZvbHRhZ2VfdGFibGUpKTsKKwlr ZnJlZSh0YWJsZSk7CisJdGFibGUgPSBOVUxMOworCXJldHVybiAwOworfQorCitpbnQgcGhtX2dl dF9zdmkyX212ZGRfdm9sdGFnZV90YWJsZShzdHJ1Y3QgcHBfYXRvbWN0cmxfdm9sdGFnZV90YWJs ZSAqdm9sX3RhYmxlLAorCQlwaG1fcHB0X3YxX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJs ZSAqZGVwX3RhYmxlKQoreworCXVpbnQzMl90IGk7CisJaW50IHJlc3VsdDsKKworCVBQX0FTU0VS VF9XSVRIX0NPREUoKDAgIT0gZGVwX3RhYmxlLT5jb3VudCksCisJCQkiVm9sdGFnZSBEZXBlbmRl bmN5IFRhYmxlIGVtcHR5LiIsIHJldHVybiAtRUlOVkFMKTsKKworCVBQX0FTU0VSVF9XSVRIX0NP REUoKE5VTEwgIT0gdm9sX3RhYmxlKSwKKwkJCSJ2b2xfdGFibGUgZW1wdHkuIiwgcmV0dXJuIC1F SU5WQUwpOworCisJdm9sX3RhYmxlLT5tYXNrX2xvdyA9IDA7CisJdm9sX3RhYmxlLT5waGFzZV9k ZWxheSA9IDA7CisJdm9sX3RhYmxlLT5jb3VudCA9IGRlcF90YWJsZS0+Y291bnQ7CisKKwlmb3Ig KGkgPSAwOyBpIDwgZGVwX3RhYmxlLT5jb3VudDsgaSsrKSB7CisJCXZvbF90YWJsZS0+ZW50cmll c1tpXS52YWx1ZSA9IGRlcF90YWJsZS0+ZW50cmllc1tpXS5tdmRkOworCQl2b2xfdGFibGUtPmVu dHJpZXNbaV0uc21pb19sb3cgPSAwOworCX0KKworCXJlc3VsdCA9IHBobV90cmltX3ZvbHRhZ2Vf dGFibGUodm9sX3RhYmxlKTsKKwlQUF9BU1NFUlRfV0lUSF9DT0RFKCgwID09IHJlc3VsdCksCisJ CQkiRmFpbGVkIHRvIHRyaW0gTVZERCB0YWJsZS4iLCByZXR1cm4gcmVzdWx0KTsKKworCXJldHVy biAwOworfQorCitpbnQgcGhtX2dldF9zdmkyX3ZkZGNpX3ZvbHRhZ2VfdGFibGUoc3RydWN0IHBw X2F0b21jdHJsX3ZvbHRhZ2VfdGFibGUgKnZvbF90YWJsZSwKKwkJcGhtX3BwdF92MV9jbG9ja192 b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKmRlcF90YWJsZSkKK3sKKwl1aW50MzJfdCBpOworCWlu dCByZXN1bHQ7CisKKwlQUF9BU1NFUlRfV0lUSF9DT0RFKCgwICE9IGRlcF90YWJsZS0+Y291bnQp LAorCQkJIlZvbHRhZ2UgRGVwZW5kZW5jeSBUYWJsZSBlbXB0eS4iLCByZXR1cm4gLUVJTlZBTCk7 CisKKwlQUF9BU1NFUlRfV0lUSF9DT0RFKChOVUxMICE9IHZvbF90YWJsZSksCisJCQkidm9sX3Rh YmxlIGVtcHR5LiIsIHJldHVybiAtRUlOVkFMKTsKKworCXZvbF90YWJsZS0+bWFza19sb3cgPSAw OworCXZvbF90YWJsZS0+cGhhc2VfZGVsYXkgPSAwOworCXZvbF90YWJsZS0+Y291bnQgPSBkZXBf dGFibGUtPmNvdW50OworCisJZm9yIChpID0gMDsgaSA8IGRlcF90YWJsZS0+Y291bnQ7IGkrKykg eworCQl2b2xfdGFibGUtPmVudHJpZXNbaV0udmFsdWUgPSBkZXBfdGFibGUtPmVudHJpZXNbaV0u dmRkY2k7CisJCXZvbF90YWJsZS0+ZW50cmllc1tpXS5zbWlvX2xvdyA9IDA7CisJfQorCisJcmVz dWx0ID0gcGhtX3RyaW1fdm9sdGFnZV90YWJsZSh2b2xfdGFibGUpOworCVBQX0FTU0VSVF9XSVRI X0NPREUoKDAgPT0gcmVzdWx0KSwKKwkJCSJGYWlsZWQgdG8gdHJpbSBWRERDSSB0YWJsZS4iLCBy ZXR1cm4gcmVzdWx0KTsKKworCXJldHVybiAwOworfQorCitpbnQgcGhtX2dldF9zdmkyX3ZkZF92 b2x0YWdlX3RhYmxlKHN0cnVjdCBwcF9hdG9tY3RybF92b2x0YWdlX3RhYmxlICp2b2xfdGFibGUs CisJCXBobV9wcHRfdjFfdm9sdGFnZV9sb29rdXBfdGFibGUgKmxvb2t1cF90YWJsZSkKK3sKKwlp bnQgaSA9IDA7CisKKwlQUF9BU1NFUlRfV0lUSF9DT0RFKCgwICE9IGxvb2t1cF90YWJsZS0+Y291 bnQpLAorCQkJIlZvbHRhZ2UgTG9va3VwIFRhYmxlIGVtcHR5LiIsIHJldHVybiAtRUlOVkFMKTsK KworCVBQX0FTU0VSVF9XSVRIX0NPREUoKE5VTEwgIT0gdm9sX3RhYmxlKSwKKwkJCSJ2b2xfdGFi bGUgZW1wdHkuIiwgcmV0dXJuIC1FSU5WQUwpOworCisJdm9sX3RhYmxlLT5tYXNrX2xvdyA9IDA7 CisJdm9sX3RhYmxlLT5waGFzZV9kZWxheSA9IDA7CisKKwl2b2xfdGFibGUtPmNvdW50ID0gbG9v a3VwX3RhYmxlLT5jb3VudDsKKworCWZvciAoaSA9IDA7IGkgPCB2b2xfdGFibGUtPmNvdW50OyBp KyspIHsKKwkJdm9sX3RhYmxlLT5lbnRyaWVzW2ldLnZhbHVlID0gbG9va3VwX3RhYmxlLT5lbnRy aWVzW2ldLnVzX3ZkZDsKKwkJdm9sX3RhYmxlLT5lbnRyaWVzW2ldLnNtaW9fbG93ID0gMDsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwaG1fdHJpbV92b2x0YWdlX3RhYmxlX3RvX2ZpdF9z dGF0ZV90YWJsZSh1aW50MzJfdCBtYXhfdm9sX3N0ZXBzLAorCQkJCXN0cnVjdCBwcF9hdG9tY3Ry bF92b2x0YWdlX3RhYmxlICp2b2xfdGFibGUpCit7CisJdW5zaWduZWQgaW50IGksIGRpZmY7CisK KwlpZiAodm9sX3RhYmxlLT5jb3VudCA8PSBtYXhfdm9sX3N0ZXBzKQorCQlyZXR1cm47CisKKwlk aWZmID0gdm9sX3RhYmxlLT5jb3VudCAtIG1heF92b2xfc3RlcHM7CisKKwlmb3IgKGkgPSAwOyBp IDwgbWF4X3ZvbF9zdGVwczsgaSsrKQorCQl2b2xfdGFibGUtPmVudHJpZXNbaV0gPSB2b2xfdGFi bGUtPmVudHJpZXNbaSArIGRpZmZdOworCisJdm9sX3RhYmxlLT5jb3VudCA9IG1heF92b2xfc3Rl cHM7CisKKwlyZXR1cm47Cit9CisKK2ludCBwaG1fcmVzZXRfc2luZ2xlX2RwbV90YWJsZSh2b2lk ICp0YWJsZSwKKwkJCQl1aW50MzJfdCBjb3VudCwgaW50IG1heCkKK3sKKwlpbnQgaTsKKworCXN0 cnVjdCB2aV9kcG1fdGFibGUgKmRwbV90YWJsZSA9IChzdHJ1Y3QgdmlfZHBtX3RhYmxlICopdGFi bGU7CisKKwlkcG1fdGFibGUtPmNvdW50ID0gY291bnQgPiBtYXggPyBtYXggOiBjb3VudDsKKwor CWZvciAoaSA9IDA7IGkgPCBkcG1fdGFibGUtPmNvdW50OyBpKyspCisJCWRwbV90YWJsZS0+ZHBt X2xldmVsW2ldLmVuYWJsZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCit2b2lkIHBobV9z ZXR1cF9wY2llX3RhYmxlX2VudHJ5KAorCXZvaWQgKnRhYmxlLAorCXVpbnQzMl90IGluZGV4LCB1 aW50MzJfdCBwY2llX2dlbiwKKwl1aW50MzJfdCBwY2llX2xhbmVzKQoreworCXN0cnVjdCB2aV9k cG1fdGFibGUgKmRwbV90YWJsZSA9IChzdHJ1Y3QgdmlfZHBtX3RhYmxlICopdGFibGU7CisJZHBt X3RhYmxlLT5kcG1fbGV2ZWxbaW5kZXhdLnZhbHVlID0gcGNpZV9nZW47CisJZHBtX3RhYmxlLT5k cG1fbGV2ZWxbaW5kZXhdLnBhcmFtMSA9IHBjaWVfbGFuZXM7CisJZHBtX3RhYmxlLT5kcG1fbGV2 ZWxbaW5kZXhdLmVuYWJsZWQgPSAxOworfQorCitpbnQzMl90IHBobV9nZXRfZHBtX2xldmVsX2Vu YWJsZV9tYXNrX3ZhbHVlKHZvaWQgKnRhYmxlKQoreworCWludDMyX3QgaTsKKwlpbnQzMl90IG1h c2sgPSAwOworCXN0cnVjdCB2aV9kcG1fdGFibGUgKmRwbV90YWJsZSA9IChzdHJ1Y3QgdmlfZHBt X3RhYmxlICopdGFibGU7CisKKwlmb3IgKGkgPSBkcG1fdGFibGUtPmNvdW50OyBpID4gMDsgaS0t KSB7CisJCW1hc2sgPSBtYXNrIDw8IDE7CisJCWlmIChkcG1fdGFibGUtPmRwbV9sZXZlbFtpIC0g MV0uZW5hYmxlZCkKKwkJCW1hc2sgfD0gMHgxOworCQllbHNlCisJCQltYXNrICY9IDB4RkZGRkZG RkU7CisJfQorCisJcmV0dXJuIG1hc2s7Cit9CisKK3VpbnQ4X3QgcGhtX2dldF92b2x0YWdlX2lu ZGV4KAorCQlzdHJ1Y3QgcGhtX3BwdF92MV92b2x0YWdlX2xvb2t1cF90YWJsZSAqbG9va3VwX3Rh YmxlLCB1aW50MTZfdCB2b2x0YWdlKQoreworCXVpbnQ4X3QgY291bnQgPSAodWludDhfdCkgKGxv b2t1cF90YWJsZS0+Y291bnQpOworCXVpbnQ4X3QgaTsKKworCVBQX0FTU0VSVF9XSVRIX0NPREUo KE5VTEwgIT0gbG9va3VwX3RhYmxlKSwKKwkJCSJMb29rdXAgVGFibGUgZW1wdHkuIiwgcmV0dXJu IDApOworCVBQX0FTU0VSVF9XSVRIX0NPREUoKDAgIT0gY291bnQpLAorCQkJIkxvb2t1cCBUYWJs ZSBlbXB0eS4iLCByZXR1cm4gMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbG9va3VwX3RhYmxlLT5j b3VudDsgaSsrKSB7CisJCS8qIGZpbmQgZmlyc3Qgdm9sdGFnZSBlcXVhbCBvciBiaWdnZXIgdGhh biByZXF1ZXN0ZWQgKi8KKwkJaWYgKGxvb2t1cF90YWJsZS0+ZW50cmllc1tpXS51c192ZGQgPj0g dm9sdGFnZSkKKwkJCXJldHVybiBpOworCX0KKwkvKiB2b2x0YWdlIGlzIGJpZ2dlciB0aGFuIG1h eCB2b2x0YWdlIGluIHRoZSB0YWJsZSAqLworCXJldHVybiBpIC0gMTsKK30KKwordWludDhfdCBw aG1fZ2V0X3ZvbHRhZ2VfaWQocHBfYXRvbWN0cmxfdm9sdGFnZV90YWJsZSAqdm9sdGFnZV90YWJs ZSwKKwkJdWludDMyX3Qgdm9sdGFnZSkKK3sKKwl1aW50OF90IGNvdW50ID0gKHVpbnQ4X3QpICh2 b2x0YWdlX3RhYmxlLT5jb3VudCk7CisJdWludDhfdCBpID0gMDsKKworCVBQX0FTU0VSVF9XSVRI X0NPREUoKE5VTEwgIT0gdm9sdGFnZV90YWJsZSksCisJCSJWb2x0YWdlIFRhYmxlIGVtcHR5LiIs IHJldHVybiAwOyk7CisJUFBfQVNTRVJUX1dJVEhfQ09ERSgoMCAhPSBjb3VudCksCisJCSJWb2x0 YWdlIFRhYmxlIGVtcHR5LiIsIHJldHVybiAwOyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7 IGkrKykgeworCQkvKiBmaW5kIGZpcnN0IHZvbHRhZ2UgYmlnZ2VyIHRoYW4gcmVxdWVzdGVkICov CisJCWlmICh2b2x0YWdlX3RhYmxlLT5lbnRyaWVzW2ldLnZhbHVlID49IHZvbHRhZ2UpCisJCQly ZXR1cm4gaTsKKwl9CisKKwkvKiB2b2x0YWdlIGlzIGJpZ2dlciB0aGFuIG1heCB2b2x0YWdlIGlu IHRoZSB0YWJsZSAqLworCXJldHVybiBpIC0gMTsKK30KKwordWludDE2X3QgcGhtX2ZpbmRfY2xv c2VzdF92ZGRjaShzdHJ1Y3QgcHBfYXRvbWN0cmxfdm9sdGFnZV90YWJsZSAqdmRkY2lfdGFibGUs IHVpbnQxNl90IHZkZGNpKQoreworCXVpbnQzMl90ICBpOworCisJZm9yIChpID0gMDsgaSA8IHZk ZGNpX3RhYmxlLT5jb3VudDsgaSsrKSB7CisJCWlmICh2ZGRjaV90YWJsZS0+ZW50cmllc1tpXS52 YWx1ZSA+PSB2ZGRjaSkKKwkJCXJldHVybiB2ZGRjaV90YWJsZS0+ZW50cmllc1tpXS52YWx1ZTsK Kwl9CisKKwlwcl9kZWJ1ZygidmRkY2kgaXMgbGFyZ2VyIHRoYW4gbWF4IHZhbHVlIGluIHZkZGNp X3RhYmxlXG4iKTsKKwlyZXR1cm4gdmRkY2lfdGFibGUtPmVudHJpZXNbaS0xXS52YWx1ZTsKK30K KworaW50IHBobV9maW5kX2Jvb3RfbGV2ZWwodm9pZCAqdGFibGUsCisJCXVpbnQzMl90IHZhbHVl LCB1aW50MzJfdCAqYm9vdF9sZXZlbCkKK3sKKwlpbnQgcmVzdWx0ID0gLUVJTlZBTDsKKwl1aW50 MzJfdCBpOworCXN0cnVjdCB2aV9kcG1fdGFibGUgKmRwbV90YWJsZSA9IChzdHJ1Y3QgdmlfZHBt X3RhYmxlICopdGFibGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHBtX3RhYmxlLT5jb3VudDsgaSsr KSB7CisJCWlmICh2YWx1ZSA9PSBkcG1fdGFibGUtPmRwbV9sZXZlbFtpXS52YWx1ZSkgeworCQkJ KmJvb3RfbGV2ZWwgPSBpOworCQkJcmVzdWx0ID0gMDsKKwkJfQorCX0KKworCXJldHVybiByZXN1 bHQ7Cit9CisKK2ludCBwaG1fZ2V0X3NjbGtfZm9yX3ZvbHRhZ2VfZXZ2KHN0cnVjdCBwcF9od21n ciAqaHdtZ3IsCisJcGhtX3BwdF92MV92b2x0YWdlX2xvb2t1cF90YWJsZSAqbG9va3VwX3RhYmxl LAorCXVpbnQxNl90IHZpcnR1YWxfdm9sdGFnZV9pZCwgaW50MzJfdCAqc2NsaykKK3sKKwl1aW50 OF90IGVudHJ5X2lkOworCXVpbnQ4X3Qgdm9sdGFnZV9pZDsKKwlzdHJ1Y3QgcGhtX3BwdF92MV9p bmZvcm1hdGlvbiAqdGFibGVfaW5mbyA9CisJCQkoc3RydWN0IHBobV9wcHRfdjFfaW5mb3JtYXRp b24gKikoaHdtZ3ItPnBwdGFibGUpOworCisJUFBfQVNTRVJUX1dJVEhfQ09ERShsb29rdXBfdGFi bGUtPmNvdW50ICE9IDAsICJMb29rdXAgdGFibGUgaXMgZW1wdHkiLCByZXR1cm4gLUVJTlZBTCk7 CisKKwkvKiBzZWFyY2ggZm9yIGxlYWthZ2Ugdm9sdGFnZSBJRCAweGZmMDEgfiAweGZmMDggYW5k IHNja2wgKi8KKwlmb3IgKGVudHJ5X2lkID0gMDsgZW50cnlfaWQgPCB0YWJsZV9pbmZvLT52ZGRf ZGVwX29uX3NjbGstPmNvdW50OyBlbnRyeV9pZCsrKSB7CisJCXZvbHRhZ2VfaWQgPSB0YWJsZV9p bmZvLT52ZGRfZGVwX29uX3NjbGstPmVudHJpZXNbZW50cnlfaWRdLnZkZEluZDsKKwkJaWYgKGxv b2t1cF90YWJsZS0+ZW50cmllc1t2b2x0YWdlX2lkXS51c192ZGQgPT0gdmlydHVhbF92b2x0YWdl X2lkKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGVudHJ5X2lkID49IHRhYmxlX2luZm8tPnZkZF9k ZXBfb25fc2Nsay0+Y291bnQpIHsKKwkJcHJfZGVidWcoIkNhbid0IGZpbmQgcmVxdWVzdGVkIHZv bHRhZ2UgaWQgaW4gdmRkX2RlcF9vbl9zY2xrIHRhYmxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJKnNjbGsgPSB0YWJsZV9pbmZvLT52ZGRfZGVwX29uX3NjbGstPmVudHJpZXNbZW50 cnlfaWRdLmNsazsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIEluaXRpYWxpemUgRHluYW1p YyBTdGF0ZSBBZGp1c3RtZW50IFJ1bGUgU2V0dGluZ3MKKyAqCisgKiBAcGFyYW0gICAgaHdtZ3Ig IHRoZSBhZGRyZXNzIG9mIHRoZSBwb3dlcnBsYXkgaGFyZHdhcmUgbWFuYWdlci4KKyAqLworaW50 IHBobV9pbml0aWFsaXphX2R5bmFtaWNfc3RhdGVfYWRqdXN0bWVudF9ydWxlX3NldHRpbmdzKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IpCit7CisJdWludDMyX3QgdGFibGVfc2l6ZTsKKwlzdHJ1Y3Qg cGhtX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqdGFibGVfY2xrX3ZsdDsKKwlzdHJ1 Y3QgcGhtX3BwdF92MV9pbmZvcm1hdGlvbiAqcHB0YWJsZV9pbmZvID0gKHN0cnVjdCBwaG1fcHB0 X3YxX2luZm9ybWF0aW9uICopKGh3bWdyLT5wcHRhYmxlKTsKKworCS8qIGluaXRpYWxpemUgdmRk Y19kZXBfb25fZGFsX3B3cmwgdGFibGUgKi8KKwl0YWJsZV9zaXplID0gc2l6ZW9mKHVpbnQzMl90 KSArIDQgKiBzaXplb2Yoc3RydWN0IHBobV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfcmVjb3Jk KTsKKwl0YWJsZV9jbGtfdmx0ID0ga3phbGxvYyh0YWJsZV9zaXplLCBHRlBfS0VSTkVMKTsKKwor CWlmIChOVUxMID09IHRhYmxlX2Nsa192bHQpIHsKKwkJcHJfZXJyKCJDYW4gbm90IGFsbG9jYXRl IHNwYWNlIGZvciB2ZGRjX2RlcF9vbl9kYWxfcHdybCEgXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07 CisJfSBlbHNlIHsKKwkJdGFibGVfY2xrX3ZsdC0+Y291bnQgPSA0OworCQl0YWJsZV9jbGtfdmx0 LT5lbnRyaWVzWzBdLmNsayA9IFBQX0RBTF9QT1dFUkxFVkVMX1VMVFJBTE9XOworCQl0YWJsZV9j bGtfdmx0LT5lbnRyaWVzWzBdLnYgPSAwOworCQl0YWJsZV9jbGtfdmx0LT5lbnRyaWVzWzFdLmNs ayA9IFBQX0RBTF9QT1dFUkxFVkVMX0xPVzsKKwkJdGFibGVfY2xrX3ZsdC0+ZW50cmllc1sxXS52 ID0gNzIwOworCQl0YWJsZV9jbGtfdmx0LT5lbnRyaWVzWzJdLmNsayA9IFBQX0RBTF9QT1dFUkxF VkVMX05PTUlOQUw7CisJCXRhYmxlX2Nsa192bHQtPmVudHJpZXNbMl0udiA9IDgxMDsKKwkJdGFi bGVfY2xrX3ZsdC0+ZW50cmllc1szXS5jbGsgPSBQUF9EQUxfUE9XRVJMRVZFTF9QRVJGT1JNQU5D RTsKKwkJdGFibGVfY2xrX3ZsdC0+ZW50cmllc1szXS52ID0gOTAwOworCQlpZiAocHB0YWJsZV9p bmZvICE9IE5VTEwpCisJCQlwcHRhYmxlX2luZm8tPnZkZGNfZGVwX29uX2RhbF9wd3JsID0gdGFi bGVfY2xrX3ZsdDsKKwkJaHdtZ3ItPmR5bl9zdGF0ZS52ZGRjX2RlcF9vbl9kYWxfcHdybCA9IHRh YmxlX2Nsa192bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3VpbnQzMl90IHBobV9nZXRfbG93 ZXN0X2VuYWJsZWRfbGV2ZWwoc3RydWN0IHBwX2h3bWdyICpod21nciwgdWludDMyX3QgbWFzaykK K3sKKwl1aW50MzJfdCBsZXZlbCA9IDA7CisKKwl3aGlsZSAoMCA9PSAobWFzayAmICgxIDw8IGxl dmVsKSkpCisJCWxldmVsKys7CisKKwlyZXR1cm4gbGV2ZWw7Cit9CisKK3ZvaWQgcGhtX2FwcGx5 X2RhbF9taW5fdm9sdGFnZV9yZXF1ZXN0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCit7CisJc3Ry dWN0IHBobV9wcHRfdjFfaW5mb3JtYXRpb24gKnRhYmxlX2luZm8gPQorCQkJKHN0cnVjdCBwaG1f cHB0X3YxX2luZm9ybWF0aW9uICopaHdtZ3ItPnBwdGFibGU7CisJc3RydWN0IHBobV9jbG9ja192 b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKnRhYmxlID0KKwkJCQl0YWJsZV9pbmZvLT52ZGRjX2Rl cF9vbl9kYWxfcHdybDsKKwlzdHJ1Y3QgcGhtX3BwdF92MV9jbG9ja192b2x0YWdlX2RlcGVuZGVu Y3lfdGFibGUgKnZkZGNfdGFibGU7CisJZW51bSBQUF9EQUxfUE9XRVJMRVZFTCBkYWxfcG93ZXJf bGV2ZWwgPSBod21nci0+ZGFsX3Bvd2VyX2xldmVsOworCXVpbnQzMl90IHJlcV92ZGRjID0gMCwg cmVxX3ZvbHQsIGk7CisKKwlpZiAoIXRhYmxlIHx8IHRhYmxlLT5jb3VudCA8PSAwCisJCXx8IGRh bF9wb3dlcl9sZXZlbCA8IFBQX0RBTF9QT1dFUkxFVkVMX1VMVFJBTE9XCisJCXx8IGRhbF9wb3dl cl9sZXZlbCA+IFBQX0RBTF9QT1dFUkxFVkVMX1BFUkZPUk1BTkNFKQorCQlyZXR1cm47CisKKwlm b3IgKGkgPSAwOyBpIDwgdGFibGUtPmNvdW50OyBpKyspIHsKKwkJaWYgKGRhbF9wb3dlcl9sZXZl bCA9PSB0YWJsZS0+ZW50cmllc1tpXS5jbGspIHsKKwkJCXJlcV92ZGRjID0gdGFibGUtPmVudHJp ZXNbaV0udjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJdmRkY190YWJsZSA9IHRhYmxlX2luZm8t PnZkZF9kZXBfb25fc2NsazsKKwlmb3IgKGkgPSAwOyBpIDwgdmRkY190YWJsZS0+Y291bnQ7IGkr KykgeworCQlpZiAocmVxX3ZkZGMgPD0gdmRkY190YWJsZS0+ZW50cmllc1tpXS52ZGRjKSB7CisJ CQlyZXFfdm9sdCA9ICgoKHVpbnQzMl90KXZkZGNfdGFibGUtPmVudHJpZXNbaV0udmRkYykgKiBW T0xUQUdFX1NDQUxFKTsKKwkJCXNtdW1fc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGh3 bWdyLAorCQkJCQlQUFNNQ19NU0dfVmRkQ19SZXF1ZXN0LCByZXFfdm9sdCk7CisJCQlyZXR1cm47 CisJCX0KKwl9CisJcHJfZXJyKCJEQUwgcmVxdWVzdGVkIGxldmVsIGNhbiBub3QiCisJCQkiIGZv dW5kIGEgYXZhaWxhYmxlIHZvbHRhZ2UgaW4gVkREQyBEUE0gVGFibGUgXG4iKTsKK30KKworaW50 IHBobV9nZXRfdm9sdGFnZV9ldnZfb25fc2NsayhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50 OF90IHZvbHRhZ2VfdHlwZSwKKwkJCQl1aW50MzJfdCBzY2xrLCB1aW50MTZfdCBpZCwgdWludDE2 X3QgKnZvbHRhZ2UpCit7CisJdWludDMyX3Qgdm9sOworCWludCByZXQgPSAwOworCisJaWYgKGh3 bWdyLT5jaGlwX2lkIDwgQ0hJUF9UT05HQSkgeworCQlyZXQgPSBhdG9tY3RybF9nZXRfdm9sdGFn ZV9ldnYoaHdtZ3IsIGlkLCB2b2x0YWdlKTsKKwl9IGVsc2UgaWYgKGh3bWdyLT5jaGlwX2lkIDwg Q0hJUF9QT0xBUklTMTApIHsKKwkJcmV0ID0gYXRvbWN0cmxfZ2V0X3ZvbHRhZ2VfZXZ2X29uX3Nj bGsoaHdtZ3IsIHZvbHRhZ2VfdHlwZSwgc2NsaywgaWQsIHZvbHRhZ2UpOworCQlpZiAoKnZvbHRh Z2UgPj0gMjAwMCB8fCAqdm9sdGFnZSA9PSAwKQorCQkJKnZvbHRhZ2UgPSAxMTUwOworCX0gZWxz ZSB7CisJCXJldCA9IGF0b21jdHJsX2dldF92b2x0YWdlX2V2dl9vbl9zY2xrX2FpKGh3bWdyLCB2 b2x0YWdlX3R5cGUsIHNjbGssIGlkLCAmdm9sKTsKKwkJKnZvbHRhZ2UgPSAodWludDE2X3QpKHZv bC8xMDApOworCX0KKwlyZXR1cm4gcmV0OworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3NtdV9oZWxwZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvcG93ZXJwbGF5L2h3bWdyL3NtdV9oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5hMWE0OTEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvaHdtZ3Ivc211X2hlbHBlci5oCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICog Q29weXJpZ2h0IDIwMTggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1Ig QVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqLworI2lmbmRlZiBfU01VX0hFTFBFUl9IXworI2RlZmluZSBfU01VX0hFTFBFUl9I XworCitzdHJ1Y3QgcHBfYXRvbWN0cmxfdm9sdGFnZV90YWJsZTsKK3N0cnVjdCBwcF9od21ncjsK K3N0cnVjdCBwaG1fcHB0X3YxX3ZvbHRhZ2VfbG9va3VwX3RhYmxlOworCitleHRlcm4gaW50IHBo bV93YWl0X2Zvcl9yZWdpc3Rlcl91bmVxdWFsKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkJ CXVpbnQzMl90IGluZGV4LAorCQkJCQl1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgbWFzayk7Citl eHRlcm4gaW50IHBobV93YWl0X2Zvcl9pbmRpcmVjdF9yZWdpc3Rlcl91bmVxdWFsKAorCQkJCXN0 cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkJdWludDMyX3QgaW5kaXJlY3RfcG9ydCwgdWludDMy X3QgaW5kZXgsCisJCQkJdWludDMyX3QgdmFsdWUsIHVpbnQzMl90IG1hc2spOworCisKK2V4dGVy biBib29sIHBobV9jZl93YW50X3V2ZF9wb3dlcl9nYXRpbmcoc3RydWN0IHBwX2h3bWdyICpod21n cik7CitleHRlcm4gYm9vbCBwaG1fY2Zfd2FudF92Y2VfcG93ZXJfZ2F0aW5nKHN0cnVjdCBwcF9o d21nciAqaHdtZ3IpOworZXh0ZXJuIGJvb2wgcGhtX2NmX3dhbnRfbWljcm9jb2RlX2Zhbl9jdHJs KHN0cnVjdCBwcF9od21nciAqaHdtZ3IpOworCitleHRlcm4gaW50IHBobV90cmltX3ZvbHRhZ2Vf dGFibGUoc3RydWN0IHBwX2F0b21jdHJsX3ZvbHRhZ2VfdGFibGUgKnZvbF90YWJsZSk7CitleHRl cm4gaW50IHBobV9nZXRfc3ZpMl9tdmRkX3ZvbHRhZ2VfdGFibGUoc3RydWN0IHBwX2F0b21jdHJs X3ZvbHRhZ2VfdGFibGUgKnZvbF90YWJsZSwgcGhtX3BwdF92MV9jbG9ja192b2x0YWdlX2RlcGVu ZGVuY3lfdGFibGUgKmRlcF90YWJsZSk7CitleHRlcm4gaW50IHBobV9nZXRfc3ZpMl92ZGRjaV92 b2x0YWdlX3RhYmxlKHN0cnVjdCBwcF9hdG9tY3RybF92b2x0YWdlX3RhYmxlICp2b2xfdGFibGUs IHBobV9wcHRfdjFfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICpkZXBfdGFibGUpOwor ZXh0ZXJuIGludCBwaG1fZ2V0X3N2aTJfdmRkX3ZvbHRhZ2VfdGFibGUoc3RydWN0IHBwX2F0b21j dHJsX3ZvbHRhZ2VfdGFibGUgKnZvbF90YWJsZSwgcGhtX3BwdF92MV92b2x0YWdlX2xvb2t1cF90 YWJsZSAqbG9va3VwX3RhYmxlKTsKK2V4dGVybiB2b2lkIHBobV90cmltX3ZvbHRhZ2VfdGFibGVf dG9fZml0X3N0YXRlX3RhYmxlKHVpbnQzMl90IG1heF92b2xfc3RlcHMsIHN0cnVjdCBwcF9hdG9t Y3RybF92b2x0YWdlX3RhYmxlICp2b2xfdGFibGUpOworZXh0ZXJuIGludCBwaG1fcmVzZXRfc2lu Z2xlX2RwbV90YWJsZSh2b2lkICp0YWJsZSwgdWludDMyX3QgY291bnQsIGludCBtYXgpOworZXh0 ZXJuIHZvaWQgcGhtX3NldHVwX3BjaWVfdGFibGVfZW50cnkodm9pZCAqdGFibGUsIHVpbnQzMl90 IGluZGV4LCB1aW50MzJfdCBwY2llX2dlbiwgdWludDMyX3QgcGNpZV9sYW5lcyk7CitleHRlcm4g aW50MzJfdCBwaG1fZ2V0X2RwbV9sZXZlbF9lbmFibGVfbWFza192YWx1ZSh2b2lkICp0YWJsZSk7 CitleHRlcm4gdWludDhfdCBwaG1fZ2V0X3ZvbHRhZ2VfaWQoc3RydWN0IHBwX2F0b21jdHJsX3Zv bHRhZ2VfdGFibGUgKnZvbHRhZ2VfdGFibGUsCisJCXVpbnQzMl90IHZvbHRhZ2UpOworZXh0ZXJu IHVpbnQ4X3QgcGhtX2dldF92b2x0YWdlX2luZGV4KHN0cnVjdCBwaG1fcHB0X3YxX3ZvbHRhZ2Vf bG9va3VwX3RhYmxlICpsb29rdXBfdGFibGUsIHVpbnQxNl90IHZvbHRhZ2UpOworZXh0ZXJuIHVp bnQxNl90IHBobV9maW5kX2Nsb3Nlc3RfdmRkY2koc3RydWN0IHBwX2F0b21jdHJsX3ZvbHRhZ2Vf dGFibGUgKnZkZGNpX3RhYmxlLCB1aW50MTZfdCB2ZGRjaSk7CitleHRlcm4gaW50IHBobV9maW5k X2Jvb3RfbGV2ZWwodm9pZCAqdGFibGUsIHVpbnQzMl90IHZhbHVlLCB1aW50MzJfdCAqYm9vdF9s ZXZlbCk7CitleHRlcm4gaW50IHBobV9nZXRfc2Nsa19mb3Jfdm9sdGFnZV9ldnYoc3RydWN0IHBw X2h3bWdyICpod21nciwgcGhtX3BwdF92MV92b2x0YWdlX2xvb2t1cF90YWJsZSAqbG9va3VwX3Rh YmxlLAorCQkJCQkJCQl1aW50MTZfdCB2aXJ0dWFsX3ZvbHRhZ2VfaWQsIGludDMyX3QgKnNjbGsp OworZXh0ZXJuIGludCBwaG1faW5pdGlhbGl6YV9keW5hbWljX3N0YXRlX2FkanVzdG1lbnRfcnVs ZV9zZXR0aW5ncyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKK2V4dGVybiB1aW50MzJfdCBwaG1f Z2V0X2xvd2VzdF9lbmFibGVkX2xldmVsKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHVpbnQzMl90 IG1hc2spOworZXh0ZXJuIHZvaWQgcGhtX2FwcGx5X2RhbF9taW5fdm9sdGFnZV9yZXF1ZXN0KHN0 cnVjdCBwcF9od21nciAqaHdtZ3IpOworCitleHRlcm4gaW50IHBobV9nZXRfdm9sdGFnZV9ldnZf b25fc2NsayhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50OF90IHZvbHRhZ2VfdHlwZSwKKwkJ CQl1aW50MzJfdCBzY2xrLCB1aW50MTZfdCBpZCwgdWludDE2X3QgKnZvbHRhZ2UpOworCitleHRl cm4gdWludDMyX3QgcGhtX3NldF9maWVsZF90b191MzIodTMyIG9mZnNldCwgdTMyIG9yaWdpbmFs X2RhdGEsIHUzMiBmaWVsZCwgdTMyIHNpemUpOworCitleHRlcm4gaW50IHBobV93YWl0X29uX3Jl Z2lzdGVyKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHVpbnQzMl90IGluZGV4LAorCQkJCXVpbnQz Ml90IHZhbHVlLCB1aW50MzJfdCBtYXNrKTsKKworZXh0ZXJuIGludCBwaG1fd2FpdF9vbl9pbmRp cmVjdF9yZWdpc3RlcihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJCXVpbnQzMl90IGluZGly ZWN0X3BvcnQsCisJCQkJdWludDMyX3QgaW5kZXgsCisJCQkJdWludDMyX3QgdmFsdWUsCisJCQkJ dWludDMyX3QgbWFzayk7CisKKyNkZWZpbmUgUEhNX0ZJRUxEX1NISUZUKHJlZywgZmllbGQpIHJl ZyMjX18jI2ZpZWxkIyNfX1NISUZUCisjZGVmaW5lIFBITV9GSUVMRF9NQVNLKHJlZywgZmllbGQp IHJlZyMjX18jI2ZpZWxkIyNfTUFTSworCisjZGVmaW5lIFBITV9TRVRfRklFTEQob3JpZ3ZhbCwg cmVnLCBmaWVsZCwgZmllbGR2YWwpCVwKKwkoKChvcmlndmFsKSAmIH5QSE1fRklFTERfTUFTSyhy ZWcsIGZpZWxkKSkgfAlcCisJIChQSE1fRklFTERfTUFTSyhyZWcsIGZpZWxkKSAmICgoZmllbGR2 YWwpIDw8IFBITV9GSUVMRF9TSElGVChyZWcsIGZpZWxkKSkpKQorCisjZGVmaW5lIFBITV9HRVRf RklFTEQodmFsdWUsIHJlZywgZmllbGQpCVwKKwkoKCh2YWx1ZSkgJiBQSE1fRklFTERfTUFTSyhy ZWcsIGZpZWxkKSkgPj4JXAorCSBQSE1fRklFTERfU0hJRlQocmVnLCBmaWVsZCkpCisKKworLyog T3BlcmF0aW9ucyBvbiBuYW1lZCBmaWVsZHMuICovCisKKyNkZWZpbmUgUEhNX1JFQURfRklFTEQo ZGV2aWNlLCByZWcsIGZpZWxkKQlcCisJUEhNX0dFVF9GSUVMRChjZ3NfcmVhZF9yZWdpc3Rlcihk ZXZpY2UsIG1tIyNyZWcpLCByZWcsIGZpZWxkKQorCisjZGVmaW5lIFBITV9SRUFEX0lORElSRUNU X0ZJRUxEKGRldmljZSwgcG9ydCwgcmVnLCBmaWVsZCkJXAorCVBITV9HRVRfRklFTEQoY2dzX3Jl YWRfaW5kX3JlZ2lzdGVyKGRldmljZSwgcG9ydCwgaXgjI3JlZyksCVwKKwkJCXJlZywgZmllbGQp CisKKyNkZWZpbmUgUEhNX1JFQURfVkZQRl9JTkRJUkVDVF9GSUVMRChkZXZpY2UsIHBvcnQsIHJl ZywgZmllbGQpCVwKKwlQSE1fR0VUX0ZJRUxEKGNnc19yZWFkX2luZF9yZWdpc3RlcihkZXZpY2Us IHBvcnQsIGl4IyNyZWcpLAlcCisJCQlyZWcsIGZpZWxkKQorCisjZGVmaW5lIFBITV9XUklURV9G SUVMRChkZXZpY2UsIHJlZywgZmllbGQsIGZpZWxkdmFsKQlcCisJY2dzX3dyaXRlX3JlZ2lzdGVy KGRldmljZSwgbW0jI3JlZywgUEhNX1NFVF9GSUVMRCgJXAorCQkJCWNnc19yZWFkX3JlZ2lzdGVy KGRldmljZSwgbW0jI3JlZyksIHJlZywgZmllbGQsIGZpZWxkdmFsKSkKKworI2RlZmluZSBQSE1f V1JJVEVfSU5ESVJFQ1RfRklFTEQoZGV2aWNlLCBwb3J0LCByZWcsIGZpZWxkLCBmaWVsZHZhbCkJ XAorCWNnc193cml0ZV9pbmRfcmVnaXN0ZXIoZGV2aWNlLCBwb3J0LCBpeCMjcmVnLAlcCisJCQlQ SE1fU0VUX0ZJRUxEKGNnc19yZWFkX2luZF9yZWdpc3RlcihkZXZpY2UsIHBvcnQsIGl4IyNyZWcp LAlcCisJCQkJcmVnLCBmaWVsZCwgZmllbGR2YWwpKQorCisjZGVmaW5lIFBITV9XUklURV9WRlBG X0lORElSRUNUX0ZJRUxEKGRldmljZSwgcG9ydCwgcmVnLCBmaWVsZCwgZmllbGR2YWwpCVwKKwlj Z3Nfd3JpdGVfaW5kX3JlZ2lzdGVyKGRldmljZSwgcG9ydCwgaXgjI3JlZywJXAorCQkJUEhNX1NF VF9GSUVMRChjZ3NfcmVhZF9pbmRfcmVnaXN0ZXIoZGV2aWNlLCBwb3J0LCBpeCMjcmVnKSwJXAor CQkJCXJlZywgZmllbGQsIGZpZWxkdmFsKSkKKworI2RlZmluZSBQSE1fV0FJVF9JTkRJUkVDVF9S RUdJU1RFUl9HSVZFTl9JTkRFWChod21nciwgcG9ydCwgaW5kZXgsIHZhbHVlLCBtYXNrKSAgICAg ICAgXAorICAgICAgIHBobV93YWl0X29uX2luZGlyZWN0X3JlZ2lzdGVyKGh3bWdyLCBtbSMjcG9y dCMjX0lOREVYLCBpbmRleCwgdmFsdWUsIG1hc2spCisKKworI2RlZmluZSBQSE1fV0FJVF9JTkRJ UkVDVF9SRUdJU1RFUihod21nciwgcG9ydCwgcmVnLCB2YWx1ZSwgbWFzaykgICAgICBcCisgICAg ICAgUEhNX1dBSVRfSU5ESVJFQ1RfUkVHSVNURVJfR0lWRU5fSU5ERVgoaHdtZ3IsIHBvcnQsIGl4 IyNyZWcsIHZhbHVlLCBtYXNrKQorCisjZGVmaW5lIFBITV9XQUlUX0lORElSRUNUX0ZJRUxEKGh3 bWdyLCBwb3J0LCByZWcsIGZpZWxkLCBmaWVsZHZhbCkJXAorCVBITV9XQUlUX0lORElSRUNUX1JF R0lTVEVSKGh3bWdyLCBwb3J0LCByZWcsIChmaWVsZHZhbCkJXAorCQkJPDwgUEhNX0ZJRUxEX1NI SUZUKHJlZywgZmllbGQpLCBQSE1fRklFTERfTUFTSyhyZWcsIGZpZWxkKSkKKworI2RlZmluZSBQ SE1fV0FJVF9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFMX0dJVkVOX0lOREVYKGh3bWdyLCBwb3J0 LCBpbmRleCwgdmFsdWUsIG1hc2spICAgIFwKKwkJcGhtX3dhaXRfZm9yX2luZGlyZWN0X3JlZ2lz dGVyX3VuZXF1YWwoaHdtZ3IsICAgICAgICAgICAgICAgICAgIFwKKwkJCQltbSMjcG9ydCMjX0lO REVYLCBpbmRleCwgdmFsdWUsIG1hc2spCisKKyNkZWZpbmUgUEhNX1dBSVRfSU5ESVJFQ1RfUkVH SVNURVJfVU5FUVVBTChod21nciwgcG9ydCwgcmVnLCB2YWx1ZSwgbWFzaykgICAgXAorCQlQSE1f V0FJVF9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFMX0dJVkVOX0lOREVYKGh3bWdyLCBwb3J0LCBp eCMjcmVnLCB2YWx1ZSwgbWFzaykKKworI2RlZmluZSBQSE1fV0FJVF9JTkRJUkVDVF9GSUVMRF9V TkVRVUFMKGh3bWdyLCBwb3J0LCByZWcsIGZpZWxkLCBmaWVsZHZhbCkgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKwkJUEhNX1dBSVRfSU5ESVJFQ1RfUkVHSVNURVJfVU5FUVVBTChod21nciwg cG9ydCwgcmVnLCBcCisJCQkJKGZpZWxkdmFsKSA8PCBQSE1fRklFTERfU0hJRlQocmVnLCBmaWVs ZCksIFwKKwkJCQkJUEhNX0ZJRUxEX01BU0socmVnLCBmaWVsZCkgKQorCisKKyNkZWZpbmUgUEhN X1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFMX0dJVkVOX0lOREVYKGh3bWdyLAlc CisJCQkJcG9ydCwgaW5kZXgsIHZhbHVlLCBtYXNrKQkJXAorCXBobV93YWl0X2Zvcl9pbmRpcmVj dF9yZWdpc3Rlcl91bmVxdWFsKGh3bWdyLAkJCVwKKwkJbW0jI3BvcnQjI19JTkRFWF8xMSwgaW5k ZXgsIHZhbHVlLCBtYXNrKQorCisjZGVmaW5lIFBITV9XQUlUX1ZGUEZfSU5ESVJFQ1RfUkVHSVNU RVJfVU5FUVVBTChod21nciwgcG9ydCwgcmVnLCB2YWx1ZSwgbWFzaykgICAgIFwKKwkJUEhNX1dB SVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFMX0dJVkVOX0lOREVYKGh3bWdyLCBwb3J0 LCBpeCMjcmVnLCB2YWx1ZSwgbWFzaykKKworI2RlZmluZSBQSE1fV0FJVF9WRlBGX0lORElSRUNU X0ZJRUxEX1VORVFVQUwoaHdtZ3IsIHBvcnQsIHJlZywgZmllbGQsIGZpZWxkdmFsKSBcCisJUEhN X1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFMKGh3bWdyLCBwb3J0LCByZWcsCVwK KwkJKGZpZWxkdmFsKSA8PCBQSE1fRklFTERfU0hJRlQocmVnLCBmaWVsZCksCQlcCisJCVBITV9G SUVMRF9NQVNLKHJlZywgZmllbGQpKQorCisKKyNkZWZpbmUgUEhNX1dBSVRfVkZQRl9JTkRJUkVD VF9SRUdJU1RFUl9HSVZFTl9JTkRFWChod21nciwJCVwKKwkJCQlwb3J0LCBpbmRleCwgdmFsdWUs IG1hc2spCQlcCisJcGhtX3dhaXRfb25faW5kaXJlY3RfcmVnaXN0ZXIoaHdtZ3IsCQkJCVwKKwkJ bW0jI3BvcnQjI19JTkRFWF8xMSwgaW5kZXgsIHZhbHVlLCBtYXNrKQorCisjZGVmaW5lIFBITV9X QUlUX1ZGUEZfSU5ESVJFQ1RfUkVHSVNURVIoaHdtZ3IsIHBvcnQsIHJlZywgdmFsdWUsIG1hc2sp IFwKKwlQSE1fV0FJVF9WRlBGX0lORElSRUNUX1JFR0lTVEVSX0dJVkVOX0lOREVYKGh3bWdyLCBw b3J0LCBpeCMjcmVnLCB2YWx1ZSwgbWFzaykKKworI2RlZmluZSBQSE1fV0FJVF9WRlBGX0lORElS RUNUX0ZJRUxEKGh3bWdyLCBwb3J0LCByZWcsIGZpZWxkLCBmaWVsZHZhbCkgXAorCVBITV9XQUlU X1ZGUEZfSU5ESVJFQ1RfUkVHSVNURVIoaHdtZ3IsIHBvcnQsIHJlZywJCVwKKwkJKGZpZWxkdmFs KSA8PCBQSE1fRklFTERfU0hJRlQocmVnLCBmaWVsZCksCQlcCisJCVBITV9GSUVMRF9NQVNLKHJl ZywgZmllbGQpKQorCisjZGVmaW5lIFBITV9XQUlUX1JFR0lTVEVSX1VORVFVQUxfR0lWRU5fSU5E RVgoaHdtZ3IsICAgICAgICAgXAorCQkJCQkJCWluZGV4LCB2YWx1ZSwgbWFzaykgXAorCQlwaG1f d2FpdF9mb3JfcmVnaXN0ZXJfdW5lcXVhbChod21nciwgICAgICAgICAgICBcCisJCQkJCWluZGV4 LCB2YWx1ZSwgbWFzaykKKworI2RlZmluZSBQSE1fV0FJVF9SRUdJU1RFUl9VTkVRVUFMKGh3bWdy LCByZWcsIHZhbHVlLCBtYXNrKQkJXAorCVBITV9XQUlUX1JFR0lTVEVSX1VORVFVQUxfR0lWRU5f SU5ERVgoaHdtZ3IsCQkJXAorCQkJCW1tIyNyZWcsIHZhbHVlLCBtYXNrKQorCisjZGVmaW5lIFBI TV9XQUlUX0ZJRUxEX1VORVFVQUwoaHdtZ3IsIHJlZywgZmllbGQsIGZpZWxkdmFsKQkJXAorCVBI TV9XQUlUX1JFR0lTVEVSX1VORVFVQUwoaHdtZ3IsIHJlZywJCQkJXAorCQkoZmllbGR2YWwpIDw8 IFBITV9GSUVMRF9TSElGVChyZWcsIGZpZWxkKSwJCVwKKwkJUEhNX0ZJRUxEX01BU0socmVnLCBm aWVsZCkpCisKKyNlbmRpZiAvKiBfU01VX0hFTFBFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL2h3bWdyLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1k L3Bvd2VycGxheS9pbmMvaHdtZ3IuaAppbmRleCA5YmRhZDQ4Li4yZTJlNGQwIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvaHdtZ3IuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvaHdtZ3IuaApAQCAtMzIsNyArMzIsNyBAQAogI2lu Y2x1ZGUgInBwYXRvbWN0cmwuaCIKICNpbmNsdWRlICJod21ncl9wcHQuaCIKICNpbmNsdWRlICJw b3dlcl9zdGF0ZS5oIgotI2luY2x1ZGUgImNnc19saW51eC5oIgorI2luY2x1ZGUgInNtdV9oZWxw ZXIuaCIKIAogc3RydWN0IHBwX2luc3RhbmNlOwogc3RydWN0IHBwX2h3bWdyOwpAQCAtNzc3LDE2 MCArNzc3LDkgQEAgc3RydWN0IGNnc19pcnFfc3JjX2Z1bmNzIHsKIGV4dGVybiBpbnQgaHdtZ3Jf aGFuZGxlX3Rhc2soc3RydWN0IHBwX2luc3RhbmNlICpoYW5kbGUsCiAJCQkJZW51bSBhbWRfcHBf dGFzayB0YXNrX2lkLAogCQkJCWVudW0gYW1kX3BtX3N0YXRlX3R5cGUgKnVzZXJfc3RhdGUpOwot ZXh0ZXJuIGludCBwaG1fd2FpdF9vbl9yZWdpc3RlcihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1 aW50MzJfdCBpbmRleCwKLQkJCQl1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgbWFzayk7Ci0KLWV4 dGVybiBpbnQgcGhtX3dhaXRfb25faW5kaXJlY3RfcmVnaXN0ZXIoc3RydWN0IHBwX2h3bWdyICpo d21nciwKLQkJCQl1aW50MzJfdCBpbmRpcmVjdF9wb3J0LAotCQkJCXVpbnQzMl90IGluZGV4LAot CQkJCXVpbnQzMl90IHZhbHVlLAotCQkJCXVpbnQzMl90IG1hc2spOwotCi1leHRlcm4gaW50IHBo bV93YWl0X2Zvcl9yZWdpc3Rlcl91bmVxdWFsKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCi0JCQkJ CXVpbnQzMl90IGluZGV4LAotCQkJCQl1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgbWFzayk7Ci1l eHRlcm4gaW50IHBobV93YWl0X2Zvcl9pbmRpcmVjdF9yZWdpc3Rlcl91bmVxdWFsKAotCQkJCXN0 cnVjdCBwcF9od21nciAqaHdtZ3IsCi0JCQkJdWludDMyX3QgaW5kaXJlY3RfcG9ydCwgdWludDMy X3QgaW5kZXgsCi0JCQkJdWludDMyX3QgdmFsdWUsIHVpbnQzMl90IG1hc2spOwotCi0KLWV4dGVy biBib29sIHBobV9jZl93YW50X3V2ZF9wb3dlcl9nYXRpbmcoc3RydWN0IHBwX2h3bWdyICpod21n cik7Ci1leHRlcm4gYm9vbCBwaG1fY2Zfd2FudF92Y2VfcG93ZXJfZ2F0aW5nKHN0cnVjdCBwcF9o d21nciAqaHdtZ3IpOwotZXh0ZXJuIGJvb2wgcGhtX2NmX3dhbnRfbWljcm9jb2RlX2Zhbl9jdHJs KHN0cnVjdCBwcF9od21nciAqaHdtZ3IpOwotCi1leHRlcm4gaW50IHBobV90cmltX3ZvbHRhZ2Vf dGFibGUoc3RydWN0IHBwX2F0b21jdHJsX3ZvbHRhZ2VfdGFibGUgKnZvbF90YWJsZSk7Ci1leHRl cm4gaW50IHBobV9nZXRfc3ZpMl9tdmRkX3ZvbHRhZ2VfdGFibGUoc3RydWN0IHBwX2F0b21jdHJs X3ZvbHRhZ2VfdGFibGUgKnZvbF90YWJsZSwgcGhtX3BwdF92MV9jbG9ja192b2x0YWdlX2RlcGVu ZGVuY3lfdGFibGUgKmRlcF90YWJsZSk7Ci1leHRlcm4gaW50IHBobV9nZXRfc3ZpMl92ZGRjaV92 b2x0YWdlX3RhYmxlKHN0cnVjdCBwcF9hdG9tY3RybF92b2x0YWdlX3RhYmxlICp2b2xfdGFibGUs IHBobV9wcHRfdjFfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICpkZXBfdGFibGUpOwot ZXh0ZXJuIGludCBwaG1fZ2V0X3N2aTJfdmRkX3ZvbHRhZ2VfdGFibGUoc3RydWN0IHBwX2F0b21j dHJsX3ZvbHRhZ2VfdGFibGUgKnZvbF90YWJsZSwgcGhtX3BwdF92MV92b2x0YWdlX2xvb2t1cF90 YWJsZSAqbG9va3VwX3RhYmxlKTsKLWV4dGVybiB2b2lkIHBobV90cmltX3ZvbHRhZ2VfdGFibGVf dG9fZml0X3N0YXRlX3RhYmxlKHVpbnQzMl90IG1heF92b2xfc3RlcHMsIHN0cnVjdCBwcF9hdG9t Y3RybF92b2x0YWdlX3RhYmxlICp2b2xfdGFibGUpOwotZXh0ZXJuIGludCBwaG1fcmVzZXRfc2lu Z2xlX2RwbV90YWJsZSh2b2lkICp0YWJsZSwgdWludDMyX3QgY291bnQsIGludCBtYXgpOwotZXh0 ZXJuIHZvaWQgcGhtX3NldHVwX3BjaWVfdGFibGVfZW50cnkodm9pZCAqdGFibGUsIHVpbnQzMl90 IGluZGV4LCB1aW50MzJfdCBwY2llX2dlbiwgdWludDMyX3QgcGNpZV9sYW5lcyk7Ci1leHRlcm4g aW50MzJfdCBwaG1fZ2V0X2RwbV9sZXZlbF9lbmFibGVfbWFza192YWx1ZSh2b2lkICp0YWJsZSk7 Ci1leHRlcm4gdWludDhfdCBwaG1fZ2V0X3ZvbHRhZ2VfaWQoc3RydWN0IHBwX2F0b21jdHJsX3Zv bHRhZ2VfdGFibGUgKnZvbHRhZ2VfdGFibGUsCi0JCXVpbnQzMl90IHZvbHRhZ2UpOwotZXh0ZXJu IHVpbnQ4X3QgcGhtX2dldF92b2x0YWdlX2luZGV4KHN0cnVjdCBwaG1fcHB0X3YxX3ZvbHRhZ2Vf bG9va3VwX3RhYmxlICpsb29rdXBfdGFibGUsIHVpbnQxNl90IHZvbHRhZ2UpOwotZXh0ZXJuIHVp bnQxNl90IHBobV9maW5kX2Nsb3Nlc3RfdmRkY2koc3RydWN0IHBwX2F0b21jdHJsX3ZvbHRhZ2Vf dGFibGUgKnZkZGNpX3RhYmxlLCB1aW50MTZfdCB2ZGRjaSk7Ci1leHRlcm4gaW50IHBobV9maW5k X2Jvb3RfbGV2ZWwodm9pZCAqdGFibGUsIHVpbnQzMl90IHZhbHVlLCB1aW50MzJfdCAqYm9vdF9s ZXZlbCk7Ci1leHRlcm4gaW50IHBobV9nZXRfc2Nsa19mb3Jfdm9sdGFnZV9ldnYoc3RydWN0IHBw X2h3bWdyICpod21nciwgcGhtX3BwdF92MV92b2x0YWdlX2xvb2t1cF90YWJsZSAqbG9va3VwX3Rh YmxlLAotCQkJCQkJCQl1aW50MTZfdCB2aXJ0dWFsX3ZvbHRhZ2VfaWQsIGludDMyX3QgKnNjbGsp OwotZXh0ZXJuIGludCBwaG1faW5pdGlhbGl6YV9keW5hbWljX3N0YXRlX2FkanVzdG1lbnRfcnVs ZV9zZXR0aW5ncyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKLWV4dGVybiB1aW50MzJfdCBwaG1f Z2V0X2xvd2VzdF9lbmFibGVkX2xldmVsKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHVpbnQzMl90 IG1hc2spOwotZXh0ZXJuIHZvaWQgcGhtX2FwcGx5X2RhbF9taW5fdm9sdGFnZV9yZXF1ZXN0KHN0 cnVjdCBwcF9od21nciAqaHdtZ3IpOwotCi1leHRlcm4gaW50IHNtdTdfaW5pdF9mdW5jdGlvbl9w b2ludGVycyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKLWV4dGVybiBpbnQgdmVnYTEwX2h3bWdy X2luaXQoc3RydWN0IHBwX2h3bWdyICpod21ncik7Ci1leHRlcm4gaW50IHNtdTEwX2luaXRfZnVu Y3Rpb25fcG9pbnRlcnMoc3RydWN0IHBwX2h3bWdyICpod21ncik7Ci0KLWV4dGVybiBpbnQgcGht X2dldF92b2x0YWdlX2V2dl9vbl9zY2xrKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHVpbnQ4X3Qg dm9sdGFnZV90eXBlLAotCQkJCXVpbnQzMl90IHNjbGssIHVpbnQxNl90IGlkLCB1aW50MTZfdCAq dm9sdGFnZSk7Ci0KLWV4dGVybiB1aW50MzJfdCBwaG1fc2V0X2ZpZWxkX3RvX3UzMih1MzIgb2Zm c2V0LCB1MzIgb3JpZ2luYWxfZGF0YSwgdTMyIGZpZWxkLCB1MzIgc2l6ZSk7CiAKLSNkZWZpbmUg UEhNX0VOVElSRV9SRUdJU1RFUl9NQVNLIDB4RkZGRkZGRkZVCi0KLSNkZWZpbmUgUEhNX0ZJRUxE X1NISUZUKHJlZywgZmllbGQpIHJlZyMjX18jI2ZpZWxkIyNfX1NISUZUCi0jZGVmaW5lIFBITV9G SUVMRF9NQVNLKHJlZywgZmllbGQpIHJlZyMjX18jI2ZpZWxkIyNfTUFTSwotCi0jZGVmaW5lIFBI TV9TRVRfRklFTEQob3JpZ3ZhbCwgcmVnLCBmaWVsZCwgZmllbGR2YWwpCVwKLQkoKChvcmlndmFs KSAmIH5QSE1fRklFTERfTUFTSyhyZWcsIGZpZWxkKSkgfAlcCi0JIChQSE1fRklFTERfTUFTSyhy ZWcsIGZpZWxkKSAmICgoZmllbGR2YWwpIDw8IFBITV9GSUVMRF9TSElGVChyZWcsIGZpZWxkKSkp KQotCi0jZGVmaW5lIFBITV9HRVRfRklFTEQodmFsdWUsIHJlZywgZmllbGQpCVwKLQkoKCh2YWx1 ZSkgJiBQSE1fRklFTERfTUFTSyhyZWcsIGZpZWxkKSkgPj4JXAotCSBQSE1fRklFTERfU0hJRlQo cmVnLCBmaWVsZCkpCi0KLQotLyogT3BlcmF0aW9ucyBvbiBuYW1lZCBmaWVsZHMuICovCi0KLSNk ZWZpbmUgUEhNX1JFQURfRklFTEQoZGV2aWNlLCByZWcsIGZpZWxkKQlcCi0JUEhNX0dFVF9GSUVM RChjZ3NfcmVhZF9yZWdpc3RlcihkZXZpY2UsIG1tIyNyZWcpLCByZWcsIGZpZWxkKQotCi0jZGVm aW5lIFBITV9SRUFEX0lORElSRUNUX0ZJRUxEKGRldmljZSwgcG9ydCwgcmVnLCBmaWVsZCkJXAot CVBITV9HRVRfRklFTEQoY2dzX3JlYWRfaW5kX3JlZ2lzdGVyKGRldmljZSwgcG9ydCwgaXgjI3Jl ZyksCVwKLQkJCXJlZywgZmllbGQpCi0KLSNkZWZpbmUgUEhNX1JFQURfVkZQRl9JTkRJUkVDVF9G SUVMRChkZXZpY2UsIHBvcnQsIHJlZywgZmllbGQpCVwKLQlQSE1fR0VUX0ZJRUxEKGNnc19yZWFk X2luZF9yZWdpc3RlcihkZXZpY2UsIHBvcnQsIGl4IyNyZWcpLAlcCi0JCQlyZWcsIGZpZWxkKQot Ci0jZGVmaW5lIFBITV9XUklURV9GSUVMRChkZXZpY2UsIHJlZywgZmllbGQsIGZpZWxkdmFsKQlc Ci0JY2dzX3dyaXRlX3JlZ2lzdGVyKGRldmljZSwgbW0jI3JlZywgUEhNX1NFVF9GSUVMRCgJXAot CQkJCWNnc19yZWFkX3JlZ2lzdGVyKGRldmljZSwgbW0jI3JlZyksIHJlZywgZmllbGQsIGZpZWxk dmFsKSkKLQotI2RlZmluZSBQSE1fV1JJVEVfSU5ESVJFQ1RfRklFTEQoZGV2aWNlLCBwb3J0LCBy ZWcsIGZpZWxkLCBmaWVsZHZhbCkJXAotCWNnc193cml0ZV9pbmRfcmVnaXN0ZXIoZGV2aWNlLCBw b3J0LCBpeCMjcmVnLAlcCi0JCQlQSE1fU0VUX0ZJRUxEKGNnc19yZWFkX2luZF9yZWdpc3Rlcihk ZXZpY2UsIHBvcnQsIGl4IyNyZWcpLAlcCi0JCQkJcmVnLCBmaWVsZCwgZmllbGR2YWwpKQotCi0j ZGVmaW5lIFBITV9XUklURV9WRlBGX0lORElSRUNUX0ZJRUxEKGRldmljZSwgcG9ydCwgcmVnLCBm aWVsZCwgZmllbGR2YWwpCVwKLQljZ3Nfd3JpdGVfaW5kX3JlZ2lzdGVyKGRldmljZSwgcG9ydCwg aXgjI3JlZywJXAotCQkJUEhNX1NFVF9GSUVMRChjZ3NfcmVhZF9pbmRfcmVnaXN0ZXIoZGV2aWNl LCBwb3J0LCBpeCMjcmVnKSwJXAotCQkJCXJlZywgZmllbGQsIGZpZWxkdmFsKSkKLQotI2RlZmlu ZSBQSE1fV0FJVF9JTkRJUkVDVF9SRUdJU1RFUl9HSVZFTl9JTkRFWChod21nciwgcG9ydCwgaW5k ZXgsIHZhbHVlLCBtYXNrKSAgICAgICAgXAotICAgICAgIHBobV93YWl0X29uX2luZGlyZWN0X3Jl Z2lzdGVyKGh3bWdyLCBtbSMjcG9ydCMjX0lOREVYLCBpbmRleCwgdmFsdWUsIG1hc2spCi0KLQot I2RlZmluZSBQSE1fV0FJVF9JTkRJUkVDVF9SRUdJU1RFUihod21nciwgcG9ydCwgcmVnLCB2YWx1 ZSwgbWFzaykgICAgICBcCi0gICAgICAgUEhNX1dBSVRfSU5ESVJFQ1RfUkVHSVNURVJfR0lWRU5f SU5ERVgoaHdtZ3IsIHBvcnQsIGl4IyNyZWcsIHZhbHVlLCBtYXNrKQogCi0jZGVmaW5lIFBITV9X QUlUX0lORElSRUNUX0ZJRUxEKGh3bWdyLCBwb3J0LCByZWcsIGZpZWxkLCBmaWVsZHZhbCkJXAot CVBITV9XQUlUX0lORElSRUNUX1JFR0lTVEVSKGh3bWdyLCBwb3J0LCByZWcsIChmaWVsZHZhbCkJ XAotCQkJPDwgUEhNX0ZJRUxEX1NISUZUKHJlZywgZmllbGQpLCBQSE1fRklFTERfTUFTSyhyZWcs IGZpZWxkKSkKLQotI2RlZmluZSBQSE1fV0FJVF9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFMX0dJ VkVOX0lOREVYKGh3bWdyLCBwb3J0LCBpbmRleCwgdmFsdWUsIG1hc2spICAgIFwKLQkJcGhtX3dh aXRfZm9yX2luZGlyZWN0X3JlZ2lzdGVyX3VuZXF1YWwoaHdtZ3IsICAgICAgICAgICAgICAgICAg IFwKLQkJCQltbSMjcG9ydCMjX0lOREVYLCBpbmRleCwgdmFsdWUsIG1hc2spCi0KLSNkZWZpbmUg UEhNX1dBSVRfSU5ESVJFQ1RfUkVHSVNURVJfVU5FUVVBTChod21nciwgcG9ydCwgcmVnLCB2YWx1 ZSwgbWFzaykgICAgXAotCQlQSE1fV0FJVF9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFMX0dJVkVO X0lOREVYKGh3bWdyLCBwb3J0LCBpeCMjcmVnLCB2YWx1ZSwgbWFzaykKLQotI2RlZmluZSBQSE1f V0FJVF9JTkRJUkVDVF9GSUVMRF9VTkVRVUFMKGh3bWdyLCBwb3J0LCByZWcsIGZpZWxkLCBmaWVs ZHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJUEhNX1dBSVRfSU5ESVJFQ1RfUkVH SVNURVJfVU5FUVVBTChod21nciwgcG9ydCwgcmVnLCBcCi0JCQkJKGZpZWxkdmFsKSA8PCBQSE1f RklFTERfU0hJRlQocmVnLCBmaWVsZCksIFwKLQkJCQkJUEhNX0ZJRUxEX01BU0socmVnLCBmaWVs ZCkgKQotCi0KLSNkZWZpbmUgUEhNX1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFM X0dJVkVOX0lOREVYKGh3bWdyLAlcCi0JCQkJcG9ydCwgaW5kZXgsIHZhbHVlLCBtYXNrKQkJXAot CXBobV93YWl0X2Zvcl9pbmRpcmVjdF9yZWdpc3Rlcl91bmVxdWFsKGh3bWdyLAkJCVwKLQkJbW0j I3BvcnQjI19JTkRFWF8xMSwgaW5kZXgsIHZhbHVlLCBtYXNrKQotCi0jZGVmaW5lIFBITV9XQUlU X1ZGUEZfSU5ESVJFQ1RfUkVHSVNURVJfVU5FUVVBTChod21nciwgcG9ydCwgcmVnLCB2YWx1ZSwg bWFzaykgICAgIFwKLQkJUEhNX1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFMX0dJ VkVOX0lOREVYKGh3bWdyLCBwb3J0LCBpeCMjcmVnLCB2YWx1ZSwgbWFzaykKLQotI2RlZmluZSBQ SE1fV0FJVF9WRlBGX0lORElSRUNUX0ZJRUxEX1VORVFVQUwoaHdtZ3IsIHBvcnQsIHJlZywgZmll bGQsIGZpZWxkdmFsKSBcCi0JUEhNX1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFM KGh3bWdyLCBwb3J0LCByZWcsCVwKLQkJKGZpZWxkdmFsKSA8PCBQSE1fRklFTERfU0hJRlQocmVn LCBmaWVsZCksCQlcCi0JCVBITV9GSUVMRF9NQVNLKHJlZywgZmllbGQpKQotCi0KLSNkZWZpbmUg UEhNX1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9HSVZFTl9JTkRFWChod21nciwJCVwKLQkJ CQlwb3J0LCBpbmRleCwgdmFsdWUsIG1hc2spCQlcCi0JcGhtX3dhaXRfb25faW5kaXJlY3RfcmVn aXN0ZXIoaHdtZ3IsCQkJCVwKLQkJbW0jI3BvcnQjI19JTkRFWF8xMSwgaW5kZXgsIHZhbHVlLCBt YXNrKQotCi0jZGVmaW5lIFBITV9XQUlUX1ZGUEZfSU5ESVJFQ1RfUkVHSVNURVIoaHdtZ3IsIHBv cnQsIHJlZywgdmFsdWUsIG1hc2spIFwKLQlQSE1fV0FJVF9WRlBGX0lORElSRUNUX1JFR0lTVEVS X0dJVkVOX0lOREVYKGh3bWdyLCBwb3J0LCBpeCMjcmVnLCB2YWx1ZSwgbWFzaykKLQotI2RlZmlu ZSBQSE1fV0FJVF9WRlBGX0lORElSRUNUX0ZJRUxEKGh3bWdyLCBwb3J0LCByZWcsIGZpZWxkLCBm aWVsZHZhbCkgXAotCVBITV9XQUlUX1ZGUEZfSU5ESVJFQ1RfUkVHSVNURVIoaHdtZ3IsIHBvcnQs IHJlZywJCVwKLQkJKGZpZWxkdmFsKSA8PCBQSE1fRklFTERfU0hJRlQocmVnLCBmaWVsZCksCQlc Ci0JCVBITV9GSUVMRF9NQVNLKHJlZywgZmllbGQpKQotCi0jZGVmaW5lIFBITV9XQUlUX1JFR0lT VEVSX1VORVFVQUxfR0lWRU5fSU5ERVgoaHdtZ3IsICAgICAgICAgXAotCQkJCQkJCWluZGV4LCB2 YWx1ZSwgbWFzaykgXAotCQlwaG1fd2FpdF9mb3JfcmVnaXN0ZXJfdW5lcXVhbChod21nciwgICAg ICAgICAgICBcCi0JCQkJCWluZGV4LCB2YWx1ZSwgbWFzaykKLQotI2RlZmluZSBQSE1fV0FJVF9S RUdJU1RFUl9VTkVRVUFMKGh3bWdyLCByZWcsIHZhbHVlLCBtYXNrKQkJXAotCVBITV9XQUlUX1JF R0lTVEVSX1VORVFVQUxfR0lWRU5fSU5ERVgoaHdtZ3IsCQkJXAotCQkJCW1tIyNyZWcsIHZhbHVl LCBtYXNrKQorI2RlZmluZSBQSE1fRU5USVJFX1JFR0lTVEVSX01BU0sgMHhGRkZGRkZGRlUKIAot I2RlZmluZSBQSE1fV0FJVF9GSUVMRF9VTkVRVUFMKGh3bWdyLCByZWcsIGZpZWxkLCBmaWVsZHZh bCkJCVwKLQlQSE1fV0FJVF9SRUdJU1RFUl9VTkVRVUFMKGh3bWdyLCByZWcsCQkJCVwKLQkJKGZp ZWxkdmFsKSA8PCBQSE1fRklFTERfU0hJRlQocmVnLCBmaWVsZCksCQlcCi0JCVBITV9GSUVMRF9N QVNLKHJlZywgZmllbGQpKQogCiAjZW5kaWYgLyogX0hXTUdSX0hfICovCi0tIAoxLjkuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWls aW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==