ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmggYi9kcml2ZXJzL21pc2MvaWJtYXNtL3JlbW90ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZWIxOWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL3JlbW90ZS5oCkBAIC0wLDAgKzEsMTE5IEBACisKKy8qCisgKiBJQk0gQVNNIFNlcnZpY2UgUHJvY2Vzc29yIERldmljZSBEcml2ZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDA0CisgKgorICogQXV0aG9yOiBNYXggQXNi9mNrIDxhbWF4QHVzLmlibS5jb20+IAorICoKKyAqIE9yaWduYWxseSB3cml0dGVuIGJ5IFBldGUgUmV5bm9sZHMKKyAqLworCisjaWZuZGVmIF9JQk1BU01fUkVNT1RFX0hfCisjZGVmaW5lIF9JQk1BU01fUkVNT1RFX0hfCisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyogcGNpIG9mZnNldHMgKi8KKyNkZWZpbmUgQ09ORE9SX01PVVNFX0RBVEEJCTB4MDAwQUMwMDAKKyNkZWZpbmUgQ09ORE9SX01PVVNFX0lTUl9DT05UUk9MCTB4MDAKKyNkZWZpbmUgQ09ORE9SX01PVVNFX0lTUl9TVEFUVVMJCTB4MDQKKyNkZWZpbmUgQ09ORE9SX01PVVNFX1FfUkVBREVSCQkweDA4CisjZGVmaW5lIENPTkRPUl9NT1VTRV9RX1dSSVRFUgkJMHgwQworI2RlZmluZSBDT05ET1JfTU9VU0VfUV9CRUdJTgkJMHgxMAorI2RlZmluZSBDT05ET1JfTU9VU0VfTUFYX1gJCTB4MTQKKyNkZWZpbmUgQ09ORE9SX01PVVNFX01BWF9ZCQkweDE4CisKKyNkZWZpbmUgQ09ORE9SX0lOUFVUX0RFU0tUT1BfSU5GTwkweDFGMAorI2RlZmluZSBDT05ET1JfSU5QVVRfRElTUExBWV9SRVNYCTB4MUY0CisjZGVmaW5lIENPTkRPUl9JTlBVVF9ESVNQTEFZX1JFU1kJMHgxRjgKKyNkZWZpbmUgQ09ORE9SX0lOUFVUX0RJU1BMQVlfQklUUwkweDFGQworI2RlZmluZSBDT05ET1JfT1VUUFVUX1ZOQ19TVEFUVVMJMHgyMDAKKworI2RlZmluZSBDT05ET1JfTU9VU0VfSU5UUl9TVEFUVVNfTUFTSwkweDAwMDAwMDAxCisKKyNkZWZpbmUgSU5QVVRfVFlQRV9NT1VTRQkweDEKKyNkZWZpbmUgSU5QVVRfVFlQRV9LRVlCT0FSRAkweDIKKworCisvKiBtb3VzZSBidXR0b24gc3RhdGVzIHJlY2VpdmVkIGZyb20gU1AgKi8KKyNkZWZpbmUgUkVNT1RFX01PVVNFX0RPVUJMRV9DTElDSwkweEYwCisjZGVmaW5lIFJFTU9URV9NT1VTRV9CVVRUT05fTEVGVAkweDAxCisjZGVmaW5lIFJFTU9URV9NT1VTRV9CVVRUT05fTUlERExFCTB4MDIKKyNkZWZpbmUgUkVNT1RFX01PVVNFX0JVVFRPTl9SSUdIVAkweDA0CisKKworc3RydWN0IG1vdXNlX2lucHV0IHsKKwl1bnNpZ25lZCBzaG9ydAl5OworCXVuc2lnbmVkIHNob3J0CXg7Cit9OworCisKK3N0cnVjdCBrZXlib2FyZF9pbnB1dCB7CisJdW5zaWduZWQgc2hvcnQJa2V5X2NvZGU7CisJdW5zaWduZWQgY2hhcglrZXlfZmxhZzsKKwl1bnNpZ25lZCBjaGFyCWtleV9kb3duOworfTsKKworCisKK3N0cnVjdCByZW1vdGVfaW5wdXQgeyAKKwl1bmlvbiB7CisJCXN0cnVjdCBtb3VzZV9pbnB1dAltb3VzZTsKKwkJc3RydWN0IGtleWJvYXJkX2lucHV0CWtleWJvYXJkOworCX0gZGF0YTsKKworCXVuc2lnbmVkIGNoYXIJdHlwZTsKKwl1bnNpZ25lZCBjaGFyCXBhZDE7CisJdW5zaWduZWQgY2hhcgltb3VzZV9idXR0b25zOworCXVuc2lnbmVkIGNoYXIJcGFkMzsKK307CisKKyNkZWZpbmUgbW91c2VfYWRkcihzcCkgCQlzcC0+YmFzZV9hZGRyZXNzICsgQ09ORE9SX01PVVNFX0RBVEEKKyNkZWZpbmUgZGlzcGxheV93aWR0aChzcCkJbW91c2VfYWRkcihzcCkgKyBDT05ET1JfSU5QVVRfRElTUExBWV9SRVNYCisjZGVmaW5lIGRpc3BsYXlfaGVpZ2h0KHNwKQltb3VzZV9hZGRyKHNwKSArIENPTkRPUl9JTlBVVF9ESVNQTEFZX1JFU1kKKyNkZWZpbmUgZGlzcGxheV9kZXB0aChzcCkJbW91c2VfYWRkcihzcCkgKyBDT05ET1JfSU5QVVRfRElTUExBWV9CSVRTCisjZGVmaW5lIHZuY19zdGF0dXMoc3ApCQltb3VzZV9hZGRyKHNwKSArIENPTkRPUl9PVVRQVVRfVk5DX1NUQVRVUworCisjZGVmaW5lIG1vdXNlX2ludGVycnVwdF9wZW5kaW5nKHNwKSAJcmVhZGwobW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfSVNSX1NUQVRVUykKKyNkZWZpbmUgY2xlYXJfbW91c2VfaW50ZXJydXB0KHNwKQl3cml0ZWwoMCwgbW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfSVNSX1NUQVRVUykKKyNkZWZpbmUgZW5hYmxlX21vdXNlX2ludGVycnVwdHMoc3ApCXdyaXRlbCgxLCBtb3VzZV9hZGRyKHNwKSArIENPTkRPUl9NT1VTRV9JU1JfQ09OVFJPTCkKKyNkZWZpbmUgZGlzYWJsZV9tb3VzZV9pbnRlcnJ1cHRzKHNwKQl3cml0ZWwoMCwgbW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfSVNSX0NPTlRST0wpCisKKy8qIHJlbW90ZSBpbnB1dCBxdWV1ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIFJFTU9URV9RVUVVRV9TSVpFCTYwCisKKyNkZWZpbmUgZ2V0X3F1ZXVlX3dyaXRlcihzcCkJcmVhZGwobW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfUV9XUklURVIpCisjZGVmaW5lIGdldF9xdWV1ZV9yZWFkZXIoc3ApCXJlYWRsKG1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX01PVVNFX1FfUkVBREVSKQorI2RlZmluZSBzZXRfcXVldWVfcmVhZGVyKHNwLCByZWFkZXIpCXdyaXRlbChyZWFkZXIsIG1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX01PVVNFX1FfUkVBREVSKQorCisjZGVmaW5lIHF1ZXVlX2JlZ2luCW1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX01PVVNFX1FfQkVHSU4KKworI2RlZmluZSBnZXRfcXVldWVfZW50cnkoc3AsIHJlYWRfaW5kZXgpIFwKKwlxdWV1ZV9iZWdpbiArIHJlYWRfaW5kZXggKiBzaXplb2Yoc3RydWN0IHJlbW90ZV9pbnB1dCkKKworc3RhdGljIGlubGluZSBpbnQgYWR2YW5jZV9xdWV1ZV9yZWFkZXIoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCwgdW5zaWduZWQgbG9uZyByZWFkZXIpCit7CisJcmVhZGVyKys7CisJaWYgKHJlYWRlciA9PSBSRU1PVEVfUVVFVUVfU0laRSkKKwkJcmVhZGVyID0gMDsKKworCXNldF9xdWV1ZV9yZWFkZXIoc3AsIHJlYWRlcik7CisJcmV0dXJuIHJlYWRlcjsKK30KKworI2VuZGlmIC8qIF9JQk1BU01fUkVNT1RFX0hfICovCg==