ZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NjcmlwdHMvTWFrZWZpbGUgYi9ib290L2NvbW1vbi9zY3JpcHRzL01ha2VmaWxlCmluZGV4IGRhYWE0NDcuLmY5ZTc0M2EgMTAwNzU1Ci0tLSBhL2Jvb3QvY29tbW9uL3NjcmlwdHMvTWFrZWZpbGUKKysrIGIvYm9vdC9jb21tb24vc2NyaXB0cy9NYWtlZmlsZQpAQCAtNjcsNiArNjcsMTAgQEAKIGJvYXJkPXZlaGljbGVfZGMNCiBlbmRpZg0KIA0KK2lmZXEgKCQoQk9BUkRfVFlQRSksVkVISUNMRV9EQ19SRUYpDQorYm9hcmQ9dmVoaWNsZV9kY19yZWYNCitlbmRpZg0KKw0KIGlmZXEgKCQoQk9BUkRfVFlQRSksTURMX01JTkkpDQogYm9hcmQ9bWRsX21pbmkNCiBlbmRpZg0KQEAgLTg5LDYgKzkzLDkgQEAKIGVsc2UgaWZlcSAoJChzdHJpcCAkKGJvYXJkKSksJChmaWx0ZXIgJChib2FyZCksdmVoaWNsZV9kYykpDQogCXJhbV90ZXh0PTB4MjdFRjAwMDANCiAJVjNUX1JBTV9URVhUXzEyOE1fVUJPT1Q9eQ0KK2Vsc2UgaWZlcSAoJChzdHJpcCAkKGJvYXJkKSksJChmaWx0ZXIgJChib2FyZCksdmVoaWNsZV9kY19yZWYpKQ0KKwlyYW1fdGV4dD0weDI3RUYwMDAwDQorCVYzVF9SQU1fVEVYVF8xMjhNX1VCT09UPXkNCiBlbHNlDQogCXJhbV90ZXh0PTB4MjFFRjAwMDANCiBlbmRpZg0KQEAgLTEwMSw2ICsxMDgsMTAgQEAKIAlrZXlfcGF0aD1tZGwNCiBlbmRpZg0KIA0KK2lmZXEgKCQoc3RyaXAgJChib2FyZCkpLCQoZmlsdGVyICQoYm9hcmQpLHZlaGljbGVfZGNfcmVmKSkNCisJa2V5X3BhdGg9bWRsDQorZW5kaWYNCisNCiBpZmVxICgkKHN0cmlwICQoYm9hcmQpKSwkKGZpbHRlciAkKGJvYXJkKSxtZGxfbWluaSBtaWZpX21pbmkgdWZpX21pbmkpKQ0KIAlrZXlfcGF0aD0kKHN1YnN0IF9taW5pLCwkKGJvYXJkKSkNCiBlbmRpZg0KZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvY29uZmlnLm1rIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jb25maWcubWsKaW5kZXggNDU4YmI0Yy4uYmM4N2JhZiAxMDA3NTUKLS0tIGEvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jb25maWcubWsKKysrIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9jb25maWcubWsKQEAgLTczLDYgKzczLDEwIEBACiBQTEFURk9STV9DUFBGTEFHUys9IC1EQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMKIGVuZGlmCiAKK2lmZXEgKCQoc3RyaXAgJChib2FyZCkpLCQoZmlsdGVyICQoYm9hcmQpLHZlaGljbGVfZGNfcmVmKSkKK1BMQVRGT1JNX0NQUEZMQUdTKz0gLURDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYKK2VuZGlmCisKIGlmZGVmCUFSQ0gKIHNpbmNsdWRlICQoVE9QRElSKS8kKEFSQ0gpX2NvbmZpZy5tawkjIGluY2x1ZGUgYXJjaGl0ZWN0dXJlIGRlcGVuZGVuZCBydWxlcwogZW5kaWYKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9iYnQuYyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9iYnQuYwppbmRleCBiZjQ2MjY2Li40NzFhODZmIDEwMDc1NQotLS0gYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2RyaXZlcnMvYmJ0LmMKKysrIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9kcml2ZXJzL2JidC5jCkBAIC01Niw3ICs1Niw3IEBACiAJdWludDMyX3QgYmxvY2tfc2l6ZSA9IGZsYXNoLmJsb2NrX3NpemU7CiAJdWludDhfdCBvb2JbMjU2XTsgICAvKiDV4sDvtqjS5dfutPO1xE9PQiBTSVpFICovCiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiAJdWludDMyX3QgYmxvY2tfbnVtcyA9IDcyOwogI2Vsc2UKIAl1aW50MzJfdCBibG9ja19udW1zID0gMTc7CmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2RyaXZlcnMvaW1hZ2UuYyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9pbWFnZS5jCmluZGV4IDg5MDNlMTQuLjA5YzI5NmEgMTAwNzU1Ci0tLSBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9pbWFnZS5jCisrKyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9pbWFnZS5jCkBAIC0xMSw3ICsxMSw3IEBACiAKICNpbmNsdWRlICJmbGFzaC5oIgogI2luY2x1ZGUgPGJidC5oPgotCisjaW5jbHVkZSAicHViX2ZsYWdzLmgiCiAKIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTIsMTAgKzExMiwxMCBAQAogfQogCiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiBpbnQgcmVhZF9mbGFnc19pbWFnZSh1aW50OF90ICpuYW1lKQogewotICAgIFRfQk9PVF9GT1RBX0ZMQUcgKmZvdGFGbGFnOworICAgIFRfRkxBR1NfSU5GTyAqZm90YUZsYWc7CiAJdWludDMyX3QgdWlQYWdlU2l6ZSA9IDA7CiAgICAgdWludDMyX3QgZmxhZ3Nfb2Zmc2V0ID0gMDsKIAl1aW50MzJfdCBvZmYgPSAwOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJdWludDMyX3Qgd29ya19hcmVhX29mZnNldCA9IDA7CiAJdWludDMyX3QgYmFja3VwX2FyZWFfb2Zmc2V0ID0gMDsKIAlpbnQzMl90IHJldCA9IDA7Ci0JaW50MzJfdCBmb3RhX3NpemUgPSBzaXplb2YoVF9CT09UX0ZPVEFfRkxBRyk7CisJaW50MzJfdCBmb3RhX3NpemUgPSBzaXplb2YoVF9GTEFHU19JTkZPKTsKIAlpbnQzMl90IGJsb2NrX3NpemUgPSBmbGFzaC5ibG9ja19zaXplOwogCiAJZm90YV9zaXplID0gcGFnZV9hbGlnbihmb3RhX3NpemUpOwpAQCAtMTczLDkgKzE3Myw5IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlmb3RhRmxhZyA9IChUX0JPT1RfRk9UQV9GTEFHICopKENGR19URU1QX0FERFIpOworCWZvdGFGbGFnID0gKFRfRkxBR1NfSU5GTyAqKShDRkdfVEVNUF9BRERSKTsKIAkKLQlpZihmb3RhRmxhZy0+bWFnaWMgIT0gRkxBR1NfTUFHSUMpCisJaWYoZm90YUZsYWctPm1hZ2ljX3N0YXJ0ICE9IEZMQUdTX01BR0lDIHx8IGZvdGFGbGFnLT5tYWdpY19lbmQgIT0gRkxBR1NfTUFHSUMpCiAJewogICAgICAgICByZXQgPSBmbGFzaC5yZWFkKGJhY2t1cF9hcmVhX29mZnNldCwgZm90YV9zaXplLCBDRkdfVEVNUF9BRERSKTsKIAkJaWYocmV0ICE9IDApCkBAIC0xODQsOCArMTg0LDggQEAKIAkJCQogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCWZvdGFGbGFnID0gKFRfQk9PVF9GT1RBX0ZMQUcgKikoQ0ZHX1RFTVBfQUREUik7Ci0JCWlmKGZvdGFGbGFnLT5tYWdpYyAhPSBGTEFHU19NQUdJQykKKwkJZm90YUZsYWcgPSAoVF9GTEFHU19JTkZPICopKENGR19URU1QX0FERFIpOworCQlpZihmb3RhRmxhZy0+bWFnaWNfc3RhcnQgIT0gRkxBR1NfTUFHSUMgfHwgZm90YUZsYWctPm1hZ2ljX2VuZCAhPSBGTEFHU19NQUdJQykKIAkJewogICAgICAgICAgICAgcHJpbnRmKCJmbGFncyBtYWdpYyBlcnIuXG4iKTsKIAkJICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvaW5jbHVkZS9jb25maWdzL3p4Mjk3NTIwdjMuaCBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvaW5jbHVkZS9jb25maWdzL3p4Mjk3NTIwdjMuaAppbmRleCA3MWQ2ZDUwLi5jNDYzYmU4IDEwMDc1NQotLS0gYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2luY2x1ZGUvY29uZmlncy96eDI5NzUyMHYzLmgKKysrIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9pbmNsdWRlL2NvbmZpZ3MvengyOTc1MjB2My5oCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIENGR19QUklOVEYgICAgICAgMSAgICAKICNlbHNlCiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQyl8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDX1JFRikKICNkZWZpbmUgQ0ZHX1BSSU5URiAgICAgICAwCiAjZWxzZQogI2RlZmluZSBDRkdfUFJJTlRGICAgICAgIDEgICAgCkBAIC01MSw3ICs1MSw3IEBACiAgKiBwYXJ0aXRpb24gbmFtZQogKioqLwogLy8jaWZkZWYgQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQgotI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykKKyNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQogI2RlZmluZSBNMF9QQVJUSVRJT05fTkFNRSAgICAgICAiY3B1cnBtIgogI2RlZmluZSBVQk9PVF9JTUFHRSAgICAJICAgIAkidWJvb3QiCiAjZGVmaW5lIFVCT09UMl9JTUFHRSAgICAJICAgICJ1Ym9vdDIiCmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2luY2x1ZGUvaW1hZ2UuaCBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvaW5jbHVkZS9pbWFnZS5oCmluZGV4IDI2MjQ5ZTkuLmEyODY1ZDggMTAwNzU1Ci0tLSBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvaW5jbHVkZS9pbWFnZS5oCisrKyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvaW5jbHVkZS9pbWFnZS5oCkBAIC01NCw3ICs1NCw3IEBACiAgICAgcGFydGl0aW9uX2VudHJ5X3QgIHRhYmxlW01BWF9FTlRSWVNdOyAgIAogfXBhcnRpdGlvbl90YWJsZV90OwogCi0vLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCisjaWYgMAogI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykKIC8qCiBmbGFncyBwYXJ0aXRpb24KQEAgLTExNiw3ICsxMTYsNyBAQAogCVRfQk9PVF9FTlYgICAgICAgICAgICBib290X2VudjsKIH1UX0ZPVEFfRkxBR19JTkZPOwogI2VuZGlmCi0KKyNlbmRpZgogLyoKICAqIExlZ2FjeSBmb3JtYXQgaW1hZ2UgaGVhZGVyLCAgc2l6ZW9mKGltYWdlX2hlYWRlcl90KSA9IDY0CiAgKiBhbGwgZGF0YSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGFrYSBuYXR1cmFsIGFrYSBiaWdlbmRpYW4pLgpkaWZmIC0tZ2l0IGEvYm9vdC9jb21tb24vc3JjL2xvYWRlci9saWIvYm9hcmQuYyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvbGliL2JvYXJkLmMKaW5kZXggM2QxMzhhOS4uMDk0MTdhZiAxMDA3NTUKLS0tIGEvYm9vdC9jb21tb24vc3JjL2xvYWRlci9saWIvYm9hcmQuYworKysgYi9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2xpYi9ib2FyZC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiZGRyLmgiCiAjaW5jbHVkZSAiLi4vZHJpdmVycy9lZnVzZS5oIgogI2luY2x1ZGUgIi4uL2RyaXZlcnMvZmxhc2guaCIKKyNpbmNsdWRlICJwdWJfZmxhZ3MuaCIKIAogI2RlZmluZSBGTEFHU19QQVJUSVRJT05fRVJST1IgKDB4MTExMSkgLyq31sf40uyzoyovCiAKQEAgLTEzNCw3ICsxMzUsNyBAQAogfQogCiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiB2b2lkIHN0YXJ0X2FybWJvb3QgKHZvaWQpCiB7CiAJaW50MzJfdCByZXQgPSAwOwpAQCAtMTQyLDkgKzE0Myw4IEBACiAJdWludDMyX3QgYW10X3ZhbHVlID0gMDsKIAlpbnQzMl90IGVycl9mbGFnID0gMDsKICAgICBUX0JPT1RfVEFSR0VUIGJvb3RUYXJnZXQ7Ci0JVF9CT09UX0ZPVEFfRkxBRyBmbGFnc0RhdGE7Ci0JVF9CT09UX0ZPVEFfRkxBRyAqZm90YUZsYWc7Ci0JVF9GT1RBX0ZMQUdfSU5GTyAqZm90YUZsYWdJbmZvOworCVRfRkxBR1NfSU5GTyBmbGFnc0RhdGE7CisJVF9GTEFHU19JTkZPICpmb3RhRmxhZzsKIAlUX0JPT1RfRFVBTFNZU1RFTV9UWVBFIGR1YWxTeXN0ZW1UeXBlOwogCiAJY2xrX2luaXQoKTsKQEAgLTIxOCwyNSArMjE4LDI2IEBACiAJCWVycl9mbGFnID0gMTsKIAkJCiAJCS8qxKzIz2ZsYWdzt9bH+Mr9vt0qLwotCQlmbGFnc0RhdGEubWFnaWMgPSBGTEFHU19NQUdJQzsKLQkJZmxhZ3NEYXRhLmJvb3RfdG8gPSBEVUFMX1NZU1RFTTsKLQkJZmxhZ3NEYXRhLmZvdGFfc3RhdHVzID0gMTsKLQkJZmxhZ3NEYXRhLnN5c3RlbS5zdGF0dXMgPSBEVUFMU1lTVEVNX1NUQVRVU19CT09UQUJMRTsKLQkJZmxhZ3NEYXRhLnN5c3RlbTIuc3RhdHVzID0gRFVBTFNZU1RFTV9TVEFUVVNfQk9PVEFCTEU7CisJCWZsYWdzRGF0YS5tYWdpY19zdGFydCA9IEZMQUdTX01BR0lDOworCQlmbGFnc0RhdGEuYm9vdF9mb3RhX2ZsYWcuYm9vdF90byA9IERVQUxfU1lTVEVNOworCQlmbGFnc0RhdGEuYm9vdF9mb3RhX2ZsYWcuZm90YV9zdGF0dXMgPSAxOworCQlmbGFnc0RhdGEuYm9vdF9mb3RhX2ZsYWcuc3lzdGVtLnN0YXR1cyA9IERVQUxTWVNURU1fU1RBVFVTX0JPT1RBQkxFOworCQlmbGFnc0RhdGEuYm9vdF9mb3RhX2ZsYWcuc3lzdGVtMi5zdGF0dXMgPSBEVUFMU1lTVEVNX1NUQVRVU19CT09UQUJMRTsKKwkJZmxhZ3NEYXRhLm1hZ2ljX2VuZCA9IEZMQUdTX01BR0lDOwogCQlmb3RhRmxhZyA9ICZmbGFnc0RhdGE7CiAJfQogCWVsc2UKIAl7Ci0gICAgICAgIGZvdGFGbGFnID0gKFRfQk9PVF9GT1RBX0ZMQUcgKikoQ0ZHX1RFTVBfQUREUik7CisgICAgICAgIGZvdGFGbGFnID0gKFRfRkxBR1NfSU5GTyAqKShDRkdfVEVNUF9BRERSKTsKIAl9CiAKLQlib290VGFyZ2V0ID0gZm90YUZsYWctPmJvb3RfdG87CisJYm9vdFRhcmdldCA9IGZvdGFGbGFnLT5ib290X2ZvdGFfZmxhZy5ib290X3RvOwogCiAJd3JpdGVsKERVQUxTWVNURU1fU1RBVFVTX0JPT1RBQkxFLCBCT09UX0ZMQUdfQUREUik7LyrErMjPv8nG9LavKi8KIAkKICAgICBpZihib290VGFyZ2V0ID09IERVQUxfU1lTVEVNKQogICAgIHsKLSAgICAgICAgaWYgKGZvdGFGbGFnLT5zeXN0ZW0uc3RhdHVzID09IERVQUxTWVNURU1fU1RBVFVTX1VOQk9PVEFCTEUpCisgICAgICAgIGlmIChmb3RhRmxhZy0+Ym9vdF9mb3RhX2ZsYWcuc3lzdGVtLnN0YXR1cyA9PSBEVUFMU1lTVEVNX1NUQVRVU19VTkJPT1RBQkxFKQogICAgICAgICB7CiAgICAgICAgICAgICBwcmludGYoImR1YWxfc3lzdGVtIHN0YXR1cyBpcyB1bmJvb3RhYmxlISIpOwogCQkgICAgZ290byBlcnJvcjsKQEAgLTI1OCw3ICsyNTksNyBAQAogCX0KICAgICBlbHNlIGlmKGJvb3RUYXJnZXQgPT0gRFVBTF9TWVNURU0yKQogICAgIHsKLSAgICAgICAgaWYgKGZvdGFGbGFnLT5zeXN0ZW0yLnN0YXR1cyA9PSBEVUFMU1lTVEVNX1NUQVRVU19VTkJPT1RBQkxFKQorICAgICAgICBpZiAoZm90YUZsYWctPmJvb3RfZm90YV9mbGFnLnN5c3RlbTIuc3RhdHVzID09IERVQUxTWVNURU1fU1RBVFVTX1VOQk9PVEFCTEUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHByaW50ZigiZHVhbF9zeXN0ZW0yIHN0YXR1cyBpcyB1bmJvb3RhYmxlISIpOwogCQkgICAgZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9hcmNoL2FybS9saWIvYm9vdG0uYyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9hcmNoL2FybS9saWIvYm9vdG0uYwppbmRleCAxMGE5MGI3Li41N2JiNjM5IDEwMDc1NQotLS0gYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvYXJjaC9hcm0vbGliL2Jvb3RtLmMKKysrIGIvYm9vdC9jb21tb24vc3JjL3Vib290L2FyY2gvYXJtL2xpYi9ib290bS5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIH0KIAogLy8jaWZkZWYgQ09ORklHX1pYMjk3NTIwVjNFX1dBVENIX0NBUAotI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1dBVENIX0NBUCkgfHwgZGVmaW5lZCAoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpCisjaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfV0FUQ0hfQ0FQKSB8fCBkZWZpbmVkIChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZCAoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQogI2RlZmluZSBTWVNfQ1BVQ0FQX1BBUkFNX0FERFIJMHgxMDIwMEMKIGV4dGVybiB1aW50MzJfdCBhcm1fY3B1Y2FwX2VwOwogdm9pZCBzZXRfY3B1Y2FwX3RhZyhpbnQgYXJjaCwgdWludCBwYXJhbWV0ZXIpCkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJYm9vdG1fbGludXhfZmR0KG1hY2hpZCwgaW1hZ2VzKTsKIAl9CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQworI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQogICAgICAgICBkZWJ1Zygic3RhcnQgZGV2aWNlIHRyZWUuLi5cbiIpOwogCQlib290bV9saW51eF9mZHQobWFjaGlkLCBpbWFnZXMpOwogCQkvL2ZkdF9jaG9zZW4oaW1hZ2VzLT5mdF9hZGRyLCAxKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogI2VuZGlmCiAKIC8vI2lmZGVmIENPTkZJR19aWDI5NzUyMFYzRV9XQVRDSF9DQVAJCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfV0FUQ0hfQ0FQKSB8fCBkZWZpbmVkIChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykKKyNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9XQVRDSF9DQVApIHx8IGRlZmluZWQgKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKSB8fCBkZWZpbmVkIChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiAJbWVtc2V0KElDUF9DQVBfQlVGX0FERFIsIDAsIElDUF9DQVBfQlVGX0xFTik7CiAJbWVtc2V0KElSQU1fQkFTRV9BRERSX1NZU19UUkFDRSwgMCwgSVJBTV9CQVNFX0xFTl9TWVNfVFJBQ0UpOwogCWlmKCFyZWFkX2ZvdGFfdXBkYXRlX2ZsYWcoKSkKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9ib2FyZC96dGUvengyOTc1MjB2My9NYWtlZmlsZSBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9ib2FyZC96dGUvengyOTc1MjB2My9NYWtlZmlsZQppbmRleCAxZjQzOGU0Li5iY2U1YzRlIDEwMDc1NQotLS0gYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvYm9hcmQvenRlL3p4Mjk3NTIwdjMvTWFrZWZpbGUKKysrIGIvYm9vdC9jb21tb24vc3JjL3Vib290L2JvYXJkL3p0ZS96eDI5NzUyMHYzL01ha2VmaWxlCkBAIC00NCw2ICs0NCw3IEBACiBDT0JKUy0kKENPTkZJR19aWDI5NzUyMFYzRV9VRklfTUlOSSkgKz0gengyOTc1MjB2M191ZmlfbWluaS5vCiBDT0JKUy0kKENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIpCSs9IHp4Mjk3NTIwdjNfbWRsX2FiLm8KIENPQkpTLSQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpCSs9IHp4Mjk3NTIwdjNfdmVoaWNsZV9kYy5vCitDT0JKUy0kKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDX1JFRikJKz0gengyOTc1MjB2M192ZWhpY2xlX2RjX3JlZi5vCiAKIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvYm9hcmQvenRlL3p4Mjk3NTIwdjMvengyOTc1MjB2M19tZGxfYWIuYyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9ib2FyZC96dGUvengyOTc1MjB2My96eDI5NzUyMHYzX21kbF9hYi5jCmluZGV4IGE0MjY2NjcuLmQwNmVjMDAgMTAwNzU1Ci0tLSBhL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9ib2FyZC96dGUvengyOTc1MjB2My96eDI5NzUyMHYzX21kbF9hYi5jCisrKyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9ib2FyZC96dGUvengyOTc1MjB2My96eDI5NzUyMHYzX21kbF9hYi5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGNkLmg+CiAjaW5jbHVkZSA8cGVyaXBoZXJhbC5oPgogI2luY2x1ZGUgImJvYXJkLmgiCisjaW5jbHVkZSAicHViX2ZsYWdzLmgiCiAKICNpbmNsdWRlIDxkcnZzX2dwaW8uaD4KIApAQCAtNDA4LDEwICs0MDksMTAgQEAKIAlpbnQgcmV0ID0gMDsKIAlpbnQgdHlwZSA9IDA7CiAJdWNoYXIgKiBmbGFnc19uYW1lID0gImZsYWdzIjsKLQlUX0ZPVEFfRkxBR19JTkZPIGZvdGFGbGFnSW5mbzsKKwlUX0ZMQUdTX0lORk8gZm90YUZsYWdJbmZvID0gezB9OwogCVRfRHVhbFN5c3RlbV9TdGF0dXMgc3lzdGVtX3N0YXR1czsKIAlzeXN0ZW1fc3RhdHVzLnN0YXR1cyA9IERVQUxTWVNURU1fU1RBVFVTX1VOQk9PVEFCTEU7Ci0JdTMyIGZvdGFfc2l6ZSA9IHNpemVvZihUX0ZPVEFfRkxBR19JTkZPKTsKKwl1MzIgZm90YV9zaXplID0gc2l6ZW9mKFRfRkxBR1NfSU5GTyk7CiAJZm90YV9zaXplID0gcGFnZV9hbGlnbihmb3RhX3NpemUpOwogCQogCW5hbmRfaW5mb190ICpuYW5kID0gJm5hbmRfaW5mb1tuYW5kX2N1cnJfZGV2aWNlXTsKQEAgLTQzNiwxMiArNDM3LDE0IEBACiAJZmxhZ3Nfc2l6ZSA9IGVudHJ5LT5wYXJ0X3NpemU7CiAJCiAJLyrJ6NbDxKzIz2ZsYWdzt9bH+Mr9vt0qLwotCWZvdGFGbGFnSW5mby5ib290X2ZsYWcubWFnaWMgPSBGTEFHU19NQUdJQzsKLQlmb3RhRmxhZ0luZm8uYm9vdF9mbGFnLmJvb3RfdG8gPSBEVUFMX1NZU1RFTTsKLQlmb3RhRmxhZ0luZm8uYm9vdF9mbGFnLmZvdGFfc3RhdHVzID0gMTsKLQlmb3RhRmxhZ0luZm8uYm9vdF9mbGFnLnN5c3RlbS5zdGF0dXMgPSBEVUFMU1lTVEVNX1NUQVRVU19CT09UQUJMRTsKLQlmb3RhRmxhZ0luZm8uYm9vdF9mbGFnLnN5c3RlbTIuc3RhdHVzID0gRFVBTFNZU1RFTV9TVEFUVVNfQk9PVEFCTEU7Ci0KKyAgICBmb3RhRmxhZ0luZm8ubWFnaWNfc3RhcnQgPSBGTEFHU19NQUdJQzsKKwlmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuYm9vdF90byA9IERVQUxfU1lTVEVNOworCWZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5mb3RhX3N0YXR1cyA9IDE7CisJZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLnN5c3RlbS5zdGF0dXMgPSBEVUFMU1lTVEVNX1NUQVRVU19CT09UQUJMRTsKKwlmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuc3lzdGVtMi5zdGF0dXMgPSBEVUFMU1lTVEVNX1NUQVRVU19CT09UQUJMRTsKKyAgICBmb3RhRmxhZ0luZm8uYm9vdF9lbnYuZHVhbHN5c190eXBlID0gRFVBTFNZU1RFTV9BQjsKKwlmb3RhRmxhZ0luZm8ubWFnaWNfZW5kID0gRkxBR1NfTUFHSUM7CisJCiAJLyrQtMjrZmxhZ3O31sf4Ki8KIAlpZih0eXBlID09IElGX1RZUEVfTkFORCB8fCB0eXBlID09IElGX1RZUEVfU1BJX05BTkQpCiAJewpAQCAtNTUyLDExICs1NTUsMTAgQEAKIAlpbnQgcmV0ID0gMDsKIAlpbnQgdHlwZSA9IDA7CiAJdWNoYXIgKiBmbGFnc19uYW1lID0gImZsYWdzIjsKLQlUX0JPT1RfRk9UQV9GTEFHIGZvdGFGbGFnOwotCVRfRk9UQV9GTEFHX0lORk8gZm90YUZsYWdJbmZvOworCVRfRkxBR1NfSU5GTyBmb3RhRmxhZ0luZm8gPSB7MH07CiAJVF9EdWFsU3lzdGVtX1N0YXR1cyBzeXN0ZW1fc3RhdHVzOwogCXN5c3RlbV9zdGF0dXMuc3RhdHVzID0gRFVBTFNZU1RFTV9TVEFUVVNfVU5CT09UQUJMRTsKLQl1MzIgZm90YV9zaXplID0gc2l6ZW9mKFRfRk9UQV9GTEFHX0lORk8pOworCXUzMiBmb3RhX3NpemUgPSBzaXplb2YoVF9GTEFHU19JTkZPKTsKIAlmb3RhX3NpemUgPSBwYWdlX2FsaWduKGZvdGFfc2l6ZSk7CiAJCiAJbmFuZF9pbmZvX3QgKm5hbmQgPSAmbmFuZF9pbmZvW25hbmRfY3Vycl9kZXZpY2VdOwpAQCAtNTg5LDEwICs1OTEsMTAgQEAKIAl9CiAKIAkvKtC0u9hmbGFnc7fWx/gqLwotICAgIGlmKGZvdGFGbGFnSW5mby5ib290X2ZsYWcuYm9vdF90byA9PSBEVUFMX1NZU1RFTSkKKyAgICBpZihmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuYm9vdF90byA9PSBEVUFMX1NZU1RFTSkKICAgICB7Ci0gICAgICAgIGZvdGFGbGFnSW5mby5ib290X2ZsYWcuYm9vdF90byA9IERVQUxfU1lTVEVNMjsKLQkJZm90YUZsYWdJbmZvLmJvb3RfZmxhZy5zeXN0ZW0gPSBzeXN0ZW1fc3RhdHVzOworICAgICAgICBmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuYm9vdF90byA9IERVQUxfU1lTVEVNMjsKKwkJZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLnN5c3RlbSA9IHN5c3RlbV9zdGF0dXM7CiAKIAkJaWYodHlwZSA9PSBJRl9UWVBFX05BTkQgfHwgdHlwZSA9PSBJRl9UWVBFX1NQSV9OQU5EKQogCQl7CkBAIC02ODYsMTAgKzY4OCwxMCBAQAogCQlwcmludGYoInN5c3RlbSBib290IHN0YXR1cyBpcyBjaGFuZ2VkIHRvIHVuYm9vdGFibGUhXG4iKTsKIAkJLy9zeXN0ZW1fcmVzZXQoKTsKIAl9Ci0JZWxzZSBpZihmb3RhRmxhZ0luZm8uYm9vdF9mbGFnLmJvb3RfdG8gPT0gRFVBTF9TWVNURU0yKQorCWVsc2UgaWYoZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPT0gRFVBTF9TWVNURU0yKQogICAgIHsKLSAgICAgICAgZm90YUZsYWdJbmZvLmJvb3RfZmxhZy5ib290X3RvID0gRFVBTF9TWVNURU07Ci0JCWZvdGFGbGFnSW5mby5ib290X2ZsYWcuc3lzdGVtMiA9IHN5c3RlbV9zdGF0dXM7CisgICAgICAgIGZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID0gRFVBTF9TWVNURU07CisJCWZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5zeXN0ZW0yID0gc3lzdGVtX3N0YXR1czsKIAogCQlpZih0eXBlID09IElGX1RZUEVfTkFORCB8fCB0eXBlID09IElGX1RZUEVfU1BJX05BTkQpCiAJCXsKQEAgLTgxOSw4ICs4MjEsNyBAQAogewogICAgIGludCByZXQgPSAwOwogICAgIC8qILbByKFmbGFnc7fWx/ggKi8KLQlUX0JPT1RfRk9UQV9GTEFHIGZvdGFGbGFnOwotCVRfRk9UQV9GTEFHX0lORk8gZm90YUZsYWdJbmZvOworCVRfRkxBR1NfSU5GTyBmb3RhRmxhZ0luZm87CiAJcmV0ID0gbG9hZF9mbGFncygmZm90YUZsYWdJbmZvKTsKIAlpZihyZXQgIT0gMCkKIAl7CkBAIC04MjgsMTIgKzgyOSwxMiBAQAogCQlyZXR1cm4gLTE7CiAJfQogCQotICAgIGlmKGZvdGFGbGFnSW5mby5ib290X2ZsYWcuYm9vdF90byA9PSBEVUFMX1NZU1RFTSkKKyAgICBpZihmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuYm9vdF90byA9PSBEVUFMX1NZU1RFTSkKICAgICB7CiAgICAgICAgIGltYWdlZnNfZmxhZyA9IDE7CiAJCXByaW50ZigiaW1hZ2VmcyBlbnRyeS4uLi4uLlxuIik7CiAJfQotCWVsc2UgaWYoZm90YUZsYWdJbmZvLmJvb3RfZmxhZy5ib290X3RvID09IERVQUxfU1lTVEVNMikKKwllbHNlIGlmKGZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID09IERVQUxfU1lTVEVNMikKICAgICB7CiAgICAgICAgIGltYWdlZnNfZmxhZyA9IDI7CiAJCXByaW50ZigiaW1hZ2VmczIgZW50cnkuLi4uLi5cbiIpOwpkaWZmIC0tZ2l0IGEvYm9vdC9jb21tb24vc3JjL3Vib290L2JvYXJkL3p0ZS96eDI5NzUyMHYzL3p4Mjk3NTIwdjNfdmVoaWNsZV9kYy5jIGIvYm9vdC9jb21tb24vc3JjL3Vib290L2JvYXJkL3p0ZS96eDI5NzUyMHYzL3p4Mjk3NTIwdjNfdmVoaWNsZV9kYy5jCmluZGV4IDA4YjUzMGYuLjc5YzAyNDEgMTAwNzU1Ci0tLSBhL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9ib2FyZC96dGUvengyOTc1MjB2My96eDI5NzUyMHYzX3ZlaGljbGVfZGMuYworKysgYi9ib290L2NvbW1vbi9zcmMvdWJvb3QvYm9hcmQvenRlL3p4Mjk3NTIwdjMvengyOTc1MjB2M192ZWhpY2xlX2RjLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsY2QuaD4KICNpbmNsdWRlIDxwZXJpcGhlcmFsLmg+CiAjaW5jbHVkZSAiYm9hcmQuaCIKKyNpbmNsdWRlICJwdWJfZmxhZ3MuaCIKIAogI2luY2x1ZGUgPGRydnNfZ3Bpby5oPgogCkBAIC00MDgsMTAgKzQwOSwxMCBAQAogCWludCByZXQgPSAwOwogCWludCB0eXBlID0gMDsKIAl1Y2hhciAqIGZsYWdzX25hbWUgPSAiZmxhZ3MiOwotCVRfRk9UQV9GTEFHX0lORk8gZm90YUZsYWdJbmZvOworCVRfRkxBR1NfSU5GTyBmb3RhRmxhZ0luZm8gPSB7MH07CiAJVF9EdWFsU3lzdGVtX1N0YXR1cyBzeXN0ZW1fc3RhdHVzOwogCXN5c3RlbV9zdGF0dXMuc3RhdHVzID0gRFVBTFNZU1RFTV9TVEFUVVNfVU5CT09UQUJMRTsKLQl1MzIgZm90YV9zaXplID0gc2l6ZW9mKFRfRk9UQV9GTEFHX0lORk8pOworCXUzMiBmb3RhX3NpemUgPSBzaXplb2YoVF9GTEFHU19JTkZPKTsKIAlmb3RhX3NpemUgPSBwYWdlX2FsaWduKGZvdGFfc2l6ZSk7CiAJCiAJbmFuZF9pbmZvX3QgKm5hbmQgPSAmbmFuZF9pbmZvW25hbmRfY3Vycl9kZXZpY2VdOwpAQCAtNDM2LDEyICs0MzcsMTQgQEAKIAlmbGFnc19zaXplID0gZW50cnktPnBhcnRfc2l6ZTsKIAkKIAkvKsno1sPErMjPZmxhZ3O31sf4yv2+3SovCi0JZm90YUZsYWdJbmZvLmJvb3RfZmxhZy5tYWdpYyA9IEZMQUdTX01BR0lDOwotCWZvdGFGbGFnSW5mby5ib290X2ZsYWcuYm9vdF90byA9IERVQUxfU1lTVEVNOwotCWZvdGFGbGFnSW5mby5ib290X2ZsYWcuZm90YV9zdGF0dXMgPSAxOwotCWZvdGFGbGFnSW5mby5ib290X2ZsYWcuc3lzdGVtLnN0YXR1cyA9IERVQUxTWVNURU1fU1RBVFVTX0JPT1RBQkxFOwotCWZvdGFGbGFnSW5mby5ib290X2ZsYWcuc3lzdGVtMi5zdGF0dXMgPSBEVUFMU1lTVEVNX1NUQVRVU19CT09UQUJMRTsKLQorCWZvdGFGbGFnSW5mby5tYWdpY19zdGFydCA9IEZMQUdTX01BR0lDOworCWZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID0gRFVBTF9TWVNURU07CisJZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLmZvdGFfc3RhdHVzID0gMTsKKwlmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuc3lzdGVtLnN0YXR1cyA9IERVQUxTWVNURU1fU1RBVFVTX0JPT1RBQkxFOworCWZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5zeXN0ZW0yLnN0YXR1cyA9IERVQUxTWVNURU1fU1RBVFVTX0JPT1RBQkxFOworICAgIGZvdGFGbGFnSW5mby5ib290X2Vudi5kdWFsc3lzX3R5cGUgPSBEVUFMU1lTVEVNX0FCOworCWZvdGFGbGFnSW5mby5tYWdpY19lbmQgPSBGTEFHU19NQUdJQzsKKwkKIAkvKtC0yOtmbGFnc7fWx/gqLwogCWlmKHR5cGUgPT0gSUZfVFlQRV9OQU5EIHx8IHR5cGUgPT0gSUZfVFlQRV9TUElfTkFORCkKIAl7CkBAIC01NTIsMTEgKzU1NSwxMCBAQAogCWludCByZXQgPSAwOwogCWludCB0eXBlID0gMDsKIAl1Y2hhciAqIGZsYWdzX25hbWUgPSAiZmxhZ3MiOwotCVRfQk9PVF9GT1RBX0ZMQUcgZm90YUZsYWc7Ci0JVF9GT1RBX0ZMQUdfSU5GTyBmb3RhRmxhZ0luZm87CisJVF9GTEFHU19JTkZPIGZvdGFGbGFnSW5mbyA9IHswfTsKIAlUX0R1YWxTeXN0ZW1fU3RhdHVzIHN5c3RlbV9zdGF0dXM7CiAJc3lzdGVtX3N0YXR1cy5zdGF0dXMgPSBEVUFMU1lTVEVNX1NUQVRVU19VTkJPT1RBQkxFOwotCXUzMiBmb3RhX3NpemUgPSBzaXplb2YoVF9GT1RBX0ZMQUdfSU5GTyk7CisJdTMyIGZvdGFfc2l6ZSA9IHNpemVvZihUX0ZMQUdTX0lORk8pOwogCWZvdGFfc2l6ZSA9IHBhZ2VfYWxpZ24oZm90YV9zaXplKTsKIAkKIAluYW5kX2luZm9fdCAqbmFuZCA9ICZuYW5kX2luZm9bbmFuZF9jdXJyX2RldmljZV07CkBAIC01ODksMTAgKzU5MSwxMCBAQAogCX0KIAogCS8q0LS72GZsYWdzt9bH+CovCi0gICAgaWYoZm90YUZsYWdJbmZvLmJvb3RfZmxhZy5ib290X3RvID09IERVQUxfU1lTVEVNKQorICAgIGlmKGZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID09IERVQUxfU1lTVEVNKQogICAgIHsKLSAgICAgICAgZm90YUZsYWdJbmZvLmJvb3RfZmxhZy5ib290X3RvID0gRFVBTF9TWVNURU0yOwotCQlmb3RhRmxhZ0luZm8uYm9vdF9mbGFnLnN5c3RlbSA9IHN5c3RlbV9zdGF0dXM7CisgICAgICAgIGZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID0gRFVBTF9TWVNURU0yOworCQlmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuc3lzdGVtID0gc3lzdGVtX3N0YXR1czsKIAogCQlpZih0eXBlID09IElGX1RZUEVfTkFORCB8fCB0eXBlID09IElGX1RZUEVfU1BJX05BTkQpCiAJCXsKQEAgLTY4NiwxMCArNjg4LDEwIEBACiAJCXByaW50Zigic3lzdGVtIGJvb3Qgc3RhdHVzIGlzIGNoYW5nZWQgdG8gdW5ib290YWJsZSFcbiIpOwogCQkvL3N5c3RlbV9yZXNldCgpOwogCX0KLQllbHNlIGlmKGZvdGFGbGFnSW5mby5ib290X2ZsYWcuYm9vdF90byA9PSBEVUFMX1NZU1RFTTIpCisJZWxzZSBpZihmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuYm9vdF90byA9PSBEVUFMX1NZU1RFTTIpCiAgICAgewotICAgICAgICBmb3RhRmxhZ0luZm8uYm9vdF9mbGFnLmJvb3RfdG8gPSBEVUFMX1NZU1RFTTsKLQkJZm90YUZsYWdJbmZvLmJvb3RfZmxhZy5zeXN0ZW0yID0gc3lzdGVtX3N0YXR1czsKKyAgICAgICAgZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPSBEVUFMX1NZU1RFTTsKKwkJZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLnN5c3RlbTIgPSBzeXN0ZW1fc3RhdHVzOwogCiAJCWlmKHR5cGUgPT0gSUZfVFlQRV9OQU5EIHx8IHR5cGUgPT0gSUZfVFlQRV9TUElfTkFORCkKIAkJewpAQCAtODE5LDggKzgyMSw3IEBACiB7CiAgICAgaW50IHJldCA9IDA7CiAgICAgLyogtsHIoWZsYWdzt9bH+CAqLwotCVRfQk9PVF9GT1RBX0ZMQUcgZm90YUZsYWc7Ci0JVF9GT1RBX0ZMQUdfSU5GTyBmb3RhRmxhZ0luZm87CisJVF9GTEFHU19JTkZPIGZvdGFGbGFnSW5mbzsKIAlyZXQgPSBsb2FkX2ZsYWdzKCZmb3RhRmxhZ0luZm8pOwogCWlmKHJldCAhPSAwKQogCXsKQEAgLTgyOCwxMiArODI5LDEyIEBACiAJCXJldHVybiAtMTsKIAl9CiAJCi0gICAgaWYoZm90YUZsYWdJbmZvLmJvb3RfZmxhZy5ib290X3RvID09IERVQUxfU1lTVEVNKQorICAgIGlmKGZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID09IERVQUxfU1lTVEVNKQogICAgIHsKICAgICAgICAgaW1hZ2Vmc19mbGFnID0gMTsKIAkJcHJpbnRmKCJpbWFnZWZzIGVudHJ5Li4uLi4uXG4iKTsKIAl9Ci0JZWxzZSBpZihmb3RhRmxhZ0luZm8uYm9vdF9mbGFnLmJvb3RfdG8gPT0gRFVBTF9TWVNURU0yKQorCWVsc2UgaWYoZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPT0gRFVBTF9TWVNURU0yKQogICAgIHsKICAgICAgICAgaW1hZ2Vmc19mbGFnID0gMjsKIAkJcHJpbnRmKCJpbWFnZWZzMiBlbnRyeS4uLi4uLlxuIik7CmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvYm9hcmQvenRlL3p4Mjk3NTIwdjMvengyOTc1MjB2M192ZWhpY2xlX2RjX3JlZi5jIGIvYm9vdC9jb21tb24vc3JjL3Vib290L2JvYXJkL3p0ZS96eDI5NzUyMHYzL3p4Mjk3NTIwdjNfdmVoaWNsZV9kY19yZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMWRiMDE1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9vdC9jb21tb24vc3JjL3Vib290L2JvYXJkL3p0ZS96eDI5NzUyMHYzL3p4Mjk3NTIwdjNfdmVoaWNsZV9kY19yZWYuYwpAQCAtMCwwICsxLDEwNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBDb3B5cmlnaHQgMjAxNiBieQlaSVhDIENvcnBvcmF0aW9uLgorKgorKiBGaWxlTmFtZTo6CXp4Mjk3NTIwLmMKKyogRmlsZSBNYXJrOgorKiBEZXNjcmlwdGlvbjoKKyogT3RoZXJzOgorKiBWZXJzaW9uOgkgdjEuMAorKiBBdXRob3I6CXpob3VxaQorKiBEYXRlOgkgIDIwMTQtMS0xNQorCisqIEhpc3RvcnkgMToKKyoJICBEYXRlOgorKgkgIFZlcnNpb246CisqCSAgQXV0aG9yOgorKgkgIE1vZGlmaWNhdGlvbjoKKyogSGlzdG9yeSAyOgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmFuZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL25hbmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VhcnQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9sc3BfY3JwbS5oPgorI2luY2x1ZGUgPHBvd2VyLmg+CisjaW5jbHVkZSA8cGFydGl0aW9uX3RhYmxlLmg+CisKKyNpbmNsdWRlIDxtbWMuaD4KKyNpbmNsdWRlIDxkd21tYy5oPgorI2luY2x1ZGUgPGJvb3RfbW9kZS5oPgorI2luY2x1ZGUgPGxvYWRfaW1hZ2UuaD4KKyNpbmNsdWRlIDx6eDIzNDI5MC5oPgorI2luY2x1ZGUgPGNoYXJnZS5oPgorLy8jaW5jbHVkZSA8bGVkLmg+CisjaW5jbHVkZSA8bGNkLmg+CisjaW5jbHVkZSA8cGVyaXBoZXJhbC5oPgorI2luY2x1ZGUgImJvYXJkLmgiCisjaW5jbHVkZSAicHViX2ZsYWdzLmgiCisKKyNpbmNsdWRlIDxkcnZzX2dwaW8uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2dtYWMuaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2luY2x1ZGUgPHNlY3VyZV92ZXJpZnkuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9lZnVzZS5oPgorCisjaW5jbHVkZSAiY21kX2Rvd252ZXIuaCIKKyNpbmNsdWRlIDwuLi9kcml2ZXJzL2RtYS96eDI5X2RtYS5oPgorCisjaW5jbHVkZSA8d2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL25vcl9zcGlmYy5oPgorCisjZGVmaW5lIFJFVF9CT09UX1JFQURZCQkxCisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisjaWYJVElNRV9ERUJVRworI2RlZmluZSB0aW1lX2RlYnVnX3Jlc2V0KGZtdCkJZm10ID0gZ2V0X3RpbWVyKDApCisjZGVmaW5lIHRpbWVfZGVidWdfcHJpbnRmKGZtdCwgdmFsKQlwcmludGYoZm10ICxnZXRfdGltZXIodmFsKSkKKyNlbHNlCisjZGVmaW5lIHRpbWVfZGVidWdfcmVzZXQoZm10KQorI2RlZmluZSB0aW1lX2RlYnVnX3ByaW50ZihmbXQsIHZhbCkKKyNlbmRpZgkvKiBUSU1FX0RFQlVHICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgCSgqSW5pdCkodm9pZCk7CisJY2hhcglmdW5jX25hbWVbMjBdOworfXN5c19pbml0X2Z1bmNfdDsKKworI2lmZGVmIENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDX1JFRgoraW50IGltYWdlZnNfZmxhZzsKK2V4dGVybiBzdHJ1Y3QgZnNsX3FzcGkgc3BpX25vcl9mbGFzaDsKK2V4dGVybiBpbnQgZmxhc2hfZG1hYnVmX2Rpc2FibGVfZmxhZzsKKyNlbmRpZgorZXh0ZXJuIGJvb3RfcmVhc29uX3QgZ19ib290X3JlYXNvbjsKK2V4dGVybiB1aW50MzJfdCBnX2dtYWNfaW5pdF9mbGFnOworZXh0ZXJuIHVpbnQzMl90IGdfZ21hY19pbml0X292ZXJ0aW1lOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZ19kZHJfc2l6ZV9mbGFnOworCit1bnNpZ25lZCBpbnQgZ191aURlYnVnTGV2ZWwgPSBVQk9PVF9OT1RJQ0U7Cit1bnNpZ25lZCBpbnQgZ19zeXNfa2VybmVsX3NkcmFtX3NpemUgPSBDT05GSUdfU1lTX1NEUkFNMzJfQTlfU0laRTsKKworCisjaWZuZGVmIENGR19URU1QX0FERFIKKyNkZWZpbmUgQ0ZHX1RFTVBfQUREUgkweDIyMDAwMDAwCisjZW5kaWYKKworI2RlZmluZSByZWczMihhZGRyKQkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisKKyNkZWZpbmUgVURFTEFZX1BBUkFNXzFTRUMJKDEwMDAwMC8zKQorCisvKiBEZWJ1Z0xldmVsIC0gQ29udHJvbGxlZCBhdCBjb21waWxlIHRpbWUKKyAqIFVCT09UX0VSUgktPiBOb25jcml0aWNhbCBlcnJvciBjb25kaXRpb25zLgorICogVUJPT1RfV0FSTgktPiBXYXJuaW5nIGNvbmRpdGlvbnMgdGhhdCBzaG91bGQgYmUgdGFrZW4gY2FyZSBvZi4KKyAqIFVCT09UX05PVElDRSAtPiBOb3JtYWwsIGJ1dCBzaWduaWZpY2FudCBldmVudHMuCisgKiBVQk9PVF9EQkcJLT4gSW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGF0IHJlcXVpcmUgbm8gYWN0aW9uLgorICogVUJPT1RfSU5GTwktPiBEZWJ1Z2dpbmcgbWVzc2FnZXMsIG91dHB1dCBpZiB0aGUgZGV2ZWxvcGVyIGVuYWJsZWQgZGVidWdnaW5nLgorICovCisvL3Vuc2lnbmVkIGludCBnX3VpRGVidWdMZXZlbCA9IFVCT09UX05PVElDRTsKK2V4dGVybiBpbnQgY29weV9kZHJfYWxsYmluKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb246CWJvYXJkX2luaXQKKyAqIERlc2NyaXB0aW9uOgorICogUGFyYW1ldGVyczoKKyAqCSBJbnB1dDoKKyAqCisgKgkgT3V0cHV0OgorICoKKyAqIFJldHVybnM6CisgKgorICoKKyAqIE90aGVyczoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbjoJZHJhbV9pbml0X2JhbmtzaXplCisgKiBEZXNjcmlwdGlvbjoKKyAqIFBhcmFtZXRlcnM6CisgKgkgSW5wdXQ6CisgKgorICoJIE91dHB1dDoKKyAqCisgKiBSZXR1cm5zOgorICoKKyAqCisgKiBPdGhlcnM6CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRyYW1faW5pdF9iYW5rc2l6ZSh2b2lkKQoreworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU1fMTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb246CWRyYW1faW5pdAorICogRGVzY3JpcHRpb246CisgKiBQYXJhbWV0ZXJzOgorICoJIElucHV0OgorICoKKyAqCSBPdXRwdXQ6CisgKgorICogUmV0dXJuczoKKyAqCisgKgorICogT3RoZXJzOgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRyYW1faW5pdCh2b2lkKQoreworCWdkLT5yYW1fc2l6ZSA9IGdldF9yYW1fc2l6ZSgobG9uZyAqKUNPTkZJR19TWVNfU0RSQU1fQkFTRSwKKwkJCQlQSFlTX1NEUkFNXzFfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOgljaGVja2JvYXJkCisgKiBEZXNjcmlwdGlvbjoKKyAqIFBhcmFtZXRlcnM6CisgKgkgSW5wdXQ6CisgKgorICoJIE91dHB1dDoKKyAqCisgKiBSZXR1cm5zOgorICoKKyAqCisgKiBPdGhlcnM6CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgY2hlY2tib2FyZCh2b2lkKQoreworI2lmZGVmIENPTkZJR19ESVNQTEFZX0JPQVJESU5GTworCXByaW50ZigiQm9hcmQ6IFpYMjk3NTIwVjNcbiIpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbGVhcl9pcmFtKHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IGxlbikKK3sKKwl1aW50MzJfdCBpID0gMDsKKwlmb3IoaSA9IGFkZHI7IGkgPCBhZGRyICsgbGVuOyBpKz00KQorCXsKKwkJd3JpdGVsKDB4MCwgaSk7CisJfQorfQorCit2b2lkIGNsZWFyX3RtcF9idWYodm9pZCkKK3sKKwljbGVhcl9pcmFtKENPTkZJR19TWVNfU0RSQU1fVEVNUF9CQVNFLCAweDgwMCk7Cit9CisKKy8qCisgKiBFQzogNjE2MDAwNTEwNDcwCisgKi8KK3N0YXRpYyBpbnQgbWRsX3Bvd2Vyb24odm9pZCkKK3sKKwlwbXVfcHVsbF9vbl9wc19ob2xkKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbWFjX2Rvd25sb2FkX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWdldF9nbWFjX2luaXRfZmxhZygpOworCUJPT1RfUFJJTlRGKFVCT09UX0RCRywgImdldF9nbWFjX2luaXRfZmxhZyA9IDB4JXgsIHJlYWRfZ21hY19pbml0X2ZsYWcgPSAweCV4LlxuIiwgZ2V0X2dtYWNfaW5pdF9mbGFnKCksIHJlYWRfZ21hY19pbml0X2ZsYWcoKSk7CisJaWYoMSA9PSByZWFkX2dtYWNfaW5pdF9mbGFnKCkpCisJeworCQlCT09UX1BSSU5URihVQk9PVF9OT1RJQ0UsICJnbWFjIGluaXQgb3ZlcnRpbWVbJWRzXS4uLi4uJCQkJCQkJCQkJCQkJCRcbiIsIHJlYWRfZ21hY19pbml0X292ZXJ0aW1lKCkpOworCisJCXB1dHMoIk5ldDoJIik7CisJCWV0aF9pbml0aWFsaXplKGdkLT5iZCk7CisKKwkJaWYgKHJ1bl9jb21tYW5kICgiZG93bnZlciBhbGxiaW5zIiwgMCkgPj0gMCkKKwkJeworCQkJcmV0ID0gY29weV9kZHJfYWxsYmluKCk7CisJCQlpZihyZXQgIT0gMCkKKwkJCXsKKwkJCQlCT09UX1BSSU5URihVQk9PVF9FUlIsICJuZXQgbG9hZCB3cml0ZSBmcm9tIGRkciB0byBuYW5kIEZBSUxFRCAhISFcbiIpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJQk9PVF9QUklOVEYoVUJPT1RfRVJSLCAicnVuX2NvbW1hbmQgZG93bnZlciBhbGxiaW5zIEZBSUxFRCAhISFcbiIpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9lbnZfZW50cnkodm9pZCkKK3sKKwkvKiDTsrz+suLK1CAqLworI2lmIENPTkZJR19IQVJEV0FSRV9URVNUCisJaGFyZHdhcmVfdGVzdCgpOworI2VuZGlmCisKKyNpZiBDT05GSUdfTVVUVUFMX0RFQlVHCS8v1sMx1q66877Nv8nS1L34yOtVQm9vdL/Y1sbMqMP8we7Q0AorCWZvciAoOzspCisJeworCQltYWluX2xvb3AoKTsKKwl9CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJvb3RfcmVhc29uX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgYW10X2ZsYWcgPSAwOworCXVuc2lnbmVkIGludCBrZXlfdGltZXMgPSAwOworCXVuc2lnbmVkIGludCAqcG93ZXJvbl90eXBlID0gKHVuc2lnbmVkIGludCAqKVBPV0VST05fVFlQRV9BRERSOwkgLy/B2cqxyrnTwworCisJQk9PVF9QUklOVEYoVUJPT1RfREJHLCAiTm9ybWFsIG1vZGUuXG4iKTsKKworCWFtdF9mbGFnID0gcmVhZGwoUE9XRVJPTl9UWVBFX0FERFIpOworCUJPT1RfUFJJTlRGKFVCT09UX05PVElDRSwgIlZBTFVFID0gMHgleCFcbiIsIGFtdF9mbGFnKTsKKwlpZihhbXRfZmxhZyA9PSBBTVRfTU9ERV9GTEFHKQorCXsKKwkJQk9PVF9QUklOVEYoVUJPT1RfTk9USUNFLCAiQU1UIFZBTFVFID0gQU1UX01PREVfRkxBRyFcbiIpOworCQlnX2Jvb3RfcmVhc29uID0gUkJfQU1UOworCX0KKwllbHNlCisJeworCQlyZXQgPSBnZXRfYm9vdF9yZWFzb24oKTsKKwkJaWYocmV0ICE9IDApCisJCXsKKwkJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgImdldCBib290IHJlYXNvbiBFUlJPUiAhISFcbiIpOworCQkJLyogVEJEOiBFcnJvciBSZXR1cm4uICovCisJCX0KKwl9CisKKwlpZihyZWFkX2ZvdGFfdXBkYXRlX2ZsYWcoKSA9PSBGT1RBX1JFQ09WRVJZKQorCXsKKwkJKnBvd2Vyb25fdHlwZSA9IFBPV0VSX09OX0ZPVEE7CisJfQorCWVsc2UgaWYocmVhZF9mb3RhX3VwZGF0ZV9mbGFnKCkgPT0gRk9UQV9MT0NBTFVQREFURSkKKwl7CisJCSpwb3dlcm9uX3R5cGUgPSBQT1dFUl9PTl9MT0NBTFVQREFURTsKKwl9CisJZWxzZSBpZihnX2Jvb3RfcmVhc29uID09IFJCX0FNVCkKKwl7CisJCSpwb3dlcm9uX3R5cGUgPSBQT1dFUl9PTl9BTVQ7CisJfQorCWVsc2UgaWYoZ19ib290X3JlYXNvbiA9PSBSQl9QUk9EVUNUSU9OKQorCXsKKwkJKnBvd2Vyb25fdHlwZSA9IFBPV0VSX09OX1BST0RVQ1RJT047CisJfQorCWVsc2UgaWYoKGdfYm9vdF9yZWFzb24gJiAweEYwKSA9PSBaWDIzNDI5MF9XRFRfUlNUX0ZMQUcpCisJeworCQkqcG93ZXJvbl90eXBlID0gZ19ib290X3JlYXNvbiAmIDB4MEY7CisJfQorCWVsc2UgaWYoZ19ib290X3JlYXNvbiA9PSBSQl9SRVNFVF9OT01BTCkKKwl7CisJCSpwb3dlcm9uX3R5cGUgPSBQT1dFUl9PTl9OT1JNQUw7CisJfQorCWVsc2UgaWYoZ19ib290X3JlYXNvbiA9PSBSQl9SVEMpCisJeworCQkqcG93ZXJvbl90eXBlID0gUE9XRVJfT05fUlRDOyAvL1BPV0VSX09OX05PUk1BTDsKKwl9CisJZWxzZSBpZihnX2Jvb3RfcmVhc29uID09IFJCX1JFU0VUX0VYQ0VQVCkKKwl7CisJCSpwb3dlcm9uX3R5cGUgPSBQT1dFUl9PTl9FWENFUFRSRVNFVDsKKwl9CisJZWxzZSBpZihnX2Jvb3RfcmVhc29uID09IFJCX1BPV0VSX0JPT1NUX0lOKQorCXsKKwkJKnBvd2Vyb25fdHlwZSA9IFBPV0VSX09OX0JPT1NUX0lOOworCX0KKwllbHNlIGlmKGdfYm9vdF9yZWFzb24gPT0gUkJfUkVTRVRfQUxBUk0pCisJeworCQkqcG93ZXJvbl90eXBlID0gUE9XRVJfT05fTk9STUFMOworCX0KKwllbHNlCisJeworCQkqcG93ZXJvbl90eXBlID0gUE9XRVJfT05fTk9STUFMOworCX0KKwlCT09UX1BSSU5URihVQk9PVF9OT1RJQ0UsICJwb3dlcm9uX3R5cGU9MHgleC5cbiIsICpwb3dlcm9uX3R5cGUpOworCXp4MjM0MjkwX3dyaXRlX2ZsYWcoWlgyMzQyOTBfV0RUX1JTVF9GTEFHIHwgKnBvd2Vyb25fdHlwZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiYXRfZGV0ZWN0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGlzcGxheV9ib290X2FuaW1hdGlvbih1bnNpZ25lZCBpbnQgcG93ZXJvbl90eXBlKQoreworCXN3aXRjaCAocG93ZXJvbl90eXBlKSB7CisJY2FzZSBQT1dFUl9PTl9MT0NBTFVQREFURToKKwkJU2hvd19VcGRhdGVXYWl0KCk7CisJCWJyZWFrOworCisJY2FzZSBQT1dFUl9PTl9OT1JNQUw6CisJCVNob3dfUG93ZXJPbl9Ob3JtYWwoKTsKKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX09OX0ZPVEE6CisJCVNob3dfUG93ZXJPbl9Gb3RhKCk7CisJCWJyZWFrOworCisJY2FzZSBQT1dFUl9PTl9DSEFSR0lORzoKKwkJU2hvd19DaGFyZ2luZygpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBib290X3ByZXBhcmUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcG93ZXJvbl90eXBlID0gcmVnMzIoUE9XRVJPTl9UWVBFX0FERFIpOwkgLy/B2cqxyrnTwworCisvKgorCWlmIChwb3dlcm9uX3R5cGUgPT0gUE9XRVJfT05fQ0hBUkdJTkcpIHsKKwkJcG11X3B1bGxfb2ZmX3BzX2hvbGQoKTsKKwl9IGVsc2UgeworCQlwbXVfcHVsbF9vbl9wc19ob2xkKCk7CisJfQorKi8KKyNpZiAxCisJLy96eDIzNDI5MF9zZXRfc29mdG9uKDEpOworI2Vsc2UKKwl6eDIzNDI5MF9zZXRfc29mdG9uKDApOworCXBtdV9wdWxsX29mZl9wc19ob2xkKCk7CisjZW5kaWYKKworCWRpc3BsYXlfYm9vdF9hbmltYXRpb24ocG93ZXJvbl90eXBlKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGCitzdGF0aWMgdWludDMyX3QgcGFnZV9hbGlnbih1aW50MzJfdCBvZmZzZXQpCit7CisJc3RydWN0IGZsYXNoX29wcyAqZmxhc2ggPSBOVUxMOworCXVpbnQzMl90IHBhZ2Vfc2l6ZSA9IDA7CisKKwlmbGFzaCA9IGdldF9mbGFzaF9vcHMoKTsKKwlwYWdlX3NpemUgPSBmbGFzaC0+cGFnZV9zaXplOworCWlmKCBvZmZzZXQgJiAocGFnZV9zaXplIC0gMSkgKQorCXsKKwkJb2Zmc2V0ICY9ICh+KHBhZ2Vfc2l6ZSAtIDEpKTsKKwkJb2Zmc2V0ICs9IHBhZ2Vfc2l6ZTsKKwl9CisJcmV0dXJuIG9mZnNldDsKK30KKworaW50IHJld3JpdGVfZmxhZ3Modm9pZCkKK3sKKyAgICB1aW50MzJfdCBvZmYgPSAwOworCXVpbnQzMl90IGZsYWdzX3NpemUgPSAwOy8qZmxhZ3O31sf4Mk0qLworCXVpbnQzMl90IGJsb2NrTnVtID0gMDsKKwl1aW50MzJfdCB3b3JrX2FyZWFfb2Zmc2V0ID0gMDsKKwl1aW50MzJfdCBiYWNrdXBfYXJlYV9vZmZzZXQgPSAwOworCWludCByZXQgPSAwOworCWludCB0eXBlID0gMDsKKwl1Y2hhciAqIGZsYWdzX25hbWUgPSAiZmxhZ3MiOworCVRfRkxBR1NfSU5GTyBmb3RhRmxhZ0luZm8gPSB7MH07CisJVF9EdWFsU3lzdGVtX1N0YXR1cyBzeXN0ZW1fc3RhdHVzOworCXN5c3RlbV9zdGF0dXMuc3RhdHVzID0gRFVBTFNZU1RFTV9TVEFUVVNfVU5CT09UQUJMRTsKKwl1MzIgZm90YV9zaXplID0gc2l6ZW9mKFRfRkxBR1NfSU5GTyk7CisJZm90YV9zaXplID0gcGFnZV9hbGlnbihmb3RhX3NpemUpOworCQorCW5hbmRfaW5mb190ICpuYW5kID0gJm5hbmRfaW5mb1tuYW5kX2N1cnJfZGV2aWNlXTsKKwlzdHJ1Y3QgZnNsX3FzcGkgKm5vciA9ICZzcGlfbm9yX2ZsYXNoOworCXVpbnQzMl90IHBhcnRfb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgZmxhc2hfb3BzICpmbGFzaCA9IE5VTEw7CisJZmxhc2hfZG1hYnVmX2Rpc2FibGVfZmxhZyA9IDE7CisJbmFuZF9lcmFzZV9vcHRpb25zX3Qgb3B0czsKKworCWZsYXNoID0gZ2V0X2ZsYXNoX29wcygpOworCXR5cGUgPSByZWFkX2Jvb3RfZmxhc2h0eXBlKCk7CisKKwkvKiDRsNXSt9bH+CAqLworCXBhcnRpdGlvbl9lbnRyeV90ICogZW50cnkgPSBmaW5kX3BhcnRpdGlvbl9wYXJhKGZsYWdzX25hbWUpOworCWlmKCBlbnRyeSA9PSBOVUxMICkKKwl7CisJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgIlslc106IGNhbid0IGZpbmQgdGhlIHBhcnRpdGlvbi4uLlxuIiwgZmxhZ3NfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisJLyogu/G1w7fWx/jK17XY1re6zbTz0KEgKi8KKwlwYXJ0X29mZnNldCA9IGVudHJ5LT5wYXJ0X29mZnNldDsKKwlmbGFnc19zaXplID0gZW50cnktPnBhcnRfc2l6ZTsKKwkKKwkvKsno1sPErMjPZmxhZ3O31sf4yv2+3SovCisJZm90YUZsYWdJbmZvLm1hZ2ljX3N0YXJ0ID0gRkxBR1NfTUFHSUM7CisJZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPSBEVUFMX1NZU1RFTTsKKwlmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuZm90YV9zdGF0dXMgPSAxOworCWZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5zeXN0ZW0uc3RhdHVzID0gRFVBTFNZU1RFTV9TVEFUVVNfQk9PVEFCTEU7CisJZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLnN5c3RlbTIuc3RhdHVzID0gRFVBTFNZU1RFTV9TVEFUVVNfQk9PVEFCTEU7CisgICAgZm90YUZsYWdJbmZvLmJvb3RfZW52LmR1YWxzeXNfdHlwZSA9IERVQUxTWVNURU1fQUI7CisJZm90YUZsYWdJbmZvLm1hZ2ljX2VuZCA9IEZMQUdTX01BR0lDOworCQorCS8q0LTI62ZsYWdzt9bH+CovCisJaWYodHlwZSA9PSBJRl9UWVBFX05BTkQgfHwgdHlwZSA9PSBJRl9UWVBFX1NQSV9OQU5EKQorCXsKKyAgICAgICAgCisJICAgLyrIt7aouaTX98f4us2xuLfdx/jGq9LGtdjWtyovCisJCWZvciAob2ZmID0gcGFydF9vZmZzZXQ7IG9mZiA8IHBhcnRfb2Zmc2V0K2ZsYWdzX3NpemU7IG9mZiArPSBuYW5kLT5lcmFzZXNpemUpCisJCXsKKwkJCWlmICghKG5hbmRfYmxvY2tfaXNiYWQobmFuZCxvZmYpKSkgCisJCQkJYmxvY2tOdW0gKz0gMTsKKwkJCQorCQkJaWYoYmxvY2tOdW0gPT0gMSkKKwkJCQl3b3JrX2FyZWFfb2Zmc2V0ID0gb2ZmOworCQkJCisJCQllbHNlIGlmKGJsb2NrTnVtID09IDIpCisJCQl7CisJCQkJIGJhY2t1cF9hcmVhX29mZnNldCA9IG9mZjsKKwkJCQkgYnJlYWs7CisJCQl9CQkKKwkJfQorCQorCQlpZihibG9ja051bSA8IDIpCisJCXsKKwkJCXByaW50ZigiZmxhZ3MgcGFydGl0aW9uIGhhdmUgbm90IGVub3VnaCBzcGFjZSFcbiIpOworCQkJCQorCQkJcmV0dXJuIC0xOworCQl9CisJCQorCQkvKrLBs/1mbGFnc9b3t9bH+CovCisJCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwkJb3B0cy5vZmZzZXQgPSB3b3JrX2FyZWFfb2Zmc2V0OworCQlvcHRzLmxlbmd0aCA9IGZvdGFfc2l6ZTsKKwkJcmV0ID0gZmxhc2gtPmVyYXNlKG5hbmQsJm9wdHMpOworCisJCWlmKCByZXQgIT0gMCApCisgCQl7CisgCQkJQk9PVF9QUklOVEYoVUJPT1RfRVJSLCAiWyVzXTogZXJhc2UgdGhlIGZsYWdzIGltYWdlZnMgd29yayBhcmVhIGVycm9yIVxuIiwgZmxhZ3NfbmFtZSk7CisgCQkJcmV0dXJuIDE7CisgCQl9CisKKwkJcmV0ID0gZmxhc2gtPndyaXRlKG5hbmQsKGxvZmZfdCkod29ya19hcmVhX29mZnNldCksCisJCQkJICAmZm90YV9zaXplLCh1X2NoYXIgKikoJmZvdGFGbGFnSW5mbyksMCk7CisJCQorIAkJaWYoIHJldCAhPSAwICkKKyAJCXsKKyAJCQlCT09UX1BSSU5URihVQk9PVF9FUlIsICJbJXNdOiB3cml0ZSB0aGUgZmxhZ3MgaW1hZ2VmcyB3b3JrIGFyZWEgZXJyb3IhXG4iLCBmbGFnc19uYW1lKTsKKyAJCQlyZXR1cm4gMTsKKyAJCX0KKwkKKwkJLyqywbP9ZmxhZ3OxuNPDx/gqLworCQltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJCW9wdHMub2Zmc2V0ID0gYmFja3VwX2FyZWFfb2Zmc2V0OworCQlvcHRzLmxlbmd0aCA9IGZvdGFfc2l6ZTsKKwkJcmV0ICs9IGZsYXNoLT5lcmFzZShuYW5kLCZvcHRzKTsKKworCQlpZiggcmV0ICE9IDAgKQorIAkJeworIAkJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgIlslc106IGVyYXNlIHRoZSBmbGFncyBpbWFnZWZzIGJhY2t1cCBhcmVhIGVycm9yIVxuIiwgZmxhZ3NfbmFtZSk7CisgCQkJcmV0dXJuIDE7CisgCQl9CisJCQorCQlyZXQgKz0gZmxhc2gtPndyaXRlKG5hbmQsKGxvZmZfdCkoYmFja3VwX2FyZWFfb2Zmc2V0KSwKKwkJCQkgICZmb3RhX3NpemUsKHVfY2hhciAqKSgmZm90YUZsYWdJbmZvKSwwKTsKKyAJCWlmKCByZXQgIT0gMCApCisgCQl7CisgCQkJQk9PVF9QUklOVEYoVUJPT1RfRVJSLCAiWyVzXTogd3JpdGUgdGhlIGZsYWdzIGltYWdlZnMgYmFja3VwIGFyZWEgZXJyb3IhXG4iLCBmbGFnc19uYW1lKTsKKyAJCQlyZXR1cm4gMTsKKyAJCX0KKwl9CisJZWxzZSBpZih0eXBlID09IElGX1RZUEVfTk9SKQorCXsgICAKKyAgICAgICAgLyqywbP9ZmxhZ3O31sf4Ki8KKwkJd29ya19hcmVhX29mZnNldCA9IHBhcnRfb2Zmc2V0OworICAgICAgICBiYWNrdXBfYXJlYV9vZmZzZXQgPSBwYXJ0X29mZnNldCArIG5vci0+bm9yWzBdLm10ZC5lcmFzZXNpemU7CisJCXJldCA9IG5hbmRfZXJhc2UoJihub3ItPm5vclswXS5tdGQpLCAobG9mZl90KSh3b3JrX2FyZWFfb2Zmc2V0KSwgZm90YV9zaXplKTsKKwkJcmV0ICs9IG5hbmRfZXJhc2UoJihub3ItPm5vclswXS5tdGQpLCAobG9mZl90KShiYWNrdXBfYXJlYV9vZmZzZXQpLCBmb3RhX3NpemUpOworCQlpZiggcmV0ICE9IDAgKQorIAkJeworIAkJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgIlslc106IGVyYXNlIHRoZSBmbGFncyBpbWFnZWZzIGVycm9yIVxuIiwgZmxhZ3NfbmFtZSk7CisgCQkJcmV0dXJuIDE7CisgCQl9CisJCQorCQlyZXQgPSBuYW5kX3dyaXRlKCYobm9yLT5ub3JbMF0ubXRkKSwgKGxvZmZfdCkod29ya19hcmVhX29mZnNldCksIAorCQkJCQkJJmZvdGFfc2l6ZSwgKHVfY2hhciAqKSgmZm90YUZsYWdJbmZvKSk7CisJCXJldCArPSBuYW5kX3dyaXRlKCYobm9yLT5ub3JbMF0ubXRkKSwgKGxvZmZfdCkoYmFja3VwX2FyZWFfb2Zmc2V0KSwgCisJCQkJCQkmZm90YV9zaXplLCAodV9jaGFyICopKCZmb3RhRmxhZ0luZm8pKTsKKwkJaWYocmV0ICE9IDApCisJCXsKKwkJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgIlslc106IHdyaXRlIHRoZSBmbGFncyBpbWFnZWZzIGVycm9yIVxuIiwgZmxhZ3NfbmFtZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwkKKwlwcmludGYoImZsYWdzIHBhcnRpdGlvbiBkYXRhIGlzIGVycm9yLGFscmVhZHkgcmV3cml0ZSBkZWZhdWx0IHBhcmFtZXRlcnMhXG4iKTsKKwkvL3N5c3RlbV9yZXNldCgpOworCQorCWZsYXNoX2RtYWJ1Zl9kaXNhYmxlX2ZsYWcgPSAwOyAKKyAgICBmbHVzaF9kY2FjaGVfYWxsKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB3cml0ZWJhY2tfZmxhZ3Modm9pZCkKK3sKKyAgICB1aW50MzJfdCBvZmYgPSAwOworCXVpbnQzMl90IGZsYWdzX3NpemUgPSAwOy8qZmxhZ3O31sf4Mk0qLworCXVpbnQzMl90IGJsb2NrTnVtID0gMDsKKwl1aW50MzJfdCB3b3JrX2FyZWFfb2Zmc2V0ID0gMDsKKwl1aW50MzJfdCBiYWNrdXBfYXJlYV9vZmZzZXQgPSAwOworCWludCByZXQgPSAwOworCWludCB0eXBlID0gMDsKKwl1Y2hhciAqIGZsYWdzX25hbWUgPSAiZmxhZ3MiOworCVRfRkxBR1NfSU5GTyBmb3RhRmxhZ0luZm8gPSB7MH07CisJVF9EdWFsU3lzdGVtX1N0YXR1cyBzeXN0ZW1fc3RhdHVzOworCXN5c3RlbV9zdGF0dXMuc3RhdHVzID0gRFVBTFNZU1RFTV9TVEFUVVNfVU5CT09UQUJMRTsKKwl1MzIgZm90YV9zaXplID0gc2l6ZW9mKFRfRkxBR1NfSU5GTyk7CisJZm90YV9zaXplID0gcGFnZV9hbGlnbihmb3RhX3NpemUpOworCQorCW5hbmRfaW5mb190ICpuYW5kID0gJm5hbmRfaW5mb1tuYW5kX2N1cnJfZGV2aWNlXTsKKwlzdHJ1Y3QgZnNsX3FzcGkgKm5vciA9ICZzcGlfbm9yX2ZsYXNoOworCXVpbnQzMl90IHBhcnRfb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgZmxhc2hfb3BzICpmbGFzaCA9IE5VTEw7CisJZmxhc2hfZG1hYnVmX2Rpc2FibGVfZmxhZyA9IDE7CisJbmFuZF9lcmFzZV9vcHRpb25zX3Qgb3B0czsKKworCWZsYXNoID0gZ2V0X2ZsYXNoX29wcygpOworCXR5cGUgPSByZWFkX2Jvb3RfZmxhc2h0eXBlKCk7CisKKwkvKiDRsNXSt9bH+CAqLworCXBhcnRpdGlvbl9lbnRyeV90ICogZW50cnkgPSBmaW5kX3BhcnRpdGlvbl9wYXJhKGZsYWdzX25hbWUpOworCWlmKCBlbnRyeSA9PSBOVUxMICkKKwl7CisJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgIlslc106IGNhbid0IGZpbmQgdGhlIHBhcnRpdGlvbi4uLlxuIiwgZmxhZ3NfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisJLyogu/G1w7fWx/jK17XY1re6zbTz0KEgKi8KKwlwYXJ0X29mZnNldCA9IGVudHJ5LT5wYXJ0X29mZnNldDsKKwlmbGFnc19zaXplID0gZW50cnktPnBhcnRfc2l6ZTsKKwkKKwkvKrbByKFmbGFnc7fWx/gqLworCXJldCA9IGxvYWRfZmxhZ3MoJmZvdGFGbGFnSW5mbyk7CisJaWYocmV0ICE9IDApCisJeworCQlwcmludGYoInJlYWQgZmxhZ3MgcGFydGl0aW9uIGVyci5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyrQtLvYZmxhZ3O31sf4Ki8KKyAgICBpZihmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuYm9vdF90byA9PSBEVUFMX1NZU1RFTSkKKyAgICB7CisgICAgICAgIGZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID0gRFVBTF9TWVNURU0yOworCQlmb3RhRmxhZ0luZm8uYm9vdF9mb3RhX2ZsYWcuc3lzdGVtID0gc3lzdGVtX3N0YXR1czsKKworCQlpZih0eXBlID09IElGX1RZUEVfTkFORCB8fCB0eXBlID09IElGX1RZUEVfU1BJX05BTkQpCisJCXsKKyAgICAgICAgICAgIAorCQkgICAvKsi3tqi5pNf3x/i6zbG4t93H+Mar0sa12Na3Ki8KKwkJCWZvciAob2ZmID0gcGFydF9vZmZzZXQ7IG9mZiA8IHBhcnRfb2Zmc2V0K2ZsYWdzX3NpemU7IG9mZiArPSBuYW5kLT5lcmFzZXNpemUpCisJCQl7CisJCQkJaWYgKCEobmFuZF9ibG9ja19pc2JhZChuYW5kLG9mZikpKSAKKwkJCQkJYmxvY2tOdW0gKz0gMTsKKwkJCQkKKwkJCQlpZihibG9ja051bSA9PSAxKQorCQkJCQl3b3JrX2FyZWFfb2Zmc2V0ID0gb2ZmOworCQkJCQorCQkJCWVsc2UgaWYoYmxvY2tOdW0gPT0gMikKKwkJCQl7CisJCQkJCSBiYWNrdXBfYXJlYV9vZmZzZXQgPSBvZmY7CisJCQkJCSBicmVhazsKKwkJCQl9CQkKKwkJCX0KKwkJCisJCQlpZihibG9ja051bSA8IDIpCisJCQl7CisJCQkJcHJpbnRmKCJmbGFncyBwYXJ0aXRpb24gaGF2ZSBub3QgZW5vdWdoIHNwYWNlIVxuIik7CisJCQkJCQorCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCQorCQkJLyqywbP9ZmxhZ3PW97fWx/gqLworCQkJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCQkJb3B0cy5vZmZzZXQgPSB3b3JrX2FyZWFfb2Zmc2V0OworCQkJb3B0cy5sZW5ndGggPSBmb3RhX3NpemU7CisJCQlyZXQgPSBmbGFzaC0+ZXJhc2UobmFuZCwmb3B0cyk7CisKKwkJCWlmKCByZXQgIT0gMCApCisJIAkJeworCSAJCQlCT09UX1BSSU5URihVQk9PVF9FUlIsICJbJXNdOiBlcmFzZSB0aGUgZmxhZ3MgaW1hZ2VmcyB3b3JrIGFyZWEgZXJyb3IhXG4iLCBmbGFnc19uYW1lKTsKKwkgCQkJcmV0dXJuIDE7CisJIAkJfQorCisJCQlyZXQgPSBmbGFzaC0+d3JpdGUobmFuZCwobG9mZl90KSh3b3JrX2FyZWFfb2Zmc2V0KSwKKwkJCQkJICAmZm90YV9zaXplLCh1X2NoYXIgKikoJmZvdGFGbGFnSW5mbyksMCk7CisJIAkJaWYoIHJldCAhPSAwICkKKwkgCQl7CisJIAkJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgIlslc106IHdyaXRlIHRoZSBmbGFncyBpbWFnZWZzIHdvcmsgYXJlYSBlcnJvciFcbiIsIGZsYWdzX25hbWUpOworCSAJCQlyZXR1cm4gMTsKKwkgCQl9CisJCQkKKwkJCS8qssGz/WZsYWdzsbjTw8f4Ki8KKwkJCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwkJCW9wdHMub2Zmc2V0ID0gYmFja3VwX2FyZWFfb2Zmc2V0OworCQkJb3B0cy5sZW5ndGggPSBmb3RhX3NpemU7CisJCQlyZXQgKz0gZmxhc2gtPmVyYXNlKG5hbmQsJm9wdHMpOworCisJCQlpZiggcmV0ICE9IDAgKQorCSAJCXsKKwkgCQkJQk9PVF9QUklOVEYoVUJPT1RfRVJSLCAiWyVzXTogZXJhc2UgdGhlIGZsYWdzIGltYWdlZnMgYmFja3VwIGFyZWEgZXJyb3IhXG4iLCBmbGFnc19uYW1lKTsKKwkgCQkJcmV0dXJuIDE7CisJIAkJfQorCQkJCisJCQlyZXQgKz0gZmxhc2gtPndyaXRlKG5hbmQsKGxvZmZfdCkoYmFja3VwX2FyZWFfb2Zmc2V0KSwKKwkJCQkJICAmZm90YV9zaXplLCh1X2NoYXIgKikoJmZvdGFGbGFnSW5mbyksMCk7CisJIAkJaWYoIHJldCAhPSAwICkKKwkgCQl7CisJIAkJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgIlslc106IHdyaXRlIHRoZSBmbGFncyBpbWFnZWZzIGJhY2t1cCBhcmVhIGVycm9yIVxuIiwgZmxhZ3NfbmFtZSk7CisJIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCQllbHNlIGlmKHR5cGUgPT0gSUZfVFlQRV9OT1IpCisJCXsgICAKKyAgICAgICAgICAgIC8qssGz/WZsYWdzt9bH+CovCisJCQl3b3JrX2FyZWFfb2Zmc2V0ID0gcGFydF9vZmZzZXQ7CisJICAgICAgICBiYWNrdXBfYXJlYV9vZmZzZXQgPSBwYXJ0X29mZnNldCArIG5vci0+bm9yWzBdLm10ZC5lcmFzZXNpemU7CisJCQlyZXQgPSBuYW5kX2VyYXNlKCYobm9yLT5ub3JbMF0ubXRkKSwgKGxvZmZfdCkod29ya19hcmVhX29mZnNldCksIGZvdGFfc2l6ZSk7CisJCQlyZXQgKz0gbmFuZF9lcmFzZSgmKG5vci0+bm9yWzBdLm10ZCksIChsb2ZmX3QpKGJhY2t1cF9hcmVhX29mZnNldCksIGZvdGFfc2l6ZSk7CisJCQlpZiggcmV0ICE9IDAgKQorCSAJCXsKKwkgCQkJQk9PVF9QUklOVEYoVUJPT1RfRVJSLCAiWyVzXTogZXJhc2UgdGhlIGZsYWdzIGltYWdlZnMgZXJyb3IhXG4iLCBmbGFnc19uYW1lKTsKKwkgCQkJcmV0dXJuIDE7CisJIAkJfQorCQkJCisJCQlyZXQgPSBuYW5kX3dyaXRlKCYobm9yLT5ub3JbMF0ubXRkKSwgKGxvZmZfdCkod29ya19hcmVhX29mZnNldCksIAorCQkJCQkJCSZmb3RhX3NpemUsICh1X2NoYXIgKikoJmZvdGFGbGFnSW5mbykpOworCQkJcmV0ICs9IG5hbmRfd3JpdGUoJihub3ItPm5vclswXS5tdGQpLCAobG9mZl90KShiYWNrdXBfYXJlYV9vZmZzZXQpLCAKKwkJCQkJCQkmZm90YV9zaXplLCAodV9jaGFyICopKCZmb3RhRmxhZ0luZm8pKTsKKwkJCWlmKHJldCAhPSAwKQorCQkJeworCQkJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgIlslc106IHdyaXRlIHRoZSBmbGFncyBpbWFnZWZzIGVycm9yIVxuIiwgZmxhZ3NfbmFtZSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKwkJcHJpbnRmKCJzeXN0ZW0gYm9vdCBzdGF0dXMgaXMgY2hhbmdlZCB0byB1bmJvb3RhYmxlIVxuIik7CisJCS8vc3lzdGVtX3Jlc2V0KCk7CisJfQorCWVsc2UgaWYoZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPT0gRFVBTF9TWVNURU0yKQorICAgIHsKKyAgICAgICAgZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPSBEVUFMX1NZU1RFTTsKKwkJZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLnN5c3RlbTIgPSBzeXN0ZW1fc3RhdHVzOworCisJCWlmKHR5cGUgPT0gSUZfVFlQRV9OQU5EIHx8IHR5cGUgPT0gSUZfVFlQRV9TUElfTkFORCkKKwkJeworICAgICAgICAgICAgLyrIt7aouaTX98f4us2xuLfdx/jGq9LGtdjWtyovCisJCQlmb3IgKG9mZiA9IHBhcnRfb2Zmc2V0OyBvZmYgPCBwYXJ0X29mZnNldCtmbGFnc19zaXplOyBvZmYgKz0gbmFuZC0+ZXJhc2VzaXplKQorCQkJeworCQkJCWlmICghKG5hbmRfYmxvY2tfaXNiYWQobmFuZCxvZmYpKSkgCisJCQkJCWJsb2NrTnVtICs9IDE7CisJCQkJCisJCQkJaWYoYmxvY2tOdW0gPT0gMSkKKwkJCQkJd29ya19hcmVhX29mZnNldCA9IG9mZjsKKwkJCQkKKwkJCQllbHNlIGlmKGJsb2NrTnVtID09IDIpCisJCQkJeworCQkJCQkgYmFja3VwX2FyZWFfb2Zmc2V0ID0gb2ZmOworCQkJCQkgYnJlYWs7CisJCQkJfQkJCisJCQl9CisJCQorCQkJaWYoYmxvY2tOdW0gPCAyKQorCQkJeworCQkJCXByaW50ZigiZmxhZ3MgcGFydGl0aW9uIGhhdmUgbm90IGVub3VnaCBzcGFjZSFcbiIpOworCQkJCQkKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQkKKwkJCS8qssGz/WZsYWdz1ve31sf4Ki8KKwkJCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwkJCW9wdHMub2Zmc2V0ID0gd29ya19hcmVhX29mZnNldDsKKwkJCW9wdHMubGVuZ3RoID0gZm90YV9zaXplOworCQkJcmV0ID0gZmxhc2gtPmVyYXNlKG5hbmQsJm9wdHMpOworCisJCQlpZiggcmV0ICE9IDAgKQorCSAJCXsKKwkgCQkJQk9PVF9QUklOVEYoVUJPT1RfRVJSLCAiWyVzXTogZXJhc2UgdGhlIGZsYWdzIGltYWdlZnMgd29yayBhcmVhIGVycm9yIVxuIiwgZmxhZ3NfbmFtZSk7CisJIAkJCXJldHVybiAxOworCSAJCX0KKworCQkJcmV0ID0gZmxhc2gtPndyaXRlKG5hbmQsKGxvZmZfdCkod29ya19hcmVhX29mZnNldCksCisJCQkJCSAgJmZvdGFfc2l6ZSwodV9jaGFyICopKCZmb3RhRmxhZ0luZm8pLDApOworCQorCSAJCWlmKCByZXQgIT0gMCApCisJIAkJeworCSAJCQlCT09UX1BSSU5URihVQk9PVF9FUlIsICJbJXNdOiB3cml0ZSB0aGUgZmxhZ3MgaW1hZ2VmcyB3b3JrIGFyZWEgZXJyb3IhXG4iLCBmbGFnc19uYW1lKTsKKwkgCQkJcmV0dXJuIDE7CisJIAkJfQorCQkKKwkJCS8qssGz/WZsYWdzsbjTw8f4Ki8KKwkJCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwkJCW9wdHMub2Zmc2V0ID0gYmFja3VwX2FyZWFfb2Zmc2V0OworCQkJb3B0cy5sZW5ndGggPSBmb3RhX3NpemU7CisJCQlyZXQgKz0gZmxhc2gtPmVyYXNlKG5hbmQsJm9wdHMpOworCisJCQlpZiggcmV0ICE9IDAgKQorCSAJCXsKKwkgCQkJQk9PVF9QUklOVEYoVUJPT1RfRVJSLCAiWyVzXTogZXJhc2UgdGhlIGZsYWdzIGltYWdlZnMgYmFja3VwIGFyZWEgZXJyb3IhXG4iLCBmbGFnc19uYW1lKTsKKwkgCQkJcmV0dXJuIDE7CisJIAkJfQorCQkJCisJCQlyZXQgKz0gZmxhc2gtPndyaXRlKG5hbmQsKGxvZmZfdCkoYmFja3VwX2FyZWFfb2Zmc2V0KSwKKwkJCQkJICAmZm90YV9zaXplLCh1X2NoYXIgKikoJmZvdGFGbGFnSW5mbyksMCk7CisJIAkJaWYoIHJldCAhPSAwICkKKwkgCQl7CisJIAkJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgIlslc106IHdyaXRlIHRoZSBmbGFncyBpbWFnZWZzIGJhY2t1cCBhcmVhIGVycm9yIVxuIiwgZmxhZ3NfbmFtZSk7CisJIAkJCXJldHVybiAxOworCSAJCX0KKwkJfQorCQllbHNlIGlmKHR5cGUgPT0gSUZfVFlQRV9OT1IpCisJCXsKKyAgICAgICAgICAgIC8qssGz/WZsYWdzt9bH+CovCisJCQl3b3JrX2FyZWFfb2Zmc2V0ID0gcGFydF9vZmZzZXQ7CisJICAgICAgICBiYWNrdXBfYXJlYV9vZmZzZXQgPSBwYXJ0X29mZnNldCArIG5vci0+bm9yWzBdLm10ZC5lcmFzZXNpemU7CisJCQlyZXQgPSBuYW5kX2VyYXNlKCYobm9yLT5ub3JbMF0ubXRkKSwgKGxvZmZfdCkod29ya19hcmVhX29mZnNldCksIGZvdGFfc2l6ZSk7CisJCQlyZXQgKz0gbmFuZF9lcmFzZSgmKG5vci0+bm9yWzBdLm10ZCksIChsb2ZmX3QpKGJhY2t1cF9hcmVhX29mZnNldCksIGZvdGFfc2l6ZSk7CisJCQlpZiggcmV0ICE9IDAgKQorCSAJCXsKKwkgCQkJQk9PVF9QUklOVEYoVUJPT1RfRVJSLCAiWyVzXTogZXJhc2UgdGhlIGZsYWdzIGltYWdlZnMgZXJyb3IhXG4iLCBmbGFnc19uYW1lKTsKKwkgCQkJcmV0dXJuIDE7CisJIAkJfQorCQkJCisJCQlyZXQgPSBuYW5kX3dyaXRlKCYobm9yLT5ub3JbMF0ubXRkKSwgKGxvZmZfdCkod29ya19hcmVhX29mZnNldCksIAorCQkJCQkJCSZmb3RhX3NpemUsICh1X2NoYXIgKikoJmZvdGFGbGFnSW5mbykpOworCQkJcmV0ICs9IG5hbmRfd3JpdGUoJihub3ItPm5vclswXS5tdGQpLCAobG9mZl90KShiYWNrdXBfYXJlYV9vZmZzZXQpLCAKKwkJCQkJCQkmZm90YV9zaXplLCAodV9jaGFyICopKCZmb3RhRmxhZ0luZm8pKTsKKwkJCWlmKHJldCAhPSAwKQorCQkJeworCQkJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgIlslc106IHdyaXRlIHRoZSBmbGFncyBpbWFnZWZzIGVycm9yIVxuIiwgZmxhZ3NfbmFtZSk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCS8vZmxhc2gud3JpdGUobmFuZCwobG9mZl90KXBhcnRfb2Zmc2V0LCZmbGFnc1NpemUsKHVfY2hhciAqKSgmZm90YUZsYWcpLDApOworCQlwcmludGYoInN5c3RlbTIgYm9vdCBzdGF0dXMgaXMgY2hhbmdlZCB0byB1bmJvb3RhYmxlIVxuIik7CisJfQorCQorCWZsYXNoX2RtYWJ1Zl9kaXNhYmxlX2ZsYWcgPSAwOyAKKyAgICBmbHVzaF9kY2FjaGVfYWxsKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBzeXN0ZW1fYm9vdF9zdGF0dXModm9pZCkKK3sKKyAgICBpbnQgcmV0OworCXUzMiBib290RmxhZ3MgPSByZWFkbChCT09UX0ZMQUdfQUREUik7CisJCisJaWYoYm9vdEZsYWdzID09IERVQUxTWVNURU1fU1RBVFVTX1VOQk9PVEFCTEUpCisJeworICAgICAgICByZXQgPSB3cml0ZWJhY2tfZmxhZ3MoKTsKKwkJaWYocmV0ICE9IDApCisJCQlyZXR1cm4gLTE7CisJCXN5c3RlbV9yZXNldCgpOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZihib290RmxhZ3MgPT0gRFVBTFNZU1RFTV9TVEFUVVNfQk9PVEFCTEUpCisJeworICAgICAgICByZXR1cm4gMDsKKwl9CisJZWxzZSBpZihib290RmxhZ3MgPT0gRkxBR1NfUEFSVElUSU9OX0VSUk9SKQorCXsKKwkJcmV0ID0gcmV3cml0ZV9mbGFncygpOworCQlpZihyZXQgIT0gMCkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHJlYWRfaW1hZ2Vmc19mbGFnKHZvaWQpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgLyogtsHIoWZsYWdzt9bH+CAqLworCVRfRkxBR1NfSU5GTyBmb3RhRmxhZ0luZm87CisJcmV0ID0gbG9hZF9mbGFncygmZm90YUZsYWdJbmZvKTsKKwlpZihyZXQgIT0gMCkKKwl7CisJCXByaW50ZigicmVhZCBmbGFncyBwYXJ0aXRpb24gZXJyLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisJCisgICAgaWYoZm90YUZsYWdJbmZvLmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPT0gRFVBTF9TWVNURU0pCisgICAgeworICAgICAgICBpbWFnZWZzX2ZsYWcgPSAxOworCQlwcmludGYoImltYWdlZnMgZW50cnkuLi4uLi5cbiIpOworCX0KKwllbHNlIGlmKGZvdGFGbGFnSW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID09IERVQUxfU1lTVEVNMikKKyAgICB7CisgICAgICAgIGltYWdlZnNfZmxhZyA9IDI7CisJCXByaW50ZigiaW1hZ2VmczIgZW50cnkuLi4uLi5cbiIpOworCX0KKwkKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorc3RhdGljIGludCBib290X2VudHJ5KHZvaWQpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IHBvd2Vyb25fdHlwZSA9IHJlZzMyKFBPV0VST05fVFlQRV9BRERSKTsJIC8vwdnKscq508MKKworCS8vZ19kZHJfc2l6ZV9mbGFnID0gQ0hJUF9ERFJfSVNfMzJNOworCisJc3dpdGNoIChwb3dlcm9uX3R5cGUpIHsKKwljYXNlIFBPV0VSX09OX0xPQ0FMVVBEQVRFOgorCQlicmVhazsKKwljYXNlIFBPV0VSX09OX0ZPVEE6CisJCUJPT1RfUFJJTlRGKFVCT09UX05PVElDRSwgIkZvdGEgZW50cnkhXG4iKTsKKwkJaWYoZ19kZHJfc2l6ZV9mbGFnID09IENISVBfRERSX0lTXzMyTSkKKwkJeworCQkJZ19zeXNfa2VybmVsX3NkcmFtX3NpemUgPSBDT05GSUdfU1lTX1NEUkFNMzJfUkVDT1ZFUllfQTlfU0laRTsKKwkJfQorCQllbHNlIGlmKGdfZGRyX3NpemVfZmxhZyA9PSBDSElQX0REUl9JU182NE0pCisJCXsKKwkJCWdfc3lzX2tlcm5lbF9zZHJhbV9zaXplID0gQ09ORklHX1NZU19TRFJBTTY0X1JFQ09WRVJZX0E5X1NJWkU7CisJCX0KKwkJZWxzZSBpZihnX2Rkcl9zaXplX2ZsYWcgPT0gQ0hJUF9ERFJfSVNfMTI4TSkKKwkJeworCQkJZ19zeXNfa2VybmVsX3NkcmFtX3NpemUgPSBDT05GSUdfU1lTX1NEUkFNMTI4X1JFQ09WRVJZX0E5X1NJWkU7CisJCX0JCQorCQllbHNlCisJCXsKKwkJCWdfc3lzX2tlcm5lbF9zZHJhbV9zaXplID0gQ09ORklHX1NZU19TRFJBTTI1Nl9SRUNPVkVSWV9BOV9TSVpFOworCQl9CisJCQorCQlyZXQgPSBmc19sb2FkX2FybV9pbWFnZV9saW51eChBUk1fUkVDT1ZFUllfVVNFUkRBVEFfSU1BR0UpOwkvKkZPVEEtVVBEQVRFKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQk9PVF9QUklOVEYoVUJPT1RfTk9USUNFLCAiTm9ybWFsIGVudHJ5IVxuIik7CisJCWdfc3lzX2tlcm5lbF9zZHJhbV9zaXplID0gRERSX0JBU0VfTEVOX0FQOworI2lmIDAKKwkJaWYoZ19kZHJfc2l6ZV9mbGFnID09IENISVBfRERSX0lTXzMyTSkKKwkJeworCQkJZ19zeXNfa2VybmVsX3NkcmFtX3NpemUgPSBDT05GSUdfU1lTX1NEUkFNMzJfQTlfU0laRTsKKwkJfQorCQllbHNlIGlmKGdfZGRyX3NpemVfZmxhZyA9PSBDSElQX0REUl9JU182NE0pCisJCXsKKwkJCWdfc3lzX2tlcm5lbF9zZHJhbV9zaXplID0gQ09ORklHX1NZU19TRFJBTTY0X0E5X1NJWkU7CisJCX0KKwkJZWxzZSBpZihnX2Rkcl9zaXplX2ZsYWcgPT0gQ0hJUF9ERFJfSVNfMTI4TSkKKwkJeworCQkJZ19zeXNfa2VybmVsX3NkcmFtX3NpemUgPSBDT05GSUdfU1lTX1NEUkFNMTI4X0E5X1NJWkU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlnX3N5c19rZXJuZWxfc2RyYW1fc2l6ZSA9IENPTkZJR19TWVNfU0RSQU0yNTZfQTlfU0laRTsKKwkJfQorI2VuZGlmCisJCXJldCA9IGZzX2xvYWRfbTBfaW1hZ2UoKTsKKwkJcmV0ICs9IGZzX2xvYWRfenNwX2ltYWdlKCk7CisJCXJldCArPSBmc19sb2FkX2R0Yl9pbWFnZSgpOworCQlyZXQgKz0gZnNfbG9hZF9hcm1faW1hZ2VfbGludXgoQVJNX0NBUF9JTUFHRSk7CisJCXJldCArPSBmc19sb2FkX2FybV9pbWFnZV9saW51eChBUk1fQVBQX0lNQUdFKTsKKwkJYnJlYWs7CisJfQorCisjaWYgVkVSU0lPTl9SRUxFQVNFCisJaWYoIHJldCAhPSAwICkKKwl7CisJCUJPT1RfUFJJTlRGKFVCT09UX0VSUiwgImxvYWQgaW1hZ2VzIEVSUk9SICEhIVxuIik7CisjaWZkZWYgQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGCisgICAgICAgIHdyaXRlYmFja19mbGFncygpOworCQlzeXN0ZW1fcmVzZXQoKTsKKyNlbmRpZgorCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzeXNfaW5pdF9mdW5jX3QgdWJvb3RfaW5pdF9mdW5jX3RibFtdID0KK3sKKwl7bWRsX3Bvd2Vyb24sCQkJInB1bGwgb24gcHNob2xkIn0sCisJe3dkdF9nZXRfcmVib290X3JlYXNvbiwJIndkdF9yZWJvb3QifSwKKwl7ZG1hX2luaXQsCQkJCSJkbWEifSwKKwl7aTJjX2luaXQsCQkJCSJpMmMifSwKKwl7cGVyaXBoZXJhbF9pbml0LAkJInBlcmkifSwKKwl7bmFuZF9pbml0LAkJCQkibmFuZCJ9LAorCXtwYXJ0aXRpb25faW5pdCwJCSJwYXJ0aXRpb24ifSwJCisJe2dtYWNfZG93bmxvYWRfaW5pdCwJImdtYWMifSwKKwl7dGVzdF9lbnZfZW50cnksCQkidGVzdCJ9LAorCXtlZnVzZV9pbml0LAkJCSJlZnVzZSJ9LAorI2lmZGVmIENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDX1JFRgorICAgIHtzeXN0ZW1fYm9vdF9zdGF0dXMsICAgICJzeXN0ZW1fYm9vdF9zdGF0dXMifSwKKwl7cmVhZF9pbWFnZWZzX2ZsYWcsICAgICAicmVhZF9pbWFnZWZzX2ZsYWcifSwKKyNlbmRpZgorCXtudnJ3X2ZsYWdfaW5pdCwJCSJudnJ3X2ZsYWcifSwKKwl7Ym9vdF9yZWFzb25faW5pdCwJCSJib290X3JlYXNvbiJ9LAorCXt3ZHRfaW5pdCwJCQkJIndkdCJ9LAorCXtiYXRfZGV0ZWN0LAkJCSJiYXRfZGV0In0sCisJe2Jvb3RfcHJlcGFyZSwJCQkiYm9vdF9wcmVwYXJlIn0sCisJe05VTEwsCQkJCQl7fX0KK307CisKK3N0YXRpYyBjb25zdCBzeXNfaW5pdF9mdW5jX3QgdGJvb3RfaW5pdF9mdW5jX3RibFtdID0KK3sKKwl7d2R0X2dldF9yZWJvb3RfcmVhc29uLAkid2R0X3JlYm9vdCJ9LAorCXtkbWFfaW5pdCwJCQkJImRtYSJ9LAorCXtpMmNfaW5pdCwJCQkJImkyYyJ9LAorCXtwZXJpcGhlcmFsX2luaXQsCQkicGVyaSJ9LAorCXtuYW5kX2luaXQsCQkJCSJuYW5kIn0sCisJe05VTEwsCQkJCQl7fX0KK307CisKK2ludCB1Ym9vdF9pbml0X2Z1bmModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGV2X2luZGV4OworCWludCByZXQ7CisKKwlCT09UX1BSSU5URihVQk9PVF9OT1RJQ0UsICJnbyBpbnRvIHVib290IGluaXQgZnVuY1xuIik7CisKKwlmb3IgKGRldl9pbmRleCA9IDA7ICh1Ym9vdF9pbml0X2Z1bmNfdGJsW2Rldl9pbmRleF0uSW5pdCAhPSBOVUxMKTsgZGV2X2luZGV4KyspCisJeworCQlyZXQgPSB1Ym9vdF9pbml0X2Z1bmNfdGJsW2Rldl9pbmRleF0uSW5pdCgpOworCisJCWlmIChyZXQgPCAwKSB7CisJCQlCT09UX1BSSU5URihVQk9PVF9FUlIsICJ1Ym9vdCBpbml0ICVzIGZhaWwsIHJldCA9ICVkXG4iLAorCQkJCXVib290X2luaXRfZnVuY190YmxbZGV2X2luZGV4XS5mdW5jX25hbWUsIHJldCk7CisJCQlCVUcoKTsKKwkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQlCT09UX1BSSU5URihVQk9PVF9OT1RJQ0UsICJ1Ym9vdCBpbml0ICVzIHN1Y2Nlc3NcbiIsCisJCQkJdWJvb3RfaW5pdF9mdW5jX3RibFtkZXZfaW5kZXhdLmZ1bmNfbmFtZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gU1VDQ0VTUzsKK30KKworaW50IHRib290X2luaXRfZnVuYyh2b2lkKQoreworCXVuc2lnbmVkIGludCBkZXZfaW5kZXg7CisJaW50IHJldDsKKworCUJPT1RfUFJJTlRGKFVCT09UX05PVElDRSwgImdvIGludG8gdGJvb3QgaW5pdCBmdW5jXG4iKTsKKworCWZvciAoZGV2X2luZGV4ID0gMDsgKHRib290X2luaXRfZnVuY190YmxbZGV2X2luZGV4XS5Jbml0ICE9IE5VTEwpOyBkZXZfaW5kZXgrKykKKwl7CisJCXJldCA9IHRib290X2luaXRfZnVuY190YmxbZGV2X2luZGV4XS5Jbml0KCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlCT09UX1BSSU5URihVQk9PVF9FUlIsICJ0Ym9vdCBpbml0ICVzIGZhaWwsIHJldCA9ICVkXG4iLAorCQkJCXRib290X2luaXRfZnVuY190YmxbZGV2X2luZGV4XS5mdW5jX25hbWUsIHJldCk7CisJCQlCVUcoKTsKKwkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQlCT09UX1BSSU5URihVQk9PVF9OT1RJQ0UsICJ0Ym9vdCBpbml0ICVzIHN1Y2Nlc3NcbiIsCisJCQkJdGJvb3RfaW5pdF9mdW5jX3RibFtkZXZfaW5kZXhdLmZ1bmNfbmFtZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gU1VDQ0VTUzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOglzeXNfZW50cnkKKyAqIERlc2NyaXB0aW9uOiDPtc2z1vfB97PMCisgKiBQYXJhbWV0ZXJzOgorICoJIElucHV0OgorICoKKyAqCSBPdXRwdXQ6CisgKgorICogUmV0dXJuczoKKyAqCisgKgorICogT3RoZXJzOgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzeXNfZW50cnkodm9pZCkKK3sKKwlCT09UX1BSSU5URihVQk9PVF9OT1RJQ0UsICJzeXNfZW50cnkgLi4uXG4iKTsKKworCXN3aXRjaCAoZ2V0X2xvYWRfbW9kZSgpKSB7CisJY2FzZSBUTE9BRF9NT0RFOgorCQl0Ym9vdF9pbml0X2Z1bmMoKTsKKwkJcnVuX2NvbW1hbmQoImRvd25sb2FkZXIiLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBaTE9BRF9NT0RFOgorCQl1Ym9vdF9pbml0X2Z1bmMoKTsKKwkJYm9vdF9lbnRyeSgpOworCQkvL2NsZWFyX3RtcF9idWYoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWRkX3BhcnRpdGlvbl90b19ib290YXJncygpOworCWZvciAoOzspCisJeworCQltYWluX2xvb3AoKTsKKwl9CisKKwloYW5nKCk7CisJLyogTk9UUkVBQ0hFRCAtIG5vIHdheSBvdXQgb2YgY29tbWFuZCBsb29wIGV4Y2VwdCBib290aW5nICovCit9CisKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9jb21tb24vaW1hZ2UuYyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9jb21tb24vaW1hZ2UuYwppbmRleCBhNDNhYjFkLi4xZWIyYjQ5IDEwMDc1NQotLS0gYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvY29tbW9uL2ltYWdlLmMKKysrIGIvYm9vdC9jb21tb24vc3JjL3Vib290L2NvbW1vbi9pbWFnZS5jCkBAIC0xMjc1LDcgKzEyNzUsOCBAQAogCQkgICAgKHZvaWQgKikodWxvbmcpIGxtYl9hbGxvY19iYXNlKGxtYiwgb2ZfbGVuLCAweDEwMDAsCiAJCQkJCQkgICBnZXRlbnZfYm9vdG1fbWFwc2l6ZSgpCiAJCQkJCQkgICArIGdldGVudl9ib290bV9sb3coKSk7Ci0jaWZkZWYgQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMKKworI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQogCQlvZl9zdGFydCA9ICpvZl9mbGF0X3RyZWU7CiAjZW5kaWYKIAl9CmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvZG93bmxvYWRlci9jbWRfc2V0LmMgYi9ib290L2NvbW1vbi9zcmMvdWJvb3QvZG93bmxvYWRlci9jbWRfc2V0LmMKaW5kZXggOWU5ODk1OS4uODgzMTY5NCAxMDA3NTUKLS0tIGEvYm9vdC9jb21tb24vc3JjL3Vib290L2Rvd25sb2FkZXIvY21kX3NldC5jCisrKyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kb3dubG9hZGVyL2NtZF9zZXQuYwpAQCAtOTgsNiArOTgsMjkgQEAKIAkiIg0KICk7DQogDQorc3RhdGljIHVuc2lnbmVkIGludCBnZW5fY3JjKGNoYXIgKnBJbnB1dCwgaW50IElucHV0TGVuKQ0KK3sNCisNCisJY2hhciBwT3V0cHV0WzRdOw0KKwl1bnNpZ25lZCBpbnQgKnBjcmMgPSAodW5zaWduZWQgaW50ICopcE91dHB1dDsNCisJaW50IE91dHB1dExlbiA9IDQ7DQorCWNoYXIgKmNoZWNrID0gcE91dHB1dDsNCisJaW50IGksIGo7DQorCW1lbWNweShjaGVjaywgcElucHV0LCBPdXRwdXRMZW4pOw0KKwlwSW5wdXQgKz0gT3V0cHV0TGVuOw0KKw0KKwlmb3IoaSA9IDA7IGkgPCBJbnB1dExlbjsgaSArPSBPdXRwdXRMZW4pDQorCXsNCisJCWZvcihqID0gMDsgaiA8IE91dHB1dExlbjsgaisrKQ0KKwkJew0KKwkJCWNoZWNrW2pdIF49IHBJbnB1dFtpICsgal07DQorCQl9DQorCX0NCisNCisJcmV0dXJuICpwY3JjOw0KKw0KK30NCisNCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEZ1bmN0aW9uOnNldF9wYXJ0aXRpb25zDQogICogRGVzY3JpcHRpb246DQpAQCAtMTE3LDYgKzE0MCw3IEBACiAJcGFydGl0aW9uX2VudHJ5X3QgKnBhcnRfbnZyX2RsID0gTlVMTDsNCiAJcGFydGl0aW9uX3RhYmxlX3QgKnRhYmxlX2RsID0gTlVMTDsNCiAJY2hhciAqdGFibGVfbmV3ID0gKGNoYXIqKShDT05GSUdfVVNCX0RNQV9CVUZfQUREUik7IC8qVVNCIERNQSBCVUZGRVIqLw0KKwl1aW50MzJfdCBjcmNfY2FsID0gMDsNCiANCiAJLyogVUW001BDu/HIobfWx/ix7SAqLw0KIAlkb3dubG9hZGVyX3NlcmlhbF9yZWFkX2FjdHVhbGxlbigoY2hhciAqKXRhYmxlX25ldywgc2l6ZSk7IA0KQEAgLTEyOCw5ICsxNTIsMTEgQEAKIAkJcHJpbnRmKCJzZXRfcGFydGl0aW9ucyBremFsbG9jIGZhaWxlZC5cbiIpOw0KIAkJcmV0dXJuIC0xOw0KIAl9DQotCQ0KKwkvKrfWx/ix7WNyY9Cj0ekqLw0KKyAgICBjcmNfY2FsID0gZ2VuX2NyYygoKHVuc2lnbmVkIGNoYXIqKXRhYmxlX2RsKSArIDMyLCB0YWJsZV9kbC0+ZW50cnlzICogc2l6ZW9mKHBhcnRpdGlvbl9lbnRyeV90KSk7DQorDQogCW1lbWNweShnX3BhcnRpdGlvbl90YWJsZV9kbCx0YWJsZV9kbCxzaXplKTsNCi0JaWYodGFibGVfZGwtPm1hZ2ljICE9IFBBUlRJVElPTl9NQUdJQykNCisJaWYoKHRhYmxlX2RsLT5tYWdpYyAhPSBQQVJUSVRJT05fTUFHSUMpIHx8IGNyY19jYWwgIT0gdGFibGVfZGwtPmNyYykNCiAJew0KIAkgICAgc3ByaW50Zih0c3BfY29uc29sZV9idWZmZXIsIkZBSUwgSU5WQUxJRF9QQVJUSVRJT05fVEFCTEUiKTsNCiAgICAgICAgIGRvd25sb2FkZXJfc2VyaWFsX3dyaXRlKHRzcF9jb25zb2xlX2J1ZmZlciwgc3RybGVuKHRzcF9jb25zb2xlX2J1ZmZlcikrMSk7DQpkaWZmIC0tZ2l0IGEvYm9vdC9jb21tb24vc3JjL3Vib290L2RyaXZlcnMvbWlzYy9ib290X21vZGUuYyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kcml2ZXJzL21pc2MvYm9vdF9tb2RlLmMKaW5kZXggZmFmZTNjNy4uMjQwOGJiYyAxMDA3NTUKLS0tIGEvYm9vdC9jb21tb24vc3JjL3Vib290L2RyaXZlcnMvbWlzYy9ib290X21vZGUuYworKysgYi9ib290L2NvbW1vbi9zcmMvdWJvb3QvZHJpdmVycy9taXNjL2Jvb3RfbW9kZS5jCkBAIC0zMCw3ICszMCw3IEBACiAKICNkZWZpbmUgTlZSV0FMTF9QQVRIICIvbnZyd2FsbC5iaW4iCiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiBleHRlcm4gaW50IGltYWdlZnNfZmxhZzsKICNlbmRpZgogCkBAIC00Nyw3ICs0Nyw3IEBACiAJY2hhciBjbWRbNjRdID0gezB9OwogCiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiAgICAgaWYoaW1hZ2Vmc19mbGFnID09IDEpCiAJICAgIHNwcmludGYoY21kLCAiZnNsb2FkIGltYWdlZnMgMHgleCAlcyIsICh1bG9uZylDT05GSUdfU1lTX1NEUkFNX1RFTVBfQkFTRSwgTlZSV0FMTF9QQVRIKTsKIAllbHNlCmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvZHJpdmVycy9taXNjL2xvYWQuYyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kcml2ZXJzL21pc2MvbG9hZC5jCmluZGV4IGM0NGRjOWIuLmJiYjZjMjcgMTAwNzU1Ci0tLSBhL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kcml2ZXJzL21pc2MvbG9hZC5jCisrKyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kcml2ZXJzL21pc2MvbG9hZC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CiAjaW5jbHVkZSA8c2VjdXJlX3ZlcmlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9ub3Jfc3BpZmMuaD4KKyNpbmNsdWRlICJwdWJfZmxhZ3MuaCIKIAogI2lmCUxPQURfSU1BR0VfREVCVUcKICNkZWZpbmUgbG9hZF9kZWJ1Z19wcmludGYoZm10LGFyZ3MuLi4pCXByaW50ZiAoZm10ICwjI2FyZ3MpCkBAIC02Niw3ICs2Nyw3IEBACiAjZW5kaWYKIAogLy8jaWZkZWYgQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQgotI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykKKyNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQogZXh0ZXJuIGludCBpbWFnZWZzX2ZsYWc7CiBzdGF0aWMgdWludDMyX3QgZmxhZ3M7CiAjZW5kaWYKQEAgLTMwNSwxMiArMzA2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQworI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQogaW50IGZzX2xvYWRfZHRiX2ltYWdlKHZvaWQpCiB7CiAgICAgY2hhciAgICBjbWRbNjRdID0gezB9OwogICAgIC8qMaGivatkdGLOxLz+bG9hZLW9wdnKsbXY1rcqLwotI2lmZGVmIENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDCisjaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiAgICAgaWYoaW1hZ2Vmc19mbGFnID09IDEpCiAJCXNwcmludGYoY21kLCAiZnNsb2FkIGltYWdlZnMgMHgleCAlcyIsICh1bG9uZylDT05GSUdfU1lTX1NEUkFNX1RFTVBfQkFTRSwgRFRCX0lNQUdFX1BBVEgpOwogCWVsc2UKQEAgLTM0Miw3ICszNDMsNyBAQAogCiAJLyoxoaK9q20wIGltZ87EvP5sb2Fktb3B2cqxtdjWtyovCiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiAgICAgaWYoaW1hZ2Vmc19mbGFnID09IDEpCiAJCXNwcmludGYoY21kLCAiZnNsb2FkIGltYWdlZnMgMHgleCAlcyIsICh1bG9uZylDT05GSUdfU1lTX1NEUkFNX1RFTVBfQkFTRSwgTTBfSU1BR0VfUEFUSCk7CiAJZWxzZQpAQCAtNDI3LDcgKzQyOCw3IEBACiAJewogCQkvKiC9q3pzcCBpbWfOxLz+bG9hZLW9wdnKsbXY1rcqLwogLy8jaWZkZWYgQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQgotI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykKKyNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpICB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDX1JFRikKICAgICAgICAgaWYoaW1hZ2Vmc19mbGFnID09IDEpCiAJCSAgICBzcHJpbnRmKGNtZCwgImZzbG9hZCBpbWFnZWZzIDB4JXggY3B1cGh5XyUwMmQubHptYSIsIAogCQkJCSh1bG9uZylDT05GSUdfU1lTX1NEUkFNX1RFTVBfQkFTRSwgCkBAIC01MjksNyArNTMwLDcgQEAKIAl7CiAJCS8qMaGivathcCBpbWfOxLz+bG9hZLW9wdnKsbXY1rcqLwogLy8jaWZkZWYgQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQgotI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykKKyNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQogICAgICAgICBpZihpbWFnZWZzX2ZsYWcgPT0gMSkKIAkJCXNwcmludGYoY21kLCAiZnNsb2FkIGltYWdlZnMgMHgleCAvJXNfJTAyZC5sem1hIiwgCiAJCQkJKHVsb25nKUNPTkZJR19TWVNfU0RSQU1fVEVNUF9CQVNFLCBpbWFnZV9uYW1lLCBhcGltYWdlbnVtKTsKQEAgLTY4Myw3ICs2ODQsNyBAQAogCUJPT1RfUFJJTlRGKFVCT09UX05PVElDRSwgInpzcCBpbWFnZSBsb2FkIGJlZ2luLi4uXG4iKTsKIAlpbWFnZV90bXBfYnVmID0gQ09ORklHX1NZU19TRFJBTV9URU1QX0JBU0U7CiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiAJaWYoaW1hZ2Vmc19mbGFnID09IDEpCiAgICAgICAgIHNwcmludGYoY21kLCAiZnNsb2FkIGltYWdlZnMgMHgleCAlcyIsICh1bG9uZylpbWFnZV90bXBfYnVmLCBaU1BfSU1BR0VfUEFUSCk7CiAJZWxzZQpAQCAtNzIxLDcgKzcyMiw3IEBACiAKIAkvKjGhor2rYXAgaW1nzsS8/mxvYWS1vcHZyrG12Na3Ki8KIC8vI2lmZGVmIENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIKLSNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpCisjaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDX1JFRikKIAlpZihpbWFnZWZzX2ZsYWcgPT0gMSkKIAkJc3ByaW50ZihjbWQsICJmc2xvYWQgaW1hZ2VmcyAweCV4IC9hcF8lcy5iaW4iLCAKIAkJCQkodWxvbmcpQ09ORklHX1NZU19TRFJBTV9URU1QX0JBU0UsIGltYWdlX25hbWUpOwpAQCAtODkwLDggKzg5MSw4IEBACiB9CiAKIC8vI2lmZGVmIENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIKLSNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpCi1pbnQgbG9hZF9mbGFncyhUX0ZPVEFfRkxBR19JTkZPICpmb3RhRmxhZ0luZm8pCisjaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDX1JFRikKK2ludCBsb2FkX2ZsYWdzKFRfRkxBR1NfSU5GTyAqZm90YUZsYWdJbmZvKQogewogCWludCByZXQgPSAwOwogCWludCB0eXBlID0gMDsKQEAgLTkwNyw3ICs5MDgsNyBAQAogCXVpbnQzMl90IHdvcmtfYXJlYV9vZmZzZXQgPSAwOwogCXVpbnQzMl90IGJhY2t1cF9hcmVhX29mZnNldCA9IDA7CiAJdWludDMyX3QgZmxhZ19vbmUgPSAwOwotCXVpbnQzMl90ICBmb3RhX3NpemUgPSBzaXplb2YoVF9GT1RBX0ZMQUdfSU5GTyk7CisJdWludDMyX3QgIGZvdGFfc2l6ZSA9IHNpemVvZihUX0ZMQUdTX0lORk8pOwogCW5hbmRfaW5mb190ICpuYW5kID0gJm5hbmRfaW5mb1tuYW5kX2N1cnJfZGV2aWNlXTsKIAlzdHJ1Y3QgZnNsX3FzcGkgKm5vciA9ICZzcGlfbm9yX2ZsYXNoOwogCkBAIC05NjYsNyArOTY3LDcgQEAKIAkJCXJldHVybiAxOwogCQl9CiAJCQotCQlpZihmb3RhRmxhZ0luZm8tPmJvb3RfZmxhZy5tYWdpYyAhPSBGTEFHU19NQUdJQykKKwkJaWYoZm90YUZsYWdJbmZvLT5tYWdpY19zdGFydCAhPSBGTEFHU19NQUdJQykKIAkJewkKIAkJCWZsdXNoX2RjYWNoZV9hbGwoKTsKIAkJCXJldCA9IGZsYXNoLT5yZWFkKG5hbmQsKGxvZmZfdCliYWNrdXBfYXJlYV9vZmZzZXQsCkBAIC05NzgsNyArOTc5LDcgQEAKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQkKLQkJCWlmKGZvdGFGbGFnSW5mby0+Ym9vdF9mbGFnLm1hZ2ljICE9IEZMQUdTX01BR0lDKQorCQkJaWYoZm90YUZsYWdJbmZvLT5tYWdpY19zdGFydCAhPSBGTEFHU19NQUdJQykKIAkJCXsKIAkgICAgICAgICAgICBwcmludGYoImZsYWdzIG1hZ2ljIGVyci5cbiIpOwogCQkJICAgIHJldHVybiAtMTsKQEAgLTk5Niw3ICs5OTcsNyBAQAogCQkJQk9PVF9QUklOVEYoVUJPT1RfRVJSLCAiWyVzXTogcmVhZCB0aGUgZmxhZ3MgZXJyb3IhXG4iLCBwYXJ0X25hbWUpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCWlmKGZvdGFGbGFnSW5mby0+Ym9vdF9mbGFnLm1hZ2ljICE9IEZMQUdTX01BR0lDKQorCQlpZihmb3RhRmxhZ0luZm8tPm1hZ2ljX3N0YXJ0ICE9IEZMQUdTX01BR0lDKQogCQl7CiAgICAgICAgICAgICBmbHVzaF9kY2FjaGVfYWxsKCk7CiAJCQlyZXQgPSBuYW5kX3JlYWQoJihub3ItPm5vclswXS5tdGQpLCAobG9mZl90KWJhY2t1cF9hcmVhX29mZnNldCwgCkBAIC0xMDA4LDcgKzEwMDksNyBAQAogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCQotCQkJaWYoZm90YUZsYWdJbmZvLT5ib290X2ZsYWcubWFnaWMgIT0gRkxBR1NfTUFHSUMpCisJCQlpZihmb3RhRmxhZ0luZm8tPm1hZ2ljX3N0YXJ0ICE9IEZMQUdTX01BR0lDKQogCQkJewogCSAgICAgICAgICAgIHByaW50ZigiZmxhZ3MgbWFnaWMgZXJyLlxuIik7CiAJCQkgICAgcmV0dXJuIC0xOwpAQCAtMTAzMyw3ICsxMDM0LDcgQEAKIHsKIAljaGFyIGNtZFs2NF0gPSB7MH07CiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiAJaWYoaW1hZ2Vmc19mbGFnID09IDEpCiAJICAgIHNwcmludGYoY21kLCAiZnNsb2FkIGltYWdlZnMgMHgleCAlcyIsICh1bG9uZylDT05GSUdfU1lTX1NEUkFNX1RFTVBfQkFTRSwgRk9UQUZMQUdfUEFUSCk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYm9vdC9jb21tb24vc3JjL3Vib290L2RyaXZlcnMvbXRkL3BhcnRpdGlvbi9wYXJ0aXRpb24uYyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kcml2ZXJzL210ZC9wYXJ0aXRpb24vcGFydGl0aW9uLmMKaW5kZXggODBiMDM2Mi4uMGRhMjdlYSAxMDA3NTUKLS0tIGEvYm9vdC9jb21tb24vc3JjL3Vib290L2RyaXZlcnMvbXRkL3BhcnRpdGlvbi9wYXJ0aXRpb24uYworKysgYi9ib290L2NvbW1vbi9zcmMvdWJvb3QvZHJpdmVycy9tdGQvcGFydGl0aW9uL3BhcnRpdGlvbi5jCkBAIC01Miw3ICs1Miw3IEBACiBleHRlcm4gcGFydGl0aW9uX3RhYmxlX3QgKiBnX3BhcnRpdGlvbl90YWJsZV9kbDsKIGV4dGVybiBzdHJ1Y3QgZnNsX3FzcGkgc3BpX25vcl9mbGFzaDsKIC8vI2lmZGVmIENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIKLSNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpCisjaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDX1JFRikKIGV4dGVybiBpbnQgaW1hZ2Vmc19mbGFnOwogI2VuZGlmCiAKQEAgLTYwLDcgKzYwLDcgQEAKICAqICBhZGRfcGFydGl0aW9uX3RvX2Jvb3RhcmdzICA6ICDU9rzTt9bH+NDFz6K1vSBib290YXJncwogICovCiAvLyAjaWZkZWYgQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQgotICNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpCisgI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiAgdm9pZCBhZGRfcGFydGl0aW9uX3RvX2Jvb3RhcmdzKCB2b2lkICkKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTE5MiwyMCArMTkyLDMwIEBACiAKIAlpZihpbWFnZWZzX2ZsYWcgPT0gMSkgICAgCiAgICAJeworI2lmZGVmIERNX1ZFUklUWQorICAgICAgICBzcHJpbnRmKChjaGFyICopYm9vdGFyZ3NfY21kICsgc3RybGVuKGJvb3RhcmdzX2NtZCksICIgc3lzdGVtPXN5c3RlbV9hIik7CisJCXNwcmludGYoKGNoYXIgKilib290YXJnc19jbWRfY2FwICsgc3RybGVuKGJvb3RhcmdzX2NtZF9jYXApLCAiIHN5c3RlbT1zeXN0ZW1fYSIpOworI2Vsc2UKIAkJc3ByaW50ZigoY2hhciAqKWJvb3RhcmdzX2NtZCArIHN0cmxlbihib290YXJnc19jbWQpLCAiIHN5c3RlbT1zeXN0ZW1fYSIpOwogCQlzcHJpbnRmKChjaGFyICopYm9vdGFyZ3NfY21kX2NhcCArIHN0cmxlbihib290YXJnc19jbWRfY2FwKSwgIiBzeXN0ZW09c3lzdGVtX2EgdWJpLm10ZD1jYXByb290ZnMiKTsKKyNlbmRpZgogCX0KIAllbHNlIGlmKGltYWdlZnNfZmxhZyA9PSAyKSAgIAogCXsKKyNpZmRlZiBETV9WRVJJVFkKKwkJc3ByaW50ZigoY2hhciAqKWJvb3RhcmdzX2NtZCArIHN0cmxlbihib290YXJnc19jbWQpLCAiIHN5c3RlbT1zeXN0ZW1fYiIpOworCQlzcHJpbnRmKChjaGFyICopYm9vdGFyZ3NfY21kX2NhcCArIHN0cmxlbihib290YXJnc19jbWRfY2FwKSwgIiBzeXN0ZW09c3lzdGVtX2IiKTsKKyNlbHNlCiAJCXNwcmludGYoKGNoYXIgKilib290YXJnc19jbWQgKyBzdHJsZW4oYm9vdGFyZ3NfY21kKSwgIiBzeXN0ZW09c3lzdGVtX2IiKTsKIAkJc3ByaW50ZigoY2hhciAqKWJvb3RhcmdzX2NtZF9jYXAgKyBzdHJsZW4oYm9vdGFyZ3NfY21kX2NhcCksICIgc3lzdGVtPXN5c3RlbV9iIHViaS5tdGQ9Y2Fwcm9vdGZzMiIpOworI2VuZGlmCiAJfQkKIAogCS8qIHNhdmUgKi8KIAlzZXRlbnYoImJvb3RhcmdzIiwgKGNoYXIgKilib290YXJnc19jbWQpOwogCXNldGVudigiYm9vdGFyZ3NfY2FwIiwgKGNoYXIgKilib290YXJnc19jbWRfY2FwKTsKIH0KLSAjZWxzZQorI2Vsc2UKIHZvaWQgYWRkX3BhcnRpdGlvbl90b19ib290YXJncyggdm9pZCApCiB7CiAJaW50IHJldCA9IDA7CmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvZHJpdmVycy9wZXJpcGhlcmFsL01ha2VmaWxlIGIvYm9vdC9jb21tb24vc3JjL3Vib290L2RyaXZlcnMvcGVyaXBoZXJhbC9NYWtlZmlsZQppbmRleCA4ZWNkNTY2Li4xMDNiMzczIDEwMDc1NQotLS0gYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvZHJpdmVycy9wZXJpcGhlcmFsL01ha2VmaWxlCisrKyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kcml2ZXJzL3BlcmlwaGVyYWwvTWFrZWZpbGUKQEAgLTQxLDYgKzQxLDcgQEAKIENPQkpTLSQoQ09ORklHX1pYMjk3NTIwVjNFX1VGSV9NSU5JKQkrPSBwZXJpcGhlcmFsLm8KIENPQkpTLSQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikJKz0gcGVyaXBoZXJhbC5vCiBDT0JKUy0kKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQkrPSBwZXJpcGhlcmFsLm8KK0NPQkpTLSQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQkrPSBwZXJpcGhlcmFsLm8KIAogQ09CSlMJOj0gJChzb3J0ICQoQ09CSlMteSkpCiBTUkNTCTo9ICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvZHJpdmVycy9wZXJpcGhlcmFsL3BlcmlwaGVyYWwuYyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kcml2ZXJzL3BlcmlwaGVyYWwvcGVyaXBoZXJhbC5jCmluZGV4IDQzOTRjN2IuLjM2NDYxMzAgMTAwNzU1Ci0tLSBhL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kcml2ZXJzL3BlcmlwaGVyYWwvcGVyaXBoZXJhbC5jCisrKyBiL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kcml2ZXJzL3BlcmlwaGVyYWwvcGVyaXBoZXJhbC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCiAjaW5jbHVkZSA8engyMzQyOTAuaD4NCiAjaW5jbHVkZSA8bGVkLmg+DQorI2luY2x1ZGUgPGRydnNfZ3Bpby5oPg0KICNpbmNsdWRlICJjb21tb24uaCINCiAvLyNpbmNsdWRlIDxncGlvLmg+DQogDQpAQCAtNjgsMzQgKzY5LDMyIEBACiANCiAvKmxjZCovDQogDQotCS8qIGp0YWe198rUICovDQorCS8qIGp0YWfosIPor5UgKi8NCiAjaWYgMA0KIAlqdGFnX2luaXQoKTsNCiAjZW5kaWYNCiANCiAvLyNpZiAwLy9yZWYgbmVlZCBsZG84IDIuODVWDQotI2lmZGVmIENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDDQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQ0KIC8qc2V0IG1tYyBpbyBhbmQgdmNjUSovCQ0KIAl6eDIzNDI5MF9zZXRfbGRvOF92b2x0YWdlKFZMRE9EXzFfODAwKTsNCiAJengyMzQyOTBfc2V0X2xkbzhfc2xlZXBfdm9sdGFnZShWTERPRF8xXzgwMCk7DQogCXp4MjM0MjkwX2xkbzhfZW5hYmxlKDEpOw0KIAkNCiAJUkVHMzIoU0QxX0lPXzFWOF9FTikgfD0oMTw8MSk7DQotI2VuZGlmDQogLy94Zi5saUAyMDIzMDQxMiBhZGQgZm9yIGVuYWJsZSBHTlNTIHN0YXJ0DQotI2lmIDEgLy9lbmFibGUgR05TUw0KIAlSRUczMihaWF9UT1BfQ1JNX0JBU0UgKyAweDM0KSB8PSAoMHgxPDw1KTsNCiAJekRydkdwaW9fU2V0RnVuYyhHUElPMTUsR1BJTzE1X0NMS19PVVQwKTsNCi0NCi0JekRydkdwaW9fU2V0RnVuYyhHUElPODYsR1BJTzg2X0dQSU84Nik7DQotCXpEcnZHcGlvX1NldERpcmVjdGlvbihHUElPODYsR1BJT19PVVQpOw0KLQl6RHJ2R3Bpb19TZXRPdXRwdXRWYWx1ZShHUElPODYsR1BJT19ISUdIKTsNCisJLyrlhbPpl61ncHPnlLXmupAqLw0KKwl6RHJ2R3Bpb19TZXRGdW5jKEdQSU84NiwgR1BJTzg2X0dQSU84Nik7DQorCXpEcnZHcGlvX1NldERpcmVjdGlvbihHUElPODYsIEdQSU9fT1VUKTsNCisJekRydkdwaW9fU2V0T3V0cHV0VmFsdWUoR1BJTzg2LCBHUElPX0xPVyk7DQogDQogCXpEcnZHcGlvX1NldEZ1bmMoR1BJTzEyNixHUElPMTI2X0dQSU8xMjYpOw0KIAl6RHJ2R3Bpb19TZXREaXJlY3Rpb24oR1BJTzEyNixHUElPX09VVCk7DQogCXpEcnZHcGlvX1NldE91dHB1dFZhbHVlKEdQSU8xMjYsR1BJT19MT1cpOw0KLSNlbmRpZg0KIC8veGYubGlAMjAyMzA0MTIgYWRkIGZvciBlbmFibGUgR05TUyBlbmQNCisjZW5kaWYNCiAJengyMzQ1MDJfY2hhcmdlcl9lbmFibGUoKTsNCiANCiAJcmV0dXJuIHJldCA7DQpkaWZmIC0tZ2l0IGEvYm9vdC9jb21tb24vc3JjL3Vib290L2luY2x1ZGUvY29uZmlncy96eDI5NzUyMHYzLmggYi9ib290L2NvbW1vbi9zcmMvdWJvb3QvaW5jbHVkZS9jb25maWdzL3p4Mjk3NTIwdjMuaAppbmRleCA2ZDEyMTQ3Li5lMjE4NDA4IDEwMDc1NQotLS0gYS9ib290L2NvbW1vbi9zcmMvdWJvb3QvaW5jbHVkZS9jb25maWdzL3p4Mjk3NTIwdjMuaAorKysgYi9ib290L2NvbW1vbi9zcmMvdWJvb3QvaW5jbHVkZS9jb25maWdzL3p4Mjk3NTIwdjMuaApAQCAtMTIsNyArMTIsNyBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSB2ZXJzaW9uID09PT09PT09ICovCiAjZGVmaW5lIENPTkZJR19QUklOVEYgICAgICAgICAgICAgICAxICAvKnVhcnQgZG93bmxvYWRlcix0aGlzIHNob3VsZCBiZSBzZXQgdG8gMCovCiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQogI2RlZmluZSBWRVJTSU9OX1JFTEVBU0UgICAgICAgICAgICAgMQogI2Vsc2UKICNkZWZpbmUgVkVSU0lPTl9SRUxFQVNFICAgICAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9pbmNsdWRlL3BhcnRpdGlvbl90YWJsZS5oIGIvYm9vdC9jb21tb24vc3JjL3Vib290L2luY2x1ZGUvcGFydGl0aW9uX3RhYmxlLmgKaW5kZXggMWRkMGVjNS4uNmQyN2NhNCAxMDA3NTUKLS0tIGEvYm9vdC9jb21tb24vc3JjL3Vib290L2luY2x1ZGUvcGFydGl0aW9uX3RhYmxlLmgKKysrIGIvYm9vdC9jb21tb24vc3JjL3Vib290L2luY2x1ZGUvcGFydGl0aW9uX3RhYmxlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKICNkZWZpbmUgQVJNX1JFQ09WRVJZX1VTRVJEQVRBX0lNQUdFICAgICAgInJlY292ZXJ5IgogI2RlZmluZSBBUk1fVUJPT1RfSU1BR0UgICAgICAgICAidWJvb3QiCiAvLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCi0jaWYgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKQorI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX01ETF9BQikgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQykgfHwgZGVmaW5lZChDT05GSUdfWlgyOTc1MjBWM0VfVkVISUNMRV9EQ19SRUYpCiAjZGVmaW5lIEFSTV9ST09URlNfSU1BR0UgICAgICAicm9vdGZzIgogI2RlZmluZSBBUk1fUk9PVEZTMl9JTUFHRSAgICAgICJyb290ZnMyIgogI2VuZGlmCkBAIC0yNjAsNyArMjYwLDkgQEAKIAlpbWFnZV9iaW5faGVhZGVyX3QgaW1hZ2VbNTBdOyAKIH0gbWFzdGVyX2hlYWRlcl90OwogCi0vLyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM0VfTURMX0FCCisjZGVmaW5lIEZMQUdTX1BBUlRJVElPTl9FUlJPUiAgICAgICAgICAoMHgxMTExKSAvKrfWx/jS7LOjKi8KKworI2lmIDAKICNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9NRExfQUIpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpCiAvKgogZmxhZ3MgcGFydGl0aW9uCkBAIC0zMjUsNiArMzI3LDcgQEAKIAlUX0JPT1RfRU5WICAgICAgICAgICAgYm9vdF9lbnY7CiB9VF9GT1RBX0ZMQUdfSU5GTzsKICNlbmRpZgorI2VuZGlmCiAKICNpZmRlZiBDUkVBVF9QQVJUSVRJT05fVEFCTEUKIHBhcnRpdGlvbl90YWJsZV90IGdfcGFydGl0b25fdGFibGUgPSAK